NEWS
Node-Red Funktion funktioniert nur im Debug
-
Hallo Zusammen,
ich habe eine Funktion erstellt, die mir ab 00:00Uhr stündlich (per Inject) die aktuelle Temperatur ausliest, diese aufaddiert und um 23:00Uhr den Tagesmittelwert bildet. Die Funktion tut absolut einwandfrei, jedoch nur solange man den Inject Node manuell triggert und sich das Ergebnis auf einem Debug-Node anschaut. Wenn ich dann alles laufen lasse, passiert um 23:00Uhr einfach garnichts. Kein return, keine Ausgabe. Kann mir jemand von euch sagen, was hier schief läuft?
Eine zweite Funktion setzt um 23:05 die globalen Variablen zurück auf 0, also daran sollte es nicht scheitern. Und wie gesagt, im Debug tut alles wunderbar...
Anbei mal der Code:
var zeitstempel = msg.payloadTimeStampTemp; var currentTemp = global.get('currentTemp'); var averageTemp = global.get('averageTemp'); var sumCounter24 = global.get('sumCounter24'); var sumTemp = global.get('sumTemp'); if(zeitstempel === true) { sumCounter24 += 1; global.set('sumCounter24', sumCounter24); sumTemp = sumTemp + currentTemp; global.set('sumTemp', sumTemp); if(sumCounter24 == 24) { averageTemp = sumTemp/24; msg.payload = Number(averageTemp.toFixed(2)); global.set('sumTemp',0.0); global.set('averageTemp', 0); global.set('sumCounter24', 0); return msg; } msg.payload = {sumCounter: sumCounter24, sumTemp: sumTemp}; return msg; }
Vielen Dank euch schon Mal!!
-
@stefan7d Na ja - mal abgesehen davon, dass es dafür ja eine fertige Node gibt, ist es halt nicht besonders glücklich, dass Du halt logische Zweige drin hast, in der Du keine Nachricht zurückgibst. Wenn Du immer eine Nachricht zurückgibst, dann siehst Du wenigsten ob getriggert wurde ansonsten kann ja die function Node Deine Nachricht verschlucken. Alternativ prüfst Du direkt an den Inject Nodes mit einer Debug Node, ob diese getriggert wurden.
var zeitstempel = msg.payloadTimeStampTemp;
schaut komisch aus - aber dazu müsste man ja Deine Inject Nodes sehen.
-
Hey Micky,
danke für deine Antwort. Wie gesagt, beim manuellen triggern der Inject Nodes funktioniert alles prima. Und auch aktuell sieht alles sehr gut aus:
Wir haben es gerade 22:49 und der Counter passt, die Summe passt. Nur dass es gleich beim umschalten auf 23:00Uhr nicht zur erwünschten Ausgabe des Mittelwerts kommt. Wenn ich danach manuell injecte, springt er sauber von 23 auf 0, berechnet den Mittelwert und setzt den msg.payload entsprechend.
Den aggregator Node kenne ich auch schon, aber ich komm damit nicht klar.
Gruß
Stefan -
@stefan7d Nochmal - wenn Du ein Problem eingrenzen willst, dann lass aus der Function Node IMMER eine Nachricht entstehen und/oder mach eine Debug an Deine Inject Nodes.
Du musst doch sicherstellen, dass- getriggert wird
- Deine Function Node keine Nachrichten verschluckt.
Ich weiß nicht, wie Du sonst dem Problem auf die Spur kommen willst. An einen Fehler in NodeRed glaube ich am allerwenigsten.
Letztlich habe ich Dir gesagt, dass kann niemand Deinen Code beurteilen - dann exportiere Deinen Flow - ansonsten kann man da nichts erkennen.
-
Hallo Micky,
du hast natürlich Recht und ich hatte auch schon an allen Stellen einen Debug-Node dran, aber die hätten mir hierbei leider nicht geholfen
Die Funnktion arbeitet einwandfrein nur hatte ich den Inject-Node falsch konfiguriert:
Meine Vorstellung war, dass wenn der erste Inject um 00:00Uhr kommt, dann kommt der letzte um 23:00Uhr. Weit gefehlt! Ich hab jetzt zwischen 00:00 und 00:00 drin und schon tuts.
Aber danke dir für deine Unterstützung!
Gruß
Stefan -
@stefan7d eine debug node an der inject node hätte dir sehr wohl geholfen. man kann die debug nodes so konfigurieren, dass sie auf der systemkonsole loggen und dann wäre dir aufgefallen, dass um 23:00 Uhr nicht mehr getriggert worden wäre.
Außerdem hättest dann ja eine Stunde später der Reset stattfinden müssen bzw. sich alles um 1 std/tag nach hinten verschieben müssen. Alles Informationen, die so nicht vorlagen.
in solchen Fällen ist es deshalb wichtig, nicht nur einen Screenshot zu machen, sondern den Flow zu exportieren.
Ausserdem wäre interessant, warum die aggregator Node für Dich nicht funktioniert hat. Das ich ausserdem kein Freund von Code schreiben bei solch einfachen Aufgaben bin, weiß ja auch jeder, der meine Posts etwas verfolgt.