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