From d1ae1c7d7dfe6b656143f717aef0dfe9329c1cb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johan=20Bj=C3=B6rnstedt?= Date: Mon, 4 Dec 2023 15:10:31 +0100 Subject: [PATCH] Add support for Acconeer XM126 --- .../ble_monitor/ble_parser/acconeer.py | 4 +++- custom_components/ble_monitor/const.py | 2 ++ .../ble_monitor/test/test_acconeer_parser.py | 21 +++++++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/custom_components/ble_monitor/ble_parser/acconeer.py b/custom_components/ble_monitor/ble_parser/acconeer.py index 26dbec9cc..7b6b0627b 100644 --- a/custom_components/ble_monitor/ble_parser/acconeer.py +++ b/custom_components/ble_monitor/ble_parser/acconeer.py @@ -7,11 +7,13 @@ _LOGGER = logging.getLogger(__name__) ACCONEER_SENSOR_IDS = { - 0x80: "Acconeer XM122" + 0x80: "Acconeer XM122", + 0x91: "Acconeer XM126", } MEASUREMENTS = { 0x80: ["presence", "temperature"], + 0x91: ["presence", "temperature"], } diff --git a/custom_components/ble_monitor/const.py b/custom_components/ble_monitor/const.py index c2f686270..d9acc8418 100755 --- a/custom_components/ble_monitor/const.py +++ b/custom_components/ble_monitor/const.py @@ -1682,6 +1682,7 @@ class BLEMonitorBinarySensorEntityDescription( 'Meter TH plus' : [["temperature", "humidity", "battery", "rssi"], [], []], 'Laica Smart Scale' : [["weight", "impedance", "rssi"], [], []], "Acconeer XM122" : [["temperature", "battery", "rssi"], [], ["motion"]], + "Acconeer XM126" : [["temperature", "battery", "rssi"], [], ["motion"]], 'K6 Sensor Beacon' : [["temperature", "humidity", "acceleration", "voltage", "battery", "rssi"], [], []], 'DSL-C08' : [["battery", "rssi", "voltage"], [], ["lock", "childlock"]], 'SmartDry cloth dryer' : [["temperature", "humidity", "voltage", "battery", "shake", "rssi"], [], ["switch"]], @@ -1816,6 +1817,7 @@ class BLEMonitorBinarySensorEntityDescription( 'Meter TH plus' : 'Switchbot', 'Laica Smart Scale' : 'Laica', 'Acconeer XM122' : 'Acconeer', + 'Acconeer XM126' : 'Acconeer', 'K6 Sensor Beacon' : 'KKM', 'SmartDry cloth dryer' : 'SmartDry', } diff --git a/custom_components/ble_monitor/test/test_acconeer_parser.py b/custom_components/ble_monitor/test/test_acconeer_parser.py index 2899d47dc..60c6d3f9a 100644 --- a/custom_components/ble_monitor/test/test_acconeer_parser.py +++ b/custom_components/ble_monitor/test/test_acconeer_parser.py @@ -23,3 +23,24 @@ def test_acconeer_xm122(self): assert sensor_msg["temperature"] == 22 assert sensor_msg["motion"] == 1 assert sensor_msg["rssi"] == -62 + + + def test_acconeer_xm126(self): + """Test acconeer parser for Acconeer XM126.""" + data_string = "043e22020103013412b69009e01602010612ffc0ac916400160001000000000000000000c2" + + data = bytes(bytearray.fromhex(data_string)) + + # pylint: disable=unused-variable + ble_parser = BleParser() + sensor_msg, tracker_msg = ble_parser.parse_raw_data(data) + + assert sensor_msg["firmware"] == "Acconeer" + assert sensor_msg["type"] == "Acconeer XM126" + assert sensor_msg["mac"] == "E00990B61234" + assert sensor_msg["packet"] == "6400160001000000000000000000" + assert sensor_msg["data"] + assert sensor_msg["battery"] == 100 + assert sensor_msg["temperature"] == 22 + assert sensor_msg["motion"] == 1 + assert sensor_msg["rssi"] == -62