Script Ruby simples para controlar lâmpadas LIFX

O pequeno script Ruby a seguir pode ser usado para controlar suas lâmpadas LIFX (lifx.co).
Adicionei o script à minha pasta ~ / bin para controlar as luzes do meu terminal Linux. Tempos divertidos!

Requisitos:
– Ruby 2.0+
– gem “lifx” ( https://github.com/LIFX/lifx-gem )

O código ( https://gist.github.com/Bunkerbewohner/9845832):


#!/usr/bin/env ruby
require
'lifx'

if ARGV.length > 0
# see if a specific lamp is addressed
label
= /^on|off|0x[0-9a-f]{6}$/.match(ARGV[0]) ? nil : ARGV[0]

# discover lamps and wait for label data to be available
client
= LIFX::Client.lan
client
.discover!
sleep
(0.3)

# select either the specified light or all lights if none was specified
light
= label ? client.lights.with_label(label) : client.lights

# transition duration in seconds
duration
= [4, ARGV[-1].to_i].max

# value is either first or second argument, depending whether a label was provided
value
= label ? ARGV[1] : ARGV[0]

if value == 'on'
light
.turn_on!
sleep
(0.2)
light
.set_color(LIFX::Color.rgb(255,255,255), duration: duration)
elsif value == 'off' and light.on?
light
.set_color(LIFX::Color.rgb(0, 0, 0), duration: duration)
sleep
(duration)
light
.turn_off!
elsif value[0,2] == '0x'
r
= value[2,2].hex
g
= value[4,2].hex
b
= value[6,2].hex

if light.off?
light
.turn_on!
sleep
(0.2)
end

color
= LIFX::Color.rgb(r, g, b)
light
.set_color(color, duration: duration)
end

# make sure all commands are send before the program exits
client
.flush
else
print
("usage: light [label] on|off|0xRRGGBB [duration=4]

examples:

light on -> turns all lights on

light "Kitchen"" off -> turns Kitchen light off

light 0xff0000 -> turns all lights red

light Bedroom on 30 -> turns up the light in the Bedroom over 30 secondsn""
)
end