Пример #1
0
    def test_Xiaomi_LYWSD03MMC_encrypted(self):
        """Test Xiaomi parser for LYWSD03MMC with encryption."""
        self.aeskeys = {}
        data_string = "043e2a02010000f4830238c1a41e0201061a1695fe58585b0550f4830238c1a495ef58763c26000097e2abb5e2"
        data = bytes(bytearray.fromhex(data_string))

        aeskey = "e9ea895fac7cca6d30532432a516f3a8"

        is_ext_packet = True if data[3] == 0x0D else False
        mac = (
            data[8 if is_ext_packet else 7:14 if is_ext_packet else 13])[::-1]
        mac_address = mac.hex()
        p_mac = bytes.fromhex(mac_address.replace(":", "").lower())
        p_key = bytes.fromhex(aeskey.lower())
        self.aeskeys[p_mac] = p_key
        # pylint: disable=unused-variable
        ble_parser = BleParser(aeskeys=self.aeskeys)
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "Xiaomi (MiBeacon V5 encrypted)"
        assert sensor_msg["type"] == "LYWSD03MMC"
        assert sensor_msg["mac"] == "A4C1380283F4"
        assert sensor_msg["packet"] == 80
        assert sensor_msg["data"]
        assert sensor_msg["humidity"] == 46.7
        assert sensor_msg["rssi"] == -30
Пример #2
0
    def test_ha_ble_temperature_and_humidity_encrypted(self):
        """Test HA BLE parser for temperature and humidity (encrypted) measurement"""
        self.aeskeys = {}
        data_string = "043E2302010000A5808FE648541702010613161e18fba435e4d3c312fb0011223357d90a99CC"
        data = bytes(bytearray.fromhex(data_string))
        aeskey = "231d39c1d7cc1ab1aee224cd096db932"

        p_mac = bytes.fromhex("5448E68F80A5")
        p_key = bytes.fromhex(aeskey.lower())
        self.aeskeys[p_mac] = p_key
        allow_list = self.aeskeys.keys()

        # pylint: disable=unused-variable
        ble_parser = BleParser(aeskeys=self.aeskeys,
                               discovery=False,
                               sensor_whitelist=allow_list)
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "HA BLE (encrypted)"
        assert sensor_msg["type"] == "HA BLE DIY"
        assert sensor_msg["mac"] == "5448E68F80A5"
        assert sensor_msg["packet"] == 857870592
        assert sensor_msg["data"]
        assert sensor_msg["temperature"] == 25.06
        assert sensor_msg["humidity"] == 50.55
        assert sensor_msg["rssi"] == -52
Пример #3
0
    def test_Xiaomi_YLKG07YL_rotate(self):
        """Test Xiaomi parser for YLKG07YL, YLKG08YL while rotating dimmer."""
        self.aeskeys = {}
        data_string = "043e25020103008b98c54124f819181695fe5830b603368b98c54124f88bb8f2661351000000d6ef"
        data = bytes(bytearray.fromhex(data_string))

        aeskey = "b853075158487ca39a5b5ea9"

        is_ext_packet = True if data[3] == 0x0D else False
        mac = (
            data[8 if is_ext_packet else 7:14 if is_ext_packet else 13])[::-1]
        mac_address = mac.hex()
        p_mac = bytes.fromhex(mac_address.replace(":", "").lower())
        p_key = bytes.fromhex(aeskey.lower())
        self.aeskeys[p_mac] = p_key
        # pylint: disable=unused-variable
        ble_parser = BleParser(aeskeys=self.aeskeys)
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "Xiaomi (MiBeacon V3 encrypted)"
        assert sensor_msg["type"] == "YLKG07YL/YLKG08YL"
        assert sensor_msg["mac"] == "F82441C5988B"
        assert sensor_msg["packet"] == 54
        assert sensor_msg["data"]
        assert sensor_msg["dimmer"] == 1
        assert sensor_msg["button"] == "rotate left"
        assert sensor_msg["rssi"] == -17
