@@ -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