class Domotics::Core::Room
Attributes
elements[R]
name[R]
type[R]
Public Class Methods
[](symbol = nil)
click to toggle source
Return requested room like element of array
# File lib/domotics/core/room.rb, line 74 def self.[](symbol = nil) return @@rooms[symbol] if symbol @@rooms end
new(args = {})
click to toggle source
# File lib/domotics/core/room.rb, line 6 def initialize(args = {}) @logger = args[:logger] || Logger.new(STDERR) # Save self @@rooms[@name = args[:name]] = self @type = args[:type] # Hash of elements @elements = {} class << @elements def light select { |name, element| (element.is_a? Element) and (element.type == :switch) and (name =~ /light/) } end end # New queue thread @room_queue = Queue.new @queue_thread = Thread.new { loop { event_handler @room_queue.pop } } end
Public Instance Methods
[](symbol = nil)
click to toggle source
Return element object
# File lib/domotics/core/room.rb, line 69 def [](symbol = nil) return @elements[symbol] if symbol @elements end
destroy()
click to toggle source
# File lib/domotics/core/room.rb, line 64 def destroy @queue_thread.exit end
event_handler(msg = {})
click to toggle source
Default - simple prints event
# File lib/domotics/core/room.rb, line 58 def event_handler(msg = {}) event, element = msg[:event], msg[:element] @logger.info { "[Domotics] event [#{event}] element [#{element}] state [#{element.state}]" } Domotics::Core::WsServer.publish "#{element.room.name}/#{element.name}" end
light(action = :toggle)
click to toggle source
Perform action with light
# File lib/domotics/core/room.rb, line 42 def light(action = :toggle) case action when :on, :off @elements.light.values.each { |element| element.public_send(action) if element.respond_to? action } when :toggle light_off? ? light(:on) : light(:off) end end
light_off?()
click to toggle source
# File lib/domotics/core/room.rb, line 50 def light_off? @elements.light.values.reduce(true) { |res, el| res && el.off? } end
method_missing(symbol, *args)
click to toggle source
Return requested room like variable
Calls superclass method
# File lib/domotics/core/room.rb, line 79 def method_missing(symbol, *args) super unless args.size == 0 @@rooms[symbol] || BlackHole.new end
notify(msg)
click to toggle source
Method for pushing into queue
# File lib/domotics/core/room.rb, line 54 def notify(msg) @room_queue.push(msg) end
register_element(element, name)
click to toggle source
Register element
# File lib/domotics/core/room.rb, line 23 def register_element(element, name) @elements[name] = element # define accessor method (singleton) instance_eval(%(def #{name}; @elements[:#{name}]; end;), __FILE__, __LINE__) unless respond_to? name end
state()
click to toggle source
# File lib/domotics/core/room.rb, line 38 def state nil end
to_s()
click to toggle source
# File lib/domotics/core/room.rb, line 83 def to_s "Room[#{@name}](id:#{__id__})" end
verbose_state()
click to toggle source
Return state of all elements
# File lib/domotics/core/room.rb, line 29 def verbose_state { @name => { :elements => @elements.inject(Hash.new) { |hash, element| hash.merge element[1].verbose_state[@name][:elements] }, :state => state, :info => (info if respond_to? :info) } } end