Day 7: Stairway Light

There is a red LED hidden behind the door today. We are going to use this to build a simple stairway light with web interface. We will thus build the following circuit and, of course, activate today’s program.

Versuchsaufbau

Breadboard Construction (short LED pin is up)

Locate the Node-RED flow below and import. Deactivate yesterday’s flow after the import to make sure the UDP receive nodes do not get in your way. This time the flow also has a send node besides the receiving node. You may need to adapt the send node to reflect your broadcast IP. A message that arrives at the UDP will be converted back to a JSON object by means of a JSON string, which is pure text. The difference here is that you can now access also individual attributes.

The following switch node is comparable to an IF query that checks, if the trigger command was sent. This command is triggered by pressing the button. A trigger node then starts to work. If the trigger node is activated, it sends the light_on command. This message is in JSON format and interpreted by the NodeESP board. The lights are turned on accordingly. Then, after four seconds, the trigger node sends the message: light_off. The board responds accordingly. The off message may be delayed by triggering the trigger node once more. The option to do that has been activated in the module. The trigger node can also be activated via the web UI and you can turn on the stairway light with your smartphone in line with the concept of a smart home.

Der Flow des heutigen Tages

Flow of a stairway light

Note: In the Node-RED Windows version, the setting broadcast message (send a in node properties) for the UDP send-node did not work. But for the Node-RED version, I have tested on a Raspberry, only this setting worked for sending. This means that Raspberry users may need to adjust their UDP node for sending.

