示例#1
0
def test_mi_curtain():
    device = XDevice(ZIGBEE, 'lumi.curtain.acn002', ZDID, ZMAC, ZNWK)
    assert device.info.name == 'Aqara Roller Shade E1 CN'
    device.setup_converters()

    p = device.decode_lumi([
        {"siid": 2, "piid": 1, "value": 0},
        {"siid": 2, "piid": 3, "value": 0},
        {"siid": 2, "piid": 4, "value": 60},
        {"siid": 2, "piid": 5, "value": 60}
    ])
    assert p == {'position': 60, 'target_position': 60}

    p = device.decode_lumi([
        {"siid": 3, "piid": 1, "value": 1},
        {"siid": 3, "piid": 2, "value": 7317},
        {"siid": 3, "piid": 3, "value": 0},
        {"siid": 3, "piid": 4, "value": 48}
    ])
    assert p == {
        'battery': 48, 'battery_charging': False, 'battery_low': False,
        'battery_voltage': 7317
    }

    p = device.decode_lumi([{"siid": 2, "piid": 6, "value": 0}])
    assert p == {'run_state': 'closing'}

    p = device.decode_lumi([{"siid": 2, "piid": 2, "value": 1}])
    assert p == {'motor': 'close'}

    p = device.encode({'motor': 'open'})
    assert p == {"mi_spec": [{'siid': 2, 'piid': 2, 'value': 2}]}

    p = device.encode({"position": 60})
    assert p == {'mi_spec': [{'siid': 2, 'piid': 4, 'value': 60}]}
示例#2
0
def test_resets():
    device = XDevice(ZIGBEE, 'lumi.plug', ZDID, ZMAC, ZNWK)
    device.setup_converters()

    params = [{"res_name": "8.0.2002", "value": 24}]
    assert device.decode_lumi(params) == {'resets': 24, 'new_resets': 0}

    params = [{"res_name": "8.0.2002", "value": 27}]
    assert device.decode_lumi(params) == {'resets': 27, 'new_resets': 3}
示例#3
0
def test_gateway():
    device = XDevice(GATEWAY, "lumi.gateway.mgl03", DID, MAC)
    assert device.info.name == "Xiaomi Gateway 3"
    device.setup_converters()

    p = device.decode_lumi([{"res_name": "8.0.2109", "value": 60}])
    assert p == {'pair': True}

    p = device.encode({'pair': False})
    assert p == {"params": [{"res_name": "8.0.2109", "value": 0}]}

    # old zigbee pairing
    p = device.decode_lumi([{
        "res_name": "8.0.2111",
        "value": {
            "code": 0,
            "install_code": "",
            "mac": "",
            "message": "no data"
        },
        "error_code": 0
    }])
    assert p

    # _sync.zigbee3_get_install_code error
    p = device.decode_lumi([{
        "res_name": "8.0.2111",
        "value": {
            "code": -4001002,
            "install_code": "",
            "mac": "",
            "message": "no data"
        },
        "error_code": 0
    }])
    assert p

    # zigbee3 pairing
    p = device.decode_lumi([{
        "res_name": "8.0.2111",
        "value": {
            "code": 0,
            "install_code": "<36 hex>",
            "mac": "<16 hex>"
        },
        "error_code": 0
    }])
    assert p

    p = device.decode_lumi([{
        "res_name":
        "8.0.2155",
        "value":
        "{\"cloud_link\":1,\"tz_updated\":\"GMT3\"}"
    }])
    assert p == {'cloud_link': True}
示例#4
0
def test_opple_buttons():
    device = XDevice(ZIGBEE, 'lumi.remote.b686opcn01', ZDID, ZMAC, ZNWK)
    assert device.info.name == 'Aqara Opple Six Button CN'
    device.setup_converters()

    p = device.decode_lumi([{"res_name": "13.1.85", "value": 1}])
    assert p == {'action': 'button_1_single', 'button_1': 1}

    p = device.decode_lumi([{"res_name": "13.2.85", "value": 16}])
    assert p == {'action': 'button_2_hold', 'button_2': 16}
