Shelly 1PM einbinden

Hallo zuerst mal. Ich bin der Martin. Einen super Jobb habt Ihr hier gemacht. Danke dafür.

Es gibt ja schon einiges zu Shelly einbinden aber irgendwie stehe ich auf dem Schlauch.
Oder es geht nur mit dem Shelly 1 und nicht mit dem Shelly 1PM. Falls ja erübrigt sich alles weitere.

  1. Ich wähle im VanPi unter WifiRelay die Firmware und ändere diese auf Shelly. Namen und so belasse ich .
  2. Im Shelly Menü (über IP nicht App) aktiviere ich Mqtt. Gebe im Mqtt prefix den Namen wifiRelay1 ein und als server namen IP adresse des VanPi inklusive:1883.
  3. Nach dem rebooten steht beim Shelly Connected. Im Switches setting VanPi steht not connected.
    Was mache ich falsch oder übersehe ich? Im Node Flow WifiRelay steht Node Aktionen deaktiviert. Ist das normal oder muss ich irgendwo noch was einschalten?

Vielen Dank für die Hilfe.

Lieber Gruss
Martin

Hey Martin,

willkommen bei Pekaway! und danke für dein Feedback.

Wie haben bis jetzt nur einfache Shelly´s benutzt. @Vincent weiß da besser Bescheid.
Wir werden es uns aber demnächst nochmal anschauen.

Viele Grüße
Karl

Hallo Karl,

danke für deine Mitteilung.
Kann es sein, dass der PM1 andere Daten sendet ausser ein und aus. Ich habe ein wenig getestet und im MqttExplorer werden die Daten angezeigt aber es sieht so aus das die Zuordnung nicht passt.
Siehe PrintScreen.
Vielleicht hilft das ja.

Lieber Gruss
MArtin

Hallo Martin,

in deinem ersten Post hast du geschrieben, dass du im Menü deines Shelly 1PM als MQTT Prefix “wifiRelay1” eingegeben hast. Das muss “shellyRelay1” sein.

Der Vorgang ist hier im Tutorial beschrieben und in der Dokumentation.

Ansonsten sendet der Shelly 1PM noch ein paar Statusdaten mehr, das ist richtig.

Wenn dein Prefix auf shellyRelay1 steht, kannst du dann mal versuchen den Shelly direkt über den MQTT Explorer zu schalten?
Als Topic gibst du “shellies/shellyRelay1/relay/0/command” und dann unter raw einfach “on” oder “off” schreiben (oder “toggle”). Aufpassen dass du in der Payload keine weiteren Leerzeichen etc. hast.

image

Hallo Vincent,

ja habe ich geschrieben, weil es nicht funktioniert hat habe ich ander Namen ausgetestet.
Ich habe alles nach vorgaben eingestellt im MQTT Explorer den Topic erstellt und mal on/off unter raw getestet. Das Shelly schaltet nicht.
Im Explorer ist ja unter shellyRelay1 der Eintrag relay mit Topic und entsprechenden Messages. Diese erhöhen sich entsprechend wenn ich über das Dashboard oder über den Explorer schalte. Wenn ich über den Schelly schalte erstellt er 2 Punkte: status und events. Dort sind dann die entsprechenden Topics und Messages.
Irgendwie will er nicht kommunizieren.
Lieber Gruss
Martin

Hmm ok, das heißt aber erstmal, dass alles verbunden ist und wir nur noch das richtige Topic rausfinden müssen.

Laut Shelly Dokumentation passt das zwar eigentlich, aber wer weiß ob die da was geändert haben mit irgendeinem Firmware Update oder so.

Vielleicht kannst du mal versuchen mit dem Topic zu schalten, mit dem auch die Statusmeldungen vom 1PM kommen? Also “shellyRelay1/relay/0/command”. Haben leider keinen 1PM hier zum Testen, mit dem normalen Shelly 1 funktioniert alles wie angedacht.

