mastercheef
Die kleine Analyse deiner Payload steht unten.
Ich verwende gerne ein Skript, in welchem ich sowohl Topic als auch die Nachrichtenstruktur (Payload) nach meinen Wünschen in der Subscriber Funktion festlegen kann. Du verwendest die von der Firmware bereitgestellte MQTT Kommunikation. Diese Implementation bildet eine Peer to Peer Kommunikation über den Broker nach, weshalb die Payload komplexer ist, als dies bei üblicher MQTT Kommunikation der Fall ist.
Ich habe in einem meiner Node-RED Flows mal nachgeschaut. Dies ist eine funktionierende Testnachricht.
{"id":"switch_off","src":"smartcenter","method":"Switch.Set","params":{"id":0,"on":false}}"
Die vordere id- und die src-Komponente sind ausschließlich für die Geräte zu Geräte Kommunikation erforderlich/zielführend. Beide Komponenten setzt die Shelly Firmware in ihrer Rücknachricht ein, damit der Empfänger per id erkennen kann, zu welchem Auftrag (RPC) die Rücknachricht gehört. Antwort statt "Rücknachricht" wäre kein geeigneter MQTT Begriff.
src gibt an, von welchem Gerät die Nachricht stammt. In der Rücknachricht unter dst (destination) zu finden. Der src-Wert wird in der Rücknachricht im Topic verwendet, in meinem Beispiel Topic = "smartcenter/rpc". Dies muss man wissen, wenn man die Rücknachricht empfangen und ggf. auswerten will.
id wird in der vom Empfänger gesendeten Rücknachricht als Auftrags-id eingesetzt. Sie hat nichts mit der Komponenten-id des Shelly zu tun und ist frei wählbar. An Hand dieser id kann der Empfänger der Rücknachricht erkennen, zu welchem Auftrag letztere gehört.
Ab "method" beginnt der für den Schaltauftrag entscheidende Teil der Payload. Nach der Shelly-Doku sind alle Parameter außer params.id optional. Damit müssen auch Schaltzustand und Helligkeit in einer Nachricht auf dem Shelly verarbeitet werden.
Hast du mal einen MQTT Protokollierer (MQTT Explorer bspw.) genutzt, um die Kommunikation zu beobachten?
{ "id": 0, "src": "mqtt_client", "method": "Light.Set", "params": { "id": 0, "on": true, "brightness": 55 } }
Ein id-Wert (vorne) 0 ist kein String. Hier ist ein String erforderlich/vorgesehen - ob dies auch mit einer Number gelingt, habe ich allerdings nicht getestet. Der src-Wert sollte auf das Auftrag gebende Gerät hinweisen, damit es menschlich verständlich ist. "mqtt_client" erscheint mir nicht wirklich erhellend.
Hier täte "Loxberry" besser passen.
Ich hoffe, nicht verwirrt und ein wenig Licht in deine Angelegenheit gebracht zu haben.