示例#5
0
def test_lock_s2():
    device = XDevice(ZIGBEE, 'lumi.lock.acn02', ZDID, ZMAC, ZNWK)
    assert device.info.name == 'Aqara Door Lock S2 CN'
    device.setup_converters()

    p = device.decode_lumi([{"res_name": "13.16.85", "value": 17}])
    assert p == {'square': True, 'reverse': False, 'latch': True}

    p = device.decode_lumi([
        {"res_name": "13.1.85", "value": 65536},
        {"res_name": "13.15.85", "value": 1}
    ])
    assert p == {'action': 'lock', 'key_id': 65536}
示例#6
0
def test_error():
    device = XDevice(ZIGBEE, 'lumi.motion.agl04', ZDID, ZMAC, ZNWK)
    assert device.info.name == 'Aqara Precision Motion Sensor EU'
    device.setup_converters()

    p = device.decode_lumi([{"siid": 10, "piid": 1, "code": -5020}])
    assert p == {}

    device = XDevice(ZIGBEE, 'lumi.sensor_magnet.aq2', ZDID, ZMAC, ZNWK)
    assert device.info.name == 'Aqara Door/Window Sensor'
    device.setup_converters()

    p = device.decode_lumi([{"res_name": "8.0.2102", "error_code": -5020}])
    assert p == {}
示例#7
0
def test_mi_spec():
    device = XDevice(ZIGBEE, 'lumi.sen_ill.mgl01', ZDID, ZMAC, ZNWK)
    assert device.info.name == 'Xiaomi Light Sensor EU'
    device.setup_converters()

    p = device.decode_lumi([{'siid': 3, 'piid': 1, 'value': 3100}])
    assert p == {'battery': 80, 'battery_voltage': 3100}

    device = XDevice(ZIGBEE, 'lumi.motion.agl04', ZDID, ZMAC, ZNWK)
    assert device.info.name == 'Aqara Precision Motion Sensor EU'
    device.setup_converters()

    p = device.decode_lumi([{'siid': 4, 'eiid': 1, 'arguments': []}])
    assert p == {'motion': True}
示例#8
0
def test_gateway():
    device = XDevice(GATEWAY, 'lumi.gateway.mgl03', "123456", "aabbccddeeff")
    assert device.info.name == 'Xiaomi Gateway 3'
    device.setup_converters()

    p = device.decode_lumi([{
        "res_name": "8.0.2082", "value": "lumi.1234567890"
    }])
    assert p == {"remove_did": "lumi.1234567890"}

    p = device.decode_lumi([{
        "res_name": "8.0.2082", "value": {"did": "lumi.1234567890"}
    }])
    assert p == {"remove_did": "lumi.1234567890"}
示例#9
0
def test_lumi_curtain():
    device = XDevice(ZIGBEE, 'lumi.curtain', ZDID, ZMAC, ZNWK)
    assert device.info.name == 'Aqara Curtain'
    device.setup_converters()

    p = device.decode_lumi([{'res_name': '14.2.85', 'value': 1}])
    assert p == {'motor': 'open'}

    p = device.decode_lumi([{"res_name": "1.1.85", "value": 100}])
    assert p == {'position': 100}

    p = device.encode({"motor": "stop"})
    assert p == {"params": [{'res_name': '14.2.85', 'value': 2}]}

    p = device.encode({"position": 48})
    assert p == {"params": [{'res_name': '1.1.85', 'value': 48}]}
示例#10
0
def test_light():
    device = XDevice(ZIGBEE, 'ikea.light.led1650r5', ZDID, ZMAC, ZNWK)
    assert device.info.name == 'IKEA Bulb GU10 400 lm'
    device.setup_converters()

    p = device.decode_lumi([{"res_name": "14.1.85", "value": 80}])
    assert p == {'brightness': 204.0}