Пример #4
0
    def test_Xiaomi_CGDK2(self):
        """Test Xiaomi parser for CGDK2."""
        self.aeskeys = {}
        data_string = "043e2a02010000892012342d581e0201061a1695fe58586f0607892012342d585f176dd54f0200002fa453faaf"
        data = bytes(bytearray.fromhex(data_string))

        aeskey = "a3bfe9853dd85a620debe3620caaa351"

        is_ext_packet = True if data[3] == 0x0D else False
        mac = (
            data[8 if is_ext_packet else 7:14 if is_ext_packet else 13])[::-1]
        mac_address = mac.hex()
        p_mac = bytes.fromhex(mac_address.replace(":", "").lower())
        p_key = bytes.fromhex(aeskey.lower())
        self.aeskeys[p_mac] = p_key
        # pylint: disable=unused-variable
        ble_parser = BleParser(aeskeys=self.aeskeys)
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "Xiaomi (MiBeacon V5 encrypted)"
        assert sensor_msg["type"] == "CGDK2"
        assert sensor_msg["mac"] == "582D34122089"
        assert sensor_msg["packet"] == 7
        assert sensor_msg["data"]
        assert sensor_msg["temperature"] == 22.6
        assert sensor_msg["rssi"] == -81
Пример #5
0
    def test_Xiaomi_RTCGQ02LM(self):
        """Test Xiaomi parser for RTCGQ02LM with wrong encryption key."""
        self.aeskeys = {}
        data_string = "043e2b020103000fc4e044ef541f0201061b1695fe58598d0a170fc4e044ef547cc27a5c03a1000000790df258bb"
        data = bytes(bytearray.fromhex(data_string))

        aeskey = "FFD8CE9C08AE7533A79BDAF0BB755E96"

        is_ext_packet = True if data[3] == 0x0D else False
        mac = (
            data[8 if is_ext_packet else 7:14 if is_ext_packet else 13])[::-1]
        mac_address = mac.hex()
        p_mac = bytes.fromhex(mac_address.replace(":", "").lower())
        p_key = bytes.fromhex(aeskey.lower())
        self.aeskeys[p_mac] = p_key
        # pylint: disable=unused-variable
        ble_parser = BleParser(aeskeys=self.aeskeys)
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "Xiaomi (MiBeacon V5 encrypted)"
        assert sensor_msg["type"] == "RTCGQ02LM"
        assert sensor_msg["mac"] == "54EF44E0C40F"
        assert sensor_msg["packet"] == 23
        assert sensor_msg["data"] is False
        assert sensor_msg["rssi"] == -69
Пример #6
0
    def test_Xiaomi_YLKG07YL_press(self):
        """Test Xiaomi parser for YLKG07YL, YLKG08YL while pressing dimmer (no rotation)."""
        self.aeskeys = {}
        data_string = "043E25020103008B98C54124F819181695FE5830B603D28B98C54124F8C3491476757E00000099DE"
        data = bytes(bytearray.fromhex(data_string))

        aeskey = "b853075158487ca39a5b5ea9"

        is_ext_packet = True if data[3] == 0x0D else False
        mac = (
            data[8 if is_ext_packet else 7:14 if is_ext_packet else 13])[::-1]
        mac_address = mac.hex()
        p_mac = bytes.fromhex(mac_address.replace(":", "").lower())
        p_key = bytes.fromhex(aeskey.lower())
        self.aeskeys[p_mac] = p_key
        # pylint: disable=unused-variable
        ble_parser = BleParser(aeskeys=self.aeskeys)
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "Xiaomi (MiBeacon V3 encrypted)"
        assert sensor_msg["type"] == "YLKG07YL/YLKG08YL"
        assert sensor_msg["mac"] == "F82441C5988B"
        assert sensor_msg["packet"] == 210
        assert sensor_msg["data"]
        assert sensor_msg["dimmer"] == 1
        assert sensor_msg["button"] == "short press"
        assert sensor_msg["rssi"] == -34
