Class: RuuviDecoder::C5Data

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

Overview

Constant Summary collapse

MANUFACTURER_ID =
0x0499
DATA_LENGTH_BYTES =
18
VERSION_TAG =
0xC5

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/c5_data.rb', line 11

def self.detect(raw_data)
  raw_data.size == DATA_LENGTH_BYTES && raw_data[0] == VERSION_TAG
end

Instance Method Details

#battery_vObject



47
48
49
50
51
52
# File 'lib/ruuvi_decoder/c5_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



60
61
62
63
64
# File 'lib/ruuvi_decoder/c5_data.rb', line 60

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



72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/ruuvi_decoder/c5_data.rb', line 72

def inspect
  "    <\#{self.class.name}\n       temperature: \#{temperature_c} C,\n       humidity: \#{humidity_pct} %,\n       pressure: \#{pressure_hpa} hPa,\n       battery: \#{battery_v} V,\n       tx_power: \#{tx_power_dbm} dBm,\n       movement_counter: \#{movement_counter},\n       sequence_number: \#{sequence_number},\n       mac_address: \#{mac_address}\n    >\n  INSPECT\nend\n".chomp

#mac_addressObject



15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/ruuvi_decoder/c5_data.rb', line 15

def mac_address
  return @mac_address if defined?(@mac_address)

  @mac_address =
    begin
      bytes = raw_data[12..17]
      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/c5_data.rb', line 35

def movement_counter
  return @movement_counter if defined?(@movement_counter)

  @movement_counter = decode_16_bits_unsigned([0, raw_data[9]], multiplier: 1, invalid: 255)
end

#pressure_hpaObject



54
55
56
57
58
# File 'lib/ruuvi_decoder/c5_data.rb', line 54

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/c5_data.rb', line 29

def sequence_number
  return @sequence_number if defined?(@sequence_number)

  @sequence_number = decode_16_bits_unsigned(raw_data[10..11], multiplier: 1, invalid: 65_535)
end

#temperature_cObject



66
67
68
69
70
# File 'lib/ruuvi_decoder/c5_data.rb', line 66

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/c5_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