-
-
Notifications
You must be signed in to change notification settings - Fork 585
Open
Labels
Description
I have one of those rather new Xiaomi Smart Tower Fan 2 devices.
They are supported by the genericmiio command, but parsing the spec throws and error in pydantic:
(.venv) daubsi@t14:/tmp/.venv$ bin/miiocli genericmiot --ip 192.168.0.22 --token xxxx settings
Running command settings
ERROR:miio.click_common:Exception: 14 validation errors for DeviceModel
services -> 0 -> properties -> 0 -> source
extra fields not permitted (type=value_error.extra)
services -> 0 -> properties -> 1 -> source
extra fields not permitted (type=value_error.extra)
services -> 0 -> properties -> 2 -> source
extra fields not permitted (type=value_error.extra)
services -> 0 -> properties -> 3 -> source
extra fields not permitted (type=value_error.extra)
services -> 0 -> properties -> 4 -> source
extra fields not permitted (type=value_error.extra)
services -> 1 -> properties -> 0 -> source
extra fields not permitted (type=value_error.extra)
services -> 1 -> properties -> 1 -> source
extra fields not permitted (type=value_error.extra)
services -> 1 -> properties -> 2 -> source
extra fields not permitted (type=value_error.extra)
services -> 1 -> properties -> 3 -> source
extra fields not permitted (type=value_error.extra)
services -> 1 -> properties -> 4 -> source
extra fields not permitted (type=value_error.extra)
services -> 1 -> properties -> 5 -> source
extra fields not permitted (type=value_error.extra)
services -> 1 -> properties -> 6 -> source
extra fields not permitted (type=value_error.extra)
services -> 2 -> properties -> 0 -> source
extra fields not permitted (type=value_error.extra)
services -> 3 -> properties -> 0 -> source
extra fields not permitted (type=value_error.extra)
Traceback (most recent call last):
File "/tmp/.venv/lib/python3.12/site-packages/miio/click_common.py", line 55, in __call__
return self.main(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/.venv/lib/python3.12/site-packages/click/core.py", line 1059, in main
rv = self.invoke(ctx)
^^^^^^^^^^^^^^^^
File "/tmp/.venv/lib/python3.12/site-packages/click/core.py", line 1665, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/.venv/lib/python3.12/site-packages/click/core.py", line 1665, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/.venv/lib/python3.12/site-packages/click/core.py", line 1401, in invoke
return ctx.invoke(self.callback, **ctx.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/.venv/lib/python3.12/site-packages/click/core.py", line 767, in invoke
return __callback(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/.venv/lib/python3.12/site-packages/miio/click_common.py", line 306, in wrap
result = kwargs["result"] = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/tmp/.venv/lib/python3.12/site-packages/click/decorators.py", line 84, in new_func
return ctx.invoke(f, obj, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/.venv/lib/python3.12/site-packages/click/core.py", line 767, in invoke
return __callback(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/.venv/lib/python3.12/site-packages/miio/click_common.py", line 271, in command_callback
return miio_command.call(miio_device, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/.venv/lib/python3.12/site-packages/miio/click_common.py", line 219, in call
return method(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/.venv/lib/python3.12/site-packages/miio/click_common.py", line 186, in _wrap
return func(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/.venv/lib/python3.12/site-packages/miio/device.py", line 288, in settings
for k, v in self.descriptors().items()
^^^^^^^^^^^^^^^^^^
File "/tmp/.venv/lib/python3.12/site-packages/miio/click_common.py", line 186, in _wrap
return func(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/.venv/lib/python3.12/site-packages/miio/device.py", line 265, in descriptors
self._initialize_descriptors()
File "/tmp/.venv/lib/python3.12/site-packages/miio/integrations/genericmiot/genericmiot.py", line 143, in _initialize_descriptors
self.initialize_model()
File "/tmp/.venv/lib/python3.12/site-packages/miio/integrations/genericmiot/genericmiot.py", line 56, in initialize_model
self._miot_model = miotcloud.get_device_model(self.model)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/.venv/lib/python3.12/site-packages/miio/miot_cloud.py", line 90, in get_device_model
return DeviceModel.parse_obj(spec)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/.venv/lib/python3.12/site-packages/pydantic/v1/main.py", line 532, in parse_obj
return cls(**obj)
^^^^^^^^^^
File "/tmp/.venv/lib/python3.12/site-packages/miio/miot_models.py", line 456, in __init__
super().__init__(*args, **kwargs)
File "/tmp/.venv/lib/python3.12/site-packages/pydantic/v1/main.py", line 347, in __init__
raise validation_error
pydantic.v1.error_wrappers.ValidationError: 14 validation errors for DeviceModel
services -> 0 -> properties -> 0 -> source
extra fields not permitted (type=value_error.extra)
services -> 0 -> properties -> 1 -> source
extra fields not permitted (type=value_error.extra)
services -> 0 -> properties -> 2 -> source
extra fields not permitted (type=value_error.extra)
services -> 0 -> properties -> 3 -> source
extra fields not permitted (type=value_error.extra)
services -> 0 -> properties -> 4 -> source
extra fields not permitted (type=value_error.extra)
services -> 1 -> properties -> 0 -> source
extra fields not permitted (type=value_error.extra)
services -> 1 -> properties -> 1 -> source
extra fields not permitted (type=value_error.extra)
services -> 1 -> properties -> 2 -> source
extra fields not permitted (type=value_error.extra)
services -> 1 -> properties -> 3 -> source
extra fields not permitted (type=value_error.extra)
services -> 1 -> properties -> 4 -> source
extra fields not permitted (type=value_error.extra)
services -> 1 -> properties -> 5 -> source
extra fields not permitted (type=value_error.extra)
services -> 1 -> properties -> 6 -> source
extra fields not permitted (type=value_error.extra)
services -> 2 -> properties -> 0 -> source
extra fields not permitted (type=value_error.extra)
services -> 3 -> properties -> 0 -> source
extra fields not permitted (type=value_error.extra)
Commenting thes lines 347,348
if validation_error:
raise validation_error
in pydantic/v1/main.py
makes everything work fine (all commands for genericmiio work), but ofc the exceptions are probably here for a reason. What exactly it is complaining about?
"services -> 3 -> properties -> 0 -> source
extra fields not permitted (type=value_error.extra)"