Пример #7
0
    def test_Xiaomi_JTYJGD03MI_press(self):
        """Test Xiaomi parser for JTYJGD03MI."""
        self.aeskeys = {}
        data_string = "043e2b02010000bc9ce344ef541f0201061b1695fe5859970964bc9ce344ef5422206088fd000000003a148fb3cb"
        data = bytes(bytearray.fromhex(data_string))

        aeskey = "5b51a7c91cde6707c9ef18dfda143a58"

        is_ext_packet = True if data[3] == 0x0D else False
        mac = (
            data[8 if is_ext_packet else 7:14 if is_ext_packet else 13])[::-1]
        mac_address = mac.hex()
        p_mac = bytes.fromhex(mac_address.replace(":", "").lower())
        p_key = bytes.fromhex(aeskey.lower())
        self.aeskeys[p_mac] = p_key
        # pylint: disable=unused-variable
        ble_parser = BleParser(aeskeys=self.aeskeys)
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "Xiaomi (MiBeacon V5 encrypted)"
        assert sensor_msg["type"] == "JTYJGD03MI"
        assert sensor_msg["mac"] == "54EF44E39CBC"
        assert sensor_msg["packet"] == 100
        assert sensor_msg["data"]
        assert sensor_msg["button"] == "single press"
        assert sensor_msg["rssi"] == -53
Пример #8
0
    def test_Xiaomi_CGG1(self):
        """Test Xiaomi parser for CGG1."""
        self.aeskeys = {}
        data_string = "043e2a020100005f12342d585a1e0201061a1695fe5858480b685f12342d585a0b1841e2aa000e00a4964fb5b6"
        data = bytes(bytearray.fromhex(data_string))

        aeskey = "814aac74c4f17b6c1581e1ab87816b99"

        p_mac = bytes.fromhex("5A582D34125F")
        p_key = bytes.fromhex(aeskey.lower())
        self.aeskeys[p_mac] = p_key
        allow_list = self.aeskeys.keys()

        # pylint: disable=unused-variable
        ble_parser = BleParser(aeskeys=self.aeskeys,
                               discovery=False,
                               sensor_whitelist=allow_list)
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "Xiaomi (MiBeacon V5 encrypted)"
        assert sensor_msg["type"] == "CGG1-ENCRYPTED"
        assert sensor_msg["mac"] == "5A582D34125F"
        assert sensor_msg["packet"] == 104
        assert sensor_msg["data"]
        assert sensor_msg["humidity"] == 59.6
        assert sensor_msg["rssi"] == -74
Пример #9
0
    def test_Xiaomi_XMWSDJ04MMC(self):
        """Test Xiaomi parser for XMWSDJ04MMC with encryption."""
        self.aeskeys = {}
        data_string = "043e260201000004702565112c1a020106161695fe48590312a41b776e7c96add7000000f2bf545bce"
        data = bytes(bytearray.fromhex(data_string))

        aeskey = "b2cf9a553d53571b5657defd582d676e"

        is_ext_packet = True if data[3] == 0x0D else False
        mac = (
            data[8 if is_ext_packet else 7:14 if is_ext_packet else 13])[::-1]
        mac_address = mac.hex()
        p_mac = bytes.fromhex(mac_address.replace(":", "").lower())
        p_key = bytes.fromhex(aeskey.lower())
        self.aeskeys[p_mac] = p_key
        # pylint: disable=unused-variable
        ble_parser = BleParser(aeskeys=self.aeskeys)
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "Xiaomi (MiBeacon V5 encrypted)"
        assert sensor_msg["type"] == "XMWSDJ04MMC"
        assert sensor_msg["mac"] == "2C1165257004"
        assert sensor_msg["packet"] == 164
        assert sensor_msg["data"]
        assert sensor_msg["humidity"] == 45.0
        assert sensor_msg["rssi"] == -50
