Zum Inhalt springen

ESP8266 P8GR Alarmierung

Dieser Beitrag beschreibt die Verwendung eines ESP8266 zum Versenden einer SMS bei der Alarmierung über den Airbus P8GR. Genutzt wird dazu das im P8GR Heimzusatz eingebaute Relais.

Warum eigentlich SMS Alarmierung?

SMS Alarmierung durch Airbus P8GR über ESP8266
SMS Alarmierung durch Airbus P8GR über ESP8266

Nachdem bei uns nun auf im Zuge des Umstiegs auf den Digitalfunk alle Ortschaften mit BOS-Meldeempfängern, dem Airbus P8GR, ausgestattet wurden, kam es zu vielen Beschwerden der Feuerwehrmitglieder.
Unsere Ortschaften hatten früher keine Melder und wurden klassisch über Sirene alarmiert. Daher waren die meisten es nicht gewohnt einen Melder immer mit sich zu tragen. Dazu kommt noch, dass der Airbus P8GR wirklich eine unnötige Größe hat. Wenn man die Funktionen und Kosten dieses Geräts mit dem moderner Smartphones vergleicht, dann hätte die Technik ziemlich sicher ein kleineres Gerät zugelassen.
Interessant ist auch die Akkulaufzeit. Das Betriebssystem wurde wohl von Nokia gekauft. Wer einmal ein altes Nokia hatte, der erkennt gleich alles wieder. Die Akkulaufzeit legendärer alter Nokia-Modelle erreicht der P8GR allerdings überhaupt nicht. Vermutlich aufgrund der Netzabdeckung hier auf dem Land ist der Akku meistens nach ca. 30 Stunden leer. Auch da konnte der alte analoge Meldeempfänger deutlich mehr.

Bisher wurden wir, wie erwähnt immer per Sirene alarmiert. Das funktionierte auf dem Dorf auch sehr gut. Dazu hatten wir eine „Alarmbox“, also ein Gerät, dass das Signal der Sirene aufnimmt und bei einer Alarmierung eine SMS an hinterlegte Nummern sendet. Diese Lösung war für uns absolut ausreichend und funktionierte super.
Da die Sirene jetzt nur noch bei größeren Einsätzen genutzt wird, musste eine alternative Lösung her.

GSM Modul oder WebService

