Simplester IoT-Button mit Wemos D1 Mini

Ein IoT-Button (IoT=Internet of Things) ist ein kleiner Knopf, der bei Tastendruck eine beliebige Interaktion mit anderen vernetzen Geräten ausführt.

Eine simple Lösung dafür, bietet ein Wemos D1 Mini zusammen mit IFTTT.
IFTTT steht für If This Than That und der Dienst macht genau das, was er in seinem Namen verspricht.

Einmal angemeldet, kann mit zwei Klicks bereits eine Automation eingerichtet werden.

Zuerst wird mit einem Klick auf  This der Trigger spezifiziert. Dieser kann so gut wie alles sein, was die Vorstellungskraft erlaubt. Mögliche Auslöser können z.B. sein:

  • eine GPS Position
  • eine eingetretene Wetterbedingung
  • eine eingegangne Mail
  • ein neuer Post in einem sozialen Netzwerk
  • ein Sensor aus einer Hausautomation
  • ein IoT-Button
  • ein HTTP-Request
  • ein Amazon-Alexa-Befehl
  • ein Produkt, dass im ausgewählten Supermarkt im Sonderangebot ist
  • eine MQTT-Nachricht
  • ein Astronaut, der in den Weltraum fliegt…

Die Optionen sind absurd wie vielfältig und bieten jede Menge freiraum für Kreativität.

Selbstverständlich bleiben die Möglichkeiten bei den Spezifikation des That, der Aktion, ebenso spannend:

Tritt eine der o.g. Situationen ein, so kann z.B.:

  • eine Mail und/oder eine Push-Nachricht versendet werden
  • ein Spotify-Song gespielt werden
  • ein Beitrag in einem sozialen Netzwerk gepostet werden
  • ein Anruf / eine SMS empfangen werden
  • Ikea-, Hue-, YeeLight-SmartLights gesteuert werden (und viele mehr…)
  • ein Kalendereintrag erzeugt werden
  • ein HTTP-Request gesendet werden
  • eine MQTT-Nachricht veröffentlicht werden
  • eine iOS-Errinnerung / Kalendereintrag oder ein Foto erstellt werden

Die Liste an Triggern und Aktionen und die dadurch erstellbaren Kombinationen sind schier endlos.

In diesem Beitrag soll es um einen einfach Button gehen, der einen Trigger an unseren IFTTT-Channel sendet. Dazu nutzen wir den Service Webhooks.

Der smarte Knopf selber ist ein Wemos D1 Mini ohne weitere Hardware. Der Trick an diesem Mini-Projekt ist, dass wir weder Löten noch Verkabeln müssen.

Der Nachteil ist, dass der Knopf nicht wirklich schön ist….

Lange Rede, kurzer Sinn: Unser IoT-Button ist der kleine Reset-Button des Wemos D1 Mini.

Damit können wir auch direkt zur Programmierung kommen. Per Micro-USB verbunden, kann der D1 Mini mit der Arduino-IDE programmiert werden.

Der Sketch ist ebenso simpel:

#include <ESP8266WiFi.h>
#include <IFTTTWebhook.h>
const char* ssid = "WIFI SSID"; //SSID
const char* password = "WIFI PASSWORD"; //Password
#define IFTTT_API_KEY "IFTTT_WEBHOOK_API_KEY" // IFTTT Webhooks API Key
#define IFTTT_EVENT_NAME "iotbutton"
#define IFTTT_FINGERPRINT "AA:75:CB:41:2E:D5:F9:97:FF:5D:A0:8B:7D:AC:12:21:08:4B:00:8C"
IFTTTWebhook wh(IFTTT_API_KEY, IFTTT_EVENT_NAME,IFTTT_FINGERPRINT);
void setup() {
delay(1000);
Serial.begin(115200);
WiFi.mode(WIFI_OFF);
delay(1000);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("");
Serial.print("Connecting");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
//If connection successful show IP address in serial monitor
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP()); //IP address
wh.trigger();   // Trigger the IFTTT-Webhook-Event
}
void loop() {
ESP.deepSleep(0);
Serial.print("Wenn alles gut geht, wird dieser Text niemals ausgegeben");
}

Das Programm führt drei Kern-Funktionen aus:

  1. Verbindung zum WLAN herstellen.
  2. den Trigger an IFTTT-Webhooks auf dem Kanal „iotbutton“ senden.
  3. in den DeepSleep-Modus gehen.

Sobald der D1 Mini um Tiefschlaf ist, sollte der Stromverbrauch auf unter 100 µA sinken.

Die Ausführung von jeglichem Code nach dem DeepSleep-Befehl findet nicht mehr statt. Darauf basiert auch nun das Prinzip des IoT-Buttons.

Sobald wir den Reset-Knopf des Wemos D1 Mini drücken, wird das Programm neu gestartet und der o.g. Ablauf wiederholt.

Dadurch, dass der Trigger in der Setup-Funktion und nicht in der Loop ausgeführt wird, wird bei jedem Tastendruck genau ein Triggersignal gesendet.

Durch super geringen Stromverbrauch, kann der Wemos D1 Mini mit einer kleinen LiPo-Batterie für mehrere Wochen oder Monate betriebsbereit bleiben.

Die Einrichtung des IFTTT-Dienstes gestaltet sich ebenso einfach

Sucht nach dem Service Webhooks und wählt es aus.

Etwas versteckt unter Documentation findet Ihr den API Key. Auf der gleichen Seite können die Events auch gleich getestet werden.

Nun klickt Ihr auf der Hauptseite auf New Applet, wählt für This den Service Webhook aus. Den Event bennt Ihr mit iotbutton. Die Aktion definiert Ihr danach bei mit einem Klick auf „That„. Sucht nach Notification und wählt eine einfache Notification.

Dadurch wird eine Push-Nachricht aus der IFTTT-App erzeugt. (Diese sollte vorher auf dem Smartphone installiert sein)

Daraufhin kann ein Text erstellt werden. Ihr werdet sehen, dass Ihr bis zu drei Variablen einbauen könnt.

Diese Variablen könnt Ihr im Arduino-Programm festlegen und übermitteln.

Der Trigger kann mit den folgenden Beispielen ohne Übergabewert oder mit bis zu drei Werten ausgelöst werden:

wh.trigger();
wh.trigger("var1");
wh.trigger("var1", "var2");
wh.trigger("var1", "var2", "var3");

Neben dem Reset durch den integrierten Knopf, kann der D1 Mini auch durch eine Verbindung zwischen den Pins RST und GND resettet werden.

Weiterführende Links

Kommentar verfassen