shelly mqtt integrieren

  • Hallo,


    Mein Setup:

    Mini-PV-Anlage mit 2 Modulen (jeweils mit Microwechselrichter) in zwei verschiedenen Himmelsrichtungen.

    Beide Ausgänge zusammen an einer Shelly 2.5 angeschlossen.

    Raspi mit Volkszähler läuft bereits am EMH ED300L :)


    Wunschgedanke:

    Leistung der Module wird per mqtt übertragen und im Frontend angezeigt.


    Ist-Zustand:

    Auf der Shelly ist mqtt aktiviert und funktioniert.

    Auf dem pi läuft mosquitto.

    Ich kann per mosquitto_sub -d -t shellies/shelly/relay/1/power die aktuelle Leistung empfangen.

    In node-red kommt das Signal auch an und schreibt es testweise in eine Datei.


    Frage:

    Muss ich node-red unbedingt benutzen?

    Ich las, dass in der neuen Version von vzlogger mqtt integriert sei.


    Falls ich es benutzen muss, dann wie?


    Das Wiki zu mqtt macht mich nicht schlau.

    Die Vorlagen scheinen alle nicht zu passen.

    Vor allem weiß ich nicht, wie ich das, was am Ende bei node-red rauskommt als Kanal angelegt bekomme.


    Vielen Dank schonmal.

  • Muss ich node-red unbedingt benutzen?

    VZ hat kein mqtt-Input, also wirst du da wohl nicht drumrum kommen.


    Ich las, dass in der neuen Version von vzlogger mqtt integriert sei.

    Er gibt mqtt aus.


    Vor allem weiß ich nicht, wie ich das, was am Ende bei node-red rauskommt als Kanal angelegt bekomme.

    https://wiki.volkszaehler.org/howto/node-red#apipost_data

    Passenden Kanaltyp wählen oder den Payload entsprechend umstricken.



    mfg JAU

    No Shift - No Service

  • Danke.

    Leider bringt mich das nicht weiter. Ich stehe da auf dem Schlauch.

    Die Wikiseite zu Node-Red ist mir bekannt, allerdings erschließen sich mir die Zusammenhänge nicht.


    Zu Node-Red (API: POST data)

    *Soll ich da als ersten Node meinen (funktionierenden) mqtt-Node (siehe oben) nehmen, anstatt des Nodes inject-payload aus dem Wiki?

    Da kommt nämlich im Debug nur folgendes raus:

    Code
    msg : string[100]
    "Warning: msg properties can no longer override set node properties. See bit.ly/nr-override-msg-props"

    Im Node post data url hab ich als URL mal http://localhost/middleware.php/data/{{uuid}}.json?ts={{timestamp}}&value={{payload}} eingetragen. Korrekt? Mein pi heißt nämlich anders. Localhost müsste doch immer passen(?)


    Auch im Node Volkszähler post hab ich als URL http://localhost/middleware.php/data/ eingetragen.


    *Die UUID im Node set uuid / timestamp was mache ich damit? Die muss wahrscheinlich durch die Kanal-UUID ersetzt werden. Als Kanal nehme ich wohl Elektrische Energie (Leistungswerte).

    Muss ich denn in der /etc/vzlogger.conf auch was eintragen?



    Ich brauche es leider etwas kleinschrittiger =O


    Danke für eure Hilfe!

  • Prima.


    Wenn du das Ergebnis (Code/Bild) hier postest würde ich es als Beispiellink mit ins Wiki aufnehmen.



    mfg JAU

    No Shift - No Service

  • Erstens muss auf der shelly mqtt aktiviert sein. Als Server wird die IP-Adresse deines PIs eingetragen. ZB 192.168.178.61:1883


    Zweitens muss mosqitto und mosquitto-clients installiert und mosquitto gestartet sein, dann kann man seine shelly auch schon einfach zB durch mosquitto_sub -d -t shellies/XXXdeineIDXXX/relay/1/power abfragen.

    Deine ID steht unter http://XXXIP-deiner-shellyXXX/settings bei mqtt: id.

    Sie lässt sich auch ändern, siehe unten.



    Hier der Flow aus Node-red:

    Code
    [{"id":"827eda8.5f47728","type":"tab","label":"shelly0","disabled":false,"info":""},{"id":"ad757878.096e88","type":"http request","z":"827eda8.5f47728","name":"volkszaehler post","method":"POST","ret":"obj","paytoqs":false,"url":"","tls":"","persist":false,"proxy":"","authType":"","x":290,"y":180,"wires":[["73ecf182.b6629"]]},{"id":"90d502aa.d3ffd8","type":"template","z":"827eda8.5f47728","name":"post data url","field":"url","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"http://localhost/middleware.php/data/{{uuid}}.json?ts={{timestamp}}&value={{payload}}","x":190,"y":120,"wires":[["d4a03f5.e38f04"]]},{"id":"9e5eafb0.6114a","type":"json","z":"827eda8.5f47728","name":"","x":530,"y":120,"wires":[["ad757878.096e88"]]},{"id":"73ecf182.b6629","type":"debug","z":"827eda8.5f47728","name":"post response","active":false,"console":"false","complete":"true","x":480,"y":180,"wires":[]},{"id":"d4a03f5.e38f04","type":"change","z":"827eda8.5f47728","name":"","rules":[{"t":"delete","p":"payload","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":370,"y":120,"wires":[["9e5eafb0.6114a"]]},{"id":"c181af3b.801d2","type":"change","z":"827eda8.5f47728","name":"set uuid / timestamp","rules":[{"t":"set","p":"uuid","pt":"msg","to":"6f2e6540-83e0-11ea-86ed-5f7173e321ce","tot":"str"},{"t":"set","p":"timestamp","pt":"msg","to":"","tot":"date"}],"action":"","property":"","from":"","to":"","reg":false,"x":500,"y":60,"wires":[["90d502aa.d3ffd8"]]},{"id":"be59309a.dc194","type":"mqtt in","z":"827eda8.5f47728","name":"","topic":"shellies/shelly/relay/0/power","qos":"2","datatype":"auto","broker":"2f620647.475cba","x":230,"y":60,"wires":[["c181af3b.801d2"]]},{"id":"2f620647.475cba","type":"mqtt-broker","z":"","name":"","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]


    Dabei ist zu noch folgendes anzupassen:

    *Im ersten Node, dem mqtt-Input muss man die ID auf das anpassen, was die eigene shelly ausgibt. In diesem Beispiel hatte ich es mittels http://shelly/settings?mqtt_id=shelly auf shelly geändert.

    Standardmäßig lautet die ID shellies/shellyswitch25-<deviceid>, siehe Doku.

    *Im zweiten Node muss man die UUID des Kanals eintragen, den man vorher im Frontend erstellt hat.

    *Möchte man zwei Geräte überwachen, existiert dieser Flow zwei mal in Node-Red. Dabei ist im ersten Node lediglich die 0 durch eine 1 zu erstetzen und die UUID anzupassen.


    Ich habe 2 Module an meiner Plug-PV Anlage, je eins pro Dachseite. Sie hängen zusammen an einer shelly 2.5.

    Man schließt sie genauso an wie normale Verbraucher.

    Um die Summe beider Kanäle zu bestimmen, legt man einen virtuellen Kanal an (Verbrauchssensor virt.) und addiert die Werte.


    Hier die IDs der beiden Einzelwerte eingeben. That's it.

    In Node-Red ist das selbstverständlich auch möglich, allerdings niemals so einfach.


    Mit ein paar Berechnungen von Gesamt- und Direktverbrauch, die ich hier geklaut habe, sah es dann heute bei mir so aus:


    Einmal ohne Gesamtverbrauch, dafür mit den einzelnen Modulen:



    Und hier mit Gesamtverbrauch, ohne die Module:



    Die Einspeisung wird negativ dargestellt. Es ist ein virtueller Kanal, der einfach 0 - val(in1) rechnet.


    Danke für eure Tipps!

  • Hallo,


    Ich bin noch neu und mit der Materie noch so gar nicht vertraut.

    Ich habe die ähnlichen Voraussetzungen wie boenki

    Einen Raspberry PI auf dem der Volkszähler läuft und einen Shelly 1pm


    Wenn ich das richtig verstanden haben brauch ich jetzt 3 weitere "Programme" (mosquitto, mosquitto client & NodeRed) damit ich den Powerwert des Shellys in die VZ Grafik bekomme, richtig?!

    Kann ich das alles parallel auf ein und dem selben Raspberry betrieben?


    Eine einfachere Lösung wird es vermutlich nicht geben, oder?


    Vielen Dank im Voraus für eure Hilfe

  • Einfach ist immer relativ;) Kann aber alles auf einen Pi;

    sudo apt install mosquitto

    sudo apt install mosquitto-clients

    sudo apt install nodered


    (aus dem kopf raus, anschließend ein wenig googlen)

    CS2: 25.02.2016: 2,6 kW, netmetering mit Vergütung [Niederlande]