Class: RuuviDecoder::V5Data

Inherits:
BaseData show all
Defined in:
lib/ruuvi_decoder/v5_data.rb

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

Constructor Details

This class inherits a constructor from RuuviDecoder::BaseData

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_gObject



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_gObject



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_gObject



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_vObject



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_pctObject



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

#inspectObject



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_addressObject



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_counterObject



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_hpaObject



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_numberObject



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_cObject



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_dbmObject



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