Пример #10
0
    def test_inode_energy_meter(self):
        """Test inode parser for iNode Energy Monitor."""
        data_string = "043E2102010000473A6D6F1200150201060EFF90820400CFE40000DC05B0ED10020A08A5"
        data = bytes(bytearray.fromhex(data_string))

        # pylint: disable=unused-variable
        ble_parser = BleParser()
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "iNode"
        assert sensor_msg["type"] == "iNode Energy Meter"
        assert sensor_msg["mac"] == "00126F6D3A47"
        assert sensor_msg["packet"] == "0400cfe40000dc05b0ed10"
        assert sensor_msg["data"]
        assert sensor_msg["energy"] == 39.05
        assert sensor_msg["energy unit"] == "kWh"
        assert sensor_msg["power"] == 160.0
        assert sensor_msg["power unit"] == "W"
        assert sensor_msg["constant"] == 1500
        assert sensor_msg["battery"] == 100
        assert sensor_msg["voltage"] == 2.88
        assert sensor_msg["light level"] == 0.0
        assert sensor_msg["week day"] == 0
        assert sensor_msg["week day total"] == 4333
        assert sensor_msg["rssi"] == -91
Пример #11
0
    def test_ruuvitag_v5(self):
        """Test ruuvitag v5 parser."""
        data_string = "043E2B02010301F27A52FAD4CD1F0201061BFF990405138A5F61C4F0FFE4FFDC0414C5B6EC29B3F27A52FAD4CDBC"
        data = bytes(bytearray.fromhex(data_string))

        # pylint: disable=unused-variable
        ble_parser = BleParser()
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "Ruuvitag V5"
        assert sensor_msg["type"] == "Ruuvitag"
        assert sensor_msg["mac"] == "CDD4FA527AF2"
        assert sensor_msg["packet"] == 10675
        assert sensor_msg["data"]
        assert sensor_msg["temperature"] == 25.01
        assert sensor_msg["humidity"] == 61.04
        assert sensor_msg["pressure"] == 1004.16
        assert sensor_msg["acceleration"] == 1044.9956937710317
        assert sensor_msg["acceleration x"] == -28
        assert sensor_msg["acceleration y"] == -36
        assert sensor_msg["acceleration z"] == 1044
        assert sensor_msg["voltage"] == 3.181
        assert sensor_msg["battery"] == 100
        assert sensor_msg["tx power"] == 4
        assert sensor_msg["motion"] == 0
        assert sensor_msg["motion timer"] == 0
        assert sensor_msg["rssi"] == -68
    def test_altbeacon_tracker(self):
        '''Test AltBeacon parser only tracker '''
        data_string = '043E280201020105988527406D1C1BFFFFFFBEACD3162F5AF3EE494799DB09756062D0FC005A0005C400D4'
        data = bytes(bytearray.fromhex(data_string))
        # pylint: disable=unused-variable
        ble_parser = BleParser(tracker_whitelist=[
            bytearray.fromhex('d3162f5af3ee494799db09756062d0fc')
        ])
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg['type'] == 'AltBeacon'
        assert sensor_msg['packet'] == 'no packet id'
        assert sensor_msg['firmware'] == 'AltBeacon'
        assert sensor_msg['manufacturer'] == 'Other'
        assert sensor_msg['rssi'] == -44
        assert sensor_msg['mac'] == '6D:40:27:85:98:05'
        assert str(UUID(
            sensor_msg['uuid'])) == 'd3162f5a-f3ee-4947-99db-09756062d0fc'
        assert sensor_msg['uuid'] == 'd3162f5af3ee494799db09756062d0fc'
        assert sensor_msg['major'] == 90
        assert sensor_msg['minor'] == 5
        assert sensor_msg['measured power'] == -60
        assert tracker_msg[
            'tracker_id'] == b'\xd3\x16/Z\xf3\xeeIG\x99\xdb\tu`b\xd0\xfc'
        assert sensor_msg is not None
