diff --git a/custom_components/ble_monitor/ble_parser/inode.py b/custom_components/ble_monitor/ble_parser/inode.py index 6cf4ecbf..825decb8 100644 --- a/custom_components/ble_monitor/ble_parser/inode.py +++ b/custom_components/ble_monitor/ble_parser/inode.py @@ -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]: diff --git a/custom_components/ble_monitor/test/test_inode_parser.py b/custom_components/ble_monitor/test/test_inode_parser.py index b9a12642..b7fe92d8 100644 --- a/custom_components/ble_monitor/test/test_inode_parser.py +++ b/custom_components/ble_monitor/test/test_inode_parser.py @@ -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: @@ -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("