PHP Dashboard für HmIP Smartmeter
09.10.2024
Elektronik | Funk | Software
Der Technik-Blog
LoRa ist eine sehr gute Funklösung für IoT Geräte. Neben bekannten Cloud-Lösungen wie von TTN (The Things Network) gibt es aber auch sehr viele kleine oft nur regionale LoRa-Netzwerke. Die Hauptfunktion eines Gateways ist die Weitergabe von empfangen LoRa Datenpaketen an einen Server oder Cloud. In diesem Artikel geht es um den Bau eines kleinen LoRa Gateways mit einem ESP32 LoRa Board, das in der Lage ist, die Daten an einem Webserver über HTTPS POST weiterzugeben.
ESP32 LoRa Board Arduino IDE Setup
Die kleine LoRa Wetterstation
Die große LoRa Wetterstation
Das IoT-Gerät (Wetterstation, GPS-Tracker, Datenlogger...) sammelt Sensordaten und sendet diese über Funk (LoRa) aus. Werden diese Daten von einem oder mehreren Gateways empfangen, so werden diese Daten zuerst im Gateway gepuffert. Anschließend wird der empfangene Datensatz unverändert an einem im Gateway hinterlegten Webserver über HTTPS mittels POST oder GET Request gesendet. Zusätzlich zum empfangenen Datensatz fügt das Gateway seine eigene ID und die Empfangssignalstärke hinzu. Am Server werden die Daten anschließend verarbeitet und in einer Datenbank oder Datei gespeichert.
Der ESP32 mit integriertem LoRa ist eine sehr günstige LoRa Gateway Lösung. Für gerade mal 20 Euro bekommt man ein Board mit den bekannten SX1276 LoRa-Chip, WiFi und einem integrierten OLED-Display. Auf dem Display kann man sich den Verbindungsstatus oder auch die LoRa Pakete anzeigen lassen.
Das versendete Datenpaket vom IoT Gerät enthält neben den zu übertragenen Daten auch eine eindeutige ID, die noch vor den Nutzdaten mit gesendet wird. Diese eindeutige ID benötigt der Server, um das Datenpaket entsprechend dem IoT Gerät zuordnen zu können. Die ID und die einzelnen zu übertragenden Werte werden anschließend mit einer Zeichenkette ausgesendet. Zwischen jeden einzelnen Wert befindet sich ein Semikolon bzw. Strichpunkt, der die einzelnen Daten abgrenzt. Das Gateway wandelt diese Zeichenkette in einem String um und gibt diesen entsprechend an den Server weiter. Erst am Server werden die Daten durch das Semikolon getrennt und entsprechend eingeordnet.
HTTPS ist mittlerweile weltweit auf fast jedem Server Standard. Viele Webhosting Provider und Server akzeptieren gar keine normalen HTTP Verbindungen mehr, weshalb aus kompatibilitätsgründen auch dieses Gateway ausschließlich über HTTPS arbeitet. Achtung: HTTPS ist nur mit gültigen und vom Client überprüften Zertifikaten sicher! Das LoRa Gateway überprüft keine SSL-Zertifikate, was bedeutet, dass die Daten auch an einen Server mit gefälschten oder abgelaufenen Zertifikat gesendet werden. Da es sich bei Sensordaten in der Regel um keine vertraulichen oder persönlichen Daten handelt, kann dies vernachlässigt werden.
LoRa bietet ebenfalls eine Verschlüsselung an, die aber in diesem Beispiel aufgrund der Einfachheit nicht verwendet wird.
Im Setup stellt der ESP32 eine Verbindung zum eingestellten WiFi Netzwerk her und verbindet sich über SPI mit dem LoRa-IC. Am OLED-LCD und im Serial Monitor werden dazu entsprechende Details ausgegeben. In der Hauptschleife befinden sich mehrere Timer und die ständige Empfangsbereitschaft für LoRa-Datenpakete. Wird ein Datenpaket empfangen, so geht das Programm in eine Schleife über, wo die empfangen Zeichen zu einem String zusammengefasst werden. Außerdem wird während dessen die Signalstärke vom empfangenen Gerät ermittelt. Wurde der gesamte Datensatz empfangen, so wird anschließend eine weitere Funktion aufgerufen, welche die empfangenen Daten an den eingestellten Webserver weiterleitet. Wurden die Daten erfolgreich an den Server übertragen oder das Timeout wurde überschritten, wechselt das Programm wieder in den Empfangsmodus.
Am Anfang der Software befindet sich nach den Bibliotheken die Basiskonfiguration für das Netzwerk und die Hardware. Die gelb markierten Bereiche (1) sind Pin-Konfigurationen für das LoRa Modul und das OLED -Display. Im "void setup()" werden noch SPI-Pins definiert, die für LoRa notwendig sind. Hinweis: Diese Pins sind für das Heltec ESP32 LoRa Board definiert und sind auf anderen Boards anzupassen. Der blau markierte Bereich ist die Basiskonfiguration für das Netzwerk. Dazu zählen Netzwerkname und Passwort von WiFi-Netzwerk sowie die Domain vom Webserver an dem die Pakete gesendet werden sollen. In der letzten Zeile wird noch eine ID vom Gateway definiert, die beim PHP-Beispielcode frei definiert werden kann. Bei der AEQ-WEB IoT Cloud wird diese entsprechend vom Server vorgegeben und ist hier einzugeben.
In der Software sind einige Timer (zeitgesteuerte regelmäßige Abläufe) vorhanden, die in bestimmten Intervallen Funktionen aufrufen. Dazu zählt unter anderem die automatische Aktualisierung vom OLED-Display, das senden von Beacons an den Server und die Überwachung der WiFi-Verbindung.
-Timer OLED Update-
Über diesen Timer wird das integrierte OLED Display am Board aktualisiert. Der Timer ist so konfiguriert, dass die Funktion (display_status()) alle 5 Sekunden aufgerufen wird.
-Timer Send Beacon-
Dieser Timer ruft die Funktion (call_https()) mit einem Beacon Parameter auf. Dabei wird wie bei der Weiterleitung von einem LoRa-Packet, ein HTTP-Request durchgeführt. Hier werden jedoch keine Werte übertragen, sondern nur ein "Lebenszeichen (Beacon)" versendet. Dadurch erkennt der Server, dass das Gateway online ist. Der Timer ruft diese Funktion alle fünf Minuten auf.
-Timer Check Wifi-
Da es hin und wieder passieren kann, dass die WiFi Verbindung verloren geht oder es zu einem Fehler kommt muss die Verbindung unter umständen erneut aufgebaut werden. Um die Konnektivität zu überprüfen, wird hier die Funktion (check_wifi()) alle 10 Minuten aufgerufen.
-Timer Reboot ESP-
Um gegen eventuelle Zeitüberläufe oder Systemfehler vorzubeugen, die ein Hangup verursachen könnten, wird der ESP nach etwas mehr als 24 Stunden automatisch neu gestartet. Das Zeitintervall kann hier auch auf eine Woche oder ein Monat gestellt werden, dadurch würde die kurze Downtime von weinigen Sekunden jeden Tag entfallen.
get_lora_data():
Über diese Funktion werden die einzelnen Zeichen, die über LoRa empfangen wurden in einen String zusammen gesetzt. Dieser String wird anschließend unverändert mit Zusatzinformationen vom Gateway an den Server gesendet.
call_https():
In dieser Funktion wird der HTTPS-Request durchgeführt. Beim Aufrufen der Funktion werden drei Parameter, wie der zu übertragende Datensatz, die Signalstärke und der Request-Typ an die Funktion übergeben. Anschließend werden hier die Informationen und der Header an die definierte Serveradresse mittels POST gesendet. Über den Serial-Monitor werden sämtliche Informationen wie etwa der Response vom Server ausgegeben.
display_status():
Mit dieser Funktion wird das OLED-Display aktualisiert und die einzelnen Zeilen und Parameter sowie deren Position generiert.
check_wifi():
In dieser Funktion wird die W-Lan Konnektivität überprüft. Sollte das WiFi-Netzwerk getrennt sein, so wird versucht, eine erneute Verbindung herzustellen. Nach 5 fehlgeschlagenen Verbindungsversuchen wird der ESP neu gestartet.
Auch für dieses Projekt werden wieder einige Librarys benötigt. Die WiFiClientSecure und SPI Bibliothek sollten bereits standardmäßig im Arduino IDE vorhanden sein. Noch zu installieren sind über den Library-Manager folgende Bibliotheken:
Für LoRa: Sandeep Mistry LoRa | Version: 0.5.0
Für das Display: U8G2 OLED Display | Verision: 2.26.14
Der PHP-Beispielcode ist sehr einfach aufgebaut. Wird das Programm "Gateway.php" aufgerufen, so wird der empfange POST-Datensatz mit einem Zeitstempel versehen und in eine einfache Textdatei gespeichert. Wichtig: Auf dem Server bzw. Webspace, wo die Dateien liegen, müssen Schreibrechte (0777) vorhanden sein. Über die Index-Datei wird die Textdatei aufgerufen und im Browser angezeigt. Der gesamte Beispielcode dient hauptsächlich als Testbeispiel. Durch entsprechende Weiterentwicklung können die Daten auch in eine MySQL-Datenbank gespeichert werden.
Über den Serial Monitor werden sehr viele Informationen während des Programmablaufes ausgegeben. So sieht man, ob die WiFi-Verbindung funktioniert, der Webserver erreichbar ist und wann Daten via LoRa empfangen werden. Außerdem wird während der Datenübertragung zum Webserver auch die Ausgabe von PHP im Serial Monitor angezeigt. Nachfolgend ein Screenshot von der Serial-Monitor Ausgabe, wo ein Datenpaket via LoRa empfangen wurde und erfolgreich an den Server übermittelt wurde.
In diesem Artikel geht es um den Bau von einem LoRa Gateway, was die empfangenen Daten von einem IoT Gerät an einen Webserver mit HTTPS POST weiterleiten kann
WeiterlesenWie funktioniert analoges SSTV grundsätzlich und welche Programme und Apps es für das Senden und Empfangen von SSTV-Bildern gibt
WeiterlesenAEQ-WEB © 2015-2024 All Right Reserved