NEWS
Laden des Autos mit festem Wert
-
@gr Also wie gesagt ich komme mit Deiner Logik nicht klar, aber hier mal ein paar Beispiele.
Sowie ich das verstehe, gibst Du mit der payload ein Ladeziel vor.
In der 1. Change Node lese ich den globalen Kontext aus und speichere ihn in der Nachrichteneigenschaft "zaehler" bzw. wenn die globale Kontextvariable nicht existiert, intialisiere ich diese mit 0.
Dann addiere ich den zaehler mit dem ladeziel (also der payload) und speichere dies in der Nachrichteneigenschaft "neu".So in der Eigenschaft "neu" steht nun die Summe die DU untersuchen willst. Dazu nimmt man eine switch Node.
Ich verstehe die Logik nicht, aber ich erläutere mal die Fälle, die ich untersucht habe.
Ausserdem habe ich festgelegt, dass bei der ersten erfüllten Bedingung gestoppt wird, also nur EINE Bedingung zutrifft, also wie bei Deinem else if und somit in der Priorität abnehmend.Untersucht wird als msg.neu (also die Summe aus Ladeziel und dem globalen Zaehler).
- Summe (msg.neu) ist >= 100
- Summe (msg.neu) ist > zaehler
- Summe (msg.neu) ist <= zaehler
- Weiß nicht - passt für mich nicht in die Logik - aber ich habs mal aufgenommen. Ladeziel (msg.payload) = 100 - dies muss abweichend angegeben werden, da ja msg.neu (also die Summe plötzlich nicht interessiert).
- Alles andere = Fehler
Ich habe mal an 2 Ausgänge auch Debug Nodes gemacht, damit Du Deine Logik überprüfen kannst, kannst ja später wieder weg machen.
In den Change Nodes habe ich die Aktion dann festgelegt und die Summe (msg.neu) als neuen Zählerstand in den globalen Kontext "total" geschrieben. Du hast ihn ja in "totalneu" geschrieben. Erschließt sich mir nicht, da dann ja der Zähler immer unverändert bleibt.
Wie gesagt ich will das im Detail gar nicht wissen. Du hast nun aber bessere Debugmöglichkeiten Deine eigene Logik zu messen.
Hier zum Import:
-
Wie gesagt, sonst musst halt mit node.warn Nachrichten in Deiner function Node arbeiten, um diese zu debuggen. Ist meines Erachtens wesentlich umständlicher als mit debug Nodes zu arbeiten und wie gesagt Du nutzt die Möglichkeit nicht, die Dir eine "Low Code" Tool wie NodeRed bietet - also Code zu minimieren.
Manchmal mag das angebracht sein, wenn die Bedingungen sehr komplex sind - wobei man auch da diese Komplexität lieber in mehr Nodes aufteilt als alles in eine function zu codieren.
Wie gesagt, Du kannst JEDEN FLOW in EINER function Node codieren und vielleicht nur die In- und Out Schnittstellen von NodeRed nutzen, aber Du vergibst Dir die Möglichkeit der Fehlersuche oder der raschen Änderung der Logik durch Neuverkabelung oder Neuanordnung der Nodes und Zerlegung in Teilschritte durch die ChangeNodes mit der Du Berechnungen bzw. Änderungen oder durch JSONATA mit wenig Code schnelle Analysen vornehmen kannst.
-
@mickym Du bist ja der Wahnsinn. Das sieht schon mal gut aus. Da brauch ich aber, um das umzusetzen. Mach ich heute Abend!
-
@gr Ja wie gesagt Deine Logik erschließt sich mir nicht, aber damit kannst Du nun selbst Deine Logik überprüfen.
Übrigens Strings für Deine telegram Nachricht geht auch easy mit JSONATA - als Verkettung nimmst Du nur ein '&'.
Also Du schliesst einfach eine Regel an und schreibst dein Objekt im JSON Editor. (Der macht nämlich gleich eine Syntaxprüfung auf Korrektheit Deines JSON Objektes).
und setzt dieses Objekt als msg.telegram einfach als weitere Regel:
-
@mickym Ich konnte mich nicht zurückhalten und habs mal für angepaßt.
Sieht jetzt so aus:
Mein Problem bleibt bestehen: Es wird nicht abgeschaltet, wenn Zähler >= Zielwert.
Einschalten funktioniert, Abbrechen auch.Ich hab rumexperimentiert mit
Es scheint als ob das Skript nicht mehr läuft, wenn der Ziel-Zählerstand erreicht ist. Brauch ich vielleicht einen Träger der den Zählerstand immer wieder abfragt? -
@gr Ja das kann alles sein - wie gesagt nun hast Du ja die Möglichkeit . Allerdings hast Du switch falsch genutzt. $ bezieht sich auf Umgebungsvariablen und nicht auf den Kontext.
-
@mickym Wie krieg ich den da den aktuellen Wert rein?
msg.zaehler klappt nicht. So wie oben gehts auch nicht und der gleiche String als JSONata-Ausdruck geht auch nicht. -
@gr Wieso ich habe doch in der Change Node vorher, msg.zaehler auf den globalen Kontext "total" gesetzt.
EDIT: Bin aber wahrscheinlich erst morgen wieder on.
-
@mickym Ja schon, aber wenn dann der Zähler soweit hochgelaufen ist, daß es Zeit ist zum Stoppen, dann steht der Wert anscheinend nicht zur Verfügung.
-
@gr ich bin unterwegs. Ja dann hast NodeRed noch nicht verstanden. Im Moment wird der Flow nur durch Dein Dashboard getriggert. Willst du dass das zyklisch automatisch aktualisiert wird, musst du mit einer trigger Node und der payload, die Change Node immer wieder triggern und so den Kontext erneut abrufen und somit aktualisieren