Day 17: Time-controlled Lights

The door of day 17 reveals another potentiometer. Now we have one potentiometer for each LED and thus we will develop the program of Day 13, the Smart Lights, so that we will get a more convenient and intuitive dimming feature. We will also learn today how we can start timed events with Node-RED.

Versuchsaufbau

Breadboard Setup

Activate today’s program in the web interface. As always disable previous flows and change the MQTT topic to reflect your personal ID and then install today’s flow into the Node-RED environment.

Der Flow von Tag 17

Today’s Flow

As you know already, you can turn the LEDs on and off via the hardware buttons or via the user interface. The brightness of the individual LEDs is controlled by the potentiometers. As an alternative to the buttons, you have got the injection nodes in the corner bottom left. You can use them to specify the times a command is sent to the board. All you have to do is double-click on the corresponding node and select the time and also the days when the message should be sent. You can use it for example, to set an automatic lamp in a living room or an aquarium or activate special lighting on working days – fully automatically and much like the smart home concept.

30 Comments

  1. noRMAn

    Hallo Leute,
    bis hier hab ich alles hinbekommen! Super Sache das Ganze.
    Lieder funktioniert meine Inject Node at a specific time nicht?
    Hab die Zeitzone auf dem PI zurückgesetzt und alles neu gestartet, ohne Erfolg.
    Habt Ihr eine Idee woran das sonst liegen könnte?

    Reply
    1. paulaner

      Zeit setzen und depoyen nicht vergessen

      Reply
      1. noRman

        Danke für deine Antwort. Das mache ich ja und trotzdem funktioniert das mit der Zeit nicht.
        Injects die Millisekunden zählen funktionieren nur die Injects mit Uhrzeit nicht…

        Reply
  2. Bernd

    Frage an die Fortgeschrittenen hier: Ich möchte den "pin_state" von LED1 und LED2 auslesen bzw. weiterverarbeiten, der mir über [PID]/out geliefert wird. Dort ist das Ganze aber verschachtelt in einem "array" als "object" abgelegt. Irgendwie gelingt mir das nicht. Am Ende möchte ich in Abhängigkeit des Wertes "pin_name" (LED1 oder LED2) den jeweiligen Wert "pin_state" haben (msg.payload).

    Beispiel:
    [PID]/out –> wenn "pin_name"=="LED1", dann lese Wert aus "pin_state" von LED1 –> setze msg.payload mit diesem Wert (boolean)

    Reply
    1. Frank

      Ist echt tricky sowas zu zerlegen. Ich hab mich mal dran versucht: https://gist.github.com/leofonic/380269ec90ff1178e569915ce1883ee5

      Reply
      1. Bernd

        Wow! Danke. Funktioniert einwandfrei. Auf das "convert to object" bin ich nicht gekommen. Ich habe mir nach jedem Schritt in Deiner Lösung ein Debug-Node gesetzt und jetzt verstanden, wie die Zerlegung in mehreren Stufen funktioniert. Ist echt tricky, Node-RED ist Neuland für mich. Aus dem User-Guide (https://nodered.org/docs/user-guide/messages) bin ich nicht richtig schlau geworden, vor allem, weil Beispiele fehlen.

        Reply
        1. Frank

          Das "convert to object" ist das was in den Beispielen einfach "json" heißt, ich dachte das hast du schon weil in deinem Screenshot ein Objekt ist, bei mir kommt direkt aus dem mqtt node ein json String. Aber Hauptsache es geht, bin auch node-red Anfänger ;)

          Reply
          1. Bernd

            Ich hatte vor lauter Probiererei eine falsche Action (Always convert to JSON-String) gesetzt…

  3. Bernd

    Zwei kleine Fehler sind mir aufgefallen:

    Im Beschreibungstext steht "Damit können wir das Programm von Tag 13, die smarten Lichter,…" –> das war aber der Tag 14!

    Im Dashboard des heutigen Tages (17) wird "Day 14" angezeigt.

    Reply
  4. Bernd

    Ich habe mir zusätzlich auch noch die aktuellen Poti-Werte im Dashboard anzeigen lassen.

    Reply
    1. Bernd

      Hier die Nodes dazu:

      Reply
    2. paulaner

      du hast die LED-Nodes aus dem 14 Tag kopiert!
      Wähle für die Group ein andere.

      Reply
      1. Bernd

        Nein, habe ich nicht. Die beiden Nodes LED1 (on/off) und LED2 (on/off) waren im Source-Code schon falsch. Dort steht fälschlicherweise Day14 statt Day17 drin. Das ist auch in Deinem Screenshot im 2. Beitrag zu sehen. Erst bei Deinen späteren Versuchen steht dann Day17…

        Reply
        1. paulaner

          das stimmt, da habe ich gar nicht darauf geachtet, sorry.
          Aber mit der 'Group' stimmt.

          Reply
    3. paulaner

      was mach ich falsch.

      Reply
      1. paulaner

        keine Werte und drittes Feld.

        Reply
        1. paulaner

          Flow

          Reply
        2. paulaner

          Werte jetzt ja.
          In 'get values' den richtigen Wert setzten.

          Aber drittes Quadrat ist noch.

          Reply
          1. paulaner

            Bild

          2. paulaner

            Schwere Geburt, gleiche Gruppe (Group).
            Sh… wenn man mit dem gleichen Namen einige hat.
            Woran kann man die unterscheiden?

  5. Bernd

    Funktioniert gut. Die Inject-Nodes kann man mit payload "boolean" auch direkt an die Dashboard-Switch-Nodes hängen. Dann werden bei einer Auslösung ("Zeitschaltuhr") auch die Dashboard-Switches aktualisiert bzw. diese zeigen dann den gesetzten Status gleich an.

    Reply
    1. paulaner

      super, danke

      Reply
    2. paulaner

      funktioniert.
      Ich hatte beim ersten testen nicht beachtet das du extra boolean geschrieben hast und auch für so 'Dumme' wie mich ein Bild angefügt hast.

      Aber nun funktioniert es un mit Rückmeldund der Taster.

      Danke

      Reply
  6. paulaner

    Hallo,

    noch ein Hinweis, wer die Inject-Nodes benutzt, darf dort nicht nur die Zeit/Zeiten ändern, sonder muß das ganze noch
    'deployen'

    Reply
  7. Ray

    Hallo,

    bei mir funzt es auch bisher ganz gut und macht auch riesig Spaß.

    Nur heute hatte ich in unregelmäßigen Abständen, ca. alle paar Minuten, einen Reboot auf dem NodeESP.

    In meinem Setup versuche ich alles im heimischen Netz zu halten: Ein Raspberry PI 2B als Node-RED- und Mosquitto-Server am LAN, Node-RED-Client im Browser und dazu MQTTBox oder MQTT.fx zum Testen und Loggen auf Windows 10.

    Auffällig ist, dass innerhalb weniger Minuten schon über 1000 MQTT Telegramme über meinen Broker laufen. OK, die analogen Potis zappeln halt auch ständig. Aber damit sollte eigentlich weder der PI noch das Netzwerk ausgelastet sein (was sich noch ändern könnte, wenn dann mal giga-zig Things im Internet mitspielen).

    Lässt sich hier irgendwas konfigurieren oder hab ich hier ein Netzwerkproblem?
    Schön wäre natürlich, wenn es die Möglichkeit gäbe, hier an der Firmware unseres Boards direkt zu drehen. Oder zumindest mit den Sourcecode könnte man das Verhalten besser verstehen, als bisher mit der Blackbox.

    Reply
    1. Frank

      Bei mir startet das Board sofort neu sobald ich irgendwas mache, ob am ESP selber oder über Dashboard, egal.

      Reply
      1. Bernd

        Ich habe das gleiche Verhalten wie Ray… das Board rebootet bei diesem Experiment unregelmäßig plötzlich neu. Auch ich habe alles im heimischen Netz. Ich denke nicht, dass es an unseren Netzwerken liegt.

        Reply
  8. paulaner

    Bild 2

    Reply
  9. paulaner

    Bild

    Reply
  10. paulaner

    Hallo,
    auch das funktionierte auf anhieb. Danke.

    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.