PHP Dashboard für HmIP Smartmeter
09.10.2024
Elektronik | Funk | Software
Der Technik-Blog
In den letzten beiden Artikeln ging es um die Inbetriebnahme eines LoRa-Gateway mit TTN sowie um einen Temperatursensor mit LoRa. Da das TTN die empfangenen Daten in der Applikation nur kurzzeitig speichert und die Daten nachträglich nicht mehr abrufbar sind, wird ein eigener Server oder ein Dienst benötigt, der diese Daten dauerhaft speichert. TTN selbst verfügt über sehr viele Schnittstellen zu anderen Speicherdiensten, wo dann die empfangenen Daten vom LoRaWAN Netzwerk abgelegt werden können. In diesem Artikel geht es um die Programmierung eines eigenen kleinen HTTP-Application-Server mit PHP, der die Daten in eine MySQL-Datenbank am eigenen Webspace oder Webserver speichert. Über eine kleine Tabelle werden die Daten vom jeweiligen Sensor angezeigt.
Hinweis: Für dieses Projekt wird ein Webspace oder ein Webserver benötigt. Neben bekannten und guten Providern wie Hetzner Online oder World4You gibt es bei BPlaced sogar einen kostenlosen Speicher, der für dieses Projekt völlig ausreichend ist.
Achtung: TTN hat beim Wechsel von V2 auf V3 (The Things Stack) die JSON-Formatierung bei der HTTP-Integration geändert. Das Projekt ist aktuell nicht mit TTN V3 kompatibel. Ein Update für den V3-Stack gibt es hier.
Dragino LG-02 LoRaWAN Gateway installieren
LHT65 Sensor mit TTN verbinden
So funktioniert die LoRa Payload | Encoder, Decoder & Best Practice
Bevor man die Daten auf dem eigenen Webspace überhaupt empfangen kann, benötigt man einen Sensor sowie ein eigenes Gateway oder ein öffentliches Gateway in Reichweite. Außerdem muss der Sensor bereits mit TTN kommunizieren und die Payload von TTN entsprechend decodiert werden. Ein entsprechendes Beispiel-Tutorial mit dem LHT65 gibt es hier.
Die Kommunikation zwischen TTN und der eigenen Webseite funktioniert sehr einfach über HTTP oder HTTPS Requests. Kommt ein neues Datenpaket über LoRaWAN bei TNN an, startet TTN einen HTTP-Request und überträgt die Daten im JSON-Format mit HTTP-POST an den eigenen Webserver. Dazu wird am Webserver ein einfacher PHP-Script aufgerufen, der die Daten von JSON decodiert und in eine MySQL Datenbank speichert. Greift man mit dem Browser auf die Webseite zu, dann werden die von TTN übertragenen LoRa-Datensätze aus der MySQL-Datenbank gelesen und angezeigt.
Bevor die Einrichtung in TTN gestartet werden kann, muss der Webserver und die zugehörige Datenbank eingerichtet werden. Als erstes wird der ZIP-Ordner mit den PHP-Files heruntergeladen. Anschließend werden die Dateien aus dem Archiv entpackt und die Datei "config.php" mit einem Texteditor geöffnet. Die Datei sieht wie im folgenden Screenshot aus:
Die folgenden Parameter müssen entsprechend an den Datenbankserver angepasst werden:
DATABASE_USERNAME: Username für den Datenbank Login
DATABASE_PASSWORD: Passwort für den Datenbank Login
DATABASE_NAME: Name der Datenbank
DATABASE_HOST: Adresse des Datenbankservers (bei einigen Providern ist die localhost)
WRITE_LOG: Ist dieser Parameter auf den Wert "true" gesetzt, so wird der gesamte Traffic von TTN zusätzlich in einer Textdatei (log.txt) am Webserver gespeichert.
Hinweis: Bei den meisten Webspace Anbietern muss zuerst in deren Verwaltungsoberfläche eine MySQL-Datenbank angelegt werden. In der Regel werden dort auch die notwendigen Zugangsdaten angezeigt oder per E-Mail versendet.
Wenn die "config.php" Datei bearbeitet wurde, können alle drei Dateien (config.php, ttn.php & index.php) auf den Webserver geladen werden. Dies wird meistens über einen FTP-Client wie Filezilla, WinSCP o.ä. hochgeladen. Nähere Infos und die Zugangsdaten erhält man auch wieder vom jeweiligen Provider.
Nachdem die PHP-Dateien auf den Webserver hochgeladen wurden, muss die Datenbank-Struktur importiert werden. Dazu loggt man sich im PhpMyAdmin vom jeweiligen Provider ein. Die bereits vorhandene Datenbank ist grundsätzlich leer. In PhpMyAdmin gibt es den Reiter "Import". Hier wird die Datei "sql_template.sql" ausgewählt und hochgeladen.
Nach einem Klick auf "OK", sollte der Import-Vorgang abgeschlossen sein und die Tabelle "data" vorhanden sein. Anschließend kann bereits die Domain vom Webspace mit dem Browser aufgerufen werden. Hier sollte wie im folgenden Screenshot zu sehen, die folgende Fehlermeldung kommen:
Ist dies nicht der Fall oder kommen andere Fehlermeldungen, so liegt ein Fehler am Datenbank-Server oder in der "config.php"-Datei vor.
In der bestehenden Applikation klickt man auf den Reiter "Integrations". Ein Klick auf "Add Integration" öffnet ein neues Fenster, wo verschiedene Dienste aufgelistet werden
Nach dem Klick auf "add Integration" wird in TTN das Tool "HTTP Integration" ausgewählt. Nachdem dieser Menüpunkt ausgewählt wurde, öffnet sich wieder ein neues Fenster mit einigen Eingabefeldern, wie im folgenden Screenshot zu sehen:
Nachdem die HTTP-Integration ausgewählt wurde, fragt TTN nach einigen Parametern:
Process ID: Eine Prozess-ID muss vergeben werden, kann jedoch frei gewählt werden.
Access Key: Der "default key" kann ausgewählt werden
URL: Die Server Adresse (beginnend mit http oder https) inklusive Angabe zum PHP-Script (/ttn.php)
Method: POST
Authorization: Bleibt leer
Custom Header Name: Bleibt leer
Custom Header Value: Bleibt leer
Anschließend wird die Integration mit "Add Integration" erstellt. Ab sofort startet TTN bei jedem empfangen Datensatz einen Aufruf zur zuvor definierten URL. Der Datensatz wird als POST im JSON-Format übergeben und sieht entsprechend dem folgenden Beispiel aus:
{ "app_id":"aeqwebtest", "dev_id":"lht65aeqweb", "hardware_serial":"A840415911822C11", "port":2, "counter":214, "payload_raw":"y6b/NAN1Af8yf/8=", "payload_fields":{ "BatV":2.982, "Ext_sensor":"Temperature Sensor", "Hum_SHT":"88.5", "TempC_DS":"17.06", "TempC_SHT":"17.36" }, "metadata":{ "time":"2020-11-27T02:54:31.756177397Z", "frequency":868.1, "modulation":"LORA", "data_rate":"SF7BW125", "coding_rate":"4/5", "gateways":[ { "gtw_id":"eui-c0dd4023ae2943a7", "timestamp":1162788267, "time":"", "channel":0, "rssi":-112, "snr":-4.2, "rf_chain":0 } ] }, "downlink_url":"https://integrations.thethingsnetwork.org/ttn-eu/api/v2/down/aeqwebtest/http_aeqweb_testserver?key=ttn-account-v2.O1O-RWpTYvjWm0n89k23atCjRBP9gZYQULtkEMmpe10" }
Der PHP-Script "ttn.php" übernimmt die empfangenen Daten von TTN und speichert dieses in die vorgefertigte MySQL-Datenbank. Der Script ist so entwickelt worden, dass nur die notwendigsten Parameter von TTN in die Datenbank gespeichert werden. Der Script und die Datenbank dienen als Vorlage und können an die entsprechen Parameter angepasst werden oder auch erweitert werden. Ist die "WRITE_LOG" Funktion aktiviert, so wird auch jeder Request von TTN mit den Rohdaten in eine Zeile vom Logfile geschrieben.
Die Index-Datei generiert von der MySQL Datenbank eine kleine Tabelle. Obwohl die MySQL-Datenbank alle empfangenen Datensätze speichert, wird in der Tabelle automatisch immer der neueste Datensatz ausgegeben. Auch hierbei handelt es sich nur um ein Beispiel, dass vom Nutzer auf die jeweiligen Bedürfnisse angepasst werden kann.
LoRa Datenpakete sind bis zum Application-Server grundsätzlich mit AES-Verschlüsselt. Wird bei TTN die HTTP-Integration mit einer HTTPS-URL erstellt, gilt auch hier die Datenübertragung als verschlüsselt. Aber Achtung: Jeder, der die URL zur "ttn.php" Datei kennt, kann auch Daten in die Datenbank speichern. Im produktiven Einsatz empfiehlt es sich, zumindest die Device-ID zu prüfen, damit sichergestellt ist, dass die Daten tatsächlich von TTN kommen. Außerdem gibt es bei TTN die Option, Sicherheitsparameter in den Header einzubauen. Auch das kann mit PHP überprüft werden.
Einstieg in das LoRaWAN (TTN) mit dem Heltec LoRa32 V3 und Einrichtung vom Board in der Arduino IDE
WeiterlesenStarthilfe LoRaWAN - Diese Seite richtet sich an alle Einsteiger, die mit LoRaWAN starten wollen und ihre Sensoren in das IoT-Netzwerkt TTN integrieren wollen
WeiterlesenAEQ-WEB © 2015-2024 All Right Reserved