Funktions-Knoten: Debuggen und Woher weiß ich, dass er Informationen von allen Nodes bekommen hat?

Node-RED als CCU3/RaspberryMatic Addon, WebApp, HomeKit, ...

Moderator: Co-Administratoren

Antworten
mickbrisgau
Beiträge: 66
Registriert: 17.10.2018, 07:14

Funktions-Knoten: Debuggen und Woher weiß ich, dass er Informationen von allen Nodes bekommen hat?

Beitrag von mickbrisgau » 18.05.2019, 11:43

Ich bin ja gerade dabei die gefühlte Temperatur zu programmieren.

Dazu hätte ich ein paar Fragen (vielleicht kann mir dabei ja jemand helfen):
  • Kann man den Funktions-Knoten debuggen? Wenn ja, wie?
  • Mein Funktions-Knoten braucht Informationen von mehreren anderen (CCU-)Knoten.
    Bekommt er immer alle, wenn er sie anfordert oder nur, wenn die sie ihm schicken?
CCU3 mit Raspberrymatic. Addons: Redmatic mit HomeKit Plugin und Alex Skill

Hypnos
Beiträge: 203
Registriert: 06.01.2018, 12:48

Re: Funktions-Knoten: Debuggen und Woher weiß ich, dass er Informationen von allen Nodes bekommen hat?

Beitrag von Hypnos » 18.05.2019, 12:06

Hallo,

Du kannst im Funktions Knoten Debug Meldungen ausgeben, Warnungen und Fehler werden auch in der Sidebar ausgegeben., sonstige Logausgaben im Log. Alternativ kannst du auch einen 2. Ausgang für Debug Meldungen nehmen.

Das Script im Funktionsknoten läuft los wenn eine Nachricht reingeht. Es kann dann auch selber wieder Funktionen haben die zeitgesteuert (Interval, timeout) laufen.

Im Funktionsknoten hat man die Daten der Eingangsnachricht(en) und in Contexte gespeicherte.

Um zu sehen ob man alle Daten hat muss man die prüfen.

Den Homematic CCU Konfigurations Knoten kann man einstellen das er Daten der HomeMatic Kanäle, Variablen,... In einem globalen Context persistiert. Dann kann man da auch vom Funktionsknoten aus zugreifen ohne dass man da alles reinschicken muss.

Meiner Meinung nach ist es aber einfacher alles reinzuschicken.

Steht ausführlich hier
https://nodered.org/docs/writing-functions

mickbrisgau
Beiträge: 66
Registriert: 17.10.2018, 07:14

Re: Funktions-Knoten: Debuggen und Woher weiß ich, dass er Informationen von allen Nodes bekommen hat?

Beitrag von mickbrisgau » 18.05.2019, 14:45

Danke für die Info.

Das https://nodered.org/docs/writing-functions habe ich schon mehrfach gelesen. Ohne das hätte ich mein Gefühlte Temperatur nicht schreiben können. :D

Hast Du mal ein Code-Beispiel für loggen im Debug-Fenster?
Um zu sehen ob man alle Daten hat muss man die prüfen.
Auch dafür würde mir ein Code-Beispiel helfen?
CCU3 mit Raspberrymatic. Addons: Redmatic mit HomeKit Plugin und Alex Skill

Hypnos
Beiträge: 203
Registriert: 06.01.2018, 12:48

Re: Funktions-Knoten: Debuggen und Woher weiß ich, dass er Informationen von allen Nodes bekommen hat?

Beitrag von Hypnos » 18.05.2019, 23:03

mickbrisgau hat geschrieben:
18.05.2019, 14:45
Hast Du mal ein Code-Beispiel für loggen im Debug-Fenster?
Um zu sehen ob man alle Daten hat muss man die prüfen.
Auch dafür würde mir ein Code-Beispiel helfen?
Zum Debuggen, nutze ich gerne:

Code: Alles auswählen

node.warn("text hier");
unter https://nodered.org/docs/writing-functions steht:

Code: Alles auswählen

node.log("Something happened");
node.warn("Something happened you should know about");
node.error("Oh no, something bad happened");
The warn and error messages also get sent to the flow editor debug tab.
Ich würde an deiner Stelle das einfach in deinem code wie folgt erweitern:

Code: Alles auswählen

...
var wind   = context.get('wind')||null;
var temp   = context.get('temp')||null;
var feucht = context.get('feucht')||null;

if (wind === null || temp === null || feucht === null) {
	return null;
}


msg.topic = "0/CurrentTemperature"

if (temp !== null) {
...
Damit passiert hier nichts, wenn nicht alle 3 Werte vorhanden sind.

hobbyquaker
Beiträge: 3116
Registriert: 12.07.2009, 20:01
Kontaktdaten:

Re: Funktions-Knoten: Debuggen und Woher weiß ich, dass er Informationen von allen Nodes bekommen hat?

Beitrag von hobbyquaker » 18.05.2019, 23:13

var wind = context.get('wind')||null;
var temp = context.get('temp')||null;
var feucht = context.get('feucht')||null;
Vorsicht - Fallstrick: Das würde bei einer Temperatur von 0°C oder bei 0km/h Wind zu false udn damit zu null evaluieren und dann bricht der Flow ab ;-)

Besser:

Code: Alles auswählen

const wind   = context.get('wind');
const temp   = context.get('temp');
const feucht = context.get('feucht');

if (typeof wind === 'undefined' || typeof temp ===  'undefined' || typeof feucht ===  'undefined') {
	return null;
}

Antworten

Zurück zu „RedMatic“