NEWS
Node-Red - Shelly PlusPlugS - Mqtt Node-Red Dashboard
-
Guten Tag,
ich bin absoluter Mqtt und Node-Red Neuling.
Im iobroker habe ich mir den Mqtt-adapter sowie Node-red installiert.
Im ersten Schritt möchte ich gerne eine sehr einfache Aufgabe realisieren, nämlich über den Switch in der Weboberfläches des Shelly, dann über das Node-Red-Dashboard und dem dazugehörigen Switch das Gerät schalten. Ebenso sollte dann auch die korrekte on/off Bestätigung zu sehen sein.
Das klappt auch soweit, auch sehe ich in Node-Red, in der Shelly-Weboberfläche und an den Dashboard-Switch die korrekte Interaktion --> bis auf den Punkt, das wenn ich über die Shelly-Web-Oberfläche schalte dies keine Rückmeldung (also on, off) im Node-Red-Switch erkennen läßt, die Funktion selbst aber klappt ...
Schon mal vorab vielen Dank! -
@hape1 Schau mal - Du zeigst ja den Schalterzustand nicht nach dem Input an.
Ändere das und das ist wahrscheinlich gut.
-
@mickym Leider nicht, wenn ich das entsprechend ändere geht die Schaltung über das Node-Red-Dashboard gar nicht mehr ... sondern nur noch über die Switch-Steuerung der Web-Oberfläche des Shelly.
-
@hape1 Du musst trotzdem auf Input stellen -
Hier ist Dein status drin:
Die Eigenschaft kannst Du aus dem Objekt einfach über eine Change Node vorher extrahiert werden. Wenn Du dabei Hilfe brauchst, dann kopiere das Objekt über die Schaltfläche in die Zwischenablage und stell es hier in CodeTags ein.
-
Wow, danke für die schnelle Reaktion ... leider verstehe ich nicht wo ich wie was kopieren soll ...
Oder meinst Du das:
{ "id": 0, "source": "WS_in", "output": false, "apower": 0, "voltage": 0, "current": 0, "aenergy": { "total": 0, "by_minute": [ 0, 0, 0 ], "minute_ts": 1711917900 }, "temperature": { "tC": 36.9, "tF": 98.4 } }
-
@hape1 Wenn Du mit der Maus ganz rechts auf den Wert gehst, dann taucht eine Schaltfläche auf, mit der Du den ganzen Wert in die Zwischenablage kopierst - alternativ gehe in NodeRed ins Debug Fenster und kopiere den Wert aus der debug1 Node in die Zwischenablage in dem Du mit der Maus neben den Wert fährst. Und dann auf Wert kopieren gehst.
Hier in den Thread kopierst Du den Inhalt der Zwischenablage in CodeTags ein:
-
@hape1 Genau das meinte ich. Ich gehe mal davon aus, dass der Wert in der Eigenschaft output steht und sich von false auf true ändert.
Um den Wert zu extrahieren folgende Change Node verwenden:
Mit der nachfolgenden Anweisung kannst Du dann true und false in on und off wandeln - kannst Du auch mit Ändern machen, wenn Du noch nicht so fit in JSONATA bist
Die Originalbeschreibung der Shelly Doku für den Switch findest Du hier:
https://shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/Switch#switchgetstatus-example
-
@mickym Ich verneige mich bildlich vor Dir! Ich habe Std. verbracht um selbst eine Lösung zu finden, leider ohne Erfolg --> Du schaffst das in Minuten ... Vielen Dank!!
-
@hape1 Das wird bei Dir auch - Du wirst dieses Tool lieben - ich bin immer wieder begeistert und kann nicht verstehen, wie jemand puzzelt oder sich durch Programmtext quält. Ich komme eigentlich auch immer bei Flows die länger her sind immer recht schnell auf Ideen was ich machen kann.
-
Ok, ich möchte gerne „weiterkommen“ und hätte folgende Aufgabenstellung:
Im iobroker laufen folgende Instanzen:
mqtt
modbus
NoderedIn der modbus instanz stehen mir Messwerte von einem Energiemessgerät für drei Phasen zur Verfügung.
Diese 3 Datenpunkte sollen nun in node-red aufgenommen und zu einer Summe aufaddiert werden.
Da die einzelnen Werte im Sekundentakt schwanken soll die Summenbildung noch die Möglichkeit erhalten in einem größeren Takt, also z.B. alle 10 Sekunden weitergegeben werden.
Dann muss über eine Funktion dieser Wert dahingehend verändert werden, das alle Werte im Plus-Bereich (Energiebezug) dafür sorgen, dass ein weiteres Gerät, erreichbar über Datenpunkte per mqtt um den ermittelten Plus-Bedarf seine Energieabgabe erhöht.
Sinngemäß genau umgekehrt, wenn aus dem Energiemesswert sich negative Werte (also Energieeinspeisung) ergeben, soll der Energieerzeuger seine Energieabgabe um den Einspeisebetrag drosselt.
Diese Schnittstellen/Datenpunkte des Energieerzeugers sind per mqtt erreichbar.
Ok, soweit der Flow.
Nun scheitere ich bereits daran, das ich aus node-red nicht auf die drei Datenpunkte des Energiemessers zugreifen kann.
Ich habe zwar einen modbus-node installiert (node-red-contrib-victron-modbus), aber es gelingt mir nicht die für eine korrekte Funktion notwendigen Attribute zu installieren, weil ich das für die Installation notwendige Verzeichnis nicht finden kann …
Oh Mann, viel Text gekoppelt mit der Frage —> kannst Du mir bei meinem Projekt unter die Arme greifen … ?
-
@hape1 sagte in Node-Red - Shelly PlusPlugS - Mqtt Node-Red Dashboard:
Ich habe zwar einen modbus-node installiert (node-red-contrib-victron-modbus), aber es gelingt mir nicht die für eine korrekte Funktion notwendigen Attribute zu installieren, weil ich das für die Installation notwendige Verzeichnis nicht finden kann …
Also entweder Du nutzt die modbus Nodes oder Du nutzt den modbus Adapter - beides gleichzeitig geht nicht bzw. macht keinen Sinn. Wenn Du auf Datenpunkte im iobroker zugreifen willst, dann brauchst Du kein mqtt oder sonst was - das machst Du alles mit den iobroker Nodes.
Alternativ nutzt Du einen externen mqtt Broker und nutzt die modbus Nodes - aber dafür die Adapter nicht. Du musst Dich da entscheiden.Die Frage ist auch willst Du pollen (also DP im Sekundentakt aufnehmen ... ) oder überlässt Du das dem Adapter und reagierst einfach wenn sich die Datenpunkte ändern. Ich bin KEIN Freund selbst zu pollen, sondern reagiere meist nur, wenn sich die Sachlage ändert - das entspannt ein System ungemein.
Dann musst Du Dir ünerlegen, ob Du die Vorteile der grafischen Programmierung zunutze machst oder lieber mit Text programmieren willst. Im Netz findest Du Duzende function Nodes - die herkömmliches Javascript schreiebn.
-
@mickym Ok, fangen wir also damit an, das ich verstanden habe, das es entweder den modbus-Adapter vom iobroker oder direkt aus node-red über einen modbus-node eine Verbindung zum modbus-device gibt. Dann entscheide ich mal, das die Verbindung direkt aus node-red erfolgen soll. Soweit so gut: Ich habe mir also ein Modbus-Read-node gezogen und konfiguriert. Es wird auch eine Verbindung hergestellt, aber die Werte die ich erhalte stimmen nicht mit der "Realität" überein ... Ich hänge mal ein paar Shots an.
Zunächst mal die funktionierende Verbindung über den modbus-Adapter:
Jetzt mal die Konfiguration in node-red:
-
@hape1 Na wenn Du die modbus Nodes nimmst, dann solltest Du Dir auch die buffer Nodes installieren, um die Werte richtig zu interpretieren. Wenn Du den iobroker Adapter nimmst, dann hat der Adapter das für Dich interpretiert und Du musst halt die Datenpunkte mit den iobroker Nodes auslesen - dann brauchst Du die Modbus NOdes nicht.
Wenn Du alles in NodeRed machen willst da gibts einige Threads - aber wie gesagt ich bin da kein Freak - hier mal einige Threads zum Einlesen.
https://forum.iobroker.net/topic/65273/node-red-modbus
https://forum.iobroker.net/topic/51639/howto-huawei-sun2000-wr-modbus-mit-node-red-read-writeWie gesagt - du musst wissen ab wo Du welche Register ausliest und dann halt mit einer buffer Node interpretieren. Da musst Du dann halt das gleiche über die Buffer Node machen.
In dem 1. Thread habe ich das mal mit @Garf ausprobiert. Der kann Dir ggf. auch helfen.
Wie gesagt wenn der iobroker Adapter nicht funktioniert oder Du etwas unabhängiger vom Adapter werden willst, dann kannst Du die NOdes verwenden - ansonsten halt einfah die fertigen Datenpunkte des Adapters einlesen.
-
@mickym Ah ok, dann habe ich Dich missverstanden. Da ich nun wirklich wenig Ahnung habe und die Werte, die ich benötige in der iobroker-modbus-Instanz vorliegen --> ok, dann nehme ich die!
Bleibt aber dann die Frage, wie bekomme ich diese Werte in node-red ... ?
-
@hape1 Wie alle anderen Datenpunkte über die iobroker Nodes. Am Besten über die iobroker In Nodes. Dann musst Du auch nicht pollen, sondern die werden Dir automatisch geliefert, wenn die sich im iobroker aktualisieren.
-
@mickym Ja, das klappt. Habe gesehen, das Du in einem anderen Thread mit einem join-node gearbeitet hast. Das System reagiert auf meine Unwissenheit wie folgt ...
-
@hape1 Du hast die JOIN Node nicht konfiguriert - die steht auf automatisch.
Konfiguriere die Node mal so:
-
Funktioniert!!
Ok, jetzt bin ich wohl an der Stelle an der wohl eine Funktion hermuss ... vermutlich über einen funktion-node ... Ich möchte dem WR folgendes mitteilen:
Alle aufaddierten Werte aus dem Join-node im plus Bereich (=Energiebezug) fahr deine volle Leistung. Die max. Leistung beträgt Wert 1.600.
Wird die Leistung negativ (=Einspeisung) regle solange gegen "0" bis die Gesamtleistung der 3 Phasen auf "0" steht.
Takt für diesen Ablauf alle 10 Sekunden
Habe das hier im Netz gefunden:
Würde dann aussehen wie folgt:
-
@hape1 Ich weiß nicht was Du mit Deinem takt willst - momentan wird alles über die iobrokerNodes getriggert.
-
Wenn Du lieber eigene Takts verwenden möchtest, dann würde ich nicht über eine JOIN Node gehen, sondern lieber die Werte in Flowvariablen speichern. Musst aber nicht geht auch mit Methode 3.
-
Wenn Du gerne programmieren willst - dann kannst Du das gerne tun - ich würde Dir abraten und lerne lieber die Nodes zu nutzen, als Javascript zu programmieren.
-
Wenn Du Deinen Flow so lassen willst und nur alle 10 Sekunden zusammenzählen willst und Dir die Zwischennachrichten nicht summieren willst, kannst Du mit einer mit einer delay node - alle Zwischennachrichten wegschmeissen.
Von der Programmierung mit function Nodes rate ich Dir ab, wenn Du die Macht der Nodes kennenlernen willst und nicht anfängst zu programmieren. Lass auch diese Videos weg, sondern versuche Deine eigenen Ideen zu verwirklichen. Ich bin ehrlich gesagt kein Freund davon.
Wenn Du nun die Werte Deiner 3 Objekteigenschaften zusammenzählen willst, geht das einfach mit JSONATA und einer ChangeNode - oder Du nimmst die klassische Methode und spaltest das Objekt wieder auf und nutzt erneut eine JOIN Node. Wie willst Du vorgehen?
-
-
@hape1 sagte in Node-Red - Shelly PlusPlugS - Mqtt Node-Red Dashboard:
Würde dann aussehen wie folgt:
Na das funktioniert sicher nicht, weil Deine payload ein Objekt ist und nichts mit irgendwelchen Takten zu tun hat. Wenn Du function nodes verwendest, dann solltest Du auch den Code erklären können.