Gotify ist ein in Go geschriebener und unter Linux lauffähiger Dienst, der Push-Nachrichten an Mobiltelefone und Browser sendet. Es handelt sich um ein Open-Source-Projekt, das selbst gehostet werden muss. Ideal eignet sich also ein Raspberry Pi, der sowieso schon existiert, bereits andere Aufgaben übernimmt und offene Ports ins Internet besitzt. Gotify bringt einen eigenen Webserver mit und per HTTP-REST-API lassen sich schließlich die Push-Nachrichten generieren.
Beispielsweise können also Alarme (Temperaturen, geöffnete Türen, ...) per Gotify an das eigene Mobiltelefon weitergeleitet werden. Angenehmerweise gibt es die zugehörige App googlefrei im F-Droid.
Nachteil ist, dass es keine Gotify-Dienste im Netz gibt. Der cloud-gewöhnte Nutzer geht leer aus und muss den Server selbst aufsetzen. Vergleichbare Dienste existieren, wollen aber Geld sehen oder sind nur mit Google-Konto zu nutzen.
Ich benötigte bei meinem Test mehrere Anläufe, um vom ESP8266 aus per HTTP-POST mit Gotify in Verbindung zu treten, denn Gotify ist ein wenig pingelig, was die JSON-Formatierung angeht. Daher findet Ihr hier einen ganz schnellen Proof-of-Concept, wie so eine Kommunikation funktioniert. Ausgelöst wird die Meldung an Gotify von einem mit einem RXB6-Funkmodul empfangenen ASK-modulierten Signal eines Türsensors (433 MHz). Für alle anderen Anwendungen könnt Ihr natürlich den RXB6-Kram rausschmeißen, also alles mit RCSwitch und mySwitch. Die Gotify-Kommunikation findet ausschließlich in void post
statt.
Jedes Modul wird mit eigenen, festen und maximal siebestelligen ID (dezimal) ausgeliefert. Für die Öffnung und Schießung des Sensors wird eine unterschliedliche ID gesendet. Der beim Schließen gesendete Wert liegt nach meiner Beobachtung stets um den Wert 4 unter dem, der beim Öffnen gesendet wird. Die Reichweite des Moduls ist freilich eingeschränkt. Ganz grob gesagt reicht das Signal hinter eine Wand mehr als WLAN. Im Gebäude ist zuverlässiger Empfang nur bis etwa 20 Meter Entfernung gegeben. Im Freien sicherlich deutlich weiter, das habe ich jedoch nicht getestet. Auch sollte die Verwendung einer guten Antenne auf Empfängerseite die Reichweite vergrößern können.
/* simple example for receiving. Modification by Thomas Rudolph. Source: https://github.com/sui77/rc-switch/ */ #include <RCSwitch.h> #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266HTTPClient.h> RCSwitch mySwitch = RCSwitch(); void setup() { Serial.begin(9600); Serial.println("\r\nMoin!"); mySwitch.enableReceive(4); wifiInit(); } void wifiInit() { WiFi.mode(WIFI_STA); WiFi.begin("yourSSID","yourWiFiKey"); Serial.print("Verbinde mit WLAN "); uint8_t temp = 0; while (WiFi.status() != WL_CONNECTED) { delay(500); temp++; if (temp % 7 == 0) Serial.print("."); if (temp > 100) ESP.restart(); // reboot if no connection can be established } Serial.println(WiFi.localIP()); } void post(bool status) { HTTPClient http; http.begin("http://yourgotifyserver:90/message?token=yourgotifytoken"); http.addHeader("Content-Type", "application/json"); uint16_t httpResponseCode; if (status) httpResponseCode = http.POST("{\"message\": \"ist offen\",\"title\": \"Tür\",\"priority\": 5}"); if (!status) httpResponseCode = http.POST("{\"message\": \"ist zu\",\"title\": \"Tür\"}"); if(httpResponseCode>0) { String response = http.getString(); Serial.println(httpResponseCode); Serial.println(response); } else { Serial.print("Error on sending POST: "); Serial.println(httpResponseCode); } http.end(); } void loop() { if (mySwitch.available()) { Serial.print("Received "); Serial.print( mySwitch.getReceivedValue() ); Serial.print(" / "); Serial.print( mySwitch.getReceivedBitlength() ); Serial.print("bit "); Serial.print("Protocol: "); Serial.println( mySwitch.getReceivedProtocol() ); if (mySwitch.getReceivedValue() == 4410158) post(1); if (mySwitch.getReceivedValue() == 4410154) post(0); mySwitch.resetAvailable(); delay(1000); } }
Schon in jungen Jahren war ich fasziniert von den Möglichkeiten, die Computer und Technik bieten. In dieser Zeit brachte ich mir das Programmieren selbst bei und konfigurierte Betriebssysteme und Software bis spät in die Nacht.
Im Studium erweiterte und vertiefte ich mein Wissen.
Zunächst in Bonn, wo ich Physik studierte. Die Physik ist ideal,
um analytisches Denken zu erlernen und lösungsorientiertes Handeln zu
verinnerlichen.
Dabei kam der Wunsch auf, praxisnäheres Wissen zu erlangen und mich wieder stärker
auf den Bereich Technik und IT zu fokussieren. Deshalb setzte ich mein Studium
in Bochum fort, wo ich IT-Sicherheit studierte und mit dem Master of Science
abschloss.
Seitdem entwickle ich IT-Lösungen und Internet-of-Things-Anwendungen und berate Kunden im Bereich IT-Sicherheit und Netzwerke. Schauen Sie sich doch einmal meine Dienstleistungspalette an!
kontakt (a) rudo.info | |
PGP-Schlüssel | 939E96E995890F9C |
Telefon | +49 1590 18 222 97 |
Sie erreichen mich am besten per E-Mail oder über das Kontaktformular. Schildern Sie darin bitte kurz Ihr Anliegen und ich werde mich schnellstmöglich bei Ihnen melden. Da ich unterschiedlich in meine Projekte eingebunden bin, schwankt meine telefonische Erreichbarkeit entsprechend.
Ich freue mich von Ihnen zu hören!
Ihr Thomas Rudolph