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 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.

/*
  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 via HTTP-POST, because Gotify is somewhat 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 (433 MHz), Gotify gets triggered. See code above. For every other use case, the RXB6 stuff can be dismissed, i.e., the RCSwitch and mySwitch lines. The communication with Gotify takes place in void post only.


Ü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 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

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