Tag 17: Zeitgesteuerte Lichter

Hinter dem Türchen des 17. Tages befindet sich ein weiteres Poti. Das bedeutet, dass nun für jede LED genau ein Poti zur Verfügung steht. Damit können wir das Programm von Tag 13, die smarten Lichter, um eine etwas praktischere und intuitivere Dimm-Funktion erweitern. Außerdem werden wir heute sehen, wie man mit Node-RED zeitgesteuerte Ereignisse startet.

Versuchsaufbau

Versuchsaufbau

Sie müssen das Programm des heutigen Tages in der Weboberfläche aktivieren. Anschließend können Sie den heutigen Flow in die Node-RED-Umgebung einfügen, natürlich nicht, ohne die vorherigen Flows zu deaktivieren und das MQTT-Topic an Ihre persönliche ID anzupassen.

Die LEDs können nun, wie schon bekannt, über die Hardware-Buttons oder über das Userinterface anund ausgeschaltet werden. Die Helligkeit der einzelnen LEDs wird über die Potis gesteuert. Als Alternative zu den Buttons gibt es die Inject-Nodes unten links. Über diese können Zeiten angegeben werden, zu denen ein Befehl an das Board gesendet wird. Dazu müssen Sie wieder einfach nur doppelt auf den entsprechenden Node klicken, und schon können Sie einen Zeitpunkt und auch Tage auswählen, an denen die Nachricht geschickt werden soll. Somit können Sie beispielsweise eine automatische Lampe für Räume oder ein Aquarium einstellen oder an Arbeitstagen eine spezielle Beleuchtung aktivieren – ganz automatisch und ganz im Sinne von Smarthome.

Der Flow von Tag 17

Der Flow von Tag 17

30 Kommentare

  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?

    Antworten
    1. paulaner

      Zeit setzen und depoyen nicht vergessen

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

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

    Antworten
    1. Frank

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

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

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

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

    Antworten
  4. Bernd

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

    Antworten
    1. Bernd

      Hier die Nodes dazu:

      Antworten
    2. paulaner

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

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

        Antworten
        1. paulaner

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

          Antworten
    3. paulaner

      was mach ich falsch.

      Antworten
      1. paulaner

        keine Werte und drittes Feld.

        Antworten
        1. paulaner

          Flow

          Antworten
        2. paulaner

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

          Aber drittes Quadrat ist noch.

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

    Antworten
    1. paulaner

      super, danke

      Antworten
    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

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

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

    Antworten
    1. Frank

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

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

        Antworten
  8. paulaner

    Bild 2

    Antworten
  9. paulaner

    Bild

    Antworten
  10. paulaner

    Hallo,
    auch das funktionierte auf anhieb. Danke.

    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.