NEWS
goto in node red
-
@bynight Das mit dem return msg sieht hier nur als Abbruchbedingung aus. Das ist es aber nicht.
Mit return mit msg gibst du nur die Kontrolle von der function Node wieder an den Flow zurück. Je nachdem was Du zurückgibst, also einfaches Objekt, Array von Objekten kannst Du ein oder mehrere Nachrichten an verschiedene Ausgänge des Flows zurückgeben.Der Vorteil einer function Node ist auch, dass Du komplett neue Nachrichtenobjekte erzeugen kannst und Dich so einfach von den Eigenschaften des bisherigen Nachrichtenobjektes entledigen kannst.
Aber wie gesagt meide function Nodes. Sie sind vor allem dann nützlich, wenn Du in einem NodeKontext Zustände speichern möchtest, um dann Berechnungen durchzuführen oder wenn Du andere NodeJS Module verwenden willst. Ansonsten schau Dir die Hilfe zu den Nodes an, auch zu der function Node:
Neben return msg - kannst Du auch asynchron über node.send Nachrichten erzeugen. In der Hilfe ist außerdem ein Link zur Onlinedokumentation:
https://nodered.org/docs/user-guide/writing-functions
Dort siehst Du wie Du über ein Array mehrere Ausgänge bedienen kannst
oder bei Arrays in Arrays mehrere Nachrichten aufeinmal an einen Ausgang schicken kannst.
Im Übrigen ist es KEIN guter Stil mit return msg die function Node an unterschiedlichen Stellen abzubrechen, das macht das Debuggen unter Umständen schwierig und musst mit node.warn arbeiten. Aber das ist genau einer der Gründe warum man function NOdes meiden sollte.
-
@bynight sagte in goto in node red:
In Batch Dateien und Visual Basic, was ich am Meisten nutze, ist es gebräuchlich.
aber auch dort nicht gut. ist halt noch das erbe, das es in basic enthalten ist.
auch dort kann man goto vermeiden (ausser bei der fehler behandlung on error goto)hier ein artikel, der versucht es verständlich zu machen.
wen dein code nur 20/30 zeilen hat ok,nur der browseranteil für meine widgets zu rssfeed hat fast 900 zeilen.
wenn da wild mit goto rumgesprungen wird bist du verloren.
https://craftofcoding.wordpress.com/2022/03/28/ever-wondered-why-goto-is-considered-harmful/ -
@bynight sagte in goto in node red:
In Batch Dateien und Visual Basic, was ich am Meisten nutze, ist es gebräuchlich.
... weil das Technik aus der Steinzeit ist.
https://de.wikipedia.org/wiki/Spaghetticode
Auch VB schreibt man heute komplett ohne GoTo. Außer - wie @OliverIO schon schrieb - beim "On Error Goto ...".
-
@codierknecht
na ich bin ja auch aus der Steinzeit, und ich werde mit 58 sicher kein Hochleistungsprogrammierer mehr. :-)) Da bremsen mich ein paar seltene Goto Sprünge nicht aus. Mit nem 3 Seiten Bauernhof hat man auch reichlich anderes zu tun... :-))Gruß,
Ronald -
@oliverio
meine batch Dateien haben im Laufe der Jahre auch 300 bis 400 Zeilen gekriegt, bei 10 -15 goto Sprüngen, meist ans Ende oder zum Folgeabschnitt... aber noch nicht wild und nicht unübersichtlich... Da habe ich mit komplexen Schleifen viel mehr Probleme...Gruß,
Ronald -
hab noch ne Frage... ist es möglich die Bezeichung der Nodes auf 2 oder 3 Zeilen umzubrechen, also untereinander zu schreiben?
Gruß,
Ronald -
-
@bynight nein. Aber du kannst zu jeder Node eigene Texte verfassen und die kann man formatieren. Die stehen dann im info tab
-
@mickym das weiße comment?
-
@bynight sagte in goto in node red:
@mickym das weiße comment?
Wenn ich daheim bin schicke ich dir ein Screenshot
-
-
Grundsätzlich kannst Du über die Beschreibung/Comment Schaltfläche Deinen eigenen Text schreiben und den siehst Du dann beim Anklicken in dem Info Tab rechts.
-
@mickym
Ja, aber da sieht man eben auch immer nur den Node den man angeklickt hat... Aber Danke für die Info! -
@bynight Du kannst auch noch comment Nodes verwenden - oder Gruppen verwenden und diese beschriften.
-
@mickym noch eine Frage... wie macht man aus einem fortlaufenden Wert einen täglichen Wert, also aus total kWh daily kWh? Dafür gibt es doch bestimmt auch einen Node?
-
@bynight Na so einfach ist das nicht. Ich weiß auch nichts über Deine Daten. Ich habe mal einen Subflow gemacht, der prüft die Zählerstände (als Deinen totalen Wert) aber in Verbindung mit dem iobroker.
Ich hab mal einen eigenen Subflow gemacht, https://forum.iobroker.net/post/1148029
Da kannst ja schauen, ob der Dir was hilft.
-
@mickym Danke! Das muß ich gleich mal schauen...
In Homeassist gibt es unter Helfern eine Subroutine "Verbrauchszähler" Da läßt sich aus jedem Wert ein viertelstündlicher, täglicher, wöchentlicher, monatlicher... Wert kreieren. Den brauche ich ja z.B. bei allen Energiesteckdosen oder -schaltern die keinen täglichen Wert ausgeben, wie z.B. Shelly Geräte... Die Solarenergie messe ich z.B. mit einem Shelly 3EM vor dem Victron MPII. Die tägliche Anzeige sollte in dem Fall um Mitternacht wieder auf 0 springen... -
@bynight Ja dann musst Dir selber einen Flow basteln - ich würde Dir für die Zeiten die cronplus Node empfehlen, die ist am flexibelsten und am mächtigsten. Du musst halt die Daten irgendwo hinschreiben, wenn Du kein iobroker nutzt.
-
@mickym klappt nicht so recht... verstehe auch den Cron-plus nicht so recht... Es wird wohl je nach Einstellung alle Sekunden oder Minuten oder Stunden der aktuelle Zeitstempel ausgegeben. Aber die Trigger davor ändern daran gar nichts. Ich habe noch minutlich und sekundlich hinzugefügt. Aber die Ausgabe erfolgt immer sekündlich und minütlich. Hab dann sekündlich gelöscht dann erfolgt die Ausgabe minütlich. Ich dachte daß man mit den Triggern den Startpunkt von z.B. Minuten auf :00 setzen kann aber die Ausgabe erfolgt bei mir immer :51. Keine Ahnung wie ich das auf 00 bekomme und wofür diese Inject Nodes überhaupt gut sind.
Der Verbrauchszähler funktioniert auch nicht, da es kein iO Broker.get und .out gibt. Weiß nicht wie das im Node Red von Cerbo GX aussehen müßte...
Desweiteren ist mir nicht klar wie der Flow aussehen müßte. Ist der Shelly eine Eingangsgröße oder kommt er ans Ende wie bei Dir die Fritzboxen?
-
@bynight Das ist ja auch verkehrt - du sollst ja nicht den Shellyausgabe in die cron node stecken.
Dir cron node triggert Dir zu bestimmten Zeitpunkten und da musst Du den Verbrauch ablesen und die Differenz bilden.
Du musst also den Verbrauch in einen Kontext schreiben und dann aus den verschiedenen Zählerständen den Verbrauch errechnen. Die Cron Node triggert also nur die Berechnung musst Du schon selbst machen.
Also als erstes speicherst Du die den Zählerstand und berechnest aus dem vorangegangenen den Verbrauch.
Also speichere den aktuellen Zählerstand im Kontext. Am Besten unter Shellyname.Aktuell