NEWS
Node-Red - Shelly PlusPlugS - Mqtt Node-Red Dashboard
-
@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.
-
@mickym Ok, ich stochere halt auf niedrigem Niveau im Dunkeln. Ich würde mich gerne auf die "sauberste" Methode der Umsetzung einlassen --> sage mir bitte was der "beste" Weg ist.
-
@hape1 Also erst mal die Frage was und warum dieses 10s Intervall?
In welchen Zeitabständen kommen denn jetzt die Nachrichten aus der JOIN Node?Und wenn Du die 10s haben willst - dann nimm eine DelayNode und lass nur eine Nachricht alle 10s durch und schmeiß die Zwischennachrichten weg.
-
@mickym Die Aktualisierungen kommen im Sekundentakt --> aber das empfangende Device (der Wechselrichter) kommt mit seinem Regelprozess nicht so schnell nach. Deshalb der Takt von ca. 10 Sekunden als Beispiel. Kann auch weniger sein, das muss man aber probieren.
-
@hape1 Gut dann nimm eine Delay Node nach der JOIN Node und konfiguriere die Nachrichtenrate, dass nur 1 Nachricht alle 10 s durchkommt und die Zwischennachrichten gelöscht werden.
-
-
@hape1 Gut dann sollte ja jetzt nur noch alle 10s eine Nachricht aus der delay Node rauskommen. Nun nutzen wir eine ChangeNode, um alle Werte aller Eigenschaften des payload Objektes zusammenzuzählen. Also änderst Du die payload mit eine ChangeNode und nutzt folgenden JSONATA Code:
$sum(payload.*)
-
-
@hape1 Hervorragend - nun solltest Du also alle 10 Sekunden in der payload die Summe haben, richtig?
-
@mickym ja, klappt!
-
@hape1 So und nun schauen wir mal die function Node an.
Der schreibt nun eine Menge Code um die Summe zwischen 0 und 1600 zu begrenzen:
Wenn statt 0 eine 1 kommen soll, dann begrenze das einfach auf 1 bei der Ausgabe und hake die Rundungsfunktion an. Jedenfalls geht das ganz ohne Code mit einer range Node.
Übersteigt der Wert die obere Grenze wird der obere Wert genommen, sonst der untere Wert.
-
@mickym Getreu dem Motto, es gibt keine blöden Fragen ...
Mir ist nicht ganz klar, was der range-node genau macht.
Was genau ist der "Eingangswertebereich" bzw. der "Ausgangswertebereich" ... wo ist hier die Regelung um "0" der Energiewerte hinterlegt --> in der 0 vom Eingangs- bzw. Ausgangswertebereich. Und was passiert, wenn ich in der Ausgabe eine 1 eintrage?
-
@hape1 Dann wird skaliert, dann ist 3 nicht mehr 3 sondern etwas darüber - das kannst du dann mit runden wieder ausgleichen.
Hier mal ein Beispiel mit verschiedenen Werten:Ich würde aber wohl einfach beides auf 1-1600 stellen, dann wird nicht skaliert und du hast immer eine 1.
Warum 0 immer eine 0 bleiben soll, eine -5 aber dann 1 verstehe ich nicht ganz - zur Not kann man das auch alles mit switch Nodes abfangen. Aber ich würde deswegen nicht anfangen zu programmieren, wenn Du kein Javascript kannst.
Auf keinen Fall solltest Du irgendwelche function Nodes nehmen, wo Du nicht weißt, was die macht.