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



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



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

def writeable?
  @underlying.writeable?
end