Hallo Vincent,
danke dass Du dir die Zeit nimmst… So wie ich das aus der Shelly Dok rauslese, wird der 1PM anders angesprochen siehe Dok. MQTT | Shelly Technical Documentation.
Ich krieg ihn nicht geschalten, dazu habe ich zuwenig erfahrung mit Jasonscript oder anderem. Sprich ich muss mich mehr einarbeiten. Mal schauen ob ich die Zeit dazu finde. Falls Du etwas hast was ich probieren kann, gib mir doch Bescheid.
Ich kann den Shelly nicht ansprechen über Mqtt Explorer obwohl er connectet ist und auch schaltet über den Shelly.
Lieber Gruss
Martin

Hallo Vincent,

habe einen Flow angepasst mit dem kann ich den shelly schalten. Ich weiss aber noch nicht wieso :-).

Kannst es ja mal anschauen.

Lieber Gruss
Martin

[
    {
        "id": "7b0f914798b66d94",
        "type": "tab",
        "label": "Flow 2",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "4ad6479.c8cc3b8",
        "type": "mqtt in",
        "z": "7b0f914798b66d94",
        "name": "power readings",
        "topic": "shellies/shelly1pm-BA1936/relay/0/power",
        "qos": "2",
        "datatype": "auto",
        "broker": "3ecd7f11.4d3dd",
        "inputs": 0,
        "x": 165,
        "y": 125,
        "wires": [
            [
                "13fb1305.e290fd"
            ]
        ]
    },
    {
        "id": "13fb1305.e290fd",
        "type": "debug",
        "z": "7b0f914798b66d94",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "x": 375,
        "y": 125,
        "wires": []
    },
    {
        "id": "5c2ed097.9529b",
        "type": "debug",
        "z": "7b0f914798b66d94",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "x": 565,
        "y": 695,
        "wires": []
    },
    {
        "id": "abe24fc8.c374f",
        "type": "comment",
        "z": "7b0f914798b66d94",
        "name": "flow to accumulate power readings",
        "info": "",
        "x": 215,
        "y": 655,
        "wires": []
    },
    {
        "id": "f1974e0c.c5bde",
        "type": "inject",
        "z": "7b0f914798b66d94",
        "name": "Clear",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "num",
        "x": 254,
        "y": 745,
        "wires": [
            [
                "70dee9e2.463c68"
            ]
        ]
    },
    {
        "id": "244f4b1.616beb4",
        "type": "mqtt in",
        "z": "7b0f914798b66d94",
        "name": "Shelly - Energy",
        "topic": "shellies/shellyRelay1/relay/0/energy",
        "qos": "2",
        "datatype": "auto",
        "broker": "aa11e6d8.6cd088",
        "nl": false,
        "rap": false,
        "inputs": 0,
        "x": 155,
        "y": 695,
        "wires": [
            [
                "d0fc7a46.8e75a8"
            ]
        ]
    },
    {
        "id": "d0fc7a46.8e75a8",
        "type": "function",
        "z": "7b0f914798b66d94",
        "name": "Total Energy",
        "func": "// Given current total energy from Shelly in msg.payload as a string\npayload = parseInt(msg.payload)\n// check that it has converted ok (so it is not not-a-number)\nif (!isNaN(payload)) {\n    let runningTotalEnergy = flow.get(\"runningTotalEnergy\") || 0\n    let previousShellyValue = flow.get(\"previousShellyValue\") || 0\n    // test whether the Shelly has reset since last input\n    if (payload < previousShellyValue) {\n        // yes it has, just add new value to the total\n        runningTotalEnergy += payload\n    } else {\n        // no so add the difference between this and last to the running total\n        runningTotalEnergy += payload - previousShellyValue\n    }\n    flow.set(\"previousShellyValue\", payload)\n    flow.set(\"runningTotalEnergy\",runningTotalEnergy)\n    // Convert watt/minutes to watt/hours\n    msg.payload = (runningTotalEnergy/60)\n} else {\n    // an illegal string passed in so ignore it, don't pass on anything\n    msg = null\n}\nreturn msg;",
        "outputs": 1,
        "noerr": 6,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 345,
        "y": 695,
        "wires": [
            [
                "5c2ed097.9529b"
            ]
        ]
    },
    {
        "id": "c73eee2b.44d47",
        "type": "mqtt in",
        "z": "7b0f914798b66d94",
        "name": "Shelly announcements",
        "topic": "shellies/#",
        "qos": "2",
        "datatype": "auto",
        "broker": "3ecd7f11.4d3dd",
        "inputs": 0,
        "x": 185,
        "y": 75,
        "wires": [
            [
                "13fb1305.e290fd"
            ]
        ]
    },
    {
        "id": "c2b8ddab.31cb4",
        "type": "mqtt out",
        "z": "7b0f914798b66d94",
        "name": "",
        "topic": "",
        "qos": "2",
        "retain": "false",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "aa11e6d8.6cd088",
        "x": 355,
        "y": 265,
        "wires": []
    },
    {
        "id": "fee0bdf6.ce384",
        "type": "inject",
        "z": "7b0f914798b66d94",
        "name": "",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "shellies/shelly1pm-BA1936/relay/0/command",
        "payload": "on",
        "payloadType": "str",
        "x": 155,
        "y": 225,
        "wires": [
            [
                "c2b8ddab.31cb4"
            ]
        ]
    },
    {
        "id": "7aeb348d.ebaa4c",
        "type": "inject",
        "z": "7b0f914798b66d94",
        "name": "",
        "repeat": "",
        "crontab": "00 23 * * *",
        "once": false,
        "onceDelay": 0.1,
        "topic": "shellies/shelly1pm-BA1936/relay/0/command",
        "payload": "off",
        "payloadType": "str",
        "x": 155,
        "y": 265,
        "wires": [
            [
                "c2b8ddab.31cb4"
            ]
        ]
    },
    {
        "id": "4114738a.fe5d5c",
        "type": "inject",
        "z": "7b0f914798b66d94",
        "name": "Report status",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "shellies/command",
        "payload": "update",
        "payloadType": "str",
        "x": 175,
        "y": 305,
        "wires": [
            [
                "c2b8ddab.31cb4"
            ]
        ]
    },
    {
        "id": "753c1c9e.1150c4",
        "type": "inject",
        "z": "7b0f914798b66d94",
        "name": "ON",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "on",
        "payloadType": "str",
        "x": 165,
        "y": 505,
        "wires": [
            [
                "e4e6cfa1.b88ea"
            ]
        ]
    },
    {
        "id": "e4e6cfa1.b88ea",
        "type": "function",
        "z": "7b0f914798b66d94",
        "name": "turn relay on/off",
        "func": "var x = msg.payload;\nvar IP = \"192.168.178.111\";\nmsg.url= \"http://\"+ IP + \"/relay/0\";\n\nmsg.payload = \"turn=\" + x;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 405,
        "y": 525,
        "wires": [
            [
                "cf4b0b9c.2e3788"
            ]
        ]
    },
    {
        "id": "f73044cd.de8df8",
        "type": "inject",
        "z": "7b0f914798b66d94",
        "name": "OFF",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "off",
        "payloadType": "str",
        "x": 165,
        "y": 545,
        "wires": [
            [
                "e4e6cfa1.b88ea"
            ]
        ]
    },
    {
        "id": "97ac4109.5ddb2",
        "type": "function",
        "z": "7b0f914798b66d94",
        "name": "get device status",
        "func": "\nvar IP = \"192.168.178.111\";\nmsg.url= \"http://\"+ IP + \"/status\";\n\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 415,
        "y": 465,
        "wires": [
            [
                "cf4b0b9c.2e3788"
            ]
        ]
    },
    {
        "id": "36814aad.047cb6",
        "type": "inject",
        "z": "7b0f914798b66d94",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "str",
        "x": 165,
        "y": 465,
        "wires": [
            [
                "97ac4109.5ddb2"
            ]
        ]
    },
    {
        "id": "3434812a.ff7f9e",
        "type": "function",
        "z": "7b0f914798b66d94",
        "name": "change mqtt update period",
        "func": "var x = msg.payload;\nvar IP = \"192.168.178.111\";\nmsg.url= \"http://\"+ IP + \"/settings\";\n\nmsg.payload = \"mqtt_update_period=\" + x;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 445,
        "y": 425,
        "wires": [
            [
                "cf4b0b9c.2e3788"
            ]
        ]
    },
    {
        "id": "cf4b0b9c.2e3788",
        "type": "http request",
        "z": "7b0f914798b66d94",
        "name": "",
        "method": "POST",
        "ret": "obj",
        "paytoqs": "ignore",
        "url": "",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 665,
        "y": 515,
        "wires": [
            [
                "cf280268.e0c2a"
            ]
        ]
    },
    {
        "id": "cf280268.e0c2a",
        "type": "debug",
        "z": "7b0f914798b66d94",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 855,
        "y": 515,
        "wires": []
    },
    {
        "id": "f25f81e4.86b0a",
        "type": "inject",
        "z": "7b0f914798b66d94",
        "name": "MQTT update period",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "300",
        "payloadType": "num",
        "x": 205,
        "y": 425,
        "wires": [
            [
                "3434812a.ff7f9e"
            ]
        ]
    },
    {
        "id": "77129295.530c9c",
        "type": "comment",
        "z": "7b0f914798b66d94",
        "name": "http requests",
        "info": "",
        "x": 155,
        "y": 385,
        "wires": []
    },
    {
        "id": "f717b6e4.beb698",
        "type": "mqtt in",
        "z": "7b0f914798b66d94",
        "name": "Relay status",
        "topic": "shellies/shelly1pm-BA1936/relay/0",
        "qos": "2",
        "datatype": "auto",
        "broker": "3ecd7f11.4d3dd",
        "inputs": 0,
        "x": 155,
        "y": 175,
        "wires": [
            [
                "13fb1305.e290fd"
            ]
        ]
    },
    {
        "id": "70dee9e2.463c68",
        "type": "change",
        "z": "7b0f914798b66d94",
        "name": "Reset energy counter",
        "rules": [
            {
                "t": "set",
                "p": "runningTotalEnergy",
                "pt": "flow",
                "to": "0",
                "tot": "num"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 445,
        "y": 745,
        "wires": [
            []
        ]
    },
    {
        "id": "9087142f.0b8a88",
        "type": "function",
        "z": "7b0f914798b66d94",
        "name": "reboot device",
        "func": "var IP = \"192.168.175.111\";\nmsg.url= \"http://\"+ IP + \"/reboot\";\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 405,
        "y": 585,
        "wires": [
            [
                "cf4b0b9c.2e3788"
            ]
        ]
    },
    {
        "id": "61fdbcd.868c344",
        "type": "inject",
        "z": "7b0f914798b66d94",
        "name": "",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "str",
        "x": 165,
        "y": 585,
        "wires": [
            [
                "9087142f.0b8a88"
            ]
        ]
    },
    {
        "id": "eb2a8afb.78f218",
        "type": "comment",
        "z": "7b0f914798b66d94",
        "name": "mqtt",
        "info": "",
        "x": 135,
        "y": 35,
        "wires": []
    },
    {
        "id": "3ecd7f11.4d3dd",
        "type": "mqtt-broker",
        "name": "paul_broker",
        "broker": "192.168.1.8",
        "port": "1883",
        "clientid": "",
        "usetls": false,
        "compatmode": true,
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "willTopic": "",
        "willQos": "0",
        "willPayload": ""
    },
    {
        "id": "aa11e6d8.6cd088",
        "type": "mqtt-broker",
        "name": "Local server",
        "broker": "192.168.178.57",
        "port": "1885",
        "clientid": "Local node-RED",
        "autoConnect": true,
        "usetls": false,
        "compatmode": false,
        "protocolVersion": "4",
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "admin",
        "birthQos": "0",
        "birthRetain": "false",
        "birthPayload": "Hello from Local node-RED",
        "birthMsg": {},
        "closeTopic": "admin",
        "closeQos": "0",
        "closeRetain": "false",
        "closePayload": "Local node-RED is about to exit",
        "closeMsg": {},
        "willTopic": "admin",
        "willQos": "0",
        "willRetain": "false",
        "willPayload": "Local node-RED has now exited",
        "willMsg": {},
        "userProps": "",
        "sessionExpiry": ""
    }
]

Hast du einen “Shelly 1PM” oder einen “Shelly Plus 1PM”?

einen shelly plus 1pm und mit dem test oben geht es auch nur über http request und nicht über mqtt.

hab alles rausgelöscht was nicht relevant war oder nicht funktioniert. Das hier geht aber halt als http request.

[
    {
        "id": "7b0f914798b66d94",
        "type": "tab",
        "label": "Flow 2",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "753c1c9e.1150c4",
        "type": "inject",
        "z": "7b0f914798b66d94",
        "name": "ON",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "on",
        "payloadType": "str",
        "x": 155,
        "y": 200,
        "wires": [
            [
                "e4e6cfa1.b88ea"
            ]
        ]
    },
    {
        "id": "e4e6cfa1.b88ea",
        "type": "function",
        "z": "7b0f914798b66d94",
        "name": "turn relay on/off",
        "func": "var x = msg.payload;\nvar IP = \"192.168.178.111\";\nmsg.url= \"http://\"+ IP + \"/relay/0\";\n\nmsg.payload = \"turn=\" + x;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 395,
        "y": 220,
        "wires": [
            [
                "cf4b0b9c.2e3788"
            ]
        ]
    },
    {
        "id": "f73044cd.de8df8",
        "type": "inject",
        "z": "7b0f914798b66d94",
        "name": "OFF",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "off",
        "payloadType": "str",
        "x": 155,
        "y": 240,
        "wires": [
            [
                "e4e6cfa1.b88ea"
            ]
        ]
    },
    {
        "id": "3434812a.ff7f9e",
        "type": "function",
        "z": "7b0f914798b66d94",
        "name": "change mqtt update period",
        "func": "var x = msg.payload;\nvar IP = \"192.168.178.111\";\nmsg.url= \"http://\"+ IP + \"/settings\";\n\nmsg.payload = \"mqtt_update_period=\" + x;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 435,
        "y": 120,
        "wires": [
            [
                "cf4b0b9c.2e3788"
            ]
        ]
    },
    {
        "id": "cf4b0b9c.2e3788",
        "type": "http request",
        "z": "7b0f914798b66d94",
        "name": "",
        "method": "POST",
        "ret": "obj",
        "paytoqs": "ignore",
        "url": "",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 655,
        "y": 210,
        "wires": [
            [
                "cf280268.e0c2a"
            ]
        ]
    },
    {
        "id": "cf280268.e0c2a",
        "type": "debug",
        "z": "7b0f914798b66d94",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 845,
        "y": 210,
        "wires": []
    },
    {
        "id": "f25f81e4.86b0a",
        "type": "inject",
        "z": "7b0f914798b66d94",
        "name": "MQTT update period",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "300",
        "payloadType": "num",
        "x": 195,
        "y": 120,
        "wires": [
            [
                "3434812a.ff7f9e"
            ]
        ]
    },
    {
        "id": "77129295.530c9c",
        "type": "comment",
        "z": "7b0f914798b66d94",
        "name": "http requests",
        "info": "",
        "x": 145,
        "y": 80,
        "wires": []
    }
]

Das wäre meine nächste Frage gewesen, weil das Beispiel dass du gepostet hast über MQTT das gleiche macht wie in unserem System. Anscheinend sind die Gen2 Devices aber ein bisschen anders strukturiert und viele Leute hatten Probleme das ganze per MQTT zu steuern.

Hier hat jemand anscheinend eine Lösung gefunden, ist aber deutlich schwieriger umzusetzen als für die Gen1 Devices…

Hallo Vincent,

danke für deine Unterstützung. Die Umsetzung für Gen2 ist für mich im moment zu viel. Daher werde ich versuchen das ganze entweder als http request umzusetzen oder Tasmota auf den Shelly zu flashen (ist auch ein wenig anders), oder noch ein Dimmy Board :slight_smile: mit der Hoffnung, dass mir die 8 Relais auf dem VanPi reichen werden…
Werde dann mal berichten.
Lieber Gruss
Martin