示例#11
0
def test_sensor_ht_heartbeat():
    device = XDevice(ZIGBEE, 'lumi.sensor_ht', ZDID, ZMAC, ZNWK)
    device.setup_converters()
    assert device.info.name == 'Xiaomi TH Sensor'

    p = device.decode_lumi([
        {"res_name": "8.0.2008", "value": 2955},
        {"res_name": "8.0.2001", "value": 59},
        {"res_name": "8.0.2011", "value": 1},
        {"res_name": "8.0.2010", "value": 3},
        {"res_name": "8.0.2012", "value": 10},
        {"res_name": "8.0.2013", "value": 1},
        {"res_name": "8.0.2002", "value": 11651},
        {"res_name": "8.0.2003", "value": 2},
        {"res_name": "8.0.2004", "value": 0},
        {"res_name": "8.0.2005", "value": 0},
        {"res_name": "8.0.2033", "value": 0},
        {"res_name": "0.1.85", "value": 2384},
        {"res_name": "0.2.85", "value": 4509},
        {"res_name": "8.0.2036", "value": ""},
        {"res_name": "8.0.2022", "value": 0},
        {"res_name": "8.0.2023", "value": 0},
        {"res_name": "8.0.2007", "value": 216}
    ])
    assert p == {
        'battery': 51, "battery_voltage": 2955, 'resets': 11651,
        'temperature': 23.84, 'humidity': 45.09, 'parent': "-", 'fw_ver': 0,
        'battery_original': 59
    }
示例#12
0
def test_mesh():
    device = XDevice(MESH, 1771, "123", "112233aabbcc")
    assert device.info.name == 'Xiaomi Mesh Bulb'
    device.setup_converters()

    p = device.decode_lumi([{
        'did': '1234567890',
        'siid': 2,
        'piid': 1,
        'value': True,
        'code': 0
    }, {
        'did': '1234567890',
        'siid': 2,
        'piid': 2,
        'value': 65535,
        'code': 0
    }, {
        'did': '1234567890',
        'siid': 2,
        'piid': 3,
        'value': 4000,
        'code': 0
    }])
    assert p == {'light': True, 'brightness': 255.0, 'color_temp': 250}
示例#13
0
def test_sensor_motion():
    device = XDevice(ZIGBEE, 'lumi.sensor_motion.aq2', ZDID, ZMAC, ZNWK)
    assert device.info.name == 'Aqara Motion Sensor'
    device.setup_converters()

    p = device.decode_lumi([
        {"res_name": "0.3.85", "value": 6},
        {"res_name": "0.4.85", "value": 6},
        {"res_name": "3.1.85", "value": 1}
    ])
    assert p == {'illuminance': 6, 'motion': True}
示例#14
0
def test_lock_s2_pro():
    device = XDevice(ZIGBEE, 'lumi.lock.acn03', ZDID, ZMAC, ZNWK)
    assert device.info.name == 'Aqara Door Lock S2 Pro CN'
    device.setup_converters()

    p = device.decode_lumi([
        {"res_name": "13.16.85", "value": 81},
        {"res_name": "3.1.85", "value": 0},
        {"res_name": "13.28.85", "value": 3}
    ])
    assert p == {
        'lock': True, 'square': True, 'reverse': False, 'latch': True,
        'action': 'lock', 'lock_state': 'door_locked'
    }

    p = device.decode_lumi([
        {"res_name": "13.16.85", "value": 64},
        {"res_name": "13.25.85", "value": 0},
        {"res_name": "13.28.85", "value": 2}
    ])
    assert p == {
        'lock': True, 'square': False, 'reverse': False, 'latch': False,
        'action': 'lock', 'lock_control': 'in_unlocked',
        'lock_state': 'door_without_lift'
    }

    p = device.decode_lumi([{"res_name": "13.5.85", "value": 512}])
    assert p == {'action': 'doorbell'}

    p = device.decode_lumi([
        {"res_name": "13.1.85", "value": 131072},
        {"res_name": "13.15.85", "value": 2}
    ])
    assert p == {'action': 'lock', 'key_id': 131072}

    p = device.decode_lumi([{"res_name": "13.5.85", "value": 4}])
    assert p == {'action': 'alarm', 'alarm': 'unlocked'}

    p = device.decode_lumi([
        {"res_name": "13.26.85", "value": 2},
        {"res_name": "13.28.85", "value": 1}
    ])
    assert p == {
        'action': 'lock', 'door_state': 'ajar', 'lock_state': 'door_opened'
    }

    p = device.decode_lumi([{"res_name": "13.4.85", "value": 1}])
    assert p == {'action': 'error', 'error': 'fing_wrong', 'fing_wrong': 1}

    p = device.decode_lumi([{"res_name": "13.3.85", "value": 3}])
    assert p == {'action': 'error', 'error': 'psw_wrong', 'psw_wrong': 3}
