rytilahti / python-miio

Python library & console tool for controlling Xiaomi smart appliances
https://python-miio.readthedocs.io
GNU General Public License v3.0
3.59k stars 546 forks source link

Exception KeyError: 'value' on Dreamevacuum status #1822

Closed tomitomas closed 10 months ago

tomitomas commented 11 months ago

Describe the bug Not able to retrieve Status on Dreame Vacuum

Version information (please complete the following information):

Device information: dreame.vacuum.mc1808

To Reproduce just running : miiocli -o json_pretty dreamevacuum --ip xxxx --token xxxx status

Expected behavior The JSON status of the robot

Console output

ERROR:miio.click_common:Exception: 'value'
Traceback (most recent call last):
File "python3.8/site-packages/miio/click_common.py", line 54, in **call**
return self.main(*args, **kwargs)
File "python3.8/site-packages/click/core.py", line 1078, in main
rv = self.invoke(ctx)
File "python3.8/site-packages/click/core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "python3.8/site-packages/click/core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "python3.8/site-packages/click/core.py", line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "python3.8/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
File "python3.8/site-packages/miio/click_common.py", line 331, in wrap
result = func(*args, **kwargs)
File "python3.8/site-packages/click/decorators.py", line 92, in new_func
return ctx.invoke(f, obj, *args, **kwargs)
File "python3.8/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
File "python3.8/site-packages/miio/click_common.py", line 270, in command_callback
return miio_command.call(miio_device, *args, **kwargs)
File "python3.8/site-packages/miio/click_common.py", line 218, in call
return method(*args, **kwargs)
File "python3.8/site-packages/miio/click_common.py", line 185, in _wrap
return func(self, *args, **kwargs)
File "python3.8/site-packages/miio/integrations/dreame/vacuum/dreamevacuum_miot.py", line 508, in status
{
File "python3.8/site-packages/miio/integrations/dreame/vacuum/dreamevacuum_miot.py", line 509, in
prop["did"]: prop["value"] if prop["code"] == 0 else None
KeyError: 'value'
rytilahti commented 11 months ago

Please use miiocli --debug to get the device response for the status query, that will help us to adapt the code accordingly.

tomitomas commented 11 months ago

here is the debug :

DEBUG:miio.click_common:Unknown model, trying autodetection
DEBUG:miio.protocol:Unable to decrypt, returning raw bytes: b''
DEBUG:miio.miioprotocol:Got a response: Container:
    data = Container:
        data = b'' (total 0)
        value = b'' (total 0)
        offset1 = 32
        offset2 = 32
        length = 0
    header = Container:
        data = b'!1\x00 \x00\x00\x00\x00\x16\xd2\xf4p\x008\xe8\xa4' (total 16)
        value = Container:
            length = 32
            unknown = 0
            device_id = unhexlify('16d2f470')
            ts = 1970-02-13 03:59:32
        offset1 = 0
        offset2 = 16
        length = 16
    checksum = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' (total 16)
DEBUG:miio.miioprotocol:Discovered 16d2f470 with ts: 1970-02-13 03:59:32, token: b'ffffffffffffffffffffffffffffffff'
DEBUG:miio.miioprotocol:10.0.4.32:54321 >>: {'id': 1, 'method': 'miIO.info', 'params': []}
DEBUG:miio.miioprotocol:10.0.4.32:54321 (ts: 1970-02-13 03:59:32, id: 1) << {'exe_time': 4,
 'id': 1,
 'result': {'MemFree': 247716,
            'VmPeak': 57236,
            'VmRSS': 2440,
            'VmSize': 57236,
            'ap': {'bssid': '00:11:32:BF:C2:69',
                   'freq': 2417,
                   'rssi': '-51',
                   'ssid': 'Coco'},
            'fw_ver': '4.3.3_1122',
            'hw_ver': 'Linux',
            'ipflag': 1,
            'life': 3729572,
            'mac': 'D4:D2:D6:F6:7F:BB',
            'miio_client_ver': '4.3.3',
            'miio_times': [3729569, 0, 4761, 3723812],
            'miio_ver': '0.0.9',
            'model': 'dreame.vacuum.mc1808',
            'netif': {'gw': '10.0.4.1',
                      'localIp': '10.0.4.32',
                      'mask': '255.255.255.0'},
            'token': '3151454c72326a55315141366f35704a',
            'uid': 1754243342,
            'uptime': 11357458}}
DEBUG:miio.device:Detected model dreame.vacuum.mc1808
DEBUG:miio.click_common:Unknown model, trying autodetection
DEBUG:miio.protocol:Unable to decrypt, returning raw bytes: b''
DEBUG:miio.miioprotocol:Got a response: Container:
    data = Container:
        data = b'' (total 0)
        value = b'' (total 0)
        offset1 = 32
        offset2 = 32
        length = 0
    header = Container:
        data = b'!1\x00 \x00\x00\x00\x00\x16\xd2\xf4p\x008\xe8\xa4' (total 16)
        value = Container:
            length = 32
            unknown = 0
            device_id = unhexlify('16d2f470')
            ts = 1970-02-13 03:59:32
        offset1 = 0
        offset2 = 16
        length = 16
    checksum = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' (total 16)
DEBUG:miio.miioprotocol:Discovered 16d2f470 with ts: 1970-02-13 03:59:32, token: b'ffffffffffffffffffffffffffffffff'
DEBUG:miio.miioprotocol:10.0.4.32:54321 >>: {'id': 1, 'method': 'miIO.info', 'params': []}
DEBUG:miio.miioprotocol:10.0.4.32:54321 (ts: 1970-02-13 03:59:32, id: 1) << {'exe_time': 4,
 'id': 1,
 'result': {'MemFree': 247748,
            'VmPeak': 57236,
            'VmRSS': 2440,
            'VmSize': 57236,
            'ap': {'bssid': '00:11:32:BF:C2:69',
                   'freq': 2417,
                   'rssi': '-51',
                   'ssid': 'Coco'},
            'fw_ver': '4.3.3_1122',
            'hw_ver': 'Linux',
            'ipflag': 1,
            'life': 3729572,
            'mac': 'D4:D2:D6:F6:7F:BB',
            'miio_client_ver': '4.3.3',
            'miio_times': [3729569, 0, 4761, 3723812],
            'miio_ver': '0.0.9',
            'model': 'dreame.vacuum.mc1808',
            'netif': {'gw': '10.0.4.1',
                      'localIp': '10.0.4.32',
                      'mask': '255.255.255.0'},
            'token': '3151454c72326a55315141366f35704a',
            'uid': 1754243342,
            'uptime': 11357458}}
DEBUG:miio.device:Detected model dreame.vacuum.mc1808
ERROR:miio.click_common:Exception: Cache file /root/.cache/python-miio/dreame.vacuum.mc1808.json not found or it is stale
Traceback (most recent call last):
  File "/var/www/html/plugins/dreame/resources/venv/lib/python3.8/site-packages/miio/click_common.py", line 54, in __call__
    return self.main(*args, **kwargs)
  File "/var/www/html/plugins/dreame/resources/venv/lib/python3.8/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/var/www/html/plugins/dreame/resources/venv/lib/python3.8/site-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/var/www/html/plugins/dreame/resources/venv/lib/python3.8/site-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/var/www/html/plugins/dreame/resources/venv/lib/python3.8/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/var/www/html/plugins/dreame/resources/venv/lib/python3.8/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/var/www/html/plugins/dreame/resources/venv/lib/python3.8/site-packages/miio/click_common.py", line 313, in wrap
    result_msg = result_msg_fmt(**kwargs)
  File "/var/www/html/plugins/dreame/resources/venv/lib/python3.8/site-packages/miio/device.py", line 46, in _info_output
    dev = DeviceFactory.create(result.ip_address, result.token, force_generic_miot=True)
  File "/var/www/html/plugins/dreame/resources/venv/lib/python3.8/site-packages/miio/devicefactory.py", line 101, in create
    dev.info()
  File "/var/www/html/plugins/dreame/resources/venv/lib/python3.8/site-packages/miio/click_common.py", line 184, in _wrap
    self._fetch_info()
  File "/var/www/html/plugins/dreame/resources/venv/lib/python3.8/site-packages/miio/integrations/genericmiot/genericmiot.py", line 199, in _fetch_info
    self.initialize_model()
  File "/var/www/html/plugins/dreame/resources/venv/lib/python3.8/site-packages/miio/integrations/genericmiot/genericmiot.py", line 65, in initialize_model
    self._miot_model = miotcloud.get_device_model(self.model)
  File "/var/www/html/plugins/dreame/resources/venv/lib/python3.8/site-packages/miio/miot_cloud.py", line 87, in get_device_model
    spec = self._file_from_cache(file)
  File "/var/www/html/plugins/dreame/resources/venv/lib/python3.8/site-packages/miio/miot_cloud.py", line 129, in _file_from_cache
    raise FileNotFoundError("Cache file %s not found or it is stale" % file)
FileNotFoundError: Cache file /root/.cache/python-miio/dreame.vacuum.mc1808.json not found or it is stale
rytilahti commented 11 months ago

That's a different exception which should have been fixed by #1819. Please try to git pull and see if it works.

Also, are you sure you used the miiocli dreamevacuum command here? The exception states it is loading the genericmiot integration where it is failing :thinking:

f-vicente commented 10 months ago

I'm having the same error on a Xiaomi S12 (b106eu) https://home.miot-spec.com/spec/xiaomi.vacuum.b106eu

If helps, here is the debug:

Running command status
DEBUG:miio.click_common:Unknown model, trying autodetection
DEBUG:miio.protocol:Unable to decrypt, returning raw bytes: b''
DEBUG:miio.miioprotocol:Got a response: Container:
    data = Container:
        data = b'' (total 0)
        value = b'' (total 0)
        offset1 = 32
        offset2 = 32
        length = 0
    header = Container:
        data = b'!1\x00 \x00\x00\x00\x00>\xe1\x13\xba\x00\x0b4\xa7' (total 16)
        value = Container:
            length = 32
            unknown = 0
            device_id = unhexlify('3ee113ba')
            ts = 1970-01-09 11:59:35+00:00
        offset1 = 0
        offset2 = 16
        length = 16
    checksum = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' (total 16)
DEBUG:miio.miioprotocol:Discovered 3ee113ba with ts: 1970-01-09 11:59:35+00:00, token: b'ffffffffffffffffffffffffffffffff'
DEBUG:miio.miioprotocol:192.168.1.183:54321 >>: {'id': 1, 'method': 'miIO.info', 'params': []}
DEBUG:miio.miioprotocol:192.168.1.183:54321 (ts: 1970-01-09 11:59:35+00:00, id: 1) << {'exe_time': 2,
 'id': 1,
 'result': {'MemFree': 206916,
            'VmPeak': 57012,
            'VmRSS': 2160,
            'VmSize': 57012,
            'ap': {'bssid': 'B4:5F:84:F0:4C:C4',
                   'freq': 2427,
                   'rssi': '-35',
                   'ssid': 'FranN'},
            'fw_ver': '4.3.3_0016',
            'hw_ver': 'Linux',
            'ipflag': 1,
            'life': 734375,
            'mac': 'dc:ed:83:12:78:e9',
            'miio_client_ver': '4.3.3',
            'miio_times': [734373, 14, 16795, 706769],
            'miio_ver': '0.0.9',
            'model': 'xiaomi.vacuum.b106eu',
            'netif': {'gw': '192.168.1.1',
                      'localIp': '192.168.1.183',
                      'mask': '255.255.255.0'},
            'token': '554168566c3941625067637367376553',
            'uid': 27549465,
            'uptime': 734383}}
DEBUG:miio.device:Detected model xiaomi.vacuum.b106eu
DEBUG:miio.miot_cloud:Cache hit, returning contents of /home/fran/.cache/python-miio/xiaomi.vacuum.b106eu.json
DEBUG:miio.integrations.genericmiot.genericmiot:Initialized: description='Robot Cleaner' urn=<URN urn:miot-spec-v2:device:vacuum:0000A006:xiaomi-b106eu:1 parent:None>
DEBUG:miio.miot_models:Created enum <enum 'Status'>
DEBUG:miio.miot_models:Created enum <enum 'Mode'>
DEBUG:miio.miot_models:Created enum <enum 'Sweep Type'>
DEBUG:miio.integrations.genericmiot.genericmiot:vacuum:room-ids (Room IDs) reported no access information
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.integrations.genericmiot.genericmiot:sweep:consumable-index () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:sweep:clean-room-ids () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:sweep:clean-room-mode () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:sweep:clean-room-oper () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:sweep:record-start-time () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:sweep:record-use-time () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:sweep:record-clean-area () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:sweep:record-map-url () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:sweep:record-clean-mode () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:sweep:record-clean-way () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:sweep:clean-current-map () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:sweep:clean-preference () reported no access information
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.integrations.genericmiot.genericmiot:sweep:record-task-status () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:sweep:clean-prefer-type () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:sweep:clean-prefer-on () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:sweep:clean-preference-ii () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:sweep:clean-prefer-on-ii () reported no access information
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.integrations.genericmiot.genericmiot:sweep:go-charging () reported no access information
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.integrations.genericmiot.genericmiot:sweep:sd () reported no access information
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.integrations.genericmiot.genericmiot:order:orderdata () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:order:room-preference () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:order:prefer-type () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:order:is-global () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:order:now-order-count () reported no access information
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.integrations.genericmiot.genericmiot:point-zone:pause-type () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:point-zone:beauty-point () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:point-zone:map-id () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:point-zone:map-type () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:point-zone:timestamp () reported no access information
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.integrations.genericmiot.genericmiot:map:map-list () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:map:upload-id () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:map:upload-type () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:map:map-name () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:map:room-id () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:map:room-name () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:map:arrange-room-ids () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:map:split-points () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:map:lang () reported no access information
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.integrations.genericmiot.genericmiot:map:start-cleaning-point () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:map:end-cleaning-point () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:map:room-id-name-list () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:map:timestamp () reported no access information
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.integrations.genericmiot.genericmiot:map:test-for-upload-map () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:map:renew-map () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:map:mijia-room-list () reported no access information
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.miot_models:Created enum <enum ''>
DEBUG:miio.integrations.genericmiot.genericmiot:disturb:dnd-timezone () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:language:target-voice () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:language:cur-voice () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:language:download-status () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:language:download-progress () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:language:voice-url () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:language:voice-mdfive () reported no access information
DEBUG:miio.integrations.genericmiot.genericmiot:Created 52 actions
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='vacuum:start-sweep', name='Start Sweep', type=None, unit=None, status_attribute=None, inputs=[], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='vacuum:stop-sweeping', name='Stop Sweeping', type=None, unit=None, status_attribute=None, inputs=[], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='vacuum:start-only-sweep', name='Start Only Sweep', type=None, unit=None, status_attribute=None, inputs=[], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='vacuum:start-sweep-mop', name='Start Sweep Mop', type=None, unit=None, status_attribute=None, inputs=[], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='vacuum:start-mop', name='Start Mop', type=None, unit=None, status_attribute=None, inputs=[], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='vacuum:start-room-sweep', name='Start Room Sweep', type=None, unit=None, status_attribute=None, inputs=[PropertyDescriptor(id='vacuum:room-ids', name='Room IDs', type=<class 'str'>, unit=None, status_attribute='vacuum_room_ids', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Unset: 1>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='battery:start-charge', name='Start Charge', type=None, unit=None, status_attribute=None, inputs=[], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='sweep:reset-consumable', name='reset-consumable', type=None, unit=None, status_attribute=None, inputs=[EnumDescriptor(id='sweep:consumable-index', name='', type=<class 'int'>, unit=None, status_attribute='sweep_consumable_index', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Choice: 3>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='sweep:set-calibration', name='set-calibration', type=None, unit=None, status_attribute=None, inputs=[], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='sweep:set-room-clean', name='set-room-clean', type=None, unit=None, status_attribute=None, inputs=[PropertyDescriptor(id='sweep:clean-room-ids', name='', type=<class 'str'>, unit=None, status_attribute='sweep_clean_room_ids', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Unset: 1>), EnumDescriptor(id='sweep:clean-room-mode', name='', type=<class 'int'>, unit=None, status_attribute='sweep_clean_room_mode', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Choice: 3>), EnumDescriptor(id='sweep:clean-room-oper', name='', type=<class 'int'>, unit=None, status_attribute='sweep_clean_room_oper', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Choice: 3>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='sweep:set-preference-clean', name='set-preference-clean', type=None, unit=None, status_attribute=None, inputs=[PropertyDescriptor(id='sweep:clean-preference', name='', type=<class 'str'>, unit=None, status_attribute='sweep_clean_preference', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Unset: 1>), RangeDescriptor(id='sweep:clean-current-map', name='', unit=None, status_attribute='sweep_clean_current_map', access=<AccessFlags.0: 0>, min_value=0, max_value=4294967295, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='sweep:get-preference-clean', name='get-preference-clean', type=None, unit=None, status_attribute=None, inputs=[RangeDescriptor(id='sweep:clean-current-map', name='', unit=None, status_attribute='sweep_clean_current_map', access=<AccessFlags.0: 0>, min_value=0, max_value=4294967295, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='sweep:set-preference-type', name='set-preference-type', type=None, unit=None, status_attribute=None, inputs=[EnumDescriptor(id='sweep:clean-prefer-type', name='', type=<class 'int'>, unit=None, status_attribute='sweep_clean_prefer_type', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Choice: 3>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='sweep:set-go-charging', name='set-go-charging', type=None, unit=None, status_attribute=None, inputs=[EnumDescriptor(id='sweep:go-charging', name='', type=<class 'int'>, unit=None, status_attribute='sweep_go_charging', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Choice: 3>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='sweep:erase-preference', name='erase-preference', type=None, unit=None, status_attribute=None, inputs=[PropertyDescriptor(id='sweep:clean-room-ids', name='', type=<class 'str'>, unit=None, status_attribute='sweep_clean_room_ids', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Unset: 1>), RangeDescriptor(id='sweep:clean-current-map', name='', unit=None, status_attribute='sweep_clean_current_map', access=<AccessFlags.0: 0>, min_value=0, max_value=4294967295, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), EnumDescriptor(id='sweep:clean-prefer-type', name='', type=<class 'int'>, unit=None, status_attribute='sweep_clean_prefer_type', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Choice: 3>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='sweep:set-preference-ii', name='set-preference-ii', type=None, unit=None, status_attribute=None, inputs=[PropertyDescriptor(id='sweep:clean-preference', name='', type=<class 'str'>, unit=None, status_attribute='sweep_clean_preference', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Unset: 1>), RangeDescriptor(id='sweep:clean-current-map', name='', unit=None, status_attribute='sweep_clean_current_map', access=<AccessFlags.0: 0>, min_value=0, max_value=4294967295, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='sweep:get-preference-ii', name='get-preference-ii', type=None, unit=None, status_attribute=None, inputs=[RangeDescriptor(id='sweep:clean-current-map', name='', unit=None, status_attribute='sweep_clean_current_map', access=<AccessFlags.0: 0>, min_value=0, max_value=4294967295, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='order:add', name='add', type=None, unit=None, status_attribute=None, inputs=[RangeDescriptor(id='order:order-id', name='', unit=None, status_attribute='order_order_id', access=<AccessFlags.Write: 2>, min_value=0, max_value=7258089600000, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), EnumDescriptor(id='order:enable', name='', type=<class 'int'>, unit=None, status_attribute='order_enable', access=<AccessFlags.Write: 2>, constraint=<PropertyConstraint.Choice: 3>), RangeDescriptor(id='order:day', name='', unit=None, status_attribute='order_day', access=<AccessFlags.Write: 2>, min_value=0, max_value=255, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), RangeDescriptor(id='order:hour', name='', unit=None, status_attribute='order_hour', access=<AccessFlags.Write: 2>, min_value=0, max_value=23, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), RangeDescriptor(id='order:minute', name='', unit=None, status_attribute='order_minute', access=<AccessFlags.Write: 2>, min_value=0, max_value=59, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), EnumDescriptor(id='order:repeat', name='', type=<class 'int'>, unit=None, status_attribute='order_repeat', access=<AccessFlags.Write: 2>, constraint=<PropertyConstraint.Choice: 3>), RangeDescriptor(id='order:mapid', name='', unit=None, status_attribute='order_mapid', access=<AccessFlags.Write: 2>, min_value=0, max_value=4294967295, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), RangeDescriptor(id='order:time-zone', name='time-zone', unit=None, status_attribute='order_time_zone', access=<AccessFlags.Write: 2>, min_value=-99999, max_value=99999, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), RangeDescriptor(id='order:room-count', name='', unit=None, status_attribute='order_room_count', access=<AccessFlags.Write: 2>, min_value=0, max_value=64, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), PropertyDescriptor(id='order:room-preference', name='', type=<class 'str'>, unit=None, status_attribute='order_room_preference', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Unset: 1>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='order:del', name='del', type=None, unit=None, status_attribute=None, inputs=[RangeDescriptor(id='order:order-id', name='', unit=None, status_attribute='order_order_id', access=<AccessFlags.Write: 2>, min_value=0, max_value=7258089600000, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='order:get', name='get', type=None, unit=None, status_attribute=None, inputs=[], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='order:add-ii', name='add-ii', type=None, unit=None, status_attribute=None, inputs=[RangeDescriptor(id='order:order-id', name='', unit=None, status_attribute='order_order_id', access=<AccessFlags.Write: 2>, min_value=0, max_value=7258089600000, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), EnumDescriptor(id='order:enable', name='', type=<class 'int'>, unit=None, status_attribute='order_enable', access=<AccessFlags.Write: 2>, constraint=<PropertyConstraint.Choice: 3>), RangeDescriptor(id='order:day', name='', unit=None, status_attribute='order_day', access=<AccessFlags.Write: 2>, min_value=0, max_value=255, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), RangeDescriptor(id='order:hour', name='', unit=None, status_attribute='order_hour', access=<AccessFlags.Write: 2>, min_value=0, max_value=23, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), RangeDescriptor(id='order:minute', name='', unit=None, status_attribute='order_minute', access=<AccessFlags.Write: 2>, min_value=0, max_value=59, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), EnumDescriptor(id='order:repeat', name='', type=<class 'int'>, unit=None, status_attribute='order_repeat', access=<AccessFlags.Write: 2>, constraint=<PropertyConstraint.Choice: 3>), RangeDescriptor(id='order:mapid', name='', unit=None, status_attribute='order_mapid', access=<AccessFlags.Write: 2>, min_value=0, max_value=4294967295, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), RangeDescriptor(id='order:room-count', name='', unit=None, status_attribute='order_room_count', access=<AccessFlags.Write: 2>, min_value=0, max_value=64, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), RangeDescriptor(id='order:time-zone', name='time-zone', unit=None, status_attribute='order_time_zone', access=<AccessFlags.Write: 2>, min_value=-99999, max_value=99999, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), PropertyDescriptor(id='order:room-preference', name='', type=<class 'str'>, unit=None, status_attribute='order_room_preference', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Unset: 1>), EnumDescriptor(id='order:prefer-type', name='', type=<class 'int'>, unit=None, status_attribute='order_prefer_type', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Choice: 3>), EnumDescriptor(id='order:is-global', name='', type=<class 'int'>, unit=None, status_attribute='order_is_global', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Choice: 3>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='order:get-map-order-count', name='get-map-order-count', type=None, unit=None, status_attribute=None, inputs=[RangeDescriptor(id='order:mapid', name='', unit=None, status_attribute='order_mapid', access=<AccessFlags.Write: 2>, min_value=0, max_value=4294967295, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='order:add-iii', name='add-iii', type=None, unit=None, status_attribute=None, inputs=[RangeDescriptor(id='order:order-id', name='', unit=None, status_attribute='order_order_id', access=<AccessFlags.Write: 2>, min_value=0, max_value=7258089600000, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), EnumDescriptor(id='order:enable', name='', type=<class 'int'>, unit=None, status_attribute='order_enable', access=<AccessFlags.Write: 2>, constraint=<PropertyConstraint.Choice: 3>), RangeDescriptor(id='order:day', name='', unit=None, status_attribute='order_day', access=<AccessFlags.Write: 2>, min_value=0, max_value=255, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), RangeDescriptor(id='order:hour', name='', unit=None, status_attribute='order_hour', access=<AccessFlags.Write: 2>, min_value=0, max_value=23, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), RangeDescriptor(id='order:minute', name='', unit=None, status_attribute='order_minute', access=<AccessFlags.Write: 2>, min_value=0, max_value=59, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), EnumDescriptor(id='order:repeat', name='', type=<class 'int'>, unit=None, status_attribute='order_repeat', access=<AccessFlags.Write: 2>, constraint=<PropertyConstraint.Choice: 3>), RangeDescriptor(id='order:mapid', name='', unit=None, status_attribute='order_mapid', access=<AccessFlags.Write: 2>, min_value=0, max_value=4294967295, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), RangeDescriptor(id='order:room-count', name='', unit=None, status_attribute='order_room_count', access=<AccessFlags.Write: 2>, min_value=0, max_value=64, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), RangeDescriptor(id='order:time-zone', name='time-zone', unit=None, status_attribute='order_time_zone', access=<AccessFlags.Write: 2>, min_value=-99999, max_value=99999, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), PropertyDescriptor(id='order:room-preference', name='', type=<class 'str'>, unit=None, status_attribute='order_room_preference', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Unset: 1>), EnumDescriptor(id='order:prefer-type', name='', type=<class 'int'>, unit=None, status_attribute='order_prefer_type', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Choice: 3>), EnumDescriptor(id='order:is-global', name='', type=<class 'int'>, unit=None, status_attribute='order_is_global', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Choice: 3>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='point-zone:start-point-clean', name='start-point-clean', type=None, unit=None, status_attribute=None, inputs=[], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='point-zone:pause-point-clean', name='pause-point-clean', type=None, unit=None, status_attribute=None, inputs=[EnumDescriptor(id='point-zone:pause-type', name='', type=<class 'int'>, unit=None, status_attribute='point_zone_pause_type', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Choice: 3>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='point-zone:start-zone-clean', name='start-zone-clean', type=None, unit=None, status_attribute=None, inputs=[], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='point-zone:pause-zone-clean', name='pause-zone-clean', type=None, unit=None, status_attribute=None, inputs=[EnumDescriptor(id='point-zone:pause-type', name='', type=<class 'int'>, unit=None, status_attribute='point_zone_pause_type', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Choice: 3>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='point-zone:set-beauty-wall', name='set-beauty-wall', type=None, unit=None, status_attribute=None, inputs=[PropertyDescriptor(id='point-zone:beauty-point', name='', type=<class 'str'>, unit=None, status_attribute='point_zone_beauty_point', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Unset: 1>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='point-zone:set-virtual-wall', name='set-virtual-wall', type=None, unit=None, status_attribute=None, inputs=[PropertyDescriptor(id='point-zone:restrict-points', name='', type=<class 'str'>, unit=None, status_attribute='point_zone_restrict_points', access=<AccessFlags.Write: 2>, constraint=<PropertyConstraint.Unset: 1>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='point-zone:set-zone-point', name='set-zone-point', type=None, unit=None, status_attribute=None, inputs=[PropertyDescriptor(id='point-zone:zone-points', name='', type=<class 'str'>, unit=None, status_attribute='point_zone_zone_points', access=<AccessFlags.Write: 2>, constraint=<PropertyConstraint.Unset: 1>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='point-zone:start-point-clean-ii', name='start-point-clean-ii', type=None, unit=None, status_attribute=None, inputs=[PropertyDescriptor(id='point-zone:target-point', name='', type=<class 'str'>, unit=None, status_attribute='point_zone_target_point', access=<AccessFlags.Write|Read: 3>, constraint=<PropertyConstraint.Unset: 1>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='map:get-map-list', name='get-map-list', type=None, unit=None, status_attribute=None, inputs=[], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='map:upload-by-mapid', name='upload-by-mapid', type=None, unit=None, status_attribute=None, inputs=[RangeDescriptor(id='map:upload-id', name='', unit=None, status_attribute='map_upload_id', access=<AccessFlags.0: 0>, min_value=0, max_value=4294967295, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='map:set-cur-map', name='set-cur-map', type=None, unit=None, status_attribute=None, inputs=[RangeDescriptor(id='map:upload-id', name='', unit=None, status_attribute='map_upload_id', access=<AccessFlags.0: 0>, min_value=0, max_value=4294967295, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='map:del-map', name='del-map', type=None, unit=None, status_attribute=None, inputs=[RangeDescriptor(id='map:upload-id', name='', unit=None, status_attribute='map_upload_id', access=<AccessFlags.0: 0>, min_value=0, max_value=4294967295, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='map:rename-map', name='rename-map', type=None, unit=None, status_attribute=None, inputs=[RangeDescriptor(id='map:upload-id', name='', unit=None, status_attribute='map_upload_id', access=<AccessFlags.0: 0>, min_value=0, max_value=4294967295, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), PropertyDescriptor(id='map:map-name', name='', type=<class 'str'>, unit=None, status_attribute='map_map_name', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Unset: 1>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='map:upload-by-maptype', name='upload-by-maptype', type=None, unit=None, status_attribute=None, inputs=[EnumDescriptor(id='map:upload-type', name='', type=<class 'int'>, unit=None, status_attribute='map_upload_type', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Choice: 3>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='map:rename-room', name='rename-room', type=None, unit=None, status_attribute=None, inputs=[RangeDescriptor(id='map:upload-id', name='', unit=None, status_attribute='map_upload_id', access=<AccessFlags.0: 0>, min_value=0, max_value=4294967295, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), RangeDescriptor(id='map:room-id', name='', unit=None, status_attribute='map_room_id', access=<AccessFlags.0: 0>, min_value=0, max_value=255, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), PropertyDescriptor(id='map:room-name', name='', type=<class 'str'>, unit=None, status_attribute='map_room_name', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Unset: 1>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='map:arrange-room', name='arrange-room', type=None, unit=None, status_attribute=None, inputs=[RangeDescriptor(id='map:upload-id', name='', unit=None, status_attribute='map_upload_id', access=<AccessFlags.0: 0>, min_value=0, max_value=4294967295, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), PropertyDescriptor(id='map:arrange-room-ids', name='', type=<class 'str'>, unit=None, status_attribute='map_arrange_room_ids', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Unset: 1>), PropertyDescriptor(id='map:lang', name='', type=<class 'str'>, unit=None, status_attribute='map_lang', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Unset: 1>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='map:split-room', name='split-room', type=None, unit=None, status_attribute=None, inputs=[RangeDescriptor(id='map:upload-id', name='', unit=None, status_attribute='map_upload_id', access=<AccessFlags.0: 0>, min_value=0, max_value=4294967295, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), RangeDescriptor(id='map:room-id', name='', unit=None, status_attribute='map_room_id', access=<AccessFlags.0: 0>, min_value=0, max_value=255, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), PropertyDescriptor(id='map:split-points', name='', type=<class 'str'>, unit=None, status_attribute='map_split_points', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Unset: 1>), PropertyDescriptor(id='map:lang', name='', type=<class 'str'>, unit=None, status_attribute='map_lang', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Unset: 1>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='map:reset-map', name='reset-map', type=None, unit=None, status_attribute=None, inputs=[], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='map:build-new-map', name='build-new-map', type=None, unit=None, status_attribute=None, inputs=[EnumDescriptor(id='map:build-map', name='', type=<class 'int'>, unit=None, status_attribute='map_build_map', access=<AccessFlags.Read: 1>, constraint=<PropertyConstraint.Choice: 3>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='map:get-cur-path', name='get-cur-path', type=None, unit=None, status_attribute=None, inputs=[RangeDescriptor(id='map:start-cleaning-point', name='', unit=None, status_attribute='map_start_cleaning_point', access=<AccessFlags.0: 0>, min_value=0, max_value=4294967295, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), RangeDescriptor(id='map:end-cleaning-point', name='', unit=None, status_attribute='map_end_cleaning_point', access=<AccessFlags.0: 0>, min_value=0, max_value=4294967295, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='map:get-map-room-list', name='get-map-room-list', type=None, unit=None, status_attribute=None, inputs=[RangeDescriptor(id='map:cur-map-id', name='', unit=None, status_attribute='map_cur_map_id', access=<AccessFlags.Read: 1>, min_value=0, max_value=4294967295, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='map:upload-by-mapid-ii', name='upload-by-mapid-ii', type=None, unit=None, status_attribute=None, inputs=[RangeDescriptor(id='map:upload-id', name='', unit=None, status_attribute='map_upload_id', access=<AccessFlags.0: 0>, min_value=0, max_value=4294967295, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='map:upload-by-maptype-ii', name='upload-by-maptype-ii', type=None, unit=None, status_attribute=None, inputs=[EnumDescriptor(id='map:upload-type', name='', type=<class 'int'>, unit=None, status_attribute='map_upload_type', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Choice: 3>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='map:reset-map-ii', name='reset-map-ii', type=None, unit=None, status_attribute=None, inputs=[], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='map:build-map-ii', name='build-map-ii', type=None, unit=None, status_attribute=None, inputs=[EnumDescriptor(id='map:build-map', name='', type=<class 'int'>, unit=None, status_attribute='map_build_map', access=<AccessFlags.Read: 1>, constraint=<PropertyConstraint.Choice: 3>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='map:set-mijia-room-list', name='set-mijia-room-list', type=None, unit=None, status_attribute=None, inputs=[RangeDescriptor(id='map:upload-id', name='', unit=None, status_attribute='map_upload_id', access=<AccessFlags.0: 0>, min_value=0, max_value=4294967295, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), PropertyDescriptor(id='map:mijia-room-list', name='', type=<class 'str'>, unit=None, status_attribute='map_mijia_room_list', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Unset: 1>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='disturb:set-notdisturb', name='set-notdisturb', type=None, unit=None, status_attribute=None, inputs=[EnumDescriptor(id='disturb:dnd-enable', name='', type=<class 'int'>, unit=None, status_attribute='disturb_dnd_enable', access=<AccessFlags.Read: 1>, constraint=<PropertyConstraint.Choice: 3>), RangeDescriptor(id='disturb:dnd-start-hour', name='', unit=None, status_attribute='disturb_dnd_start_hour', access=<AccessFlags.Read: 1>, min_value=0, max_value=23, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), RangeDescriptor(id='disturb:dnd-start-minute', name='', unit=None, status_attribute='disturb_dnd_start_minute', access=<AccessFlags.Read: 1>, min_value=0, max_value=59, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), RangeDescriptor(id='disturb:dnd-end-hour', name='', unit=None, status_attribute='disturb_dnd_end_hour', access=<AccessFlags.Read: 1>, min_value=0, max_value=23, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), RangeDescriptor(id='disturb:dnd-end-minute', name='', unit=None, status_attribute='disturb_dnd_end_minute', access=<AccessFlags.Read: 1>, min_value=0, max_value=59, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>), RangeDescriptor(id='disturb:dnd-timezone', name='', unit=None, status_attribute='disturb_dnd_timezone', access=<AccessFlags.0: 0>, min_value=-99999, max_value=99999, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='language:download-voice', name='download-voice', type=None, unit=None, status_attribute=None, inputs=[PropertyDescriptor(id='language:target-voice', name='', type=<class 'str'>, unit=None, status_attribute='language_target_voice', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Unset: 1>), PropertyDescriptor(id='language:voice-url', name='', type=<class 'str'>, unit=None, status_attribute='language_voice_url', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Unset: 1>), PropertyDescriptor(id='language:voice-mdfive', name='', type=<class 'str'>, unit=None, status_attribute='language_voice_mdfive', access=<AccessFlags.0: 0>, constraint=<PropertyConstraint.Unset: 1>)], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:        ActionDescriptor(id='language:get-download-status', name='get-download-status', type=None, unit=None, status_attribute=None, inputs=[], access=<AccessFlags.Execute: 4>)
DEBUG:miio.integrations.genericmiot.genericmiot:Created 67 properties
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='vacuum:status', name='Status', type=<class 'int'>, unit=None, status_attribute='vacuum_status', access=<AccessFlags.Read: 1>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='vacuum:fault', name='Device Fault', unit=None, status_attribute='vacuum_fault', access=<AccessFlags.Read: 1>, min_value=0, max_value=3000, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='vacuum:mode', name='Mode', type=<class 'int'>, unit=None, status_attribute='vacuum_mode', access=<AccessFlags.Write|Read: 3>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='vacuum:sweep-type', name='Sweep Type', type=<class 'int'>, unit=None, status_attribute='vacuum_sweep_type', access=<AccessFlags.Write|Read: 3>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        PropertyDescriptor(id='vacuum:restricted-walls', name='Restricted Walls', type=<class 'str'>, unit=None, status_attribute='vacuum_restricted_walls', access=<AccessFlags.Write|Read: 3>, constraint=<PropertyConstraint.Unset: 1>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='battery:battery-level', name='Battery Level', unit='percentage', status_attribute='battery_battery_level', access=<AccessFlags.Read: 1>, min_value=0, max_value=100, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        PropertyDescriptor(id='alarm:alarm', name='Alarm', type=<class 'bool'>, unit=None, status_attribute='alarm_alarm', access=<AccessFlags.Write|Read: 3>, constraint=<PropertyConstraint.Unset: 1>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='alarm:volume', name='Volume', unit='percentage', status_attribute='alarm_volume', access=<AccessFlags.Write|Read: 3>, min_value=0, max_value=10, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='sweep:repeat-state', name='', type=<class 'int'>, unit=None, status_attribute='sweep_repeat_state', access=<AccessFlags.Write|Read: 3>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='sweep:door-state', name='', type=<class 'int'>, unit=None, status_attribute='sweep_door_state', access=<AccessFlags.Read: 1>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='sweep:cloth-state', name='', type=<class 'int'>, unit=None, status_attribute='sweep_cloth_state', access=<AccessFlags.Read: 1>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='sweep:suction-state', name='', type=<class 'int'>, unit=None, status_attribute='sweep_suction_state', access=<AccessFlags.Write|Read: 3>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='sweep:water-state', name='', type=<class 'int'>, unit=None, status_attribute='sweep_water_state', access=<AccessFlags.Write|Read: 3>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='sweep:mop-route', name='', type=<class 'int'>, unit=None, status_attribute='sweep_mop_route', access=<AccessFlags.Write|Read: 3>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='sweep:side-brush-life', name='', unit='percentage', status_attribute='sweep_side_brush_life', access=<AccessFlags.Read: 1>, min_value=0, max_value=100, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='sweep:side-brush-hours', name='', unit='hours', status_attribute='sweep_side_brush_hours', access=<AccessFlags.Read: 1>, min_value=0, max_value=180, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='sweep:main-brush-life', name='', unit='percentage', status_attribute='sweep_main_brush_life', access=<AccessFlags.Read: 1>, min_value=0, max_value=100, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='sweep:main-brush-hours', name='', unit='hours', status_attribute='sweep_main_brush_hours', access=<AccessFlags.Read: 1>, min_value=0, max_value=360, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='sweep:hypa-life', name='', unit='percentage', status_attribute='sweep_hypa_life', access=<AccessFlags.Read: 1>, min_value=0, max_value=100, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='sweep:hypa-hours', name='', unit='hours', status_attribute='sweep_hypa_hours', access=<AccessFlags.Read: 1>, min_value=0, max_value=180, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='sweep:mop-life', name='', unit='percentage', status_attribute='sweep_mop_life', access=<AccessFlags.Read: 1>, min_value=0, max_value=100, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='sweep:mop-hours', name='', unit='hours', status_attribute='sweep_mop_hours', access=<AccessFlags.Read: 1>, min_value=0, max_value=180, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='sweep:direction', name='', type=<class 'int'>, unit=None, status_attribute='sweep_direction', access=<AccessFlags.Write: 2>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='sweep:time-zone', name='', unit=None, status_attribute='sweep_time_zone', access=<AccessFlags.Write|Read: 3>, min_value=-99999, max_value=99999, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        PropertyDescriptor(id='sweep:cur-lang', name='', type=<class 'str'>, unit=None, status_attribute='sweep_cur_lang', access=<AccessFlags.Write|Read: 3>, constraint=<PropertyConstraint.Unset: 1>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='sweep:cleaning-time', name='', unit=None, status_attribute='sweep_cleaning_time', access=<AccessFlags.Read: 1>, min_value=0, max_value=360, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='sweep:cleaning-area', name='', unit=None, status_attribute='sweep_cleaning_area', access=<AccessFlags.Read: 1>, min_value=0, max_value=1200, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='sweep:dirt-recognize', name='', type=<class 'int'>, unit=None, status_attribute='sweep_dirt_recognize', access=<AccessFlags.Write|Read: 3>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='sweep:pet-recognize', name='', type=<class 'int'>, unit=None, status_attribute='sweep_pet_recognize', access=<AccessFlags.Write|Read: 3>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='sweep:ai-recognize', name='', type=<class 'int'>, unit=None, status_attribute='sweep_ai_recognize', access=<AccessFlags.Write|Read: 3>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='sweep:carpet-booster', name='', type=<class 'int'>, unit=None, status_attribute='sweep_carpet_booster', access=<AccessFlags.Write|Read: 3>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        PropertyDescriptor(id='sweep:multi-prop-vacuum', name='', type=<class 'str'>, unit=None, status_attribute='sweep_multi_prop_vacuum', access=<AccessFlags.Read: 1>, constraint=<PropertyConstraint.Unset: 1>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='sweep:carpet-avoid', name='', type=<class 'int'>, unit=None, status_attribute='sweep_carpet_avoid', access=<AccessFlags.Write: 2>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='sweep:tank-shake', name='', type=<class 'int'>, unit=None, status_attribute='sweep_tank_shake', access=<AccessFlags.Write|Read: 3>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='sweep:shake-shift', name='', type=<class 'int'>, unit=None, status_attribute='sweep_shake_shift', access=<AccessFlags.Write|Read: 3>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='sweep:map-encrypt', name='', type=<class 'int'>, unit=None, status_attribute='sweep_map_encrypt', access=<AccessFlags.Read: 1>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='order:order-id', name='', unit=None, status_attribute='order_order_id', access=<AccessFlags.Write: 2>, min_value=0, max_value=7258089600000, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='order:enable', name='', type=<class 'int'>, unit=None, status_attribute='order_enable', access=<AccessFlags.Write: 2>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='order:day', name='', unit=None, status_attribute='order_day', access=<AccessFlags.Write: 2>, min_value=0, max_value=255, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='order:hour', name='', unit=None, status_attribute='order_hour', access=<AccessFlags.Write: 2>, min_value=0, max_value=23, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='order:minute', name='', unit=None, status_attribute='order_minute', access=<AccessFlags.Write: 2>, min_value=0, max_value=59, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='order:repeat', name='', type=<class 'int'>, unit=None, status_attribute='order_repeat', access=<AccessFlags.Write: 2>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='order:clean-way', name='', type=<class 'int'>, unit=None, status_attribute='order_clean_way', access=<AccessFlags.Write: 2>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='order:suction', name='', type=<class 'int'>, unit=None, status_attribute='order_suction', access=<AccessFlags.Write: 2>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='order:water', name='', type=<class 'int'>, unit=None, status_attribute='order_water', access=<AccessFlags.Write: 2>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='order:twice-clean', name='', type=<class 'int'>, unit=None, status_attribute='order_twice_clean', access=<AccessFlags.Write: 2>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='order:mapid', name='', unit=None, status_attribute='order_mapid', access=<AccessFlags.Write: 2>, min_value=0, max_value=4294967295, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='order:room-count', name='', unit=None, status_attribute='order_room_count', access=<AccessFlags.Write: 2>, min_value=0, max_value=64, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        PropertyDescriptor(id='order:room-data', name='', type=<class 'str'>, unit=None, status_attribute='order_room_data', access=<AccessFlags.Write: 2>, constraint=<PropertyConstraint.Unset: 1>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='order:time-zone', name='time-zone', unit=None, status_attribute='order_time_zone', access=<AccessFlags.Write: 2>, min_value=-99999, max_value=99999, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        PropertyDescriptor(id='order:all-enable-count', name='', type=<class 'str'>, unit=None, status_attribute='order_all_enable_count', access=<AccessFlags.Read: 1>, constraint=<PropertyConstraint.Unset: 1>)
DEBUG:miio.integrations.genericmiot.genericmiot:        PropertyDescriptor(id='point-zone:zone-points', name='', type=<class 'str'>, unit=None, status_attribute='point_zone_zone_points', access=<AccessFlags.Write: 2>, constraint=<PropertyConstraint.Unset: 1>)
DEBUG:miio.integrations.genericmiot.genericmiot:        PropertyDescriptor(id='point-zone:restrict-points', name='', type=<class 'str'>, unit=None, status_attribute='point_zone_restrict_points', access=<AccessFlags.Write: 2>, constraint=<PropertyConstraint.Unset: 1>)
DEBUG:miio.integrations.genericmiot.genericmiot:        PropertyDescriptor(id='point-zone:target-point', name='', type=<class 'str'>, unit=None, status_attribute='point_zone_target_point', access=<AccessFlags.Write|Read: 3>, constraint=<PropertyConstraint.Unset: 1>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='map:remember-state', name='', type=<class 'int'>, unit=None, status_attribute='map_remember_state', access=<AccessFlags.Write|Read: 3>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='map:cur-map-id', name='', unit=None, status_attribute='map_cur_map_id', access=<AccessFlags.Read: 1>, min_value=0, max_value=4294967295, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='map:map-num', name='', unit=None, status_attribute='map_map_num', access=<AccessFlags.Read: 1>, min_value=0, max_value=5, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        PropertyDescriptor(id='map:cur-cleaning-path', name='', type=<class 'str'>, unit=None, status_attribute='map_cur_cleaning_path', access=<AccessFlags.Read: 1>, constraint=<PropertyConstraint.Unset: 1>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='map:build-map', name='', type=<class 'int'>, unit=None, status_attribute='map_build_map', access=<AccessFlags.Read: 1>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='map:has-new-map', name='', type=<class 'int'>, unit=None, status_attribute='map_has_new_map', access=<AccessFlags.Read: 1>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='map:map-uploads', name='', type=<class 'int'>, unit=None, status_attribute='map_map_uploads', access=<AccessFlags.Write: 2>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        EnumDescriptor(id='disturb:dnd-enable', name='', type=<class 'int'>, unit=None, status_attribute='disturb_dnd_enable', access=<AccessFlags.Read: 1>, constraint=<PropertyConstraint.Choice: 3>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='disturb:dnd-start-hour', name='', unit=None, status_attribute='disturb_dnd_start_hour', access=<AccessFlags.Read: 1>, min_value=0, max_value=23, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='disturb:dnd-start-minute', name='', unit=None, status_attribute='disturb_dnd_start_minute', access=<AccessFlags.Read: 1>, min_value=0, max_value=59, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='disturb:dnd-end-hour', name='', unit=None, status_attribute='disturb_dnd_end_hour', access=<AccessFlags.Read: 1>, min_value=0, max_value=23, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        RangeDescriptor(id='disturb:dnd-end-minute', name='', unit=None, status_attribute='disturb_dnd_end_minute', access=<AccessFlags.Read: 1>, min_value=0, max_value=59, step=1, range_attribute=None, type=<class 'int'>, constraint=<PropertyConstraint.Range: 2>)
DEBUG:miio.integrations.genericmiot.genericmiot:        PropertyDescriptor(id='disturb:multi-prop-dnd', name='', type=<class 'str'>, unit=None, status_attribute='disturb_multi_prop_dnd', access=<AccessFlags.Read: 1>, constraint=<PropertyConstraint.Unset: 1>)
DEBUG:miio.miioprotocol:192.168.1.183:54321 >>: {'id': 2,
 'method': 'get_properties',
 'params': [{'did': 'vacuum:status', 'piid': 1, 'siid': 2},
            {'did': 'vacuum:fault', 'piid': 2, 'siid': 2},
            {'did': 'vacuum:mode', 'piid': 4, 'siid': 2},
            {'did': 'vacuum:sweep-type', 'piid': 8, 'siid': 2},
            {'did': 'vacuum:restricted-walls', 'piid': 9, 'siid': 2},
            {'did': 'battery:battery-level', 'piid': 1, 'siid': 3},
            {'did': 'alarm:alarm', 'piid': 1, 'siid': 4},
            {'did': 'alarm:volume', 'piid': 2, 'siid': 4},
            {'did': 'sweep:repeat-state', 'piid': 1, 'siid': 7},
            {'did': 'sweep:door-state', 'piid': 3, 'siid': 7}]}
DEBUG:miio.miioprotocol:192.168.1.183:54321 (ts: 1970-01-09 11:59:35+00:00, id: 2) << {'exe_time': 10,
 'id': 2,
 'result': [{'code': 0,
             'did': 'vacuum:status',
             'piid': 1,
             'siid': 2,
             'value': 4},
            {'code': 0,
             'did': 'vacuum:fault',
             'piid': 2,
             'siid': 2,
             'value': 2105},
            {'code': 0, 'did': 'vacuum:mode', 'piid': 4, 'siid': 2, 'value': 0},
            {'code': 0,
             'did': 'vacuum:sweep-type',
             'piid': 8,
             'siid': 2,
             'value': 0},
            {'code': 0,
             'did': 'vacuum:restricted-walls',
             'piid': 9,
             'siid': 2,
             'value': '[1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1]'},
            {'code': 0,
             'did': 'battery:battery-level',
             'piid': 1,
             'siid': 3,
             'value': 100},
            {'code': 0,
             'did': 'alarm:alarm',
             'piid': 1,
             'siid': 4,
             'value': False},
            {'code': 0,
             'did': 'alarm:volume',
             'piid': 2,
             'siid': 4,
             'value': 2},
            {'code': 0,
             'did': 'sweep:repeat-state',
             'piid': 1,
             'siid': 7,
             'value': 0},
            {'code': 0,
             'did': 'sweep:door-state',
             'piid': 3,
             'siid': 7,
             'value': 3}]}
DEBUG:miio.miioprotocol:192.168.1.183:54321 >>: {'id': 3,
 'method': 'get_properties',
 'params': [{'did': 'sweep:cloth-state', 'piid': 4, 'siid': 7},
            {'did': 'sweep:suction-state', 'piid': 5, 'siid': 7},
            {'did': 'sweep:water-state', 'piid': 6, 'siid': 7},
            {'did': 'sweep:mop-route', 'piid': 7, 'siid': 7},
            {'did': 'sweep:side-brush-life', 'piid': 8, 'siid': 7},
            {'did': 'sweep:side-brush-hours', 'piid': 9, 'siid': 7},
            {'did': 'sweep:main-brush-life', 'piid': 10, 'siid': 7},
            {'did': 'sweep:main-brush-hours', 'piid': 11, 'siid': 7},
            {'did': 'sweep:hypa-life', 'piid': 12, 'siid': 7},
            {'did': 'sweep:hypa-hours', 'piid': 13, 'siid': 7}]}
DEBUG:miio.miioprotocol:192.168.1.183:54321 (ts: 1970-01-09 11:59:35+00:00, id: 3) << {'exe_time': 11,
 'id': 3,
 'result': [{'code': 0,
             'did': 'sweep:cloth-state',
             'piid': 4,
             'siid': 7,
             'value': 1},
            {'code': 0,
             'did': 'sweep:suction-state',
             'piid': 5,
             'siid': 7,
             'value': 1},
            {'code': 0,
             'did': 'sweep:water-state',
             'piid': 6,
             'siid': 7,
             'value': 1},
            {'code': 0,
             'did': 'sweep:mop-route',
             'piid': 7,
             'siid': 7,
             'value': 1},
            {'code': 0,
             'did': 'sweep:side-brush-life',
             'piid': 8,
             'siid': 7,
             'value': 96},
            {'code': 0,
             'did': 'sweep:side-brush-hours',
             'piid': 9,
             'siid': 7,
             'value': 173},
            {'code': 0,
             'did': 'sweep:main-brush-life',
             'piid': 10,
             'siid': 7,
             'value': 98},
            {'code': 0,
             'did': 'sweep:main-brush-hours',
             'piid': 11,
             'siid': 7,
             'value': 353},
            {'code': 0,
             'did': 'sweep:hypa-life',
             'piid': 12,
             'siid': 7,
             'value': 96},
            {'code': 0,
             'did': 'sweep:hypa-hours',
             'piid': 13,
             'siid': 7,
             'value': 173}]}
DEBUG:miio.miioprotocol:192.168.1.183:54321 >>: {'id': 4,
 'method': 'get_properties',
 'params': [{'did': 'sweep:mop-life', 'piid': 14, 'siid': 7},
            {'did': 'sweep:mop-hours', 'piid': 15, 'siid': 7},
            {'did': 'sweep:time-zone', 'piid': 20, 'siid': 7},
            {'did': 'sweep:cur-lang', 'piid': 21, 'siid': 7},
            {'did': 'sweep:cleaning-time', 'piid': 22, 'siid': 7},
            {'did': 'sweep:cleaning-area', 'piid': 23, 'siid': 7},
            {'did': 'sweep:dirt-recognize', 'piid': 35, 'siid': 7},
            {'did': 'sweep:pet-recognize', 'piid': 36, 'siid': 7},
            {'did': 'sweep:ai-recognize', 'piid': 42, 'siid': 7},
            {'did': 'sweep:carpet-booster', 'piid': 44, 'siid': 7}]}
DEBUG:miio.miioprotocol:192.168.1.183:54321 (ts: 1970-01-09 11:59:35+00:00, id: 4) << {'exe_time': 12,
 'id': 4,
 'result': [{'code': 0,
             'did': 'sweep:mop-life',
             'piid': 14,
             'siid': 7,
             'value': 96},
            {'code': 0,
             'did': 'sweep:mop-hours',
             'piid': 15,
             'siid': 7,
             'value': 174},
            {'code': 0,
             'did': 'sweep:time-zone',
             'piid': 20,
             'siid': 7,
             'value': -7200},
            {'code': 0,
             'did': 'sweep:cur-lang',
             'piid': 21,
             'siid': 7,
             'value': 'es_ES'},
            {'code': 0,
             'did': 'sweep:cleaning-time',
             'piid': 22,
             'siid': 7,
             'value': 22},
            {'code': 0,
             'did': 'sweep:cleaning-area',
             'piid': 23,
             'siid': 7,
             'value': 18},
            {'code': 0,
             'did': 'sweep:dirt-recognize',
             'piid': 35,
             'siid': 7,
             'value': 0},
            {'code': 0,
             'did': 'sweep:pet-recognize',
             'piid': 36,
             'siid': 7,
             'value': 0},
            {'code': 0,
             'did': 'sweep:ai-recognize',
             'piid': 42,
             'siid': 7,
             'value': 0},
            {'code': 0,
             'did': 'sweep:carpet-booster',
             'piid': 44,
             'siid': 7,
             'value': 0}]}
DEBUG:miio.miioprotocol:192.168.1.183:54321 >>: {'id': 5,
 'method': 'get_properties',
 'params': [{'did': 'sweep:multi-prop-vacuum', 'piid': 45, 'siid': 7},
            {'did': 'sweep:tank-shake', 'piid': 48, 'siid': 7},
            {'did': 'sweep:shake-shift', 'piid': 50, 'siid': 7},
            {'did': 'sweep:map-encrypt', 'piid': 55, 'siid': 7},
            {'did': 'order:all-enable-count', 'piid': 18, 'siid': 8},
            {'did': 'point-zone:target-point', 'piid': 5, 'siid': 9},
            {'did': 'map:remember-state', 'piid': 1, 'siid': 10},
            {'did': 'map:cur-map-id', 'piid': 2, 'siid': 10},
            {'did': 'map:map-num', 'piid': 3, 'siid': 10},
            {'did': 'map:cur-cleaning-path', 'piid': 5, 'siid': 10}]}
DEBUG:miio.miioprotocol:192.168.1.183:54321 (ts: 1970-01-09 11:59:35+00:00, id: 5) << {'exe_time': 175,
 'id': 5,
 'result': [{'code': 0,
             'did': 'sweep:multi-prop-vacuum',
             'piid': 45,
             'siid': 7,
             'value': '[0,3,1,1,1,1,-7200,22,18.7,0,"es_ES","475022SD2302A05234","es_ES",3,-1,0,0,1,2,1]'},
            {'code': 0,
             'did': 'sweep:tank-shake',
             'piid': 48,
             'siid': 7,
             'value': 1},
            {'code': 0,
             'did': 'sweep:shake-shift',
             'piid': 50,
             'siid': 7,
             'value': 2},
            {'code': 0,
             'did': 'sweep:map-encrypt',
             'piid': 55,
             'siid': 7,
             'value': 1},
            {'code': 0,
             'did': 'order:all-enable-count',
             'piid': 18,
             'siid': 8,
             'value': '[0,0]'},
            {'code': 0,
             'did': 'point-zone:target-point',
             'piid': 5,
             'siid': 9,
             'value': '[1100,1100]'},
            {'code': 0,
             'did': 'map:remember-state',
             'piid': 1,
             'siid': 10,
             'value': 1},
            {'code': 0,
             'did': 'map:cur-map-id',
             'piid': 2,
             'siid': 10,
             'value': 1694855393},
            {'code': 0,
             'did': 'map:map-num',
             'piid': 3,
             'siid': 10,
             'value': 1},
            {'code': 0, 'did': 'map:cur-cleaning-path', 'piid': 5, 'siid': 10}]}
DEBUG:miio.miioprotocol:192.168.1.183:54321 >>: {'id': 6,
 'method': 'get_properties',
 'params': [{'did': 'map:build-map', 'piid': 14, 'siid': 10},
            {'did': 'map:has-new-map', 'piid': 19, 'siid': 10},
            {'did': 'disturb:dnd-enable', 'piid': 1, 'siid': 12},
            {'did': 'disturb:dnd-start-hour', 'piid': 2, 'siid': 12},
            {'did': 'disturb:dnd-start-minute', 'piid': 3, 'siid': 12},
            {'did': 'disturb:dnd-end-hour', 'piid': 4, 'siid': 12},
            {'did': 'disturb:dnd-end-minute', 'piid': 5, 'siid': 12},
            {'did': 'disturb:multi-prop-dnd', 'piid': 7, 'siid': 12}]}
DEBUG:miio.miioprotocol:192.168.1.183:54321 (ts: 1970-01-09 11:59:35+00:00, id: 6) << {'exe_time': 10,
 'id': 6,
 'result': [{'code': 0,
             'did': 'map:build-map',
             'piid': 14,
             'siid': 10,
             'value': 0},
            {'code': 0,
             'did': 'map:has-new-map',
             'piid': 19,
             'siid': 10,
             'value': 0},
            {'code': 0,
             'did': 'disturb:dnd-enable',
             'piid': 1,
             'siid': 12,
             'value': 0},
            {'code': 0,
             'did': 'disturb:dnd-start-hour',
             'piid': 2,
             'siid': 12,
             'value': 23},
            {'code': 0,
             'did': 'disturb:dnd-start-minute',
             'piid': 3,
             'siid': 12,
             'value': 0},
            {'code': 0,
             'did': 'disturb:dnd-end-hour',
             'piid': 4,
             'siid': 12,
             'value': 9},
            {'code': 0,
             'did': 'disturb:dnd-end-minute',
             'piid': 5,
             'siid': 12,
             'value': 0},
            {'code': 0,
             'did': 'disturb:multi-prop-dnd',
             'piid': 7,
             'siid': 12,
             'value': '[0,23,0,9,0]'}]}
ERROR:miio.click_common:Exception: 'value'
Traceback (most recent call last):
  File "/home/fran/.local/lib/python3.10/site-packages/miio/click_common.py", line 54, in __call__
    return self.main(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/click/core.py", line 1053, in main
    rv = self.invoke(ctx)
  File "/usr/lib/python3/dist-packages/click/core.py", line 1659, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3/dist-packages/click/core.py", line 1659, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3/dist-packages/click/core.py", line 1395, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/lib/python3/dist-packages/click/core.py", line 754, in invoke
    return __callback(*args, **kwargs)
  File "/home/fran/.local/lib/python3.10/site-packages/miio/click_common.py", line 305, in wrap
    result = kwargs["result"] = func(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/click/decorators.py", line 84, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/click/core.py", line 754, in invoke
    return __callback(*args, **kwargs)
  File "/home/fran/.local/lib/python3.10/site-packages/miio/click_common.py", line 270, in command_callback
    return miio_command.call(miio_device, *args, **kwargs)
  File "/home/fran/.local/lib/python3.10/site-packages/miio/click_common.py", line 218, in call
    return method(*args, **kwargs)
  File "/home/fran/.local/lib/python3.10/site-packages/miio/click_common.py", line 185, in _wrap
    return func(self, *args, **kwargs)
  File "/home/fran/.local/lib/python3.10/site-packages/miio/integrations/genericmiot/genericmiot.py", line 87, in status
    return GenericMiotStatus(response, self)
  File "/home/fran/.local/lib/python3.10/site-packages/miio/integrations/genericmiot/status.py", line 20, in __init__
    self._data = {elem["did"]: elem["value"] for elem in response}
  File "/home/fran/.local/lib/python3.10/site-packages/miio/integrations/genericmiot/status.py", line 20, in <dictcomp>
    self._data = {elem["did"]: elem["value"] for elem in response}
KeyError: 'value'
rytilahti commented 10 months ago

@f-vicente the debug log was very helpful, there was a property in the response that did not contain a value. That was something I was not expecting as I have been only testing against a simulator built by myself. Feel free to test if #1830 fixes the issue for you and report back in that PR!

rytilahti commented 10 months ago

@tomitomas feel free to test either of those linked PRs. One should fix the dreamevacuum and another one the genericmiot variants.