Пример #13
0
    def test_atc_custom_encrypted(self):
        """Test ATC parser for ATC custom format (encrypted)."""
        self.aeskeys = {}
        data_string = "043e1b02010000b2188d38c1a40f0e161a1811d603fbfa7b6dfb1e26fde2"
        data = bytes(bytearray.fromhex(data_string))

        aeskey = "b9ea895fac7eea6d30532432a516f3a3"

        is_ext_packet = True if data[3] == 0x0D else False
        mac = (
            data[8 if is_ext_packet else 7:14 if is_ext_packet else 13])[::-1]
        mac_address = mac.hex()
        p_mac = bytes.fromhex(mac_address.replace(":", "").lower())
        p_key = bytes.fromhex(aeskey.lower())
        self.aeskeys[p_mac] = p_key
        # pylint: disable=unused-variable
        ble_parser = BleParser(aeskeys=self.aeskeys)
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "ATC (Custom encrypted)"
        assert sensor_msg["type"] == "ATC"
        assert sensor_msg["mac"] == "A4C1388D18B2"
        assert sensor_msg["packet"] == 17
        assert sensor_msg["data"]
        assert sensor_msg["temperature"] == 23.45
        assert sensor_msg["humidity"] == 41.73
        assert sensor_msg["voltage"] == 2.749
        assert sensor_msg["battery"] == 61
        assert sensor_msg["rssi"] == -30
    def test_qingping_no_data(self):
        """Test Qingping parser with message with no data."""
        data_string = "043E1F020100000CA4288CCF04130201060B16CDFD080E0AA4288CCF048CCF0481CB"
        data = bytes(bytearray.fromhex(data_string))
        # pylint: disable=unused-variable
        ble_parser = BleParser()
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg is None
Пример #15
0
    def test_ibeacon_iphone_ble_packet_var_2(self):
        '''Test iBeacon parser incorrect iphone ble packet '''
        data_string = '043E1D02010001433EA2C96B6A1102011A020A0C0AFF4C001005441CBD08C5BB'
        data = bytes(bytearray.fromhex(data_string))
        # pylint: disable=unused-variable
        ble_parser = BleParser()
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg is None
        assert tracker_msg is None
Пример #16
0
    def test_relsib_power_adapter_plugged(self):
        """Test Relsib parser for AA20 packet type while using power adapter instead of battery."""
        data_string = "043e2b0201030130ddf27cb6fa1f040945436f191620aa24080000200a750943030080f08000c2eb0b010b0300b6"
        data = bytes(bytearray.fromhex(data_string))
        # pylint: disable=unused-variable
        ble_parser = BleParser()
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "Relsib (EClerk Eco v9a)"
        assert sensor_msg["type"] == "EClerk Eco"
        assert sensor_msg["mac"] == "FAB67CF2DD30"
        assert sensor_msg["battery"] == 100
Пример #17
0
    def test_blue_coin_T(self):
        """Test Teltonika parser for Blue Coin T."""
        data_string = "043e210201000196826a022bf01502010605166e2ad0090b0943205420383031424239d1"
        data = bytes(bytearray.fromhex(data_string))
        # pylint: disable=unused-variable
        ble_parser = BleParser()
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "Teltonika"
        assert sensor_msg["type"] == "Blue Coin T"
        assert sensor_msg["mac"] == "F02B026A8296"
        assert sensor_msg["packet"] == "no packet id"
        assert sensor_msg["data"]
        assert sensor_msg["temperature"] == 25.12
        assert sensor_msg["rssi"] == -47
Пример #18
0
    def test_blue_puck_T(self):
        """Test Teltonika parser for Blue Puck T."""
        data_string = "043e1e02010001e7e193546ec61202010605166e2a860b08095055434b5f5431dd"
        data = bytes(bytearray.fromhex(data_string))
        # pylint: disable=unused-variable
        ble_parser = BleParser()
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "Teltonika"
        assert sensor_msg["type"] == "Blue Puck T"
        assert sensor_msg["mac"] == "C66E5493E1E7"
        assert sensor_msg["packet"] == "no packet id"
        assert sensor_msg["data"]
        assert sensor_msg["temperature"] == 29.5
        assert sensor_msg["rssi"] == -35
Пример #19
0
    def test_qingping_CGPR1_3(self):
        """Test Qingping parser for CGPR1 (light)."""
        data_string = "043E2102010000005E60342D58150201061116CDFD4812005E60342D581101010F0130AF"
        data = bytes(bytearray.fromhex(data_string))
        # pylint: disable=unused-variable
        ble_parser = BleParser()
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "Qingping"
        assert sensor_msg["type"] == "CGPR1"
        assert sensor_msg["mac"] == "582D34605E00"
        assert sensor_msg["packet"] == 48
        assert sensor_msg["data"]
        assert sensor_msg["light"] == 1
        assert sensor_msg["rssi"] == -81
