Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions custom_components/ble_monitor/ble_parser/inode.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,10 +120,10 @@ def parse_inode(self, data: bytes, mac: bytes):
temp = temp - 8192
temp = max(min(temp, 70), -30)
elif device_id in [0x92, 0x9A]:
msb = raw_t[0]
lsb = raw_t[1]
temp = msb * 0.0625 + 16 * (lsb & 0x0F)
if lsb & 0x10:
low_byte = raw_t & 0xFF
high_byte = (raw_t >> 8) & 0xFF
temp = low_byte * 0.0625 + 16 * (high_byte & 0x0F)
if high_byte & 0x10:
temp = temp - 256
temp = max(min(temp, 70), -30)
elif device_id in [0x93, 0x9B, 0x9D]:
Expand Down
24 changes: 24 additions & 0 deletions custom_components/ble_monitor/test/test_inode_parser.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
"""The tests for the iNode ble_parser."""
from struct import pack

from ble_monitor.ble_parser import BleParser
from ble_monitor.ble_parser.inode import parse_inode


class TestInode:
Expand Down Expand Up @@ -73,3 +76,24 @@ def test_inode_care_sensor_ht(self):
assert sensor_msg["battery"] == 90
assert sensor_msg["voltage"] == 2.76
assert sensor_msg["rssi"] == -59

def test_inode_care_sensor_2_temperature(self):
"""Test iNode Care Sensor 2 temperature decoding."""
sensor_msg = self._parse_care_sensor(0x92)

assert sensor_msg["type"] == "iNode Care Sensor 2"
assert sensor_msg["temperature"] == 35.25

def test_inode_care_sensor_t_temperature(self):
"""Test iNode Care Sensor T temperature decoding."""
sensor_msg = self._parse_care_sensor(0x9A)

assert sensor_msg["type"] == "iNode Care Sensor T"
assert sensor_msg["temperature"] == 35.25

@staticmethod
def _parse_care_sensor(device_id):
"""Build a minimal Care Sensor packet for the temperature variants."""
payload = pack("<HHHHHHHQ", 0x1000, 0, 0, 0x0234, 0, 0, 0, 0)
ble_parser = BleParser()
return parse_inode(ble_parser, bytes((0, 0, 0, device_id)) + payload, b"\x01\x02\x03\x04\x05\x06")
Loading