class Lights

Attributes

bulbs[R]
username[R]

Public Class Methods

new(ip,username=nil) click to toggle source
# File lib/lights.rb, line 16
def initialize(ip,username=nil)
  @ip = ip 
  @username = username
  @http = Net::HTTP.new(ip,80)
  @bulbs = []
  @groups = []
  @bridges = []
  @logger = Logger.new(STDERR)
  @logger.level = LoggerConfig::LIGHTS_LEVEL
end

Public Instance Methods

add_bulb(id,bulb_data) click to toggle source
# File lib/lights.rb, line 64
def add_bulb(id,bulb_data)
  @bulbs << Bulb.new( id, bulb_data )
end
create_group( group ) click to toggle source
# File lib/lights.rb, line 139
def create_group( group )
  post "groups", group
end
create_scene( scene ) click to toggle source
# File lib/lights.rb, line 143
def create_scene( scene )
  post "scenes/#{scene.id}", scene
end
delete_group( id ) click to toggle source
# File lib/lights.rb, line 151
def delete_group( id )
  delete "groups/#{id}"
end
delete_scene( id ) click to toggle source
# File lib/lights.rb, line 147
def delete_scene( id )
  delete "scenes/#{id}"
end
delete_user( username ) click to toggle source
# File lib/lights.rb, line 163
def delete_user( username )
  delete "config/whitelist/#{username}"
end
discover_hubs() click to toggle source
# File lib/lights.rb, line 27
def discover_hubs
  http = Net::HTTP.new("discovery.meethue.com",443)
  http.use_ssl = true
  request = Net::HTTP::Get.new( "/" )
  response = http.request request
  
  case response.code.to_i
  when 200
    result = JSON.parse( response.body )
    result.each { |b| @bridges << Bridge.new(b) } 
  else
    @logger.fatal "Could not discover bridge. HTTP error #{response.code}"
    @logger.fatal "Response: #{response.body}"
    raise "Unknown error" 
  end
  @bridges
end
edit_bulb( bulb ) click to toggle source
# File lib/lights.rb, line 155
def edit_bulb( bulb )
  put "lights/#{bulb.id}", bulb
end
edit_group( group ) click to toggle source
# File lib/lights.rb, line 159
def edit_group( group )
  put "groups/#{group.id}", group
end
register() click to toggle source
# File lib/lights.rb, line 45
def register
  data = { "devicetype"=>"lights" }
  response = @http.post "/api", data.to_json
  result = JSON.parse(response.body).first
  if result.has_key? "error"
    process_error result
  elsif result["success"]
    @username = result["success"]["username"]
  end
  result
end
Also aliased as: register_username
register_username()

backwards compatibility

Alias for: register
request_bulb_info( id ) click to toggle source
# File lib/lights.rb, line 84
def request_bulb_info( id )
  response = get "lights/#{id}"
  Bulb.new(id,response)
end
request_bulb_list() click to toggle source
# File lib/lights.rb, line 72
def request_bulb_list
  get "lights"
end
request_config() click to toggle source
# File lib/lights.rb, line 60
def request_config
  get "config"
end
request_datastore() click to toggle source
# File lib/lights.rb, line 127
def request_datastore
  get ""
end
request_group_info( id ) click to toggle source
# File lib/lights.rb, line 89
def request_group_info( id )
  response = get "groups/#{id}"
  Group.new(id,response)
end
request_group_list() click to toggle source
# File lib/lights.rb, line 103
def request_group_list
  get "groups"
end
request_new_bulb_list() click to toggle source
# File lib/lights.rb, line 76
def request_new_bulb_list
  get "lights/new"
end
request_new_sensor_list() click to toggle source
# File lib/lights.rb, line 80
def request_new_sensor_list
  get "sensors/new"
end
request_rules() click to toggle source
# File lib/lights.rb, line 119
def request_rules
  get "rules"
end
request_scene_list() click to toggle source
# File lib/lights.rb, line 111
def request_scene_list
  get "scenes"
end
request_schedule_list() click to toggle source
# File lib/lights.rb, line 107
def request_schedule_list
  get "schedules"
end
request_schedules() click to toggle source
# File lib/lights.rb, line 123
def request_schedules
  get "schedules"
end
request_sensor_info( id ) click to toggle source
# File lib/lights.rb, line 94
def request_sensor_info( id )
  response = get "sensors/#{id}"
  Sensor.new(id,response)
end
request_sensor_list() click to toggle source
# File lib/lights.rb, line 99
def request_sensor_list
  get "sensors"
end
search_new() click to toggle source
# File lib/lights.rb, line 68
def search_new
  post "lights"
end
set_bulb_state( id, state ) click to toggle source
# File lib/lights.rb, line 131
def set_bulb_state( id, state )
  put "lights/#{id}/state", state
end
set_group_state( id, state ) click to toggle source
# File lib/lights.rb, line 135
def set_group_state( id, state )
  put "groups/#{id}/action", state
end

Private Instance Methods

delete( path ) click to toggle source
# File lib/lights.rb, line 228
def delete( path )
  @logger.debug "==> DELETE: #{path}"
  raise UsernameException unless @username
  request = Net::HTTP::Delete.new( "/api/#{@username}/#{path}" )
  response = @http.request request
  result = JSON.parse( response.body )
  @logger.debug "<== #{response.code}"
  @logger.debug response.body
  if result.first.kind_of?(Hash) && result.first.has_key?("error")
    process_error result.first
  end
  result
end
get( path ) click to toggle source
# File lib/lights.rb, line 186
def get( path )
  @logger.debug "==> GET: #{path}"
  raise UsernameException unless @username
  request = Net::HTTP::Get.new( "/api/#{@username}/#{path}" )
  response = @http.request request
  result = JSON.parse( response.body )
  @logger.debug "<== #{response.code}"
  @logger.debug response.body
  if result.first.kind_of?(Hash) && result.first.has_key?("error")
    process_error result.first
  end
  result
end
post( path, data={} ) click to toggle source
# File lib/lights.rb, line 214
def post( path, data={} )
  @logger.debug "==> POST: #{path}"
  raise UsernameException unless @username
  @logger.debug data.to_json
  response = @http.post( "/api/#{@username}/#{path}", data.to_json )
  result = JSON.parse( response.body )
  @logger.debug "<== #{response.code}"
  @logger.debug response.body
  if result.first.kind_of?(Hash) && result.first.has_key?("error")
    process_error result.first
  end
  result
end
process_error(result) click to toggle source
# File lib/lights.rb, line 168
def process_error(result)
  type = result["error"]["type"]
  case type
  when 1
    raise UsernameException
  when 3
    raise ResourceUnavailableException, result["error"]["description"]
  when 6
    raise ParameterUnavailableException, result["error"]["description"]
  when 101
    raise BridgeConnectException
  when 403
    raise SceneLockedException, result["error"]["description"]
  else
    raise "Unknown Error: #{result["error"]["description"]}"
  end
end
put( path, data={} ) click to toggle source
# File lib/lights.rb, line 200
def put( path, data={} )
  @logger.debug "==> PUT: #{path}"
  raise UsernameException unless @username
  @logger.debug data.to_json 
  response = @http.put( "/api/#{@username}/#{path}", data.to_json )
  result = JSON.parse( response.body )
  @logger.debug "<== #{response.code}"
  @logger.debug response.body
  if result.first.kind_of?(Hash) && result.first.has_key?("error")
    process_error result.first
  end
  result
end