示例#15
0
def test_climate():
    device = XDevice(ZIGBEE, "lumi.airrtc.tcpecn02", ZDID, ZMAC, ZNWK)
    assert device.info.name == 'Aqara Thermostat S2 CN'
    device.setup_converters()

    p = device.decode_lumi([
        {"res_name": "14.2.85", "value": 268435455},
        {"res_name": "14.8.85", "value": 15},
        {"res_name": "14.9.85", "value": 255},
        {"res_name": "14.10.85", "value": 15},
        {"res_name": "3.2.85", "value": 63},
        {"res_name": "3.1.85", "value": 0}
    ])
    assert p == {
        'climate': 268435455, 'hvac_mode': 'off', 'target_temp': 0,
        'fan_mode': None, 'current_temp': 63
    }

    params = [
        {"res_name": "14.2.85", "value": 288366197},
        {"res_name": "14.8.85", "value": 1},
        {"res_name": "14.9.85", "value": 30},
        {"res_name": "14.10.85", "value": 3},
        {"res_name": "3.2.85", "value": 29},
        {"res_name": "3.1.85", "value": 1}
    ]
    p = device.decode_lumi(params)
    assert p == {
        'climate': 288366197, 'hvac_mode': 'cool', 'target_temp': 30,
        'fan_mode': 'auto', 'current_temp': 29
    }

    x = params[0]["value"]
    p = device.encode({"climate": {"climate": x, "fan_mode": "low"}})
    y = p["params"][0]["value"]
    assert x != y
    p = device.encode({"climate": {"climate": y, "fan_mode": "auto"}})
    y = p["params"][0]["value"]
    assert x == y
示例#16
0
def test_plug_heartbeat():
    device = XDevice(ZIGBEE, 'lumi.plug', ZDID, ZMAC, ZNWK)
    assert device.info.name == 'Xiaomi Plug CN'
    device.setup_converters()
    params = [{
        "res_name": "4.1.85",
        "value": 1
    }, {
        "res_name": "8.0.2006",
        "value": 39
    }, {
        "res_name": "0.12.85",
        "value": 14.56
    }, {
        "res_name": "0.13.85",
        "value": 357696.31
    }, {
        "res_name": "8.0.2002",
        "value": 24
    }, {
        "res_name": "8.0.2231",
        "value": 0
    }, {
        "res_name": "8.0.2022",
        "value": 90
    }, {
        "res_name": "8.0.2023",
        "value": 19
    }, {
        "res_name": "8.0.2228",
        "value": 4367
    }, {
        "res_name": "8.0.2007",
        "value": 160
    }]
    assert device.decode_lumi(params) == {
        'plug': True,
        'power': 14.56,
        'energy': 357.7,
        'resets': 24,
        'fw_ver': 90,
        'chip_temperature': 39,
        'new_resets': 0,
    }