SmartIR icon indicating copy to clipboard operation
SmartIR copied to clipboard

1.17.7 MQTT payload errors

Open madjetey opened this issue 1 year ago • 4 comments

Running HA OS 10.3 with supervisor 2023.6.2 and while I didn't note when this started I'll run a downgrade on SmartIR as a test & update.

Sending MQTT commands to devices created in SmartIR json gives the following error for either media players or climate devices:

This error originated from a custom integration.

Logger: custom_components.smartir.media_player
Source: core.py:1864 
Integration: SmartIR (documentation) 
First occurred: 17:41:41 (20 occurrences) 
Last logged: 19:41:20

value should be a string for dictionary value @ data['payload']
Traceback (most recent call last):
  File "/config/custom_components/smartir/media_player.py", line 289, in send_command
    await self._controller.send(command)
  File "/config/custom_components/smartir/controller.py", line 151, in send
    await self.hass.services.async_call(
  File "/usr/src/homeassistant/homeassistant/core.py", line 1864, in async_call
    processed_data: dict[str, Any] = handler.schema(service_data)
                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/voluptuous/validators.py", line 232, in __call__
    return self._exec((Schema(val) for val in self.validators), v)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/voluptuous/validators.py", line 355, in _exec
    raise e if self.msg is None else AllInvalid(self.msg, path=path)
  File "/usr/local/lib/python3.11/site-packages/voluptuous/validators.py", line 351, in _exec
    v = func(v)
        ^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/voluptuous/schema_builder.py", line 272, in __call__
    return self._compiled([], data)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/voluptuous/schema_builder.py", line 818, in validate_callable
    return schema(data)
           ^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/voluptuous/schema_builder.py", line 272, in __call__
    return self._compiled([], data)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/voluptuous/schema_builder.py", line 595, in validate_dict
    return base_validate(path, iteritems(data), out)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/voluptuous/schema_builder.py", line 433, in validate_mapping
    raise er.MultipleInvalid(errors)
voluptuous.error.MultipleInvalid: value should be a string for dictionary value @ data['payload']

Below is an example of one of my json files:

{
	"manufacturer": "Panasonic",
	"supportedModels": [
		"LC-40SH340K"
	],
	"supportedController": "MQTT",
	"commandsEncoding": "Raw",
	"commands": {
		"off": {"ir_code_to_send":"C9INzQbXAdcBhwElBUAFBYcBHQKHAUAJ4BcDQC8D1wGHAeAJA0ABwBcB1wHgESfAIwGHAcAjASUFQAMA1yAHQAMDhwHXAYADBSUF1wHXAYAHQAsBJQVACwWHAdcBhwFABwH//0DHAYcBQLtAD0AX4B8DQC9AN+AXL+AbJ0AjQEdAB+ADA0ATQANAE8AHQAvAAwcdAocBJQWHAQ=="},
        "on": {"ir_code_to_send":"BaQN0gbOAUABByYFzgHOAYUBgANAAcAL4AkHB/0BhQEmBYUBQAfAH+ADC4ATQAEJhQEmBc4BzgGFAeATA8AjQAeAA4ALA84BhQFAAwUmBc4BzgGAB0ALwAMBzgGAEwH//0DHAYUBQIMDJgWFAUAHQAMDzgGFAUAHQAPAC0AHQAPAE8Av4AMT4AsL4AMnQB9AA0BDQAPAC0AjQAtAB+ADA8AjQBPgDx9AGwH//0DHBc4BzgGFAUAPwDdAD+ADC+ALD0AvQBcAziAB4AcrA84BhQHAEwcmBc4BzgGFAeADA0AbQAPAEwMmBYUBQA8CJgXOoANACwOFAc4BgANAC4AfAYUB4AMDB84BhQEmBYUB"},
		"volumeUp": {"ir_code_to_send":"BaINwAbRAUABCB4F0QHRAYgB0WABQAfgDwNAAQGIAeABLwKIAdFgAUAHgAMD+AGIAcAL4AUnAYgB4B8DAx4FiAHgA0fgBzcFHgXRAdEBgAcB//9AxwGIAUAvBR4FiAHRAYADQA/gBwvgBxNAL+AHE8APwAdAQ+ALJ0AXQAPgAyfgAwtAG+AHN0ATQANAJ0ADCx4FiAHRAYgBHgWIAQ=="},
		"volumeDown": {"ir_code_to_send":"BYgN2gbYAUABBxIF2AHYAYgB4B8D4B8v4Bsn4Asj4AMT4AMLwJ8DEgWIAUALQAcH//+IDdoGiAGADwPYARcCgAsB2AHgGQMDEgWIAeAfJ+AXV0BL4Acj4AMT4AMLwHMLEgWIARcCiAESBYgB"}
		}
}

madjetey avatar Jun 19 '23 19:06 madjetey

Issue is persistent after downgrades but apparently the key error is value should be a string for dictionary value @ data[‘payload’] To fix change line 148 in controller.py to

'payload': json.dumps(command).

Found the solution here

madjetey avatar Jun 19 '23 20:06 madjetey

Can you send me the json file please?

vassilis-panos avatar Jun 19 '23 21:06 vassilis-panos

Can you send me the json file please?

https://pastebin.com/Tw9XGJtY

https://pastebin.com/2AqD07e1

madjetey avatar Jun 21 '23 10:06 madjetey

Had the same issue, you should wrap it all as string and escape the double quotes.. for example: "off": "{\"ir_code_to_send\":\"E/cLiQ+wB6gEuAOwB7gDCASwBwgEQAfgCQMJsAe4AwgEsAcIBEAH4CsDwAEHuAOwB7AHCASAewEIBEAPB7gDCASwBwgEQAfgCQMJsAe4AwgEsAcIBEAH4DUDBbAHsAcIBOBbe0ABAbgD4AMDB7AHsAcIBIkP\"}",

yoavipm avatar Sep 27 '23 20:09 yoavipm