@@ -905,6 +905,59 @@ def test_linptech_HS1BB_illuminance_motion(self):
905
905
assert sensor_msg ["illuminance" ] == 228.0
906
906
assert sensor_msg ["rssi" ] == - 58
907
907
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
+
908
961
def test_MJZNZ018H_bed_occupancy (self ):
909
962
"""Test Xiaomi parser for MJZNZ018H bed occupancy sensor."""
910
963
self .aeskeys = {}
0 commit comments