class SAAL::Sensors
Public Class Methods
new(conffile=SAAL::SENSORSCONF, dbconffile=SAAL::DBCONF)
click to toggle source
# File lib/sensors.rb 8 def initialize(conffile=SAAL::SENSORSCONF, dbconffile=SAAL::DBCONF) 9 @defs = YAML::load(File.new(conffile)) 10 @dbstore = DBStore.new(dbconffile) 11 @sensors = {} 12 @defs.each do |name, defs| 13 self.class.sensors_from_defs(@dbstore, name, defs).each{|s| @sensors[s.name] = s} 14 end 15 end
sensors_from_defs(dbstore, name, defs, opts={})
click to toggle source
# File lib/sensors.rb 31 def self.sensors_from_defs(dbstore, name, defs, opts={}) 32 if defs['onewire'] 33 return [Sensor.new(dbstore, name, OWSensor.new(defs['onewire'], opts), 34 defs, opts)] 35 elsif defs['dinrelay'] 36 og = DINRelay::OutletGroup.new(defs['dinrelay']) 37 outlet_names = defs['dinrelay']['outlets'] || [] 38 outlet_descriptions = defs['dinrelay']['descriptions'] || [] 39 return outlet_names.map do |num, oname| 40 defs.merge!('name' => outlet_descriptions[num]) 41 Sensor.new(dbstore, oname, DINRelay::Outlet.new(num.to_i, og), defs, opts) 42 end 43 elsif defs['envoy_power_energy'] 44 defs = defs['envoy_power_energy'].merge('prefix' => name) 45 pe = SAAL::Envoy::PowerEnergy::new(defs) 46 sensors = pe.create_sensors 47 return sensors.map do |name, underlying| 48 Sensor.new(dbstore, name, underlying, defs, opts) 49 end 50 elsif defs['envoy_ac_quality'] 51 defs = defs['envoy_ac_quality'].merge('prefix' => name) 52 pe = SAAL::Envoy::ACQuality::new(defs) 53 sensors = pe.create_sensors 54 return sensors.map do |name, underlying| 55 Sensor.new(dbstore, name, underlying, defs, opts) 56 end 57 elsif defs['envoy_inverters'] 58 defs = defs['envoy_inverters'].merge('prefix' => name) 59 pe = SAAL::Envoy::Inverters::new(defs) 60 sensors = pe.create_sensors 61 return sensors.map do |name, underlying| 62 Sensor.new(dbstore, name, underlying, defs, opts) 63 end 64 elsif defs['denkovi'] 65 defs = defs['denkovi'].merge('prefix' => name) 66 denkovi = SAAL::Denkovi::OutletGroup::new(defs) 67 sensors = denkovi.create_sensors 68 return sensors.map do |name, vals| 69 underlying, description = vals 70 defs.merge!('name' => description) 71 Sensor.new(dbstore, name, underlying, defs, opts) 72 end 73 else 74 $stderror.puts "WARNING: Couldn't figure out a valid sensor type for #{name}" 75 end 76 end
Public Instance Methods
each() { |sensor| ... }
click to toggle source
# File lib/sensors.rb 27 def each 28 @sensors.each{|name, sensor| yield sensor} 29 end
method_missing(name, *args)
click to toggle source
Implements the get methods to fetch a specific sensor
# File lib/sensors.rb 18 def method_missing(name, *args) 19 name = name.to_s 20 if args.size == 0 && @sensors.include?(name) 21 @sensors[name] 22 else 23 raise NoMethodError, "undefined method \"#{name}\" for #{self}" 24 end 25 end