Add the pry-based command-line utility huec

This commit is contained in:
Paul van Tilburg 2014-11-15 19:42:39 +01:00
parent 0f4796ebbc
commit 78097af40f
1 changed files with 119 additions and 0 deletions

119
huec Executable file
View File

@ -0,0 +1,119 @@
#!/usr/bin/env ruby
require "huey"
require "logger"
require "pp"
require "pry"
require "rainbow"
bridge_cfg = File.open("bridge.yml") { |file| YAML.load(file) }
Huey.configure do |cfg|
cfg.hue_ip = bridge_cfg["ip"]
cfg.uuid = bridge_cfg["user"]
cfg.logger = nil
end
Huey.logger.level = Logger::FATAL
Huey::Bulb.all
def status_line(blb)
mode = []
if blb.reachable
on_off = blb.on ? Rainbow("on").bright.green : Rainbow("off").red
case blb.colormode
when "xy"
mode << "xy: #{blb.xy.inspect}"
when "hs"
mode << "hue: #{blb.hue}" << "sat: #{blb.sat}"
when "ct"
mode << "ct: #{blb.ct}"
end
mode << "bri: #{blb.bri}"
else
on_off = Rainbow("unreachable").bright.red
end
line = "%2d: %-30s (%-12s" % [blb.id, blb.name, on_off, mode]
if mode.empty?
line += ")"
else
line += ", #{mode.join(', ')})"
end
return line
end
def lights
Huey::Bulb.all.each do |blb|
puts status_line(blb)
end
true
end
def refresh
Huey::Bulb.all.each do |blb|
blb.reload
puts status_line(blb)
end
true
end
def groups
Huey::Group.all.each do |grp|
puts "#{grp.id}: #{grp.name} (#{grp.bulbs.map(&:id).join(', ')})"
end
true
end
def get(*names_or_ids)
names_or_ids.map do |name_or_id|
blb = Huey::Bulb.find(name_or_id)
puts status_line(blb)
true
end
end
def set(*names_or_ids, opts)
blb = nil
names_or_ids.map do |name_or_id|
blb = Huey::Bulb.find(name_or_id)
blb.update(opts)
end
rescue Huey::Errors::BulbOff
blb.update(on: true)
retry
rescue Huey::Errors::Error => e
puts "Error: #{e.message}"
end
def getgrp(*names_or_ids)
names_or_ids.map do |name_or_id|
Huey::Group.find(name_or_id).each do |blb|
puts status_line(blb)
end
true
end
end
def setgrp(*names_or_ids, opts)
names_or_ids.map do |name_or_id|
grp = Huey::Group.find(name_or_id)
grp.update(opts)
end
end
def alert(*names_or_ids)
name_or_ideas.map do |name_or_id|
blb = Huey::Bulb.find(name_or_id)
blb.alert!
end
end
def off(*names_or_ids)
set(*names_or_ids, on: false)
end
def on(*names_or_ids)
set(*names_or_ids, on: true)
end
binding.pry