Gotify mit dem ESP8266/ESP32/Arduino ansprechen

(Please find this text in English below/here)

Stand/as of: 2020-02-11

Worum geht es?

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.


Das Problem

Ich benötigte bei meinem Test mehrere AnlĂ€ufe, um vom ESP8266 aus mit Gotify in Verbindung zu treten. Das mag daran gelegen haben, dass ich eher selten auf so tiefer Ebene mit HTTP-POST zu tun habe und Gotify recht pingelig ist, 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. FĂŒr alle anderen Anwendungen könnt Ihr natĂŒrlich den RXB6-Kram rausschmeißen, also alles mit RCSwitch und mySwitch.

/*
  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);
  }
}

English: Triggering Gotify with an ESP8266/ESP32/Arduino

What's it all about?

Gotify is a service written in Go and running on Linux. It issues push notifications to mobile phones and browsers. It is a self-hosted open source project and can be added to a Raspberry Pi that already exists and can access open ports to the Internet. Gotify has its own web server and push notifications may be triggered by using its HTTP REST API.

An example usage is to forward alarms (temperature, opened doors, ...) via Gotify to your mobile phone. Fortunately, the corresponding app is available google-free on the F-Droid store.

As a drawback, there are no Gotify services on the net. So self-hosting is the only possibility. Similar services exist, though. But expect to spend some money for using these services or to use a Google account to log in.


The Problem

I needed a couple of attempts to successfully trigger Gotify from my ESP8266. The reason might be that I rarely dig into low-level HTTP-POST and that Gotify is quite strict in parsing JSON. Therefore I decided to publish a quick-and-dirty proof-of-concept for the communication. In this example, when a RXB6 radio module receives the ASK modulated signal of a door sensor, Gotify gets triggered. See code above. For every other use case, the RXB6 stuff can be dismissed, i.e., the RCSwitch and mySwitch lines.


Über mich

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

E-Mail kontakt (a) rudo.info
PGP-SchlĂŒssel   939E96E995890F9C
Telefon+49 177 87 10 860

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

Kontaktformular



Ihr Name

Ihre E-Mail-Adresse

Leer lassen


Ihre Nachricht

Ihre Anfrage wird verschlĂŒsselt an den Webserver geschickt. Sie erklĂ€ren sich damit einverstanden, dass Ihre Angaben zur Beantwortung Ihrer Anfrage von mir verwendet werden dĂŒrfen.

Ich stimme den DatenschutzerklÀrungen zu.


     
Impressum, Schlichtungsstelle und DatenschutzerklĂ€rung