[NodeRed] Werte ShellyPlus 1PM aus MQTT extrahieren und Aktion auslösen - inkl. kl. Howto

  • Hallo zusammen,

    nachdem ich hier schon das Auslesen und Verarbeiten des Schaltstatus des Shelly Plus 1 und Plus 1PM mittels eines Workarounds beschrieben habe, geht es hier nun um die Werte des Shelly Plus 1 PM.



    Es ist mir wichtig, mich an dieser Stelle beim User mickym aus dem ioBroker Forum zu bedanken. Er hat mir den Lösungsweg aufgezeigt und wichtige Hinweise und Erklärungen gegeben. :thumbup:

    Im Flow endet dies in der Ausgabe der 3 Debug-Nodes ganz rechts. Stattdessen kann man natürlich einfach z.B. einen eMail-Node oder einen "ioBroker-out"-Node setzen, um weitere Aktionen auszuführen. ;)

    Hier nun der neue Flow zum Parsen der Werte Schaltzustand des Ausgangs, Spannungswert und Leistungswert.

    Bildschirmfoto vom 2021-09-25 14-38-20.png

    der Flow zum Importieren:

    Spoiler anzeigen

    [

    {

    "id": "c423f322.c4806",

    "type": "tab",

    "label": "MQTT Test Shelly Plus 1PM",

    "disabled": false,

    "info": ""

    },

    {

    "id": "61a23899.cef4f",

    "type": "mqtt in",

    "z": "c423f322.c4806",

    "name": "",

    "topic": "shellyplus1pm-000000000000/events/rpc",

    "qos": "0",

    "datatype": "auto",

    "broker": "f56dd7d5.a4df",

    "nl": false,

    "rap": true,

    "rh": 0,

    "x": 260,

    "y": 400,

    "wires": [

    [

    "4e7d2b9c.0d0e7c",

    "b5b3af45.611e58"

    ]

    ]

    },

    {

    "id": "4e7d2b9c.0d0e7c",

    "type": "json",

    "z": "c423f322.c4806",

    "name": "",

    "property": "payload",

    "action": "",

    "pretty": false,

    "x": 550,

    "y": 400,

    "wires": [

    [

    "8742e4e8.808ff8",

    "6642339a.48223c",

    "de019655.b36f1",

    "7fda335c.d93144"

    ]

    ]

    },

    {

    "id": "8742e4e8.808ff8",

    "type": "debug",

    "z": "c423f322.c4806",

    "name": "",

    "active": true,

    "tosidebar": true,

    "console": false,

    "tostatus": false,

    "complete": "false",

    "statusVal": "",

    "statusType": "auto",

    "x": 770,

    "y": 300,

    "wires": []

    },

    {

    "id": "5fa6995e.2ec57",

    "type": "debug",

    "z": "c423f322.c4806",

    "name": "",

    "active": true,

    "tosidebar": true,

    "console": false,

    "tostatus": false,

    "complete": "false",

    "statusVal": "",

    "statusType": "auto",

    "x": 1010,

    "y": 400,

    "wires": []

    },

    {

    "id": "6642339a.48223c",

    "type": "change",

    "z": "c423f322.c4806",

    "name": "",

    "rules": [

    {

    "t": "set",

    "p": "payload",

    "pt": "msg",

    "to": "payload.params[\"switch:0\"].output",

    "tot": "msg"

    }

    ],

    "action": "",

    "property": "",

    "from": "",

    "to": "",

    "reg": false,

    "x": 790,

    "y": 400,

    "wires": [

    [

    "5fa6995e.2ec57"

    ]

    ]

    },

    {

    "id": "b5b3af45.611e58",

    "type": "debug",

    "z": "c423f322.c4806",

    "name": "",

    "active": false,

    "tosidebar": true,

    "console": false,

    "tostatus": false,

    "complete": "false",

    "statusVal": "",

    "statusType": "auto",

    "x": 550,

    "y": 300,

    "wires": []

    },

    {

    "id": "de019655.b36f1",

    "type": "change",

    "z": "c423f322.c4806",

    "name": "",

    "rules": [

    {

    "t": "set",

    "p": "payload",

    "pt": "msg",

    "to": "payload.params[\"switch:0\"].apower",

    "tot": "msg"

    }

    ],

    "action": "",

    "property": "",

    "from": "",

    "to": "",

    "reg": false,

    "x": 790,

    "y": 540,

    "wires": [

    [

    "7b0e25d7.36a7fc"

    ]

    ]

    },

    {

    "id": "33c470a3.c1785",

    "type": "comment",

    "z": "c423f322.c4806",

    "name": "Schaltstatus",

    "info": "",

    "x": 1010,

    "y": 360,

    "wires": []

    },

    {

    "id": "857691ed.988cd",

    "type": "comment",

    "z": "c423f322.c4806",

    "name": "Spannung",

    "info": "",

    "x": 1000,

    "y": 620,

    "wires": []

    },

    {

    "id": "92173f3c.c3c92",

    "type": "comment",

    "z": "c423f322.c4806",

    "name": "Leistung",

    "info": "",

    "x": 1000,

    "y": 500,

    "wires": []

    },

    {

    "id": "7b0e25d7.36a7fc",

    "type": "debug",

    "z": "c423f322.c4806",

    "name": "",

    "active": true,

    "tosidebar": true,

    "console": false,

    "tostatus": false,

    "complete": "false",

    "statusVal": "",

    "statusType": "auto",

    "x": 1010,

    "y": 540,

    "wires": []

    },

    {

    "id": "d3a0222c.5d24c",

    "type": "debug",

    "z": "c423f322.c4806",

    "name": "",

    "active": true,

    "tosidebar": true,

    "console": false,

    "tostatus": false,

    "complete": "false",

    "statusVal": "",

    "statusType": "auto",

    "x": 1010,

    "y": 660,

    "wires": []

    },

    {

    "id": "7fda335c.d93144",

    "type": "change",

    "z": "c423f322.c4806",

    "name": "",

    "rules": [

    {

    "t": "set",

    "p": "payload",

    "pt": "msg",

    "to": "payload.params[\"switch:0\"].voltage",

    "tot": "msg"

    }

    ],

    "action": "",

    "property": "",

    "from": "",

    "to": "",

    "reg": false,

    "x": 770,

    "y": 660,

    "wires": [

    [

    "d3a0222c.5d24c"

    ]

    ]

    },

    {

    "id": "f56dd7d5.a4df",

    "type": "mqtt-broker",

    "name": "MQTT-Broker ioB",

    "broker": "localhost",

    "port": "1883",

    "clientid": "",

    "usetls": false,

    "protocolVersion": "4",

    "keepalive": "60",

    "cleansession": true,

    "birthTopic": "",

    "birthQos": "0",

    "birthPayload": "*",

    "birthMsg": {},

    "closeTopic": "",

    "closeQos": "0",

    "closePayload": "",

    "closeMsg": {},

    "willTopic": "",

    "willQos": "0",

    "willPayload": "",

    "willMsg": {},

    "sessionExpiry": ""

    }

    ]

    Anmerkung

    Der nachfolgend abgebildeteTeil des Flows kann 1:1 für den Shelly Plus 1 übernommen werden. ;)

    Bildschirmfoto vom 2021-09-25 14-55-25.png

    (restl. Nodes einfach entfernen. ;) )

  • Schauen wir uns nun die Ausgabe der Debug-Nodes im Detail an.

    Die Ausgabe des JSON-Nodes liefert die verschiedenen Daten:

    Bildschirmfoto vom 2021-09-25 15-16-26.png

    Bildschirmfoto vom 2021-09-25 15-18-50.png

    Tip:

    Bewegt man die Maus im Debug-Fenster über die gewünschte Datenpunktzeile (z.B. apower) erhält man in einem erscheinenden Menu die Möglichkeit den Datenpunktpfad zu kopieren. Damit lässt er sich leicht und fehlerfrei in die Change-Nodes (Spalte 3) einfügen. ;)

    Die Ausgabe für den Schaltstatus:

    (Ausgang false = ausgeschaltet und true = eingeschaltet)

    Bildschirmfoto vom 2021-09-25 15-26-37.png

    Die Ausgabe für die Leistung (W):

    Bildschirmfoto vom 2021-09-25 15-29-03.png

    Die Ausgabe der Spannung (V):

    Bildschirmfoto vom 2021-09-25 15-31-14.png

    Wie schon geschrieben lassen sich diese Werte natürlich dann nach individuellem Belieben weiterverarbeiten. ;)

    Durch weitere Change-Nodes lassen sich natürlich alle weiteren zur Verfügung stehenden Datenpunkte ebenfalls extrahieren und weiterverarbeiten.

    Viel Spass damit. :) :thumbup:

    PS:

    Auf die Screenshots der einzelnen Nodes im Detail verzichte ich diesmal. Importiert einfach den gesamten Flow (aus dem Spoiler in Beitrag # 1 ) und dann könnt Ihr Euch die Details ansehen.

    Viele Wege führen nach Rom und mit Sicherheit gibt es weitere Wege. Wenn jemand andere Umsetzungen hat, bitte ich diese gerne in eigenen Threads zu publizieren. Vielen Dank.

  • Wie ich in der ersten meiner Vorlagen zur Shelly NG schrieb, ist MQTT für mich Neuland.

    Bisher lief bei mir alle via COIOT direkt in den Shelly-Adapter! MQTT, Datenpunkte selbst erstellen: Alles Neuland.

    Da es, wie ich denke, bestimmt nicht nur mir so geht, baue ich den Beitrag noch als kleines Howto für alle anderen Leidensgenossen und Einsteiger aus. ;)

    Das jetzt folgende praktische Beispiel wäre ohne die Unterstützung von neo-v noch nicht möglich. Danke Maik für Deine Ausdauer und die gestrigen Lehrstunden. ^^ :thumbup:

    Um dem Ganzen einen sinnvollen Rahmen zu geben, ist das Ziel der Beispielaufgabe, den Schaltzustand des Shelly Plus 1PM und die aktuelle Leistung zu visualisieren.

    1. Um die Daten "greifbar" zu machen. müssen zunächst Datenpunkte manuell erzeugt werden. Meine Struktur muß dabei nicht zwangsweise übernommen werden. Die Struktur steht natürlich jedem frei.

      Bildschirmfoto vom 2021-09-26 08-52-09.png

      In jedem Fall sollten, zumindest für Einsteiger, eigene Datenpunkte unter 0_userdata/0 angelegt werden!

      Das Anlegen erfolgt in den Obejekten mittels des "+" in der Menuzeile. ;)

      Bildschirmfoto vom 2021-09-26 08-56-11.png
    2. Den Flow aus Beitrag # 1 erweitern wir um 2 "ioBroker out" - Nodes. (die 2 blauen Nodes)

      Bildschirmfoto vom 2021-09-26 08-59-15.png
    3. Im den neuen Nodes brauchen wir nun nur den Datenpunkt händisch einzutragen:

      Bildschirmfoto vom 2021-09-26 09-02-38.png

      Topic für den Status:

      0_userdata.0.Shelly_Plus.Shelly_Plus_1PM.Test_Shelly_Plus_1_PM.Ausgang

      Topic für die Leistung:

      0_userdata.0.Shelly_Plus.Shelly_Plus_1PM.Test_Shelly_Plus_1_PM.Leistung

      Die Topics müssen von Hand eingetragen. Zumindest bei mir waren sie über die Schaltfläche "..." nicht erreichbar.

    4. Nun können die Datenpunkte visualisiert werden (oder auch auf andere Weise weiterverarbeitet werden).

      Hier mein Beispiel:

      Bildschirmfoto vom 2021-09-26 09-08-26.png   Bildschirmfoto vom 2021-09-26 09-10-20.png

      Anmerkung:
      Aktuell nur Visualisierung, manuelle Schalterbetätigung steuert den Shelly nicht!

    Viel Spass damit. :) :thumbup:

  • 66er 26. September 2021 um 09:24

    Hat den Titel des Themas von „[NodeRed] Werte ShellyPlus 1PM aus MQTT extrahieren und Aktion auslösen“ zu „[NodeRed] Werte ShellyPlus 1PM aus MQTT extrahieren und Aktion auslösen - inkl. kl. Howto“ geändert.
  • Und zum Schluß meiner Lehrstunde bei neo-v , noch ein kleines Schmankerl für Nicht-MQTT-User:

    Binäre Zustände wie "Schalteingang (betätigt / nicht betätigt)" oder "Ausgang (ein oder aus)" lassen sich per Webhooks in die und # 3 Punkt 1 manuell angelegten Datenpunkte übertragen. :)

    Am Beispiel des Ausgangs kann das dann so umgesetzt werden:

    1. Ihr braucht im ioBroker zusätzlich den Adapter "Simple API".

      Bildschirmfoto vom 2021-09-26 13-29-48.png

      Einstellungen könnt Ihr belassen.
    2. Datenpunkte wie oben beschrieben anlegen
    3. Webhooks erstellen
      (je 1 Webhook für "Ausgang EIN" und "Ausgang aus"

      Bildschirmfoto vom 2021-09-26 13-38-12.png

      Webhook EIN:

      Bildschirmfoto vom 2021-09-26 13-39-46.png
    Code
    http://192.168.1.92:8087/set/0_userdata.0.Shelly_Plus.Shelly_Plus_1PM.Test_Shelly_Plus_1_PM.Ausgang?value=true

    Werte anpassen! (IP des ioBroker, Port der Simple-API, Datenpunkt)

    Webhook AUS:

    Bildschirmfoto vom 2021-09-26 13-42-50.png

    Code
    http://192.168.1.92:8087/set/0_userdata.0.Shelly_Plus.Shelly_Plus_1PM.Test_Shelly_Plus_1_PM.Ausgang?value=false

    Werte anpassen! (IP des ioBroker, Port der Simple-API, Datenpunkt)

    Viel Spass damit . :) :thumbup: