Mit dem Dienst „Pushover“ und der entsprechenden App (7-tägige Testphase kostenlos, danach aktuell einmalig 4,29€ für Android und 4,99€ für iOS) auf eurem (Android/iOS) Smartphone oder Tablet lassen sich über eine API ganz einfach Push-Nachrichten auf eure Geräte schicken. Auch Desktop-Systeme/-Browser werden unterstützt. Praktischerweise lassen sich mit der richtigen Bibliothek auch über den ESP8266 diese Nachrichten verschicken, sodass ihr ganz einfach IoT-Geräte entwerfen könnt, die euch über Pushover benachrichtigen. Beispiele wären hier z.B. Benachrichtigungen, wenn eure Waschmaschine fertig ist, wenn jemand an der Tür klingelt oder wenn ein Brief in euren Briefkasten geworfen wurde. Um den Dienst hier vorzustellen, werde ich das Ganze am Beispiel eines Buttons beschreiben, der bei Betätigung eine entsprechende Nachricht auf eure Geräte pusht.
Einrichten des Pushover-Accounts und -Plugins
Zuerst müsst ihr euch bei Pushover registrieren. Das ist natürlich kostenlos und einfach über diese Seite möglich. Nach erfolgreicher Registrierung und Aktivierung des Accounts erhaltet ihr über das Dashboard auf der Pushover-Seite einen individuellen User-Key, den ihr später braucht. Speichert ihn euch also am besten ab oder notiert ihn, um ihn später parat zu haben.
Anschließend öffnet ihr diese Seite, um eine neue Pushover-App anzulegen:
Das Formular sollte selbsterklärend sein, trotzdem zur Orientierung die Werte für die Beispiel Button App:
Unter „Name“ könnt ihr „Button“ verwenden, als Typ sollte „other“ passen, da es sich ja um ein physisches Gerät handelt. Eine Beschreibung müsst ihr nicht eintragen, auch die URL könnt ihr euch sparen. Ein Icon kann nach Gefallen angelegt werden. Dieses wird auf eurem Smartphone bei einer Push-Benachrichtigung bei Buttondruck dann angezeigt. Die Checkbox unten muss natürlich abgenickt werden, um die App erstellen zu können. Nun noch ein Klick auf „Create Application“ und schon sollte eure App erstellt werden. Ihr bekommt nun einen API-Token für diese App angezeigt, welchen ihr ebenso wie den oben erwähnten User-Token ebenfalls später benötigt.
Ihr könnt nun die Pushover-App auf eurem Smartphone installieren und euch in eurem zuvor erstellten Pushover-Account einloggen.
Hardware-Aufbau
Für die Hardware-Schaltung verwende ich das praktische NodeMCU-Entwicklungsboard, ein Breadboard, einen einfachen Pushbutton sowie 2 Jumper-Kabel. Die Schaltung ist wie folgend zu sehen aufgebaut:
Sketch für ESP8266
Wie bei den meisten Projekten mit dem ESP8266 nutze ich auch hier die Arduino-IDE mit entsprechendem ESP8266-Addon, um das NodeMCU-Board mit Software zu füllen. Wie ihr die Entwicklungsumgebung einrichtet, habe ich bereits in diesem Artikel unter „4. Einrichten der Entwicklungsumgebung“ beschrieben, sodass ich an dieser Stelle hierauf verweise, sofern ihr die Umgebung nicht bereits für den ESP8266 eingerichtet habt auf eurem Rechner.
Für die Kommunikation mit der Pushover-API gibt es eine einfach zu bedienende Bibliothek, die ihr in diesem GitHub-Repository findet. Wie ihr die Bibliothek installiert in eurer Arduino IDE könnt ihr auf dieser Doku-Seite von Arduino nachlesen.
Nun könnt ihr diesen Sketch kompilieren und auf euer Board übertragen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #include <Pushover.h> #include <ESP8266WiFi.h> #define BUTTON 4 int buttonState = 0; const char* ssid = "SSID"; const char* password = "PW"; Pushover po = Pushover("AppToken","UserToken"); WiFiClient espClient; void setup() { Serial.begin(115200); pinMode(BUTTON, INPUT_PULLUP); setup_wifi(); } void setup_wifi() { delay(10); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } void loop() { buttonState = digitalRead(BUTTON); if (buttonState == LOW) { Serial.println("pressed"); po.setMessage("Button gedrückt!"); Serial.println(po.send()); delay(300); } } |
Neben euren WLAN-Daten müsst ihr in der Pushover-Variable „po“ noch euren User- und API-Key eintragen.
Push-Benachrichtigung auf eurem Smartphone
Drückt ihr nun den Button, so sollte auf eurem Smartphone eine entsprechende Benachrichtigung aufpoppen. Bei mir sieht es so aus:
Auch in der App werden die Benachrichtigungen gelistet:
Das Einrichten von Push-Nachrichten vom ESP8266 aufs Smartphone ist dank Pushover und vorhandener Bibliotheken zur Kommunikation mit der API kinderleicht und kann in vielen Projekten praktisch integriert werden.
Probleme, Fragen, Anregungen? Ab in die Kommentare damit!
Ach ich hätte schon Ideen, leider bin ich in einer Mietwohnung untergekommen, die sich nicht so einfach verdrahten lässt. Besonders das Klingeln, sowie die Post wären mir eine Tüftelei wert. Naja :(
Erstmal Danke für deinen super Blog :)
Bei diesem Sketch hab ich das Problem, dass bei Dauerbetrieb der NodeMCU ohne das der Taster gedrückt wurde alle paar Minuten ein „Ein“ Signal gibt und ich ohne Grund eine Push Nachricht bekomme.
Vielleicht hast du eine Idee.
Ich vermute, dass etwas mit dem eingebauten Pullup Widerstand nicht stimmt. Werde es später mal mit einem externen probieren.
Hallo doenerklaus,
deine Vermutung könnte stimmen. Je nach Kabellänge und -abschirmung könnten auch noch Signale darauf induziert werden.
Lag wohl wirklich an den Fremdsignalen, die von dem Kabel (ca. 2 Meter Länge) aufgenommen wurden.
Habe das ganze über ein Relais lösen können. Das lange Tasterkabel geht an ein Relais und das Schaltkabel vom Relais an den ESP kann nun um einiges gekürzt werden :)
Hey,
gibt es dazu vielleicht auch eine freie Alternative? Möchte ungern für längerfristige Projekte eine proprietäre Lösung einsetzen. Nicht, dass ich alles nach einem Jahr wieder umstrukturieren muss… ?
Hallo Pete,
du könntest eine eigene kleine App schreiben, die Googles GCM nutzt – freie Alternativen sind mir gerade nicht bekannt.
Eine kostenlose Alternative könnte „telegram“sein. Ich nutze es unter Domoticz und es läuft super ;-)
https://github.com/Lstt2005/ESP8266_I.O.Broker/tree/master/Arduino/Telegram/TelegramBot-master
Oder einfach über Homebridge -> Maker -> IFTTT App das kostenlos und per GUI umsetzen..
Hi Alex…
I wanted to say that I think that what you did here is awesome.
I am stuck I trying to replicate your project, with a magnetic reed switch
instead of a pushbutton. But since I am a total beginner I still need to ask ?
For your help, can you help me with the code to accomplish this?
Will be highly appreciated!
Thank you in advance,
Hi,
magnetic reed switches can either be „normally open“ or „normally closed“. Depending on your type and usage you can use the code as it is or revert the state.
Where did you get stuck?
Alex thanks, for your reply.
I changed the code from „LOW“ to „HIGH“ but than it keep sending pushover message
The magnetic reed switches I am using is a „normally closed“ type.
I just want to get the pushover message when the mailbox open.
Can you please help me out altering the code to work with this switches?
Hi,
super Anleitung^^
hättest du auch eine Idee bzw ein Script damit man 2 Sensoren/Buttons unabhängig von einander auslesen kann?
keiner eine Idee?
Einfach einen zweiten BUTTON und buttonState definiere und diese natürlich im loop anführen, dann sollte es funktionieren.
ja wäre soweit auch kein Problem nur wenn ich z.b. eine Waschmaschine und einen Trockner damit abfragen will, würde ich ja mehrere Meldungen hintereinander bekommen da ja ein Delay 300 drin ist, wenn ich das Delay aber auf 600000 setze würde ich keine Meldung von dem anderen Gerät bekommen.
Das Delay hat damit nichts direkt zu tun. Es dient nur dazu, falls der Taster zurückschwingt nicht erneut eine Meldung auszugeben.
Füge mal das folgende für den zweiten Taster hinzu:
#define BUTTON2 5
int buttonState2 = 0;
Und im loop das anfügen:
buttonState2 = digitalRead(BUTTON2);
if (buttonState2 == LOW) {
Serial.println(„pressed2“);
po.setMessage(„Button2 gedrückt!“);
Serial.println(po.send());
delay(300);
}
Hallo donnerklaus,
wie bereits geschrieben bringt mir das ja nichts, denn wenn ich die Waschmaschine laufen lasse und gleichzeitig den Trockner, und die Waschmaschine wäre fertigt (Ende LED leuchtet, wird mit Photo sensor abgegriffen) würde ich über das Delay 300 – jede 300 ms eine Nachricht bekommen, denn der Sensor/Pin bleibt solange auf High bis ich die Maschine abschalte.
@Marcel
Dann hab ich das falsch verstanden. Dann würde ich eine if Anweisung einbinden.
Stelle mir das so vor if (gesendet == 0) { … Nachricht senden ….; gesendet = 1;}
und bei buttonState == 0: gesendet wieder auf 0 stellen.
@doenerklaus
komme leider nicht ganz mit, da ich mich mit dem Programmieren leider nicht so gut ausgekenne.
@ marce802
Hier mal für einen Button:
int gesendet = 0;
void loop() {
buttonState = digitalRead(BUTTON);
if (buttonState == LOW && gesendet == 0) {
Serial.println(„pressed“);
po.setMessage(„Button gedrückt!“);
Serial.println(po.send());
gesendet = 1;
delay(300);
else {
gesendet = 0;
delay(300);
}
}
Danke für den ausführlichen, gut lesbaren Artikel. War gerade sehr hilfreich für den Garagentorsensor… ich habe als Eskalation nach Pushover noch die SMS über Ecall.ch als 2. Alarmierungsstufe eingesetzt
code worked everything working fine. but when i press the pushdown switch once its sending notification like so many times its not stopping. i think the problem is contact bounce but m not sure what should i do plz help asap.
Hey,
if you use my code there is a 300ms delay after button press detection – so your problem should not occur in normal use. You can of course also use more delay.
Sehr cool, Danke!
wie würde denn der sketch aussehen wenn ich an den A0 Pin vom Nodemcu Board einen Radarsensor anschließen will! Am Serial Monitor zeigt der Sensor bei Stillstand ca. 9-13 an , bei Bewegung 1000-1014! Also sollte im Bestfall eine Benachrichtigung von kommen wenn der Wert z.Bsp über hundert springt….und deep Sleep Modus wenn sich nichts bewegt wäre dann noch das iTüpfelchen….ist jemand motiviert mir da zu helfen, würde mich sehr freuen….SG aus Tirol
Danke erstmal für die super Anleitung, leider bin ich nicht so der Profi. Ich möchte das ganze an eine Klingel anschließen diese hat 12v, nun möchte ich mir nicht das esp grillen kann ich die 12v auf 5v runter regeln und dann anschließen oder sind 5v noch zu viel. Danke schon mal.
Nutz dafür ein relais. Kosten 2-3€ ^^
Hi,
ich habe alles wie in der Anleitung gemacht, aber ich bekomme keine Nachrichten aufs Handy wenn ich den Knopf drücke. Woran kann das liegen?
Schon mal danke für die Hilfe.
Gruß
Niklas
Hab dasselbe Problem. Hat sich sicherlich etwas an der api von Pushover geändert. Bin selbst noch dabei das Problem zu lösen :/
Bei mir klappt es leider auch nicht. Es sah so schön und sogar für mein Bisschen Verständnis einfach aus. Daher hoffe ich, dass sich hier noch eine Lösug zeigt …
Es scheint das mit dem SSL etwas nicht stimmt, mit folgendem Code Block in der Pushover.cpp:45 erzwingt man den Client das Zertifikat zu akzeptieren:
WiFiClientSecure client;
client.setInsecure(); // add this line
if (!client.connect(„api.pushover.net“, 443)) {
Alternativ kann man auch HTTP verwenden:
WiFiClient client; // remove Secure
if (!client.connect(„api.pushover.net“, 80)) { // change port
Omg, vielen dank.
Die alternative funkt net, aber wenn man
client.setInsecure();
in Zeile 45 klatscht, funzt es wunderbar *.*
Vielen dank, werde es gleich dem Entwickler mitteilen das er es Updaten soll..
Habe da mal eine kleine Frage, wurde der Sketch von Git-hub zwischenzeitlich angepasst? Bei mir funktioniert es leider nicht. Bei Pushover bin ich angemeldet , die 2 Token habe ich im Sketch eingetragen und die APP im Natel eingerichtet. Per E-Mail gesendete Nachrichten kann ich auf dem Natel von Pushover empfangen aber vom ESP8266 nicht. Die Verbindung zum WLAN funktioniert und der Button löst die Nachricht aus. Hat da jemand eine gute Idee die zur Lösung des Problems beitragen könnte? Herzlichen Dank im voraus.
bei mir funktioniert es leider auch nicht.
ich habe token, key, ssid und passwort eingetragen, aber es gibt keine Pushnachrichten. muss man eventuell noch weitere einträge vornehmen…?
ich hab schon viele verschiedene sketche ausprobiert, aber es gibt keine pushover-nachrichten. der esp8266 verbindet sich mit dem wlan und im seriellen monitor wird auch das betätigen des buttons angezeigt. nachrichten via pushover gehen aber nicht raus.
bestimmt muss ich im sketch noch irgendwo was eintragen. leider weiß ich nicht wo…
Pass‘ die Zeile 45 in der pushover.cpp an, so wie Thomas im März das beschrieben hat, und es läuft. Vorher die alte Bibliothek aus dem Sketch Ordner löschen und dann neu hochladen. Hatte das Problem auch und nun geht es wie gewünscht.
Hallo,
ich erhalte seit kurem nur noch ReturnCode 0 und es werden keine Push-Nachrichten mehr versendet.
Woran kann das liegen?
Gruß Volker
Hallo
Ist denn jetzt das Problem irgendwie mal gelöst worden mit der Bibliothek.
Ich habe alle varianten ausprobiert, es geht leider nicht.
Vielleicht Postet ja mal jemand die komplette Bibliothek.
Bekomme es einfach nicht zum laufen.
Würde das Projekt gerne benutzen.
Gruß Bodo und danke im Voraus
Hi Bodo,
habe eine neue Bibliothek erstellt, die den Umgang mit Pushover auf dem ESP8266 erleichtert und zudem ohne Modifikation funktioniert: https://github.com/fr31b3u73r/ESPushover
Beispiele sind im examples Ordner.
Hi,
bei funktioniert das ganze super, hab nur ein Problem.
Der esp bekommt seinen „Meldekontakt“ über einen potenzialfreien Kontakt von einer Fütterung wenn diese auf Störung schaltet, dieser ist als Öffner programmiert.
Leider bekomm ich weiter Nachrichten auch wenn dieser Öffner wieder geschlossen ist, das sollte doch eigentlich nicht der Fall sein, oder?
Gruß Roli
Servus,
wie muss ich vorgehen wenn ich einen kleinen Delay für den Druck des Knopfes einbauen will.
So dass der Knopf dann z.B. 2 Sekunden gedrückt sein muss und dann erst eine Nachricht raus geht.
Hab den ESP an einer Fütterung hängen, diese öffnet den Meldekontakt scheinbar jedesmal ganz kurz wenn sie startet, sodass ich bei jedem Start eine Meldung bekomm, will aber nur Meldung wenn Störung ist (also der Meldekontakt länger offen ist).
Gruß Roli