Benachrichtigungsknopf mit einem ESP8266

Benachrichtigungsknopf mit einem ESP8266

Aktuell braucht unsere Tochter nachts noch ein Fläschchen und falls ich nachts noch arbeite oder podcaste, möchte ich meiner Frau die Möglichkeit geben mir so einfach wie Möglich bescheid zu geben, dass ich bitte ein Fläschchen liefere. Mit einem Aufputztaster, einem ESP8266 und etwas Code + Web Serives war das relativ einfach.

 

Technisch sieht der Ablauf so aus:

  • Der Knopf wird gedrückt
  • Der ESP8266 startet und verbindet sich mit dem Wifi
  • Der externe Webhook (in meinem Fall IFTTT) wird getriggert
  • Der ESP8266 legt sich wieder schlafen
  • IFTTT triggert einen Telegram Bot, welcher mir eine Nachricht schickt
  • Ich mache das Fläschchen (sehr untechnisch)

Was braucht man?

  • Einen ESP8266 (Amazon Afflink), günstiger und langsamer gehts auch bei Aliexpress
  • Einen Taster in irgendeiner Form (kein Schalter! Der Taster darf beim betätigen nur solange man drückt den Kontakt schliessen)
  • Ein paar Kabel und einen Lötkolben (oder Kabel, welche man auf die Pins des ESP stecken kann)
  • Die Arduino IDE

Als erstes verbindet man den ESP mit der Arduino IDE und legt einen neuen Sketch an.

 

Stellt das korrekte Board ein.

 

Für die meisten ESPs/nodeMCU v3 die man bekommt wäre das so:

Dann braucht es "nur noch" den Code, welchen man in den Sketch kopiert:

#include <ESP8266HTTPClient.h>

#include <ESP8266WiFi.h>

 

#define ledPin 5 

#define wakePin 16

#define ssid "<SSID>"

#define password "<WIFI PASSWORT>"

#define IFTTT_API_KEY "<IFTTT API KEY>"

#define IFTTT_EVENT_NAME "<IFTTT EVENT NAME>" 

#define IFTTT_HOOK_URL = "<IFTTT WEBHOOK URL>";

 

void setup() {

  Serial.begin(9600);

  while(!Serial) { 

  }

  Serial.println("Button Pressed");

 

  connectToWifi();

 

  WiFiClientSecure client;

  client.setInsecure(); //the magic line, use with caution

  client.connect(IFTTT_HOOK_URL, 443);

  HTTPClient http; 

  http.begin(client, IFTTT_HOOK_URL);

 

  String payload;

  if (http.GET() == HTTP_CODE_OK)    

    payload = http.getString();

  

  

  ESP.deepSleep(wakePin); 

}

 

void connectToWifi() {

  Serial.print("Connecting to: "); 

  Serial.print(ssid); 

  WiFi.begin(ssid, password);  

  Serial.print("Attempting to connect: ");

 

  //try to connect for 10 seconds

  int i = 10;

  while(WiFi.status() != WL_CONNECTED && i >=0) {

    delay(1000);

    Serial.print(i);

    Serial.print(", ");

    i--;

  }

  Serial.println(" ");

 

  //print connection result

  if(WiFi.status() == WL_CONNECTED){

  Serial.print("Connected."); 

  Serial.print("NodeMCU ip address: "); 

  Serial.println(WiFi.localIP());

  }

  else{

    Serial.println("Connection failed - check your credentials or connection");

  }

}

 

void loop(){

//if deep sleep is working, this code will never run.

Serial.println("This should never get printed");

delay(1000);

}


 

Als erstes installiert man noch über den Library Manager in der Arduino IDE die Libs ESP8266HTTPClient und ESP8266WiFi.

 

Die Defines muss man an den entsprechenden Stellen mit den eigenen Werten befüllen und zumindest die Wifi Werte sollten selbsterklärend sein.

 

 

Die Webhook URL bekommt man von dem Webservice, welchem man bescheid sagen will. In meinem Fall ist das IFTTT.

In IFTTT habe ich einen Ablauf erstellt, welche einen Webhook erhält und dann eine Telegram Nachricht verschickt. 

 

Bei "Receive a web request" definiert man einen Event Name welchen man sich merken sollte, da man den später für die Webhhok URL braucht.

Dann muss man einmal IFTTT mit Telegram verbinden und eine Nachricht eingeben. Eine Webpage preview braucht man natürlich nicht.

Unter https://ifttt.com/maker_webhooks/ findet man oben den Button "Documentation", da ist der Link zur API Key Doku drin, in der man auch die Webhook URL findet.

 

Diese ist dann sowas wie: https://maker.ifttt.com/trigger/<DER EVENT NAME VON OBEN>/with/key/<DEIN API KEY>

 

Diese URL packt man dann statt <WEBHOOK URL> in den Code.

 

Am Schluss braucht man noch den Taster, welcher die Pins GND und RST beim Drücken kurzschliesst.

(Zum Testen geht auch erstmal der RST button auf dem Board).

 

Damit wird der ESP neu gestartet, im Startup passiert der WIFI-Connect, und der Trigger des Webhooks.

 

Dann fällt im besten Fall eine Benachrichtigung raus. Prost!

Kommentar schreiben

Kommentare: 0