Class: SAAL::Sensor

Inherits:
Object
  • Object
show all
Defined in:
lib/sensor.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(dbstore, name, underlying, defs, opts = {}) ⇒ Sensor

Returns a new instance of Sensor.



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/sensor.rb', line 16

def initialize(dbstore, name, underlying, defs, opts={})
  @dbstore = dbstore
  @name = name
  @underlying = underlying
  @description = defs['name']
  @mock_opts = {}

  if defs['altitude'] && @underlying.sensor_type == :pressure  
    @read_offset = defs['altitude'].to_f/9.2
  elsif defs['linear_offset']
    @read_offset = defs['linear_offset'].to_f
  else
    @read_offset = 0.0
  end

  if defs['linear_multiplier']
    @read_multiplier = defs['linear_multiplier'].to_f
  else
    @read_multiplier = 1.0
  end

  @set_type = defs['type'] ? defs['type'].to_sym : nil

  @numreads = (defs['numreads']||1).to_i
  @numreads = 1 if @numreads == 0
  @numreads += 1 if @numreads.even?
end

Instance Attribute Details

#descriptionObject (readonly)

Returns the value of attribute description.



14
15
16
# File 'lib/sensor.rb', line 14

def description
  @description
end

#nameObject (readonly)

Returns the value of attribute name.



14
15
16
# File 'lib/sensor.rb', line 14

def name
  @name
end

#numreadsObject (readonly)

Returns the value of attribute numreads.



14
15
16
# File 'lib/sensor.rb', line 14

def numreads
  @numreads
end

#underlyingObject

Returns the value of attribute underlying.



15
16
17
# File 'lib/sensor.rb', line 15

def underlying
  @underlying
end

Instance Method Details

#average(from, to) ⇒ Object



70
71
72
73
# File 'lib/sensor.rb', line 70

def average(from, to)
  return @mock_opts[:average] if @mock_opts[:average]
  apply_offset @dbstore.average(@name, from, to)
end

#last_valueObject



85
86
87
88
# File 'lib/sensor.rb', line 85

def last_value
  return @mock_opts[:last_value] if @mock_opts[:last_value]
  apply_offset @dbstore.last_value(@name)
end

#maximum(from, to) ⇒ Object



80
81
82
83
# File 'lib/sensor.rb', line 80

def maximum(from, to)
  return @mock_opts[:maximum] if @mock_opts[:maximum]
  apply_offset @dbstore.maximum(@name, from, to)
end

#minimum(from, to) ⇒ Object



75
76
77
78
# File 'lib/sensor.rb', line 75

def minimum(from, to)
  return @mock_opts[:minimum] if @mock_opts[:minimum]
  apply_offset @dbstore.minimum(@name, from, to)
end

#mock_set(opts) ⇒ Object



95
96
97
# File 'lib/sensor.rb', line 95

def mock_set(opts)
  @mock_opts.merge!(opts)
end

#readObject



52
53
54
# File 'lib/sensor.rb', line 52

def read
  real_read(false)
end

#read_uncachedObject



56
57
58
# File 'lib/sensor.rb', line 56

def read_uncached
  real_read(true)
end

#sensor_typeObject



48
49
50
# File 'lib/sensor.rb', line 48

def sensor_type
  @set_type || @underlying.sensor_type
end

#store_valueObject



90
91
92
93
# File 'lib/sensor.rb', line 90

def store_value
  value = real_read(true,false)
  @dbstore.write(@name, Time.now.utc.to_i, value) if value
end

#write(value) ⇒ Object



60
61
62
63
64
65
66
67
68
# File 'lib/sensor.rb', line 60

def write(value)
  if @mock_opts[:value]
    @mock_opts[:value] = value
  else
    ret = @underlying.write(value)
    store_value
    ret
  end
end

#writeable?Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/sensor.rb', line 44

def writeable?
  @underlying.writeable?
end