Closed
Description
Hi
I got today a new Xiaomi Mi Robot Vacuum
(V1) and wan't to install a custom firmware (Valetudo).
But fail with some errors.
I already did this about a year ago with an other cleaner of the same type which worked fine.
The robot is on accesspoint mode (192.168.8.1).
I'm connected with an debian laptop.
mirobo --version
mirobo, version 0.5.3
miiocli --version
miiocli, version 0.5.3
At first I get the token which works fine:
mirobo --debug discover --handshake true
INFO:miio.vacuum_cli:Debug mode active
INFO:miio.miioprotocol:Sending discovery to <broadcast> with timeout of 5s..
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\x13\x17y\x85\x00\x00\x07\xf9' (total 16)
value = Container:
length = 32
unknown = 0
device_id = unhexlify('13177985')
ts = 1970-01-01 00:34:01
offset1 = 0
offset2 = 16
length = 16
checksum = b'zBKBIF7b8IUd53zl' (total 16)
INFO:miio.miioprotocol: IP 192.168.8.1 (ID: 13177985) - token: b'XXXXXXXXXMyTokenXXXXXXXXXXXX'
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\x13\x17y\x85\x00\x00\x07\xf9' (total 16)
value = Container:
length = 32
unknown = 0
device_id = unhexlify('13177985')
ts = 1970-01-01 00:34:01
offset1 = 0
offset2 = 16
length = 16
checksum = b'zBKBIF7b8IUd53zl' (total 16)
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\x13\x17y\x85\x00\x00\x07\xf9' (total 16)
value = Container:
length = 32
unknown = 0
device_id = unhexlify('13177985')
ts = 1970-01-01 00:34:01
offset1 = 0
offset2 = 16
length = 16
checksum = b'zBKBIF7b8IUd53zl' (total 16)
After that I did some simple tests:
miiocli vacuum --ip 192.168.8.1 --token XXXXXXXXXMyTokenXXXXXXXXXXXX status
Running command status
<VacuumStatus state=Charging, error=No error bat=73%, fan=60% cleaned 0.0 m² in 0:00:00>
miiocli vacuum --ip 192.168.8.1 --token XXXXXXXXXMyTokenXXXXXXXXXXXX consumable_status
Running command consumable_status
<ConsumableStatus main: 0:00:00, side: 0:00:00, filter: 0:00:00, sensor dirty: 0:00:00>
But device info and vacuum info fails:
miiocli --debug device --ip 192.168.8.1 --token XXXXXXXXXMyTokenXXXXXXXXXXXX info
INFO:miio.cli:Debug mode active
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\x13\x17y\x85\x00\x00\x0c\x8d' (total 16)
value = Container:
length = 32
unknown = 0
device_id = unhexlify('13177985')
ts = 1970-01-01 00:53:33
offset1 = 0
offset2 = 16
length = 16
checksum = b'zBKBIF7b8IUd53zl' (total 16)
DEBUG:miio.miioprotocol:Discovered 13177985 with ts: 1970-01-01 00:53:33, token: b'XXXXXXXXXMyTokenXXXXXXXXXXXX'
DEBUG:miio.miioprotocol:192.168.8.1:54321 >>: {'id': 1, 'method': 'miIO.info', 'params': []}
DEBUG:miio.protocol:Unable to parse json '': Expecting value: line 1 column 1 (char 0)
DEBUG:miio.click_common:Exception: Unable to request miIO.info from the device
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/miio/protocol.py", line 193, in _decode
return json.loads(decoded)
File "/usr/lib/python3.6/json/__init__.py", line 354, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.6/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.6/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/miio/device.py", line 182, in info
return DeviceInfo(self.send("miIO.info"))
File "/usr/local/lib/python3.6/dist-packages/miio/device.py", line 147, in send
command, parameters, retry_count, extra_parameters=extra_parameters
File "/usr/local/lib/python3.6/dist-packages/miio/miioprotocol.py", line 193, in send
m = Message.parse(data, token=self.token)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 288, in parse
return self.parse_stream(io.BytesIO(data), **contextkw)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 300, in parse_stream
return self._parsereport(stream, context, "(parsing)")
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 1981, in _parse
subobj = sc._parsereport(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 2439, in _parse
return self.subcon._parsereport(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 3987, in _parse
obj = self.subcon._parsereport(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 4265, in _parse
obj = self.subcon._parsereport(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 698, in _parse
return self._decode(obj, context, path)
File "/usr/local/lib/python3.6/dist-packages/miio/protocol.py", line 201, in _decode
) from ex
miio.exceptions.PayloadDecodeException: Unable to parse message payload
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/miio/click_common.py", line 59, in __call__
return self.main(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 782, in main
rv = self.invoke(ctx)
File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/miio/click_common.py", line 280, in wrap
kwargs["result"] = func(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/click/decorators.py", line 73, in new_func
return ctx.invoke(f, obj, *args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/miio/click_common.py", line 245, in command_callback
return miio_command.call(miio_device, *args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/miio/click_common.py", line 193, in call
return method(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/miio/device.py", line 186, in info
) from ex
miio.exceptions.DeviceInfoUnavailableException: Unable to request miIO.info from the device
Error: Unable to request miIO.info from the device
miiocli --debug vacuum --ip 192.168.8.1 --token XXXXXXXXXMyTokenXXXXXXXXXXXX info
INFO:miio.cli:Debug mode active
DEBUG:miio.vacuum:Read stored sequence ids: {'seq': 749, 'manual_seq': 0}
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\x13\x17y\x85\x00\x00\x0cc' (total 16)
value = Container:
length = 32
unknown = 0
device_id = unhexlify('13177985')
ts = 1970-01-01 00:52:51
offset1 = 0
offset2 = 16
length = 16
checksum = b'zBKBIF7b8IUd53zl' (total 16)
DEBUG:miio.miioprotocol:Discovered 13177985 with ts: 1970-01-01 00:52:51, token: b'XXXXXXXXXMyTokenXXXXXXXXXXXX'
DEBUG:miio.miioprotocol:192.168.8.1:54321 >>: {'id': 750, 'method': 'miIO.info', 'params': []}
DEBUG:miio.protocol:Unable to parse json '': Expecting value: line 1 column 1 (char 0)
DEBUG:miio.click_common:Exception: Unable to request miIO.info from the device
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/miio/protocol.py", line 193, in _decode
return json.loads(decoded)
File "/usr/lib/python3.6/json/__init__.py", line 354, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.6/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.6/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/miio/device.py", line 182, in info
return DeviceInfo(self.send("miIO.info"))
File "/usr/local/lib/python3.6/dist-packages/miio/device.py", line 147, in send
command, parameters, retry_count, extra_parameters=extra_parameters
File "/usr/local/lib/python3.6/dist-packages/miio/miioprotocol.py", line 193, in send
m = Message.parse(data, token=self.token)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 288, in parse
return self.parse_stream(io.BytesIO(data), **contextkw)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 300, in parse_stream
return self._parsereport(stream, context, "(parsing)")
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 1981, in _parse
subobj = sc._parsereport(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 2439, in _parse
return self.subcon._parsereport(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 3987, in _parse
obj = self.subcon._parsereport(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 4265, in _parse
obj = self.subcon._parsereport(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 698, in _parse
return self._decode(obj, context, path)
File "/usr/local/lib/python3.6/dist-packages/miio/protocol.py", line 201, in _decode
) from ex
miio.exceptions.PayloadDecodeException: Unable to parse message payload
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/miio/click_common.py", line 59, in __call__
return self.main(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 782, in main
rv = self.invoke(ctx)
File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/miio/click_common.py", line 280, in wrap
kwargs["result"] = func(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/click/decorators.py", line 73, in new_func
return ctx.invoke(f, obj, *args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/miio/click_common.py", line 245, in command_callback
return miio_command.call(miio_device, *args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/miio/click_common.py", line 193, in call
return method(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/miio/device.py", line 186, in info
) from ex
miio.exceptions.DeviceInfoUnavailableException: Unable to request miIO.info from the device
Error: Unable to request miIO.info from the device
Also the firmware update fails:
mirobo --debug --ip 192.168.8.1 --token XXXXXXXXXMyTokenXXXXXXXXXXXX update-firmware v11_004018.pkg
INFO:miio.vacuum_cli:Debug mode active
DEBUG:miio.vacuum_cli:Read stored sequence ids: {'seq': 749, 'manual_seq': 0}
DEBUG:miio.vacuum_cli:Connecting to 192.168.8.1 with token XXXXXXXXXMyTokenXXXXXXXXXXXX
Going to update from v11_004018.pkg
INFO:miio.updater:Serving on 0.0.0.0:35375, timeout 10
INFO:miio.updater:Using local v11_004018.pkg (md5: 270d06419cb00300fac8b15a0619ccfc)
DEBUG:miio.updater:available interfaces: ['enp0s31f6', 'enp0s20f0u9c2', 'wlp2s0']
DEBUG:miio.updater:enp0s31f6 has no ipv4 addresses, skipping
DEBUG:miio.updater:enp0s20f0u9c2 has no ipv4 addresses, skipping
DEBUG:miio.updater:Got addr: 192.168.8.150
Hosting file at http://192.168.8.150:35375/v11_004018.pkg
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\x13\x17y\x85\x00\x00\x0e\x00' (total 16)
value = Container:
length = 32
unknown = 0
device_id = unhexlify('13177985')
ts = 1970-01-01 00:59:44
offset1 = 0
offset2 = 16
length = 16
checksum = b'zBKBIF7b8IUd53zl' (total 16)
DEBUG:miio.miioprotocol:Discovered 13177985 with ts: 1970-01-01 00:59:44, token: b'XXXXXXXXXMyTokenXXXXXXXXXXXX'
DEBUG:miio.miioprotocol:192.168.8.1:54321 >>: {'id': 750, 'method': 'miIO.ota', 'params': {'mode': 'normal', 'install': '1', 'app_url': 'http://192.168.8.150:35375/v11_004018.pkg', 'file_md5': '270d06419cb00300fac8b15a0619ccfc', 'proc': 'dnld install'}}
DEBUG:miio.protocol:Unable to parse json '': Expecting value: line 1 column 1 (char 0)
DEBUG:miio.click_common:Exception: Unable to parse message payload
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/miio/protocol.py", line 193, in _decode
return json.loads(decoded)
File "/usr/lib/python3.6/json/__init__.py", line 354, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.6/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.6/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/miio/click_common.py", line 59, in __call__
return self.main(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 782, in main
rv = self.invoke(ctx)
File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/click/decorators.py", line 73, in new_func
return ctx.invoke(f, obj, *args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/miio/vacuum_cli.py", line 610, in update_firmware
update_res = vac.update(url, md5)
File "/usr/local/lib/python3.6/dist-packages/miio/device.py", line 197, in update
return self.send("miIO.ota", payload)[0] == "ok"
File "/usr/local/lib/python3.6/dist-packages/miio/device.py", line 147, in send
command, parameters, retry_count, extra_parameters=extra_parameters
File "/usr/local/lib/python3.6/dist-packages/miio/miioprotocol.py", line 193, in send
m = Message.parse(data, token=self.token)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 288, in parse
return self.parse_stream(io.BytesIO(data), **contextkw)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 300, in parse_stream
return self._parsereport(stream, context, "(parsing)")
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 1981, in _parse
subobj = sc._parsereport(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 2439, in _parse
return self.subcon._parsereport(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 3987, in _parse
obj = self.subcon._parsereport(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 4265, in _parse
obj = self.subcon._parsereport(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "/usr/local/lib/python3.6/dist-packages/construct/core.py", line 698, in _parse
return self._decode(obj, context, path)
File "/usr/local/lib/python3.6/dist-packages/miio/protocol.py", line 201, in _decode
) from ex
miio.exceptions.PayloadDecodeException: Unable to parse message payload
Error: Unable to parse message payload
ERROR:miio.updater:No request was made..
Do I something wrong?
Is maybe the firmware version to new? (How do I get the current firmware version?)
If the firmware is to new, is there info I can provide to fix this?