LoRa-Pager – Alarmierung über 868 MHz

Während Corona habe ich mir ein Projekt mit dem LoRa-Protokoll überlegt, welches sich bereits sehen lassen kann. Ich bin in meiner Freizeit bei der Freiwilligen Feuerwehr aktiv. An unserem Standort haben wir die Sondereinheit Führungsunterstützung, welche vor allem bei größeren Einsätzen mit der Koordination des Funks hilft, aber auch mit Drohnen und Luftbildern unterstützen kann. Die Alarmierung von Einsatzkräften funktioniert noch immer wunderbar mit Funkmeldeempfänger über das 2m Band mit dem POCSAG Protokoll. So wie in fast ganz Deutschland. In unserer Feuerwehr kommt ein Swissphone s.QUAD X15 zum Einsatz ohne IDEA-Verschlüsselung.

Und genau das ist der Knackpunkt. Ich als Maker und Entwickler wollte mir schon lange das LoRa Protokoll genauer ansehen und dafür ein realitätsnahes Projekt basteln. Raus gekommen ist ein Funkmeldeempfänger basierend auf einem ARM Cortex-M0+ Microcontroller mit starker AES-192 Verschlüsselung welcher auf dem kostenfreien ISM-Band 868 MHz funkt.
So wirklich neu ist das alles nicht. Inspiriert habe ich mich unter anderem durch Pager-Duino.

Hardware-Revisionen

Revision 1: Die erste Revision enthielt einen 8-bit AVR ATmega4808 Microcontroller zusammen mit einem SSD1306 32×128 Zeichen Display, einer RTC (MCP7940) sowie dem ATECC608B Cryptochip von Microchip. Für LoRa habe ich auf den SX1276 von Semtech gesetzt. Diesen gibt es als Modul mit Impedanzanpassung für eine 50 Ohm Antenne auf vielen Plattformen. Für die Batterie, welche eine 18650 Batterie ist, ist auf dem Pager eine Ladeschaltung welche den Strom per Typ-C Anschluss erhält.

Revision 2: Die zweite Version enthielt neben ein paar Bugfixes, vor allem für falsche Footprints, ein externes EEPROM um einen Nachrichtenspeicher zu haben. Da außerdem die gleiche Platine, welche für das Empfangen zuständig ist, ebenfalls als Sendeeinheit fungieren kann, habe ich den U.FL Anschluss aus Revision 1 zu einem SMA Anschluss für größere Antennen getauscht.

Revision 3: Wie es in der Entwicklung so ist, findet man während des Prototypings immer wieder coole neue Dinge. So ist mir das erste mal der SAMD21 ARM Microcontroller von Microchip unter die Finger gekommen. Da das Projekt auch rein Hobbymäßig ist, habe ich die gesamte Schaltung nun umgebaut für den SAMD21 Prozessor. Es waren keine großen Änderungen notwendig, eher war ich noch flexibler, da es keinen statischen SPI/I2C/UART Schnittstellen gibt. Zudem hatte ich die Möglichkeit vom Typ-C Anschluss die Datalines auf den Prozessor zu legen und so den Pager auch als USB-Gerät nutzen zu können. Hierdurch lässt sich nun das Gerät per USB programmieren. Ebenfalls konnte ich nun den ATECC608B Cryptochip runterschmeißen, da der ARM Prozessor nun genug Leistung hat um AES Verschlüsselung durchzuführen.

Revision 4: Die vorerst Letzte Revision hat keine großartigen Änderungen mehr. Lediglich zwei fehlende Widerstände und vertauschte Pins. Jedoch tauschte ich ebenfalls den vorhandenen Piezeo Buzzer durch einen 20mm Lautsprecher mit einem kleinen Vorverstärker aus, da der Buzzer doch recht leise und nicht wirklich präsent war. Ebenfalls bin ich von dem LoRa Empfänger SX1276 auf den neueren SX1262 umgestiegen, da dieser mehr als die Hälfte weniger an Stromverbrauch hat. Der SX1262 kommt als Modul DRF1262T von DORJI.

Ohne Software läuft nix

Der Code für die Hardware wurde in C++ geschrieben mit dem Arduino Framework. Für das Frontend habe ich auf React gesetzt. Das Backend ist passend in NodeJS geschrieben.