64 Comments

  1. Sascha

    Ich kann das scrit nicht importieren bzw. deployen, da mit ui_group fehlt.
    Erst hat das ganze ui zeug gefehlt, habe dann über die Verwaltung ui nachinstalliert,
    jetzt ist alles dabei ausser ui_group.

    Das kommt auch direkt beim starten von node-red:

    8 Dec 16:20:05 – [info] Warten auf fehlende Typen, die registriert werden sol:
    8 Dec 16:20:05 – [info] – ui_group

    Was kann ich machen?

    Node-Red läuft bei mir in einer Debian VM

    Reply
    1. Sascha

      Also ich hab jetzt mal alles versucht, ich bekomme es nicht hin das ich den ui_group node erhalte.
      Es kommt jedesmal die Fehlermeldung das der Typ ui_group fehlt.

      Was muss ich machen? Dadurch dass der Typ fehlt startet Node-Red den flow auch nicht :(

      Reply
      1. fk (Post author)

        Hi hast du das Dashboard über "Palette verwalten" erfolgreich installiert?

        Reply
        1. Sascha

          Hi,
          ja, ging aber nicht. Habe fast alles was mit ui zu tun hatte dann per Hand nachinstalliert, ohne Erfolg. Es hat immer ui_group gefehlt, keine Ahnung wieso.
          Hab es mittlerweile aber gelöst bekommen, ich habe node-red nochmal komplett deinstalliert und danach nochmal komplett neu installiert.
          Danach nochmal alle flows importiert und dann ging es auf einmal ohne Fehlermeldung.

          Reply
  2. Hendrik

    Mein Taster ist defekt.
    Wie kann ich einen neuen bekommmen?

    Reply
    1. fk (Post author)

      (SPOILER: An Tag 12 Gibts einen weiteren Button. Du kannst aber auch einfach nur kurz eine Drahtbrücke zwischen den Kontakten aufbauen)

      Reply
  3. Malte

    hallo,
    bei mir reagiert er nicht auf den knopf

    Reply
    1. Matthijs

      bei mir auch nicht, der taster is nicht defekt.
      Und der LED arbeited aus das dashboard.

      Reply
      1. fk (Post author)

        Manchmal sitzt der Button nicht richtig. Funktioniert es wenn ihr den Kontakt mit einer Drahtbrücke aufbaut?

        Reply
        1. Matthijs

          Nein, das functioniert leider auch nicht.
          Bei tage 5 gibt es ein selbe problem.

          Das script uber der UDP funktioniert ohne problem.

          Reply
        2. TP

          Bei mir hat er auch nicht funktioniert, ich habe daraufhin die SD-Card herausgenommen (auf welche ich nie zugreifen konnte). Jetzt funktioniert der Taster :)

          Reply
  4. BestRazer

    Es funktioniert mal wieder nicht. Ich habe den Flow in Node-Red importiert. Aber wenn ich den Button drücke passiert nichts (war auch an den letzten beiden Tagen so). Wenn ich in der UI den button drücke kommt die Fehlermeldung "udp : Error: getaddrinfo ENOTFOUND http://192.168.188.255".
    Was mache ich falsch?

    Reply
    1. Abu Kali

      Das ist die Broadcast-Adresse! Die 178 die vom Past-Bin kopiert wird, steht fürs Subnetz. Bei FritzBoxen i.d.R. 178 – das auf jeden Fall prüfen. Ansonsten mal nicht die Broadcast-Adresse sondern die IP-Adresse des NodeESP eintragen (bei UDP-out) – dann sollte es in jedem Fall funktionieren.

      Reply
      1. BestRazer

        Hallo, Ich habe es nun mit der direkten IP-Adresse versucht. Jetzt kommt, wenn ich den Staircase-Trigger im Dashboard benutze, die meldung "{"cmd":"ack"}". Das bedeutet doch theoretisch dass das Board zwar den Befehl empfangen hat aber nichts damit anfangen kann, oder?

        Reply
        1. Abu Kali

          Hallo, wenn ich hier den Dashboard-Button drücke erscheint {"cmd":"ack"} u. die Lampe leuchtet u. dann nochmal {"cmd":"ack"} – d.h. das Board kann den Befehl bearbeiten.
          Wenn ich den Button auf dem Breadboard drücke, dann erscheint {"cmd":"trigger"}, {"cmd":"ack"} die Lampe leuchtet ein paar Sekunden u. dann {"cmd":"ack"}

          Wenn das "ack" erscheint, sollte eigtl. alles OK sein, d.h. die Kommunikation zwischen dem NodeRed-Server u. dem Board scheint zu funktionieren. Evtl. mal die Firewall abschalten u. die "Verkabelung" bzw. LED prüfen? Und darauf achten, dass immer nur ein Flow aktiv ist?

          Nutze ich Linux, funktioniert es nur wenn ich die IP des NodeRed in UDP-out eintrage. Mit Windows reicht auch die Broadcast Adresse (.255)
          Viel Erfolg!

          Reply
  5. Enno Klatt

    Der Flow gibt mir einige Rätsel auf. Reduziert man den Flow auf bottom-node, trigger-node und udp-output-node funktioniert alles wunderbar.

    Frage: Welchen Zweck erfüllt die udp-input-node, json-node und switch-node?

    Reply
    1. Meichr

      Der udp-input-node, json-node und der switch-node verarbeiten eine Betätigung des Tasters am NodeESP. Der NodeESP sendet diese Information per UDP an den Flow.
      Die anderen Nodes verarbeiten nur die Klicks auf den Dashboard-Button.
      Wenn die drei genannten Nodes weggelassen werden, schaltet ein Druck auf den Taster die LED nicht mehr ein.

      Reply
      1. paulaner

        genau!

        Zitat f.k.:
        Der folgende Switch-Node ist vergleichbar mit einer IF-Abfrage. Es wird überprüft, ob das Kommando trigger gesendet wurde. Dieses Kommando wird durch Drücken des Buttons ausgelöst. Ein Trigger-Node übernimmt daraufhin die Arbeit. Wird der Trigger-Node aktiviert, sendet er den Befehl light_on für „Licht an“. Diese Nachricht, ebenfalls im JSON-Format, wird vom NodeESP-Board interpretiert, und entsprechend wird das Licht angeschaltet. Nach weiteren vier Sekunden sendet der Trigger-Node die Nachricht: light_off für „Licht aus“. Auch hierauf reagiert das Board entsprechend. Die Off-Nachricht kann verzögert werden, indem der Trigger-Node erneut ausgelöst wird. Dafür wurde in dem Modul eine entsprechende Option aktiviert. Zusätzlich kann der Trigger-Node auch über die Web-UI aktiviert werden.

        Reply
      2. Enno Klatt

        Danke, das hat funktioniert. So stelle ich mir das vor.
        Meine Irritation war das Wort "Button". Der Button (separater Taster) auf dem NodeESP und die button-node des dashboard.
        Dazu kommt der Trick, das das NodeESP beim betätigen des NodeESP-buttons die Zeichenketter "trigger" schickt, die vom switch ausgewertet wird. Danke :-)

        Reply
  6. Philip

    Bei mir funktioniert die Lampe leider nicht. Ich sehe im Node Red alle Kommandos, ich habe die ZielIP schon auf den NodeESP direkt umgestellt habe auch schon im Node-Red als Quellport auf Random gewechselt – Keine Änderung.

    Kann mir einer sagen wie ich testen kann ob die Lampe überhaupt funktioniert?

    Reply
    1. paulaner

      Hallo,
      1. die Lampe ist eine LED!

      googlen kannst du sicher?

      siehe Bild

      Oder willst du den Ausgang/Output des Board prüfen? Pin 22?

      Der führt nur 4 Sekunden Spannung gegen Masse/GND wenn du den Butten drückst auf dem Steckbrett oder 'Staircase' auf dem Dashbord/UI, vorraus gesetzt du hast auch den Button richtig auf den Steckbord gepinnt, Pin 18 gegen Masse/GND.

      Reply
      1. paulaner

        kurze Bein an Minus/Masse/GND

        Reply
    2. Markus H.

      Hallo, ich habe im NodeESP unter Board Configuration bei den UDP-Settings einfach den sendenden und empfangenen Port auf 55056 gesetzt, dann ging die LED an. Ist hier ein bisschen schlecht erklärt.

      Reply
  7. Andreas

    Bezüglich dem udp : Error: send EACCES 192.168.178.255:55056 Fehler – mit scheint es so, dass NodeRED nicht gleichzeitig auf Port 55056 lauschen *und* broadcasten kann (zumindest auf meinem Linux-System).
    Was bei mit geklappt hat, ist, den Sende-UDP Node auf "broadcast message" umzustellen, und "bind to random local port" auf "bind to local port 55057" (oder irgendeinen anderen Port).

    Reply
    1. paulaner

      Nein hat bei mir nicht geholfen.
      Win 8.1

      Erst ersten Schritt -> kein Erfolg
      Zweiten Schritt -> kein Erfolg

      Bleibt so, ab und zu ein 'Ausreiser' macht bei mir nichts an den Farben/Helligkeit der LED.
      Ist ja auch nur sporadisch, ca. aller 50-100 Massages 1 mal.

      Reply
    2. Sören

      Super Tipp Andreas, Vielen Dank!
      Hab mein Node auch auf nem Debiansystem laufen und so gings..

      Reply
      1. marian

        Super Tipp, Danke

        habe mein Node auf OSX laufen.
        Jetzt klappts

        Reply
  8. Benzo

    Wie kriege ich das Licht per UI zum Leuchten? Was muss ich im Node-RED anklicken?

    Reply
    1. paulaner

      Hall,

      f.k. hat doch alles schon geschrieben.

      Die UI hat damit nix zu tun.
      Die Schaltung (der Phototransistor) ist es und das Progamm welches du in dein NodeESP lädst.
      Anschließend den Flow des heutigen Tages aufgerufen und deployed.
      Den gestrigen, sollte er noch im Editor stehen, deaktivieren und den heutigen aktivieren.

      Das wars.

      Reply
      1. paulaner

        Korrektur, sorry ich war schon weiter.

        Zweiten Browsertab/Browser aufmachen und dort die URI
        127.0.0.1/ui eingeben.
        Sollte dort ein Button mit der Bezeichnung Staicas Trigger zu sehen sein. Drücken. viola

        Reply
        1. Benzo

          Hat geklappt, vielen Dank!

          Reply
  9. thymjan

    Bei mir werden sämtliche Kommandos doppelt angezeigt. Ist das richtig?

    Reply
    1. paulaner

      Nein.

      Reply
  10. Kai Kramer

    Hallo, bei uns leuchtet die LED nicht. In Nodered werden die JSON Nachrichten alle angezeigt. triger,light_on,light_off. Die LED leuchtet auch wenn wir sie an 3,3V verbinden nur nicht über das Program Tag 7? Wie kann man prüfen ob das Programm korrekt läuft?

    Gruß

    Reply
    1. paulaner

      Pin 22 -> Widerstand (1kOhm)
      andere Seite Widerstand -> lange Bein LED
      kurze Bein LED -> GND

      Eventuell ein Pin neben Pin22?

      Reply
  11. Rsoldie

    Danke,da hast du allerdings recht. Ich gehs gelassen und der reihe nach an.
    Mfg
    Rsoldie

    Reply
  12. Kport

    mein Board funktioniert gar nicht mehr. ich hab schon probiert die Firmware neu zu laden. wenn ich den Boot Button drücke und halte startet es nicht

    Reply
    1. paulaner

      Ist es nicht ein bischen wenig was du uns vorwirfst?
      Wir sitzen alle mit einer Glaskugel hier!

      Reply
    2. Hans-Joachim

      Falls Du das Board mit Batterien betreibst, Batterien wechseln!

      Reply
  13. Rsoldie

    Ein freundliches hallo in die runde. Hab heute erst meinen kalender bekommen und allem anschein nach schon eine menge nachzuholen. Irgendwas, worauf ich besonders achten sollte? Falls es schon probleme gab? Wenn nicht um so besser. Dann werd ich mal.mfg
    Rsoldie

    Reply
    1. paulaner

      Hallo,

      Du solltest dir fk’s Anleitung richtig durchlesen, die Kommentare lesen und selbst ein wenig deinen Grips benutzen.
      Dann posten.
      Aber ich denke viel Aktivitäten werden bei vergangenen Tagen nicht mehr drin sein.
      Viele sind schon bei Tag 24, was wiederum einen Adventskalender ad absurdum führt.

      Aber dir viel Spaß, wie uns Allen.

      Reply
  14. paulaner

    Dann funktioniert Bonjour nicht. Oder?

    Reply
  15. WOODO

    Der Button im UI geht einwandfrei nur der Button auf dem Board möchte nicht so richtig. Hab im Paket sender die Button State abgefragt da ändert sich bei Tastendruck der Logische Zustand des Schalters. Die Frage ist nur warum löst der Schalter druck den Trigger der Lampe nicht aus ?

    MFG

    WOODO

    Reply
    1. paulaner

      Sendet der auch den CMD Befehl? Debuggen.

      Reply
      1. WOODO

        Nein sendet keinen CMD Befehl irgend eine Ahnung was das sein kann ?

        Reply
        1. paulaner

          das grüne Feldchen rechts neben den msg.payload hast du aber aktiviert?

          Ich habe testweise alle Kabel entfernt, wenn ich den Button betätige kommt wenigsten die Meldung, siehe Bild.

          Reply
      2. paulaner

        solange der Trigger Baustein läuft hat er auch einen 'blauen' Punkt darunter.

        Reply
    2. Hans-Joachim

      empfehlendswert: Beim Gebrauch der Mikrotaster auf dem Breadbord Kontaktbeinchen vorsichtig mit der Zange Krümmung glätten. Die Beinchen des Tasters werden dadurch etwas länger und stecken sicherer im Breadbord bzw. Kontakt wird sicherer

      Reply
  16. Peter

    Hat auf Anhieb alles funktioniert, ohne dass ich eine Änderung machen musste. :-)

    Nachdem ich mir den Flow angeschaut habe, fragte ich mich welchen Zweck der Teil
    UDP in -> Json -> Switch erfüllt und einfach die Verbindung zwischen Switch und Trigger getrennt und festgestellt, dass Button in der UI weiterhin fehlerfrei funktioniert. An sich sollte es reichen den Flow auf
    Button -> Trigger -> UDP send zu reduzieren. Man bekommt dann nur keine Debug-Meldung zu den Kommandos "light_on", "light_off" und "ACK".

    Reply
    1. Eddie

      Der Button auf dem Board funktioniert nicht mehr, wenn Du die Verbindung trennst.

      Reply
    2. paulaner

      Hallo,

      gut erklärt, wenn ich auch erst etwas darüber nachdenken musste.

      UDP in -> Json -> Switch

      der Switch wandelt das Eingangssignal in dem Fall in ein Triggersignal um.

      Button -> Trigger -> UDP send

      Kann man dann als zwei eigenständige Flows sehen die hier kombiniert wurden.

      Reply
      1. Peter

        Jetzt habe auch ich den Zusammenhang verstanden. Ich kann die LED also per click im UI starten oder per Taster auf dem Board. Das funktioniert nur, weil UDP -> Jason -> Switch den Tastendruck in ein Trigger verwandeln.

        Gefällt mir :-)

        Reply
        1. Bernd

          Ich verstehe es immer noch nicht ganz. Beim Taster wird am Switch-Ausgang ein Objekt cmd: "trigger" an den Trigger geschickt, der UI-Button schickt einen String "d84643c4.e5adf" an den Trigger. Beides akzeptiert der Trigger. Warum dann erst die Wandlung mit json –> switch beim Taster?

          Reply
          1. paulaner

            fk schreibt dazu:

            Wenn am UDP-Note eine Nachricht ankommt, wird sie wieder von einem JSON-String, also reinem Text, in ein JSON-Objekt konvertiert. Der Unterschied ist, dass man nun direkt auf einzelne Attribute zugreifen kann.

            Der folgende Switch-Node ist vergleichbar mit einer IF-Abfrage. Es wird überprüft, ob das Kommando trigger gesendet wurde. Dieses Kommando wird durch Drücken des Buttons ausgelöst. Ein Trigger-Node übernimmt daraufhin die Arbeit. Wird der Trigger-Node aktiviert, sendet er den Befehl light_on für „Licht an“. Diese Nachricht, ebenfalls im JSON-Format, wird vom NodeESP-Board interpretiert, und entsprechend wird das Licht angeschaltet. Nach weiteren vier Sekunden sendet der Trigger-Node die Nachricht: light_off für „Licht aus“. Auch hierauf reagiert das Board entsprechend

          2. Bernd

            Ist schon klar, aber warum sendet der "Staircase Trigger" an den "Trigger 4s" etwas ganz anderes (siehe Debug) und der "Trigger 4s" reagiert genau so darauf wie über das, was er vom "switch"-Ausgang bekommt…

  17. Michael

    Moin zusammen,
    bei mir leider nicht. Egal was ich einstelle, ich bekomme immer die Log-Ausgabe: "udp : Error: send EACCES

    Hat jemand eine Idee warum?

    Reply
    1. paulaner

      hast du den Node Server laufen?
      Beachte den Hinweis am Ende von fk’s Ausführungen.

      Ich mußte die UPD Adresse ändern, dann funktionierte der Button, sowie die Web GUI

      Reply
    2. stan

      Keine Ahnung, habe alles mögliche ausprobiert. Es funktioniert nur dann, wenn ich direkt die IP-Addresse des NodeESP eingebe. Über Broadcast geht es bei mir gar nicht. Habe OSX, Netzwerk über fritz.

      Reply
      1. paulaner

        Keine Ahnung von OSX.

        Ich benutze Win8.1, Firefox 63.0.3 64-Bit

        Reply
      2. Michael

        Hi Stan,

        das kann ich bestätigen. Wenn ich die Board-eigene IP benutze, dann funktioniert die Aufgabe

        Reply
        1. stan

          habe es lösen können…
          Das Problem war in der Einstellung "bind random local port" bei dem UDP-Output. Habe einen festen Bind-Port definieren – danach ging.

          Reply
          1. thymjan

            Vielen Dank, Stan! Bin auch mit macOS unterwegs und dein Tip hat mir geholfen. Ohne diese Änderung hat bei mir das Treppenhauslicht nicht geleuchtet.

  18. wildi

    Guten Morgen
    Hat funktioniert. Musste allerdings die Adresse 192.168.178.255 im UDP-Node zum Senden löschen.
    :-)

    Reply
    1. Daniel G

      Danke für den Tipp wildi,

      bei mir hat es auf dem Raspberry mit send udp message geklappt als ich dort nodeesp.local eingetragen habe.

      Broadcast ging leider nicht wegen eines Fehlers
      "udp : Error: send EACCES 192.168.0.255:55056"

      Reply

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.