class Hue::Client
Attributes
username[R]
Public Class Methods
new(username = nil)
click to toggle source
# File lib/hue/client.rb, line 8 def initialize(username = nil) @bridge_id = nil @username = username || find_username if @username begin validate_user rescue Hue::UnauthorizedUser register_user end else register_user end end
Public Instance Methods
add_lights()
click to toggle source
# File lib/hue/client.rb, line 54 def add_lights bridge.add_lights end
bridge()
click to toggle source
# File lib/hue/client.rb, line 23 def bridge @bridge_id = find_bridge_id unless @bridge_id if @bridge_id bridge = bridges.select { |b| b.id == @bridge_id }.first else bridge = bridges.first end raise NoBridgeFound unless bridge bridge end
bridges()
click to toggle source
Patched by Jordan Hollinger to remove use of “curb” gem TODO handle redirects? That's what curb was used for.
# File lib/hue/client.rb, line 36 def bridges req = Net::HTTP::Get.new(URI("https://www.meethue.com/api/nupnp")) resp = Net::HTTP.start req.uri.host, req.uri.port, {use_ssl: true} do |http| http.request req end JSON(resp.body).lazy.map { |x| Bridge.new(self, x) } rescue Net::OpenTimeout, Net::ReadTimeout, JSON::ParserError [] end
group(id = nil)
click to toggle source
# File lib/hue/client.rb, line 67 def group(id = nil) return Group.new(self, bridge) if id.nil? id = id.to_s groups.select { |g| g.id == id }.first end
groups()
click to toggle source
# File lib/hue/client.rb, line 63 def groups bridge.groups end
light(id)
click to toggle source
# File lib/hue/client.rb, line 58 def light(id) id = id.to_s lights.select { |l| l.id == id }.first end
lights()
click to toggle source
# File lib/hue/client.rb, line 50 def lights bridge.lights end
scene(id)
click to toggle source
# File lib/hue/client.rb, line 78 def scene(id) id = id.to_s scenes.select { |s| s.id == id }.first end
scenes()
click to toggle source
# File lib/hue/client.rb, line 74 def scenes bridge.scenes end
Private Instance Methods
find_bridge_id()
click to toggle source
# File lib/hue/client.rb, line 126 def find_bridge_id return ENV['HUE_BRIDGE_ID'] if ENV['HUE_BRIDGE_ID'] json = JSON(File.read(File.expand_path('~/.hue'))) json['bridge_id'] rescue return nil end
find_username()
click to toggle source
# File lib/hue/client.rb, line 85 def find_username return ENV['HUE_USERNAME'] if ENV['HUE_USERNAME'] json = JSON(File.read(File.expand_path('~/.hue'))) json['username'] rescue return nil end
get_error(error)
click to toggle source
# File lib/hue/client.rb, line 135 def get_error(error) # Find error class and return instance klass = Hue::ERROR_MAP[error['type']] || UnknownError unless klass klass.new(error['description']) end
register_user()
click to toggle source
# File lib/hue/client.rb, line 108 def register_user body = JSON.dump({ devicetype: 'Ruby' }) uri = URI.parse("http://#{bridge.ip}/api") http = Net::HTTP.new(uri.host) response = JSON(http.request_post(uri.path, body).body).first if error = response['error'] raise get_error(error) end if @username = response['success']['username'] File.write(File.expand_path('~/.hue'), JSON.dump({username: @username})) end end
validate_user()
click to toggle source
# File lib/hue/client.rb, line 94 def validate_user response = JSON(Net::HTTP.get(URI.parse("http://#{bridge.ip}/api/#{@username}"))) if response.is_a? Array response = response.first end if error = response['error'] raise get_error(error) end response['success'] end