Der Pager hat die Möglichkeit bis zu drei Profile einprogrammiert zu bekommen. Derzeit werden bis zu 10 Nachrichten auf dem externen EEPROM gespeichert. Eine Nachricht kann über mehrere Zeilen gehen. In diesem Fall wird die Nachricht einfach Umgebrochen und alle 3 Sekunden automatisch zum nächsten Teil gescrollt.
Zur Alarmierung gibt es einen Piezo-Buzzer bzw. einen Lautsprecher, eine weiße LED sowie ein Vibrationsmotor. Jede Komponente kann im Menü einzeln aktiviert oder deaktiviert werden.

Das Webinterface ist vor allem zur einfachen Verwaltung der Verschlüsselungsschlüsel sowie der Nachrichten gedacht. Gerade die AES Schlüssel-Verwaltung macht es extrem einfach neue Nachrichten richtig zu verschlüsseln. Die Schlüssel werden in der Datenbank zusätzlich verschlüsselt hinterlegt und sind größtenteils gegen Datenleaks sicher. Die Programmierung der Profile/Gruppen, welche jeweils eigene AES Schlüssel enthalten, geschieht ebenfalls über den Webbrowser. Hier nutze ich die noch nicht ganz ausgereifte Web-Serial API.

Die LoRa-Infrastruktur

Zum Senden kann die gleiche Platine für den eigentlichen Pager verwendet werden, welche nur nicht komplett bestückt ist. Das Senden passiert auf 868 MHz mit einem Spreadingfactor von 12 bei 25 mW. Damit gesendete Nachrichten nicht die EU-Richtlinien überschreiten, achtet das Backend darauf, dass Nachrichten nicht zu lange in der Luft sind (Stichwort: Airtime). Wenn mehrere Sender verwendet werden sollen (bspw. in einem Stadtgebiet verteilt) können diese als Clients hinterlegt werden im Frontend. Jeder Client erhält einen eigenen AES Schlüssel, welcher zum authentifizieren ist. Ein Client wählt sich per WebSocket beim Backend ein und wartet auf neue Nachrichten. Der Client kann nun entscheiden was er mit dem Datensatz macht. So ist es auch möglich SMS Benachrichtigungen oder ähnliches zu verschicken. Damit LoRa Pakete nicht in der Luft kollidieren, berechnet das Backend wann welcher Client eine Nachricht versenden darf.

Da nicht viel und vor allem Leistungsstarke Hardware benötigt wird, lässt sich ein Client auch mit einem einfachen Raspberry Pi umsetzten. Derzeit sendet ein Banana Pi, welcher per WiFi in meinem Heimnetz ist, die LoRa Pakete per Serielle Schnittelle an das LoRa Modul.

Da die Pager dauerhaft auf neue LoRa Pakete hören, verbraucht das Gerät relativ viel Strom im Standby. Die LoRa Module bis einschließlich Revision 3 verbrauchten rund 12 mA. Ab Revision 4 liegt dies bei knapp 5 mA.
Ein anderer Ansatz wäre eine Zweiwege-Kommunikation: Die Pager senden eine Nachricht an die eigentlichen Sendeeinheiten und fragen ob es neue Nachrichten gibt. Ist dies der Fall, so wird diese gesendet, andernfalls nicht. Das hat natürlich den Nachteil, dass die winzige Antenne auf den Pagern die Reichweite extrem minimiert.

Wie weit kommt LoRa denn nun?

Aufgrund der Limitierung im ISM Band in Europa (1% Duty-Cycle; maximal 25 mW Sendeleistung; Antenne mit maximal 2.5 dBm Gain) ist die Reichweite natürlich begrenzt. Das LoRa Modul kommt trotz der Limitierung mit der passenden Antenne jedoch auch mehrere Kilometer weit. Sogar im Ruhrgebiet. Außerdem ist das Backend so geschrieben, dass mehrere Sender verbunden werden können und somit ohne Interferenzen eine größere Fläche abbilden können.
Hat man jedoch den Blick bspw. auf den Katastrophen Schutz oder der Amateurfunk-Lizenz, so ist es möglich den LoRa Chip auf eine Frequenz zwischen 135 MHz und 930 MHz zu tunen und eine Sendeleistung von bis zu 100 mW nutzen. Somit könnte man auch Legal noch mehr aus dem Projekt rausholen.

Schreiben Sie einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.