module WinkerAI
Constants
- EGG_TRIGGERS
- EGG_TYPES
- LIGHT_TRIGGERS
ON_OFF = {on: /on/, off: /off/} UP_DOWN = {down: /down/, up: /up/} BRIGHTNESS = {percent: /d{1,3}( percent){0,1}/}+UP_DOWN
AIGROUPS = {
name: "Lights", triggers: [ { regex: /(dim|raise|lower).*lights{0,1}/, methods: [:brightness], values: BRIGHTNESS_VALUES }, { regex: /turn.*lights{0,1}/, methods: [:on, :off, :brightness] values: UP_DOWN+ON_OFF }, { regex: /shut.*lights{0,1}/ } ]
}
- LIGHT_TYPES
- NUMBERS_ADD
- NUMBERS_MATCH
- NUMBERS_MODIFIER
- VERSION
Public Class Methods
check_for_trigger(string)
click to toggle source
# File lib/winker_ai/triggers.rb, line 72 def self.check_for_trigger(string) case string when /(#{LIGHT_TRIGGERS.join("|")}).*lights{0,1}/ puts "handling lights" handle_lights(string) when /(#{EGG_TRIGGERS.join("|")})/ puts "handling eggs" handle_eggs(string) else #do nothing end end
eggs()
click to toggle source
# File lib/winker_ai/triggers.rb, line 193 def self.eggs $wink_devices.select{|d| EGG_TYPES.include?(d.type)} end
find_number(string)
click to toggle source
# File lib/winker_ai/triggers.rb, line 173 def self.find_number(string) found_number = case string when /(#{NUMBERS_MODIFIER.keys.join("|")}) (#{NUMBERS_ADD.keys.join("|")})/ NUMBERS_MODIFIER[$1]+NUMBERS_ADD[$2] when /(#{NUMBERS_MODIFIER.keys.join("|")})/ NUMBERS_MODIFIER[$1] when /(#{NUMBERS_MATCH.keys.join("|")})/ NUMBERS_MATCH[$1] when /(#{NUMBERS_ADD.keys.join("|")})/ NUMBERS_ADD[$1] else nil end return found_number end
handle_eggs(string)
click to toggle source
# File lib/winker_ai/triggers.rb, line 85 def self.handle_eggs(string) `osascript -e "set Volume 5"` case string when /eggs.*(going bad|close|soon)/ `say 'There are #{eggs.map(&:eggs_warning).flatten.count} eggs that are about to go bad.'` when /eggs.*are (bad|past|expired)/ `say 'There are #{eggs.map(&:eggs_warning).flatten.count} eggs that are past the expiration date.'` when /how many.*eggs/ `say 'There are #{eggs.sum(&:count)} eggs left.'` when /eggs.*expire/ if days = eggs.map(&:days_left).sort.first `say 'There are #{days} days left until your first egg expires.'` else `say 'There are no eggs left.'` end else #do nothing didn't find the proper egg question end end
handle_lights(string)
click to toggle source
# File lib/winker_ai/triggers.rb, line 105 def self.handle_lights(string) number = find_number(string) devices = $wink_groups.select{|d| string.match(/#{d.name}/i)} devices = lights.select{|d| string.match(/#{d.name}/i)} if devices.empty? case when number && string.match(/(#{LIGHT_TRIGGERS.join("|")})/) && !devices.empty? puts "case 1" devices.each do |d| puts "brightness: #{d.name} #{number}" d.brightness = number/100.0 end when !number && (_match1 = string.match(/(#{LIGHT_TRIGGERS.join("|")})/)[1]) && !devices.empty? puts "case 2" case when _match1 == "raise" puts "case 3" devices.each do |d| d.brightness = [d.brightness+0.25,1].min end when _match1 == "lower" puts "case 4" devices.each do |d| d.brightness = [d.brightness-0.25,0].max end when _match2 = string.match(/turn.*\s(on|off)/)[1] puts "case 5" devices.each do |d| case _match2 when "on" d.on when "off" d.off end end end when number && string.match(/(#{LIGHT_TRIGGERS.join("|")})/) && devices.empty? puts "case 6" lights.each do |d| d.brightness = number/100.0 end when !number && (_match1 = string.match(/(#{LIGHT_TRIGGERS.join("|")})/)[1]) && devices.empty? puts "case 7" case when _match1 == "raise" puts "case 8" lights.each do |d| d.brightness = [d.brightness+0.25,1].min end when _match1 == "lower" puts "case 9" lights.each do |d| d.brightness = [d.brightness-0.25,0].max end when _match2 = string.match(/turn.*\s(on|off)/)[1] puts "case 10" lights.each do |d| case _match2 when "on" d.on when "off" d.off end end end end end
lights()
click to toggle source
# File lib/winker_ai/triggers.rb, line 189 def self.lights $wink_devices.select{|d| LIGHT_TYPES.include?(d.type)} end
set_devices()
click to toggle source
# File lib/winker_ai/triggers.rb, line 210 def self.set_devices begin $wink_devices ||= Winker.devices $wink_groups ||= Winker.groups rescue Winker.authorize retry end end
setup()
click to toggle source
# File lib/winker_ai/triggers.rb, line 197 def self.setup Winker.configure do |wink| wink.client_id = ENV['WINK_CLIENT_ID'] wink.client_secret = ENV['WINK_CLIENT_SECRET'] wink.access_token = ENV['WINK_ACCESS_TOKEN'] wink.refresh_token = ENV['WINK_REFRESH_TOKEN'] wink.username = ENV['WINK_USERNAME'] wink.password = ENV['WINK_PASSWORD'] wink.endpoint = ENV['WINK_ENDPOINT'] end set_devices end