Hinter dem heutigen Türchen des Adventskalenders finden Sie einen weiteren Button. In dem Versuch des heutigen Tages werden wir uns weiter mit dem MQTT-Protokoll beschäftigen, diesmal in Verbindung mit Node-RED. Außerdem sehen wir, wie zwei Buttons gleichzeitig ausgewertet werden können. Der Versuch des heutigen Tages hat folgenden Aufbau:

Der Aufbau mit zwei Buttons
Der Aufbau mit zwei Buttons

Es gibt also zwei Buttons, die wir nutzen können. Aktivieren Sie nun das Programm des heutigen Tages. Anschließend können Sie den Node-RED-Flow importieren. Diesen müssen Sie zunächst aber leicht anpassen. Sie müssen nämlich [PID] im Topic durch Ihre persönliche MQTT-ID ersetzen. Das geht aber ganz einfach mit dem folgenden Trick:

Kopieren Sie den Node-RED-Flow in einen Texteditor Ihrer Wahl, in Windows zum Beispiel in den Editor. Anschließend wählen Sie die Option Ersetzen (im Editor unter Bearbeiten/Ersetzen ([Strg]+[H]). Dort geben Sie im Feld Suchen nach [PID] ein und im Feld Ersetzen durch Ihre persönliche ID. Anschließend können Sie einfach auf Alle ersetzen klicken. Schon haben Sie den Flow angepasst und können ihn in Node-RED importieren und starten, natürlich nicht, ohne die alten Flows zu deaktivieren.

So können Sie den Flow schnell auf Ihre persönliche ID anpassen
So können Sie den Flow schnell auf Ihre persönliche ID anpassen

Wenn Sie nun in Node-RED auf das Debug-Register gehen und einen Button auf dem Steckboard drücken, sehen Sie dort zum Beispiel folgende Nachricht:

Die JSON Nachricht

Unter dem Key cmd wird das Kommando get_button_state gesendet. Unter value folgt ein Array mit allen Buttons und ihren Werten. Über pin_name, pin_id oder pin_nr können Sie einen Button identifizieren. Die ersten beiden Werte sind selbst definiert, der dritte gibt den verwendeten IO-Pin am Board an. Pin_state gibt an, wie der boolesche Wert des Buttons ist, also TRUE oder FALSE bzw. HIGH oder LOW.

Ist der Button nicht gedrückt, ist der Pin-Value übrigens TRUE. Das liegt daran, dass der Pin mit einem internen Pull-up-Widerstand auf HIGH und per Tastendruck auf LOW gezogen wird. Der Key pin_value gibt einen anlogen Wert an, der bei Buttons keine Rolle spielt.

In diesem Fall habe ich Button2 gedrückt, und das Board hat sofort eine Meldung mit allen aktivierten Buttons und deren Werten sowohl an das out-Topic, das am Debug-Node hängt, als auch an das Topic

NodeESP/[PID]/button/state/get/out

gesendet. Das letzte Topic wird in Node-RED ausgewertet. Dazu kommt ein JSON-Node, der aus dem reinen Text ein JSON-Objekt macht. Der Split-Node trennt das Button-Array in einzelne Elemente auf, die nacheinander an den Switch-Node weitergereicht werden. Dieser überprüft den Pinnamen und entscheidet, um welchen der beiden Buttons es sich handelt. Es folgt ein Template-Node, der einfach nur den Wert von pin_state filtert, also TRUE oder FALSE an den nächsten Node weitergibt. Hierbei handelt es sich um einen Dashboard-Button, der einen An-Zustand anzeigt, wenn der Wert FALSE war, und umgekehrt. Er invertiert an dieser Stelle also sozusagen den Wert des Buttons.

Wenn Sie auf das Dashboard wechseln, indem Sie beispielsweise auf das Dashboard-Register auf der rechten Seite und anschließend auf das Rechteck mit dem Pfeil nach oben klicken, sehen Sie auch die beiden Buttons. Da das Board beim Loslassen des Buttons direkt die Statusveränderung mitteilt, können Sie also sofort sehen, welcher Button gedrückt und welcher nicht gedrückt ist.

Der große Vorteil bei MQTT und dem Verwenden eines Online-Brokers ist, dass man die Buttons von überall in der Welt aus auswerten kann. Sie können also das Board mit zur Arbeit nehmen, während der Node-RED-Server zu Hause auf einem Rechner läuft. Und dann könnten Sie beispielsweise das Licht und die Heizung einstellen, wenn Sie sich auf den Nachhauseweg machen, oder per Sprachausgabe den Daheimgebliebenen mitteilen, dass Sie auf dem Weg sind. Und das alles mit einem simplen Knopfdruck von irgendwo auf der Welt.