Fehlersuche in NodeRED

Macht man seine ersten – oder auch schon etwas intensivere – Schritte im NodeRED, geht nicht alles sofort glatt. Bei mir zumindest.

Häufige Fehler bei mir:

1. Ich baue Endlosschleifen – und nichts geht mehr.

Gerade im Zusammenhang mit NodeRED Dashboard ist es mir immer wieder passiert, dass ich Endlosschleifen gebaut habe.

Allein dieser Aufbau birgt schon das Risiko einer Endlosschleife.

Abhilfe ist einfach. Beim Laden des Variablenwertes den Modus auf „block unless value changes“ setzen.

An anderer Stelle kann auch der report-by-exception – Node (rbe) hilfreich sein. Hier wird jede msg aufgehalten, bis der payload sich unterscheidet.

2. Ich setze statt change ein switch

Eigentlich sind switch und change sehr leicht auseinanderzuhalten. Nur liegen sie in der Palette halt direkt nebeneinander, haben ähnliche Symbole, die gleich Farbe, und möchte man ein Change (ich ändere den Wert einer Variable) einsetzen und setzt stattdessen ein Switch (if then else) fällt auch das Properties Menü kaum negativ auf, sofern man nur kurz die payload verändern will. Mir schon mehrmals passiert – hier lohnt sich ein genauer Blick.

3. Datentypen

Im ioBroker-Adapter NodeRED ist standardmäßig eingestellt, dass alle aus dem ioBroker gelesen Werte in String (Text) umgewandelt werden.

Versucht man dann mit den Werten zu arbeiten, zu rechnen, true und false zu vergleichen, merkt man schnell, entweder muss die Option im Adapter umgestellt werden, oder man muss mit Datentypen jonglieren. In diesem Fall wird der JavaScript function-Node dein Freund.

Zum Beispiel zum Umwandeln einer Zahl (string) in eine „wirkliche“ Zahl (float).

msg.payload=parseFloat(msg.payload);

Wird sicher fortgesetzt …

2 Gedanken zu „Fehlersuche in NodeRED“

  1. Hallo Lukas,
    nach einigen leidvollen Loop-Erfahrungen helfen mir während der Entwicklung neuer Funktionen in Node-Red folgende Maßnahmen:

    1.) bei allen Dashboard-Nodes (z.B. UI_Switch, UI_Slider etc.) konsequent und IMMER die Pass-Through Funktion deaktivieren!!!
    Bei diesen sollte eigentlich grundsätzlich immer das Pass-Through deaktiviert werden. Zugleich sollte man z.B. beim UI_Switch den Indicator auf „Switch icon shows status of the INPUT“ setzen. Nur so erhält man zuverlässig den tatsächlichen Status des Eingangswerts (z.B. Lampe ist an oder aus als Rückbestätigung des ISTwerts und nicht als SOLLwert).

    2.) in jedem Flow während der Entwicklungsphase einen Inject-Node einbauen, an den man einen Exec-Node anhängt, der den „Reboot“ Befehl für den Raspi beinhaltet bzw. ausführt („Sudo Reboot“). Falls die Endlosschleife nicht zuviel Rechenlast produziert, kann mit etwas Glück mit diesem Inject ein Reboot ausgelöst werden. Alternativ kann ein Befehl zum Stoppen von Node-Red eingebaut werden. Da die hierfür benötigten Rechenfenster wegen der Endlosschleife jedoch sehr rar und kurz sind, braucht man in der Regel viel Geduld – und diese Methode funktioniert nicht immer (daher recht unzuverlässig).

    3.) für mich bisher effektivste Lösung: bei potenziell kritischen Schleifen (immer wenn man von einem Ausgang auf einen vorherigen Eingang zurückführt) vorsichtshalber zunächst einen Delay-Node mit mindestens 500ms Verzögerung einbauen. So reduziert man die Rechenlast und kann immer eingreifen und den Vorgang stoppen, indem man die Verbindung kappt und einen neuen Deploy durchführt.
    Gleichzeitig immer einen Debug-Node ansetzen und das Ausgabefenster beobachten. Wenn die Meldungen fortwährend und im 500ms-Rhythmus eintrudeln, dann erkennt man das Problem und kann leicht eingreifen.
    Hier ist nach erfolgreichem Abschluss der Programmierung einfach nur der Delay- und der Debug-Node zu löschen und man muss nicht zusätzliche Konvertierungen durchführen.

    Viele Grüße,
    Markus

    1. Danke für die Ausführungen! Pass-Trough ist tatsächlich eine Funktion, die man mit äußerster Vorsicht benutzen sollte. Auch wenn es die Standard-Einstellung ist, ist es meinen Erfahrungen nach in den seltensten Fällen die richtige Konfiguration. In Kombination mit dem „Send only on then ack==true“ im iobroker in-Node lässt sich mit „Switch icon shows status of the INPUT“ tatsächlich eine gute Rückmeldung über die Ausführung eines Befehls realisieren. Auf das Inject-Reboot bin ich tatsächlich noch nicht gekommen. Zum Glück habe ich aus meinen Fehler gelernt und schon eine ganze Weile mein Node-RED nicht mehr in die Endlosigkeit geschickt. Für Beginner aber auf jeden FAll eine gute Maßnahme, um ein wenig Frust zu vermeiden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert