def test_gateway_stats(): device = XDevice(GATEWAY, 'lumi.gateway.mgl03', DID, MAC) device.setup_converters() p = device.decode(GATEWAY, {'networkUp': False}) assert p == { 'network_pan_id': None, 'radio_channel': None, 'radio_tx_power': None } p = device.decode( GATEWAY, { 'networkUp': True, 'networkPanId': '0x9180', 'radioTxPower': 7, 'radioChannel': 15 }) assert p == { 'network_pan_id': '0x9180', 'radio_tx_power': 7, 'radio_channel': 15 } p = device.decode( GATEWAY, { 'free_mem': 3488, 'ip': '192.168.1.123', 'load_avg': '1.92|2.00|2.25|5/91|21135', 'rssi': 58, 'run_time': 367357, 'setupcode': '123-45-678', 'ssid': 'WiFi', 'tz': 'GMT3' }) assert p == { 'free_mem': 3488, 'load_avg': '1.92|2.00|2.25|5/91|21135', 'rssi': -42, 'uptime': '4 days, 06:02:37' } p = device.decode( GATEWAY, { 'serial': """serinfo:1.0 driver revision: 0: uart:16550A mmio:0x18147000 irq:17 tx:6337952 rx:0 RTS|CTS|DTR 1: uart:16550A mmio:0x18147400 irq:46 tx:19370 rx:154557484 oe:1684 RTS|DTR 2: uart:16550A mmio:0x18147800 irq:47 tx:1846359 rx:3845724 oe:18 RTS|DTR""" }) assert p == { 'bluetooth_tx': 19370, 'bluetooth_rx': 154557484, 'bluetooth_oe': 1684, 'zigbee_tx': 1846359, 'zigbee_rx': 3845724, 'zigbee_oe': 18 }
def test_new_th(): device = XDevice(BLE, 4611, DID, MAC) assert device.info.name == "Xiaomi TH Sensor" device.setup_converters() p = device.decode("mibeacon", {'eid': 19464, 'edata': 'cdcc3e42'}) assert p == {'humidity': 47.7} p = device.decode("mibeacon", {'eid': 19457, 'edata': 'cdcca841'}) assert p == {'temperature': 21.1}
def test_kettle(): device = XDevice(BLE, 131, DID, MAC) assert device.info.name == "Xiaomi Kettle" device.setup_converters() p = device.decode("mibeacon", {'eid': 4101, 'edata': '0063'}) assert p == {'power': False, 'state': 'idle', 'temperature': 99} p = device.decode("mibeacon", {'eid': 4101, 'edata': '0154'}) assert p == {'power': True, 'state': 'heat', 'temperature': 84}
def test_night_light(): device = XDevice(BLE, 2038, DID, MAC) assert device.info.name == "Xiaomi Night Light 2" device.setup_converters() p = device.decode("mibeacon", {"eid": 15, "edata": "640000"}) assert p == {'light': True, 'motion': True} p = device.decode("mibeacon", {'eid': 4103, 'edata': '640000'}) assert p == {'light': True} p = device.decode("mibeacon", {'eid': 4106, 'edata': '64'}) assert p == {'battery': 100} p = device.decode("mibeacon", {'eid': 4119, 'edata': '78000000'}) assert p == {'idle_time': 120}
def test_lock(): device = XDevice(BLE, 1694, DID2, MAC) assert device.info.name == "Aqara Door Lock N100 (Bluetooth)" device.setup_converters() p = device.decode("mibeacon", {'eid': 4106, 'edata': '3259f80362'}) assert p == {'battery': 50}
def test_zigbee_stats(): stats.now = lambda: datetime(2021, 12, 31, 23, 59) device = XDevice(ZIGBEE, 'lumi.plug', ZDID, ZMAC, ZNWK) device.setup_converters({ZIGBEE: "sensor"}) p = device.decode(ZIGBEE, { 'sourceAddress': '0x9B43', 'eui64': '0x00158D0000AABBCC', 'destinationEndpoint': '0x01', 'clusterId': '0x000A', 'profileId': '0x0104', 'sourceEndpoint': '0x01', 'APSCounter': '0x71', 'APSPlayload': '0x1071000000', 'rssi': -61, 'linkQuality': 156 }) assert p == { 'zigbee': p['zigbee'], # 'ieee': '0x00158D0000AABBCC', 'nwk': '0x9B43', 'msg_received': 1, 'msg_missed': 0, 'linkquality': 156, 'rssi': -61, 'last_msg': 'Time' } p = device.decode(ZIGBEE, { 'sourceAddress': '0x9B43', 'eui64': '0x00158D0000AABBCC', 'destinationEndpoint': '0x01', 'clusterId': '0x000A', 'profileId': '0x0104', 'sourceEndpoint': '0x01', 'APSCounter': '0x73', 'APSPlayload': '0x1075000000', 'rssi': -61, 'linkQuality': 156 }) assert p == { 'zigbee': p['zigbee'], # 'ieee': '0x00158D0000AABBCC', 'nwk': '0x9B43', 'msg_received': 2, 'msg_missed': 1, 'linkquality': 156, 'rssi': -61, 'last_msg': 'Time' } p = device.decode(ZIGBEE, { 'eui64': '', 'nwk': '0x9B43', 'ago': 60, 'type': 'device', 'parent': '0xABCD' }) assert p == {'parent': '0xABCD'} p = device.decode(ZIGBEE, {'parent': '0xABCD'}) assert p == {'parent': '0xABCD'} p = device.decode(ZIGBEE, {'resets': 10}) assert p == {'new_resets': 0} p = device.decode(ZIGBEE, {'resets': 15}) assert p == {'new_resets': 5}