Für die Lösung dieses Problems dachte ich erst an ein GSM Modul über das mit einer Sim-Karte direkt eine SMS versendet werden kann.
Es gibt seit einiger Zeit ein günstiges GSM Modul (A6 GSM Modul) vom Hersteller des ESP8266. Leider war dieses Modul bei mir sehr unzuverlässig. Es benötigt häufig einen Reset und verliert den Empfang, ohne dass man es mitbekommt.
Ich bin daher auf einen Webdienst umgestiegen. Dabei muss einfach nur eine URL mit dem ESP8266 aufgerufen werden und es wird automatisch eine SMS versendet.
Der Dienst dafür ist ClockWorkSMS (https://www.clockworksms.com/). Dort erhält man auch einige Frei-SMS zum Testen. Jede SMS kostet etwa 6 Cent, ist also auch nicht teuer.

Alles was benötigt wird

Für die Realisierung wurden die folgenden Teile benötigt:

ESP8266

Dieser Microcontroller verfügt über WLAN und ist dabei auch noch extrem günstig, gleichzeitig aber Leistungsfähiger als z.B. ein Arduino.
Ich nutze meistens ein NodeMCU Board, da man damit sehr einfach arbeiten kann.
Das Board gibt es z.B. bei Amazon für weniger als 10€ (Amazon) oder direkt aus China für weniger als 3€ (NodeMCU ESP 8266)

Sonstiges

• Relaisausgangsstück für den Heimzusatz des P8GR (https://www.rettungstech.de/funktechnik-alarmierung/tetra-p8gr-pager-tetrameldeempfaenger/ersatzteile-airbus-cassidian-p8gr-tetra/279/p8gr-tetra-pager-ladegeraet-relaisausgangstueck?c=61)
• Kabel (Amazon), (Aliexpress)
• RGB LEDs (Amazon) (Aliexpress)
• Widerstände je nach LED (Amazon), (Aliexpress)
• Eine Dose für alles, ich habe eine Verteilerdose genommen (Amazon), (Aliexpress)
• Schrumpfschläuche sind auch praktisch (Amazon), (Aliexpress)
• Netzteil für ESP8266 (Amazon)

Aufbau

ESP8266 Aufbau
ESP8266 Aufbau

Den Aufbau habe ich etwas komplexer gemacht als nötig. Eigentlich hätte der ESP8266 (NodeMCU) mit dem Netzteil, zwei Kabeln und das Relaisausgangsstück ausgereicht. Ich wollte mir den Status aber auch noch per LED anzeigen lassen.

Bei den LEDs habe ich drei Farben: Rot, Blau, Grün. Diese müssen mit entsprechenden Widerständen verlötet werden.

Die Pins bei der Verkabelung entsprechen immer der Aufschrift auf dem NodeMCU.

• Die grüne LED wird mit dem Pluspol an 3V und mit Minus an G angeschlossen. Diese zeigt an, dass der ESP8266 läuft.
• Die blaue LED mit Plus an D5 und Minus an G. Damit wird angezeigt wenn eine Alarmierung aktiv ist und eine SMS versendet wird
• Die rote LED mit Plus an D8 und Minus an G. Diese LED leuchtet, falls keine Verbindung zum WLAN besteht.
• Beim Relaisausgangsstück ist es etwas komplizierter. Hier wird eine Seite an 3V angeschlossen. Die andere Seite an D2, zusätzlich aber auch noch an G. Bei der Verbindung mit G muss ein wirklich starker Widerstand angelötet werden, sonst wird der Input falsch gemessen. Ich habe bei mir 1.000.000 Ohm genutzt.
• Achtet darauf, dass beim Relaisausgangsstück Plus (also 3V) Links ist. Eigentlich sollte bei einem Schließer egal sein wie rum man es anschließt, dass ist hier aber nicht der Fall. Wenn 3V rechts angeschlossen wird, funktioniert es nicht, da dauerhaft eine Spannung am Ausgang anliegt.

Wenn alles so verbunden ist, kann man es noch in eine Box verbauen. Ich habe eine Verteilerdose genommen, da ich nichts anderes schönes gefunden habe.

ESP8266 P8GR Skizze
ESP8266 P8GR Skizze

Programmierung

Den Quellcode habe ich kommentiert. Damit sollte eigentlich alles erklärt sein.
Ich lasse die WLAN Verbindung immer prüfen. Sollte diese weg sein, erfolgt natürlich kein SMS Versand, daher ist diese wichtig und wird bei mir mit einer roten LED angezeigt.

Zusätzlich wird nicht sofort bei einer Alarmierung eine SMS versendet, sondern es wird eine gewisse Zeit gewartet. Bei meinen Tests habe ich leider immer wieder zwischendurch zu einer ganzen halben Stunde eine SMS bekommen. Warum das so war kann ich nicht genau sagen. Irgendetwas passiert wohl im Heimzusatz und löst dann aus. Durch die kleine Toleranz von 4 Sekunden in meinem Fall umgehe ich diesen Fehler. Bei einer Alarmierung wird das Relais aber ca. 20 Sekunden oder mehr geschlossen, daher ist es kein Problem 4 Sekunden zu warten. Besser jedenfalls als ständig einen Fehlalarm zu haben.

Ergänzung: Mittlerweile habe ich die Wartezeit auf 9 Sekunden erhöht, da ich trotzdem nach ca. 2 Monaten einen Fehlalarm hatte. Ich hoffe es wird dadurch besser, der Grund könnte aber auch woanders liegen.

Nach dem Senden der SMS muss natürlich ein Kennzeichen gesetzt werden, da er sonst bei Alarmierung dauerhaft SMS versenden würde.

Vollständiger Quellcode

Hier der vollständige Quellcode:

#include ESP8266WiFi.h;
#include ESP8266HTTPClient.h;
 
const char* ssid = "Wlan-Bezeichnung";
const char* password = "Kennwort";
const int red_led = 15; //Output für rote LED - keine WLAN-Verbindung (NodeMCU D8)
const int blue_led = 14; // Output für blaue LED - Aufruf der URL / Senden der SMS (NodeMCU D5)
const int relais_input = 4; // Input für Relais Schaltung (NodeMCU D4)
 
int i_relais = 0;   //Variable für Wert von Relais
int smssend = 0;   //Variable die angibt ob eine SMS in der aktuelle Alarmierungsphase versendet wurde (bzw. der URL Aufruf erfolgt ist)
unsigned long startMillis = 0; // Startzeitpunkt der Alarmierung
unsigned long waitMillis = 9000; // Anzahl der Sekunden die die Alarmierung andauern muss damit eine SMS gesendet wird
 
void setup () {
  pinMode(red_led, OUTPUT);     //Output für rote LED - keine WLAN-Verbindung (NodeMCU D8)
  pinMode(blue_led, OUTPUT);     // Output für blaue LED - Aufruf der URL / Senden der SMS (NodeMCU D5)
  pinMode(relais_input, INPUT);     // Input für Relais Schaltung (NodeMCU D4)
  wifi_connect();
}
 
/*
 * Funktion für W-Lan Verbindung
 * Wird auch genutzt wenn die Verbindung zwischendurch verloren geht
*/
 
void wifi_connect() {
  digitalWrite(red_led, HIGH);
  Serial.begin(115200);
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
 
    delay(1000);
    Serial.print("Connecting..");
 
  }
  digitalWrite(red_led, LOW);
}
 
void call_url() {
   HTTPClient http;  //Declare an object of class HTTPClient
 	/*In der nächsten Zeile müssen die Platzhalter noch ersetzt werden */
    http.begin("http://api.clockworksms.com/http/send.aspx?key=key&to=&Telefonnummer&content=Inhalt");  //Specify request destination
    int httpCode = http.GET();                                                                  //Send the request
 
    if (httpCode > 0) { //Check the returning code
 
      String payload = http.getString();   //Get the request response payload
      Serial.println(payload);                     //Print the response payload
      smssend = 1; //Mail wurde gesendet
    }
 
    http.end();   //Close connection
}
 
void loop() {
 
  if(WiFi.status() != WL_CONNECTED)
  {
    wifi_connect();
  }
 
  i_relais = digitalRead(relais_input);
  if(i_relais == HIGH)
  {
    digitalWrite(blue_led, HIGH);
    if(startMillis == 0)
    {
      startMillis = millis();
    } else {
      if(millis() - startMillis >= waitMillis) {
        if(smssend == 0) {
          call_url();
        }
        startMillis = 0;
      }
    }
  }
  else {
    digitalWrite(blue_led, LOW);
    smssend = 0; //Auslösen beendet
  }
  delay(50);
}

Ich hoffe die Beschreibung ist verständlich und einige Personen können einen Nutzen daraus ziehen.
Bei Fragen schreibt mir einfach einen Kommentar.

Die Links zu den Shops sind übrigens Affiliate-Links. Euch entstehen dafür keine zusätzlichen Kosten, aber ich erhalte ein kleines Taschengeld, falls ihr etwas darüber kaufen solltet 🙂

13 Kommentare

  1. Florian Florian

    Hallo,

    erstmal Respekt für die Arbeit. Wir nutzen diesen code um einen API Code aufzurufen, den dann die Handys alarmiert.

    Leider funktioniert es aber seit 5 Tagen nicht mehr, obwohl ich nichts verändert habe.
    Könnten sie mir ggf. Hilfestellung geben?

    • marcel marcel

      Hallo Florian,
      kannst du den Fehler etwas eingrenzen? Ist noch Guthaben bei Clockworksms.com vorhanden?
      Dort kann man auch sehen ob eine SMS versendet wurde.
      Ansonsten könntest du versuchen den URL Aufruf von Clockworksms.com einmal am PC durchzuführen. Dadurch kannst du ausschließen, dass der Fehler dort liegt. Dann heißt es lokal suchen.
      Gruß

  2. Marcel Marcel

    Hallo,

    ich habe eine Frage… und zwar möchte ich den Aufbau identisch zu demProjekt aufbauen, jedoch aber die Nachricht über den Telegram Bot versenden lassen… dort fallen keine Kosten für das versenden an.
    Meine Frage ist ob ich den Code trotzdem nutzen kann und irgendwie das Telegram Script einbauen kann oder ob es dann nicht richtig funktionieren würde.

    Gruß

    • marcel marcel

      Hallo Marcel,
      es wird sicherlich auch mit Telegram funktionieren. Es gibt ja eine Telegram-Bibliothek für Arduino, mit dieser sollte das möglich sein. Ich habe selbst aber noch nicht mit Telegram gearbeitet, war bisher nicht interessant für mich.
      Du musst aber eigentlich nur den Aufruf der URL den ich eingebaut habe durch den entsprechenden Teil für den Telegram-Bot ersetzen.
      Ich hoffe das hilft dir etwas weiter.
      Gruß

  3. Patrick Patrick

    Vielen Dank für die tolle Beschreibung deines Vorgehens.

    Nach dem Nachbau für unsere ehrenamtliche Organisation musste ich einen Fehler feststellen.

    Wenn ich das funktionstüchtige ESP8266 an die Homestation des Airbus P8GR anschließe, wird das Relais dauerhaft geschlossen/aktiviert (blaue LED leuchtet).

    Hat das Problem noch jemand

    • marcel marcel

      Hallo Patrick,
      das hatte ich im Beitrag schon beschrieben. Tausche bitte mal die Kabel beim Relais aus. Man muss dort die Richtung beachten. Bei einer ist es immer geschlossen, bei der anderen Richtung funktioniert es.
      Gruß
      Marcel

      • Patrick Patrick

        DANKE!
        Mein Fehler, war zu unaufmerksam!

  4. Maurice Raue Maurice Raue

    Könntest du einen Quellcode hie reinstellen wenn man nur per API auslösen möchte ?
    Danke im Voraus !

    • marcel marcel

      Falls du das Versenden der SMS meinst, da ist der wichtige Teil einfach hier in der Funktion „call_url“:
      void call_url() { HTTPClient http; //Declare an object of class HTTPClient /*In der nächsten Zeile müssen die Platzhalter noch ersetzt werden */ http.begin("http://api.clockworksms.com/http/send.aspx?key=key&to=&Telefonnummer&content=Inhalt"); //Specify request destination int httpCode = http.GET(); //Send the request if (httpCode > 0) { //Check the returning code String payload = http.getString(); //Get the request response payload Serial.println(payload); //Print the response payload smssend = 1; //Mail wurde gesendet } http.end(); //Close connection }

  5. Markus Markus

    Ich habe zur gleichen Zeit etwa das gleiche gebaut, nur dass ich keinen ESP genommen habe und die SMS über ein A7 Modul, was ich noch hatte, versendet habe. Seit dem habe ich das aber nicht mehr angerührt.
    Heute ist mir beim updaten aufgefallen, dass der P8GR eine serielle Schnittstelle hat, die man mit Sicherheit mitlesen kann. Ich könnte mir vorstellen, dass man so auch den Inhalt in die SMS bekommen kann. Hast du zufällig auch schon etwas in die Richtung geguckt?

    • marcel marcel

      Hallo Markus,
      nein, habe ich noch nicht gemacht. Ich habe auch gewisse Zweifel daran, dass man den Inhalt der Meldung einfach so bekommt und dieser nicht verschlüsselt ist.
      Solltest du aber ein Weg finden und das doch möglich sein, dann würde mich eine Info dazu sehr freuen! 🙂
      Gruß

  6. Hermann Hermann

    Hallo Marcel!
    Erstmal vielen Dank für die super Beschreibung!

    Ich habe ein etwas anderes Problem und hoffe, dass du mir dabei helfen kannst:
    Ich möchte über die ESP8266 bei Alarmierung smarte Lampen ansprechen – in meinem Fall Phillips hue Lampen und IKEA Lampen.
    Leider fehlen mir die nötigen Programmierfähigkeiten. Eine NodeMCU ESP8266 habe ich bereits. Ein Relaisausgangsstück besitze ich leider noch nicht, werde ich aber besorgen.
    Arduino ist ebenfalls runtergeladen und (theoretisch) auf den ESP installiert.
    Hoffe du kannst mir da mit den entsprechenden Befehlen weiterhelfen.

    Gruß

Schreibe einen Kommentar zu Florian Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht.