Skip to content

Commit 2e5a3c0

Browse files
committed
add tests for ES3
1 parent 9c48a31 commit 2e5a3c0

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

Diff for: custom_components/ble_monitor/test/test_xiaomi_parser.py

+53
Original file line numberDiff line numberDiff line change
@@ -905,6 +905,59 @@ def test_linptech_HS1BB_illuminance_motion(self):
905905
assert sensor_msg["illuminance"] == 228.0
906906
assert sensor_msg["rssi"] == -58
907907

908+
def test_linptech_ES3_illuminance(self):
909+
"""Test Xiaomi parser for linptech ES3."""
910+
self.aeskeys = {}
911+
data_string = "043E260201000176c3c738c1a41a020106161695fe4859fb50d986d27e8f5313e900000030ad6da8C6"
912+
data = bytes(bytearray.fromhex(data_string))
913+
914+
aeskey = "b26295a7a08fbac306c8706ade7f0fe4"
915+
916+
is_ext_packet = True if data[3] == 0x0D else False
917+
mac = (data[8 if is_ext_packet else 7:14 if is_ext_packet else 13])[::-1]
918+
mac_address = mac.hex()
919+
p_mac = bytes.fromhex(mac_address.replace(":", "").lower())
920+
p_key = bytes.fromhex(aeskey.lower())
921+
self.aeskeys[p_mac] = p_key
922+
# pylint: disable=unused-variable
923+
ble_parser = BleParser(aeskeys=self.aeskeys)
924+
sensor_msg, tracker_msg = ble_parser.parse_raw_data(data)
925+
926+
assert sensor_msg["firmware"] == "Xiaomi (MiBeacon V5 encrypted)"
927+
assert sensor_msg["type"] == "ES3"
928+
assert sensor_msg["mac"] == "A4C138C7C376"
929+
assert sensor_msg["packet"] == 217
930+
assert sensor_msg["data"]
931+
assert sensor_msg["illuminance"] == 173.0
932+
assert sensor_msg["rssi"] == -58
933+
934+
def test_linptech_ES3_motion(self):
935+
"""Test Xiaomi parser for linptech ES3."""
936+
self.aeskeys = {}
937+
data_string = "043E290201000176c3c738c1a41D020106191695fe5859fb50da76c3c738c1a4aabc4c16000000c60c1646C6"
938+
data = bytes(bytearray.fromhex(data_string))
939+
940+
aeskey = "b26295a7a08fbac306c8706ade7f0fe4"
941+
942+
is_ext_packet = True if data[3] == 0x0D else False
943+
mac = (data[8 if is_ext_packet else 7:14 if is_ext_packet else 13])[::-1]
944+
mac_address = mac.hex()
945+
p_mac = bytes.fromhex(mac_address.replace(":", "").lower())
946+
p_key = bytes.fromhex(aeskey.lower())
947+
self.aeskeys[p_mac] = p_key
948+
# pylint: disable=unused-variable
949+
ble_parser = BleParser(aeskeys=self.aeskeys)
950+
sensor_msg, tracker_msg = ble_parser.parse_raw_data(data)
951+
952+
assert sensor_msg["firmware"] == "Xiaomi (MiBeacon V5 encrypted)"
953+
assert sensor_msg["type"] == "ES3"
954+
assert sensor_msg["mac"] == "A4C138C7C376"
955+
assert sensor_msg["packet"] == 218
956+
assert sensor_msg["data"]
957+
assert sensor_msg["motion"] == 1
958+
assert sensor_msg["motion timer"] == 1
959+
assert sensor_msg["rssi"] == -58
960+
908961
def test_MJZNZ018H_bed_occupancy(self):
909962
"""Test Xiaomi parser for MJZNZ018H bed occupancy sensor."""
910963
self.aeskeys = {}

0 commit comments

Comments
 (0)