Пример #20
0
    def test_inkbird_iBBQ_1_probes(self):
        """Test Inkbird parser for Inkbird iBBQ with 1 probe."""
        data_string = "043e2102010000d7652e9aec28150201060302f0ff0dff0000000028ec9a2e65d7f000b5"
        data = bytes(bytearray.fromhex(data_string))

        # pylint: disable=unused-variable
        ble_parser = BleParser()
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "Inkbird"
        assert sensor_msg["type"] == "iBBQ-1"
        assert sensor_msg["mac"] == "28EC9A2E65D7"
        assert sensor_msg["packet"] == "no packet id"
        assert sensor_msg["data"]
        assert sensor_msg["temperature probe 1"] == 24.0
        assert sensor_msg["rssi"] == -75
Пример #21
0
    def test_ha_ble_illuminance(self):
        """Test HA BLE parser for illuminance measurement"""
        data_string = "043E1802010000A5808FE648540C02010608161C180405138A14DC"
        data = bytes(bytearray.fromhex(data_string))

        # pylint: disable=unused-variable
        ble_parser = BleParser()
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "HA BLE"
        assert sensor_msg["type"] == "HA BLE DIY"
        assert sensor_msg["mac"] == "5448E68F80A5"
        assert sensor_msg["packet"] == "no packet id"
        assert sensor_msg["data"]
        assert sensor_msg["illuminance"] == 13460.67
        assert sensor_msg["rssi"] == -36
Пример #22
0
    def test_ha_ble_pressure(self):
        """Test HA BLE parser for pressure measurement"""
        data_string = "043E1B02010000A5808FE648540F0201060B161C1802000C0404138A01DC"
        data = bytes(bytearray.fromhex(data_string))

        # pylint: disable=unused-variable
        ble_parser = BleParser()
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "HA BLE"
        assert sensor_msg["type"] == "HA BLE DIY"
        assert sensor_msg["mac"] == "5448E68F80A5"
        assert sensor_msg["packet"] == 12
        assert sensor_msg["data"]
        assert sensor_msg["pressure"] == 1008.83
        assert sensor_msg["rssi"] == -36
Пример #23
0
    def test_ha_ble_packet_and_battery(self):
        """Test HA BLE parser for battery measurement and packet number"""
        data_string = "043E1902010000A5808FE648540D02010609161C18020009020161CC"
        data = bytes(bytearray.fromhex(data_string))

        # pylint: disable=unused-variable
        ble_parser = BleParser()
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "HA BLE"
        assert sensor_msg["type"] == "HA BLE DIY"
        assert sensor_msg["mac"] == "5448E68F80A5"
        assert sensor_msg["packet"] == 9
        assert sensor_msg["data"]
        assert sensor_msg["battery"] == 97
        assert sensor_msg["rssi"] == -52
Пример #24
0
    def test_qingping_CGPR1_1(self):
        """Test Qingping parser for CGPR1 (illuminance)."""
        data_string = "043E2702010000005E60342D581B0201061716CDFD0812005E60342D580201640F011C09048B090000AF"
        data = bytes(bytearray.fromhex(data_string))
        # pylint: disable=unused-variable
        ble_parser = BleParser()
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "Qingping"
        assert sensor_msg["type"] == "CGPR1"
        assert sensor_msg["mac"] == "582D34605E00"
        assert sensor_msg["packet"] == 28
        assert sensor_msg["data"]
        assert sensor_msg["illuminance"] == 2443
        assert sensor_msg["battery"] == 100
        assert sensor_msg["rssi"] == -81
