Tag 7: Treppenhauslicht

Hinter dem heutigen Türchen befindet sich eine rote LED. Damit wollen wir nun ein einfaches Treppenhauslicht mit Webinterface realisieren. Dazu müssen Sie die folgende Schaltung aufbauen und das heutige Programm aktivieren.

Versuchsaufbau

Versuchsaufbau (Kurzes Beinchen der LED ist oben)

Den Node-RED-Flow zum Importieren finden Sie in dem unteren Pastebin Frame. Deaktivieren Sie nach dem Importieren den Flow von gestern, damit sich die UDP-Empfangs-Nodes nicht in die Quere kommen. Im Flow selbst finden Sie diesmal neben dem Empfangsnode einen Sende-Node. Diesen müssen Sie wahrscheinlich an Ihre Broadcast-IP anpassen. 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. 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. Also können Sie das Treppenlicht auch über das Smartphone aktivieren, ganz im Sinne von Smarthome.

Der Flow des heutigen Tages

Der Flow des heutigen Tages

Hinweis: In der Windows-Version von Node-RED funktionierte der UDP-Node zum Senden nicht mit der Einstellung broadcast message (in den Node-Properties unter send a). In der Node-RED-Version, die ich auf einem Raspberry getestet habe, funktionierte allerdings das Senden nur mit dieser Einstellung. Das bedeutet, Raspberry-Nutzer müssen an dieser Stelle wahrscheinlich den UDP-Node zum Senden anpassen.

 

64 Kommentare

  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

    Antworten
    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 :(

      Antworten
      1. fk (Beitrag Autor)

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

        Antworten
        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.

          Antworten
  2. Hendrik

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

    Antworten
    1. fk (Beitrag Autor)

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

      Antworten
  3. Malte

    hallo,
    bei mir reagiert er nicht auf den knopf

    Antworten
    1. Matthijs

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

      Antworten
      1. fk (Beitrag Autor)

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

        Antworten
        1. Matthijs

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

          Das script uber der UDP funktioniert ohne problem.

          Antworten
        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 :)

          Antworten
  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?

    Antworten
    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.

      Antworten
      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?

        Antworten
        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!

          Antworten
  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?

    Antworten
    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.

      Antworten
      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.

        Antworten
      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 :-)

        Antworten
  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?

    Antworten
    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.

      Antworten
      1. paulaner

        kurze Bein an Minus/Masse/GND

        Antworten
    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.

      Antworten
  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).

    Antworten
    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.

      Antworten
    2. Sören

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

      Antworten
      1. marian

        Super Tipp, Danke

        habe mein Node auf OSX laufen.
        Jetzt klappts

        Antworten
  8. Benzo

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

    Antworten
    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.

      Antworten
      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

        Antworten
        1. Benzo

          Hat geklappt, vielen Dank!

          Antworten
  9. thymjan

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

    Antworten
    1. paulaner

      Nein.

      Antworten
  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ß

    Antworten
    1. paulaner

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

      Eventuell ein Pin neben Pin22?

      Antworten
  11. Rsoldie

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

    Antworten
  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

    Antworten
    1. paulaner

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

      Antworten
    2. Hans-Joachim

      Falls Du das Board mit Batterien betreibst, Batterien wechseln!

      Antworten
  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

    Antworten
    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.

      Antworten
  14. paulaner

    Dann funktioniert Bonjour nicht. Oder?

    Antworten
  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

    Antworten
    1. paulaner

      Sendet der auch den CMD Befehl? Debuggen.

      Antworten
      1. WOODO

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

        Antworten
        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.

          Antworten
      2. paulaner

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

        Antworten
    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

      Antworten
  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“.

    Antworten
    1. Eddie

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

      Antworten
    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.

      Antworten
      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 :-)

        Antworten
        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?

          Antworten
          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?

    Antworten
    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

      Antworten
    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.

      Antworten
      1. paulaner

        Keine Ahnung von OSX.

        Ich benutze Win8.1, Firefox 63.0.3 64-Bit

        Antworten
      2. Michael

        Hi Stan,

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

        Antworten
        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.

          Antworten
          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.
    :-)

    Antworten
    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“

      Antworten

Schreiben Sie einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.