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
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