Пример #25
0
    def test_ha_ble_modified_mac(self):
        """Test HA BLE parser for binary sensor with modified MAC"""
        data_string = "043E1D02010000A5808FE64854110201060D161C18020F0186A6808FE64854CC"
        data = bytes(bytearray.fromhex(data_string))

        # pylint: disable=unused-variable
        ble_parser = BleParser()
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "HA BLE"
        assert sensor_msg["type"] == "HA BLE DIY"
        assert sensor_msg["mac"] == "5448E68F80A6"
        assert sensor_msg["packet"] == "no packet id"
        assert sensor_msg["data"]
        assert sensor_msg["binary"] == 1
        assert sensor_msg["rssi"] == -52
Пример #26
0
    def test_ha_ble_opening(self):
        """Test HA BLE parser for dew point measurement"""
        data_string = "043E1602010000A5808FE648540A02010606161C18021100CC"
        data = bytes(bytearray.fromhex(data_string))

        # pylint: disable=unused-variable
        ble_parser = BleParser()
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "HA BLE"
        assert sensor_msg["type"] == "HA BLE DIY"
        assert sensor_msg["mac"] == "5448E68F80A5"
        assert sensor_msg["packet"] == "no packet id"
        assert sensor_msg["data"]
        assert sensor_msg["opening"] == 0
        assert sensor_msg["rssi"] == -52
Пример #27
0
    def test_ha_ble_voltage(self):
        """Test HA BLE parser for voltage measurement"""
        data_string = "043E1702010000A5808FE648540B02010607161C18030C020CDC"
        data = bytes(bytearray.fromhex(data_string))

        # pylint: disable=unused-variable
        ble_parser = BleParser()
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "HA BLE"
        assert sensor_msg["type"] == "HA BLE DIY"
        assert sensor_msg["mac"] == "5448E68F80A5"
        assert sensor_msg["packet"] == "no packet id"
        assert sensor_msg["data"]
        assert sensor_msg["voltage"] == 3.074
        assert sensor_msg["rssi"] == -36
Пример #28
0
    def test_qingping_CGPR1_2(self):
        """Test Qingping parser for CGPR1 (illuminance + motion)."""
        data_string = "043E2402010000005E60342D58180201061416CDFD4812005E60342D580804008B09000F0122AF"
        data = bytes(bytearray.fromhex(data_string))
        # pylint: disable=unused-variable
        ble_parser = BleParser()
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "Qingping"
        assert sensor_msg["type"] == "CGPR1"
        assert sensor_msg["mac"] == "582D34605E00"
        assert sensor_msg["packet"] == 34
        assert sensor_msg["data"]
        assert sensor_msg["illuminance"] == 2443
        assert sensor_msg["motion"] == 0
        assert sensor_msg["rssi"] == -81
Пример #29
0
    def test_Govee_H5183(self):
        """Test Govee H5183 parser."""
        data_string = "043e2b02010000edaeac38c1a41f0303518302010511ff5DA1B401000101E400800A2813240000000000000000a9"
        data = bytes(bytearray.fromhex(data_string))
        # pylint: disable=unused-variable
        ble_parser = BleParser()
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "Govee"
        assert sensor_msg["type"] == "H5183"
        assert sensor_msg["mac"] == "A4C138ACAEED"
        assert sensor_msg["packet"] == "no packet id"
        assert sensor_msg["data"]
        assert sensor_msg["temperature probe 1"] == 26.0
        assert sensor_msg["temperature alarm"] == 49.0
        assert sensor_msg["rssi"] == -87
Пример #30
0
    def test_blue_puck_RHT(self):
        """Test Teltonika parser for Blue Puck RHT."""
        data_string = "043e230201000196826a022bf01702010605166e2aa30404166f2a2308095055434b5f5448bd"
        data = bytes(bytearray.fromhex(data_string))
        # pylint: disable=unused-variable
        ble_parser = BleParser()
        sensor_msg, tracker_msg = ble_parser.parse_data(data)

        assert sensor_msg["firmware"] == "Teltonika"
        assert sensor_msg["type"] == "Blue Puck RHT"
        assert sensor_msg["mac"] == "F02B026A8296"
        assert sensor_msg["packet"] == "no packet id"
        assert sensor_msg["data"]
        assert sensor_msg["temperature"] == 11.87
        assert sensor_msg["humidity"] == 35
        assert sensor_msg["rssi"] == -67