Class: RuuviDecoder::V5Data
Overview
Constant Summary
collapse
- MANUFACTURER_ID =
0x0499
- DATA_LENGTH_BYTES =
24
- VERSION_TAG =
0x05
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from BaseData
#initialize
Class Method Details
.detect(raw_data) ⇒ Object
11
12
13
|
# File 'lib/ruuvi_decoder/v5_data.rb', line 11
def self.detect(raw_data)
raw_data.size == DATA_LENGTH_BYTES && raw_data[0] == VERSION_TAG
end
|
Instance Method Details
#acceleration_x_g ⇒ Object
54
55
56
57
58
|
# File 'lib/ruuvi_decoder/v5_data.rb', line 54
def acceleration_x_g
return @acceleration_x_g if defined?(@acceleration_x_g)
@acceleration_x_g = decode_16_bits_signed(raw_data[7..8], invalid: 0x8000, multiplier: 0.001)
end
|
#acceleration_y_g ⇒ Object
60
61
62
63
64
|
# File 'lib/ruuvi_decoder/v5_data.rb', line 60
def acceleration_y_g
return @acceleration_y_g if defined?(@acceleration_y_g)
@acceleration_y_g = decode_16_bits_signed(raw_data[9..10], invalid: 0x8000, multiplier: 0.001)
end
|
#acceleration_z_g ⇒ Object
66
67
68
69
70
|
# File 'lib/ruuvi_decoder/v5_data.rb', line 66
def acceleration_z_g
return @acceleration_z_g if defined?(@acceleration_z_g)
@acceleration_z_g = decode_16_bits_signed(raw_data[11..12], invalid: 0x8000, multiplier: 0.001)
end
|
#battery_v ⇒ Object
47
48
49
50
51
52
|
# File 'lib/ruuvi_decoder/v5_data.rb', line 47
def battery_v
return @battery_v if defined?(@battery_v)
@battery_v = decode_bitmasked_unsigned(raw_power_info >> 5, 0x07FF, offset: 1600, multiplier: 0.001,
invalid: 2047)
end
|
#humidity_pct ⇒ Object
78
79
80
81
82
|
# File 'lib/ruuvi_decoder/v5_data.rb', line 78
def humidity_pct
return @humidity_pct if defined?(@humidity_pct)
@humidity_pct = decode_16_bits_unsigned(raw_data[3..4], multiplier: 0.0025, invalid: 65_535)
end
|
#inspect ⇒ Object
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
# File 'lib/ruuvi_decoder/v5_data.rb', line 90
def inspect
<<~INSPECT.chomp
<#{self.class.name}
temperature: #{temperature_c} C,
humidity: #{humidity_pct} %,
pressure: #{pressure_hpa} hPa,
acceleration_x: #{acceleration_x_g} G,
acceleration_y: #{acceleration_y_g} G,
acceleration_z: #{acceleration_z_g} G,
battery: #{battery_v} V,
tx_power: #{tx_power_dbm} dBm,
movement_counter: #{movement_counter},
sequence_number: #{sequence_number},
mac_address: #{mac_address}
>
INSPECT
end
|
#mac_address ⇒ Object
15
16
17
18
19
20
21
22
23
24
25
26
27
|
# File 'lib/ruuvi_decoder/v5_data.rb', line 15
def mac_address
return @mac_address if defined?(@mac_address)
@mac_address =
begin
bytes = raw_data[18..24]
if bytes.all?(0xff)
nil
else
bytes.map { |b| format('%02x', b) }.join(':')
end
end
end
|
#movement_counter ⇒ Object
35
36
37
38
39
|
# File 'lib/ruuvi_decoder/v5_data.rb', line 35
def movement_counter
return @movement_counter if defined?(@movement_counter)
@movement_counter = decode_16_bits_unsigned([0, raw_data[15]], multiplier: 1, invalid: 255)
end
|
#pressure_hpa ⇒ Object
72
73
74
75
76
|
# File 'lib/ruuvi_decoder/v5_data.rb', line 72
def pressure_hpa
return @pressure_hpa if defined?(@pressure_hpa)
@pressure_hpa = decode_16_bits_unsigned(raw_data[5..6], offset: 50_000, invalid: 65_535, multiplier: 0.01)
end
|
#sequence_number ⇒ Object
29
30
31
32
33
|
# File 'lib/ruuvi_decoder/v5_data.rb', line 29
def sequence_number
return @sequence_number if defined?(@sequence_number)
@sequence_number = decode_16_bits_unsigned(raw_data[16..17], multiplier: 1, invalid: 65_535)
end
|
#temperature_c ⇒ Object
84
85
86
87
88
|
# File 'lib/ruuvi_decoder/v5_data.rb', line 84
def temperature_c
return @temperature_c if defined?(@temperature_c)
@temperature_c = decode_16_bits_signed(raw_data[1..2], multiplier: 0.005, invalid: 0x8000)
end
|
#tx_power_dbm ⇒ Object
41
42
43
44
45
|
# File 'lib/ruuvi_decoder/v5_data.rb', line 41
def tx_power_dbm
return @tx_power_dbm if defined?(@tx_power_dbm)
@tx_power_dbm = decode_bitmasked_unsigned(raw_power_info, 0x001F, offset: -20, multiplier: 2, invalid: 31)
end
|