class HueBLE
Constants
- HUE_BLE_SERVICE_UUID
- VERSION
Public Class Methods
add(address, adapter_name: BLE::Adapter.list.first)
click to toggle source
# File lib/hue_ble.rb, line 66 def self.add(address, adapter_name: BLE::Adapter.list.first) adapter = BLE::Adapter.new(adapter_name) device = adapter[address] device.trusted = true unless device.is_paired? begin device.pair sleep(3) device = adapter[address] # reload rescue BLE::NotAuthorized => e puts "Failed to pair: #{e}. Please try scanning after power off/on the bulb, getting closer, or resetting it using the smart phone app." end end fail "device does not have Hue Lamp Control service" unless device.services.include?(HUE_BLE_SERVICE_UUID) hues[address] = new(device) end
hues()
click to toggle source
# File lib/hue_ble.rb, line 42 def self.hues @hues ||= {} end
new(device)
click to toggle source
# File lib/hue_ble.rb, line 105 def initialize(device) @device = device end
scan(adapter_name: BLE::Adapter.list.first, wait: 5)
click to toggle source
# File lib/hue_ble.rb, line 46 def self.scan(adapter_name: BLE::Adapter.list.first, wait: 5) adapter = BLE::Adapter.new(adapter_name) adapter.start_discovery sleep(wait) adapter.stop_discovery unpaired_devices = [] adapter.devices.each do |address| device = adapter[address] name = device.name rescue nil if name == 'Hue Lamp' && !device.is_paired? unpaired_devices << device elsif device.services.include?(HUE_BLE_SERVICE_UUID) hues[device.address] = new(device) end end { hues: hues, unpaired_devices: unpaired_devices } end
scan_cli(reset = false)
click to toggle source
# File lib/hue_ble.rb, line 83 def self.scan_cli(reset = false) puts "Scanning devices ..." scan_results = scan(wait: 1) puts "Found #{scan_results[:hues].count} Hue devices:" scan_results[:hues].each { |address, device| puts " #{address} #{device.name}" } if @reset scan_results[:hues].each { |address, device| device.remove } scan_results[:unpaired_devices].each { |device| device.remove } return end scan_results[:unpaired_devices].each do |device| print "Found a new #{device.name} #{device.address} : Do you want to pair? (Y/n)> " STDOUT.flush add(device.address) if ["Y", "y", "\n"].include? gets[0] end end
Public Instance Methods
brightness()
click to toggle source
# File lib/hue_ble.rb, line 128 def brightness connect @device[:hue_lamp_control, :brightness] end
brightness=(value)
click to toggle source
# File lib/hue_ble.rb, line 133 def brightness=(value) connect @device[:hue_lamp_control, :brightness] = value end
color()
click to toggle source
# File lib/hue_ble.rb, line 148 def color connect @device[:hue_lamp_control, :color] end
color=(value)
click to toggle source
# File lib/hue_ble.rb, line 153 def color=(value) connect @device[:hue_lamp_control, :color] = value end
color_temperature()
click to toggle source
# File lib/hue_ble.rb, line 138 def color_temperature connect @device[:hue_lamp_control, :color_temperature] end
color_temperature=(value)
click to toggle source
# File lib/hue_ble.rb, line 143 def color_temperature=(value) connect @device[:hue_lamp_control, :color_temperature] = value end
inspect()
click to toggle source
# File lib/hue_ble.rb, line 109 def inspect "#<HueBLE:#{@device.address}>" end
off()
click to toggle source
# File lib/hue_ble.rb, line 123 def off connect @device[:hue_lamp_control, :on] = false end
on()
click to toggle source
# File lib/hue_ble.rb, line 118 def on connect @device[:hue_lamp_control, :on] = true end
on?()
click to toggle source
# File lib/hue_ble.rb, line 113 def on? connect @device[:hue_lamp_control, :on] end