Skip to content

Error: Unable to parse message payload #1411

@heyjared

Description

@heyjared

Describe the bug
JSON parsing fails when the value returned from device is 00.

Version information (please complete the following information):

  • OS: Linux
  • python-miio: master (31c5d74)

Device information:
If the issue is specific to a device:

  • Model: 090615.curtain.jldj03
  • Hardware version: esp8266
  • Firmware version: 2.1.2

To Reproduce
Steps to reproduce the behavior:

  1. miiocli -d miotdevice --ip x.x.x.x --token xxx get_property_by 2 1

Expected behavior
A clear and concise description of what you expected to happen.

Console output

INFO:miio.cli:Debug mode active
WARNING:miio.miot_device:Neither the class nor the parameter defines the mapping
Running command get_property_by
DEBUG:miio.click_common:Unknown model, trying autodetection. None None
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\x0e\x80h\xd9\x00:\xa8\xed' (total 16)
        value = Container:
            length = 32
            unknown = 0
            device_id = unhexlify('0e8068d9')
            ts = 1970-02-14 11:52:13
        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 0e8068d9 with ts: 1970-02-14 11:52:13, token: b'ffffffffffffffffffffffffffffffff'
DEBUG:miio.miioprotocol:x.x.x.x:54321 >>: {'id': 1, 'method': 'miIO.info', 'params': []}
DEBUG:miio.miioprotocol:x.x.x.x:54321 (ts: 1970-02-14 11:52:13, id: 1) << {'id': 1, 'result': {'life': 3844333, 'uid': 2489088409, 'model': '090615.curtain.jldj03', 'token': 'xxx', 'ipflag': 1, 'fw_ver': '2.1.2', 'mcu_fw_ver': '0006', 'miio_ver': '0.0.8', 'hw_ver': 'esp8266', 'mmfree': 23784, 'mac': 'xxx', 'wifi_fw_ver': 'e0ed3c4', 'ap': {'ssid': 'xxx', 'bssid': 'xxx', 'rssi': -74, 'primary': 11}, 'netif': {'localIp': 'x.x.x.x', 'mask': '255.255.255.0', 'gw': 'x.x.x.x'}}, 'exe_time': 40}
DEBUG:miio.device:Detected model 090615.curtain.jldj03
DEBUG:miio.miioprotocol:x.x.x.x:54321 >>: {'id': 2, 'method': 'get_properties', 'params': [{'did': '2-1', 'siid': 2, 'piid': 1}]}
DEBUG:miio.protocol:Unable to parse json '{"id":2,"result":[{"did":"2-1","siid":2,"piid":1,"code":0,"value":00}],"exe_time":420}': Expecting ',' delimiter: line 1 column 68 (char 67)
DEBUG:miio.click_common:Exception: Unable to parse message payload
Traceback (most recent call last):
  File "/usr/lib/python3.9/site-packages/miio/protocol.py", line 195, in _decode
    return json.loads(decoded)
  File "/usr/lib/python3.9/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.9/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.9/json/decoder.py", line 353, in raw_decode
    obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting ',' delimiter: line 1 column 68 (char 67)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/lib/python3.9/site-packages/miio/click_common.py", line 51, in __call__
    return self.main(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3.9/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3.9/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/miio/click_common.py", line 305, in wrap
    kwargs["result"] = func(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/click/decorators.py", line 84, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/miio/click_common.py", line 270, in command_callback
    return miio_command.call(miio_device, *args, **kwargs)
  File "/usr/lib/python3.9/site-packages/miio/click_common.py", line 217, in call
    return method(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/miio/click_common.py", line 184, in _wrap
    return func(self, *args, **kwargs)
  File "/usr/lib/python3.9/site-packages/miio/miot_device.py", line 117, in get_property_by
    return self.send(
  File "/usr/lib/python3.9/site-packages/miio/device.py", line 107, in send
    return self._protocol.send(
  File "/usr/lib/python3.9/site-packages/miio/miioprotocol.py", line 194, in send
    m = Message.parse(data, token=self.token)
  File "/usr/lib/python3.9/site-packages/construct/core.py", line 288, in parse
    return self.parse_stream(io.BytesIO(data), **contextkw)
  File "/usr/lib/python3.9/site-packages/construct/core.py", line 300, in parse_stream
    return self._parsereport(stream, context, "(parsing)")
  File "/usr/lib/python3.9/site-packages/construct/core.py", line 312, in _parsereport
    obj = self._parse(stream, context, path)
  File "/usr/lib/python3.9/site-packages/construct/core.py", line 1981, in _parse
    subobj = sc._parsereport(stream, context, path)
  File "/usr/lib/python3.9/site-packages/construct/core.py", line 312, in _parsereport
    obj = self._parse(stream, context, path)
  File "/usr/lib/python3.9/site-packages/construct/core.py", line 2439, in _parse
    return self.subcon._parsereport(stream, context, path)
  File "/usr/lib/python3.9/site-packages/construct/core.py", line 312, in _parsereport
    obj = self._parse(stream, context, path)
  File "/usr/lib/python3.9/site-packages/construct/core.py", line 3987, in _parse
    obj = self.subcon._parsereport(stream, context, path)
  File "/usr/lib/python3.9/site-packages/construct/core.py", line 312, in _parsereport
    obj = self._parse(stream, context, path)
  File "/usr/lib/python3.9/site-packages/construct/core.py", line 4265, in _parse
    obj = self.subcon._parsereport(stream, context, path)
  File "/usr/lib/python3.9/site-packages/construct/core.py", line 312, in _parsereport
    obj = self._parse(stream, context, path)
  File "/usr/lib/python3.9/site-packages/construct/core.py", line 698, in _parse
    return self._decode(obj, context, path)
  File "/usr/lib/python3.9/site-packages/miio/protocol.py", line 201, in _decode
    raise PayloadDecodeException(
miio.exceptions.PayloadDecodeException: Unable to parse message payload
Error: Unable to parse message payload

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions