c't 19/2023
S. 30
Titel
Smart City: Datenplattform mit ThingsBoard
Bild: Moritz Reichartz

Her mit den schönen Daten

Sensordaten auswerten mit ThingsBoard

Datensammeln allein macht noch keine Smart City. Erst mit einer Datenplattform werden aus Rohdaten Auswertungen mit Mehrwert. Mit der Open-Source-Software ThingsBoard betreiben Sie Ihre eigene Datenhalde und holen mehr aus Sensordaten heraus.

Von Jan Mahn

Sensoren messen Umweltdaten und verschicken sie über ein Funkprotokoll wie LoRaWAN (siehe S. 22) oder NB-IoT (siehe S. 28). Damit ist der Grundstein für ein Smart-City-Projekt schon mal gelegt. Doch wohin mit den Daten? Um mit ihnen nützliche Dinge anstellen zu können, gehören die Messwerte zunächst mal mit Zeitangabe in eine Datenbank. Wer Sensordaten produziert, braucht also einen Server, der sie speichert und bestenfalls auch gleich die Auswertung übernimmt: eine Datenplattform.

Wie eine solche Datenplattform für Smart Cities aussehen kann und wie man sie betreibt, erklärt das Dokument „Urbane Datenplattformen; Von der Idee bis zur Umsetzung: Entscheidungshilfen für Kommunen“ (zum Download über ct.de/y5x6), veröffentlicht vom Bundesinstitut für Bau-, Stadt- und Raumforschung (BBSR). Auf 26 Seiten bleiben die Autoren jedoch weitgehend unkonkret. Die Inhalte sind für versierte ITler eher Binsenweisheiten: Man kann fertige Software einsetzen, fertige Software auf eigene Bedürfnisse umbauen oder Software eigens entwickeln lassen. Die kann man wiederum selbst betreiben oder den Betrieb einem Dienstleister oder Cloudprovider überlassen. Und wenn man keine eigene Expertise hat, muss man sie einkaufen. Immerhin: Am besten solle man Open-Source-Software als Datenplattform einsetzen, so wird es auch im Smart-City-Förderprogramm des Bundes gefordert (mehr dazu im Artikel ab S. 16).

Konkrete Softwareempfehlungen bleibt die Entscheidungshilfe schuldig – deshalb tritt dieser Artikel mit dem Anspruch an, die klaffende Lücke zu schließen. Im Folgenden erfahren Sie, wie man mit der Open-Source-Software ThingsBoard Sensordaten einsammelt, Geräte verwaltet und Daten zu aussagekräftigen Dashboards verarbeitet. Interessant ist das nicht nur für Smart-City-Verantwortliche, sondern auch für Unternehmen, in denen Sensordaten anfallen, sowie für Fans von Smart-Home-Eigenbauprojekten. Eine ThingsBoard-Instanz läuft sowohl auf einem Server im Rechenzentrum als auch auf einem Raspberry Pi 3 oder 4. Wenn Sie also gerade keine Smart City planen, können Sie mit ThingsBoard auch Ihre Photovoltaikanlage oder die Daten Ihrer Heizung auswerten.

Um ThingsBoard einzurichten und zu betreiben, sollten Sie solides Wissen über den Betrieb von Serverdiensten sowie gute Englischkenntnisse für die Dokumentation mitbringen.

Viel drin in ThingsBoard

ThingsBoard vereint gleich mehrere Funktionen in einer Software, die man größtenteils auch einzeln aus Open-Source-Software zusammenstöpseln kann. Im Hintergrund arbeitet eine SQL- oder NoSQL-Datenbank, die ankommende Sensordaten speichert. Dazu gibt es eine grafische Oberfläche in Form eines Webinterfaces, über das man Benutzer, Projekte, Sensoren und weitere Objekte verwaltet. Außerdem haben die Programmierer sie direkt so gestrickt, dass man auch mehrere Tausend Geräte komfortabel verwalten kann.

Weiter ist eine „Rule Engine“ an Bord, in der man Workflows in Flussdiagrammen zusammenstöpselt – sehr ähnlich wie in der populären Oberfläche von Node-Red [1]. Daten kommen rein, die Software trifft eine Entscheidung, schreibt die Messwerte in die Datenbank und stellt etwa eine Berechnung an oder informiert jemanden. Mit der Rule Engine sind solche Aufgaben lösbar.

Die Sensoren dürfen ihre Daten auf verschiedenen Wegen im System abladen: unter anderem über HTTP-Endpunkte oder das Telemetrieprotokoll MQTT; einen MQTT-Broker bringt die Software direkt mit. Und auch nachdem die Daten als Messpunkte in der Datenbank verewigt wurden, hat ThingsBoard noch Funktionen zu bieten: Mit überschaubar wenigen Klicks und teilweise ganz ohne Programmcode baut man aus den Daten ansehnliche Dashboards, die Diagramme anzeigen oder zum Beispiel Sensordaten auf einem Stadtplan visualisieren. Solche Dashboards kann man entweder nur angemeldeten Nutzern zugänglich machen oder einen Link generieren, um sie zum Beispiel auf einer anderen Homepage einzubinden.

Darüber hinaus kann man Alarme einrichten – bei Über- oder Unterschreiten von Schwellwerten verschickt ThingsBoard zum Beispiel eine Nachricht an ein anderes System. Solche Alarme kann man auch für interne Zwecke nutzen, um zum Beispiel rechtzeitig den Wechsel eines Sensorakkus zu veranlassen.

Varianten und Kosten

Die oben beschriebenen Funktionen sind alle in der Open-Source-Variante namens Community enthalten. Die dürfen Sie selbst auf eigenen Servern oder auf gemieteter Infrastruktur betreiben – Limits für Geräte und andere Datenbankobjekte gibt es keine, Support bekommen Sie aber nur aus der Community, also von Gleichgesinnten. Reicht Ihnen das nicht, müssen Sie für die kommerzielle Version zahlen. Die gibt es in verschiedenen Paketen, die unter anderem mehr verwaltete Sensoren freischalten. Die Preisübersicht finden Sie unter der Adresse thingsboard.io/pricing.

99 US-Dollar kostet ein Paket für 100 Sensoren im Monat, wenn Sie die Professional-Edition selbst betreiben. Für monatlich 149 US-Dollar bekommen Sie eine von ThingsBoard gehostete Version für 100 Sensoren aus der Cloud – unsere Testinstanz lief in der Google Cloud, Diskussionen mit dem Datenschutzbeauftragten sind in ähnlichen Fällen also nicht ausgeschlossen.

Wenn Sie ThingsBoard ausprobieren und im kleinen Rahmen loslegen wollen, gibt es verschiedene Optionen. Den mit Abstand schnellsten Blick ins System bekommen Sie über die Testumgebung demo.thingsboard.io. Anmelden können Sie sich auch mit einem bestehenden Google-, Apple-, Facebook- oder GitHub-Account. Bei der ersten Anmeldung wird Ihnen eine mit Beispielen vorbefüllte Testinstanz bereitgestellt, dauerhaft benutzen können Sie die aber nicht. Wenn Sie langfristiger testen wollen, ist das Maker-Paket für 10 US-Dollar im Monat attraktiv. Dafür bekommen Sie 30 Sensoren in einer Cloudversion – Sie haben also keinerlei Administrationsaufwand und eine kleine Umgebung, um eine erste Idee in die Tat umzusetzen.

Wie Sie Ihre ersten Sensordaten ins System bekommen, lesen Sie im Abschnitt Schnellstart. Die dort beschriebenen Schritte können Sie auch mit der kostenlosen Demo-Umgebung nachvollziehen. Wenn Sie ThingsBoard in der Open-Source-Version lieber selbst betreiben wollen, lesen Sie den folgenden Abschnitt.

Hoster werden

ThingsBoard ist in Java geschrieben und läuft mit OpenJDK – wenn Sie mit der Java-Welt vertraut sind, können Sie also einen Linux-Server herrichten und der offiziellen Anleitung folgen (siehe ct.de/y5x6). Zusätzlich brauchen Sie eine Datenbank, im einfachsten Fall PostgreSQL, sowie einen sogenannten Message-Queue-Broker. Das ist die Schnittstelle zwischen der Komponente, die eingehende Nachrichten verarbeitet und der verarbeitenden Komponente. Er kümmert sich darum, dass das System auch bei gleichzeitigen Nachrichten von vielen Sensoren nicht zusammenklappt, indem er eingehende Nachrichten in einer Warteschlange hält und abarbeiten lässt. ThingsBoard arbeitet unter anderem mit den Open-Source-Brokern Kafka und RabbitMQ – in einer kleinen Experimentierumgebung können Sie sich diese Komponente vorerst sparen und statt eines Brokers die eingebaute In-Memory-Queue nutzen.

Schneller als mit der manuellen Installationsanleitung starten Sie ThingsBoard im Container mit Docker oder Podman [2]. Auf Seite 32 sehen Sie die minimale Docker-Compose-Datei, die für eine Experimentierumgebung ausreicht. Speichern Sie diese unter dem Namen docker-compose.yml auf einem Linux-Server oder Ihrem eigenen PC ab und starten die Zusammenstellung mit dem Befehl docker compose up. Bis der Container steht, vergehen ein paar Minuten, in den Logs auf der Kommandozeile können Sie den Prozess live beobachten.

Freigegeben werden in dieser Konfiguration gleich mehrere Ports. Auf Port 80 der Netzwerkkarte Ihres Servers antwortet nach dem Start die Weboberfläche – wenn Sie den Container auf Ihrem Entwicker-PC gestartet haben, reicht die Adresse http://localhost im Browser. Liegt der Dienst auf einem kleinen Server, brauchen Sie dessen lokale IP-Adresse. Port 1883 ist für MQTT zuständig; auf Port 7070 nimmt ThingsBoard Daten per RPC entgegen – wenn Sie das nicht nutzen wollen, können Sie die Zeile in der Docker-Compose-Datei auch weglassen. Gleiches gilt für den Bereich ab UDP-Port 5683, der für die Protokolle CoAP und LwM2M veröffentlicht wird.

Für einen Server im Internet reicht dieser Compose-Schnipsel noch nicht ganz, schon gar nicht im Produktiveinsatz. Vorschalten müssen Sie dafür unbedingt einen Reverse-Proxy, der die Seite unter einem Hostnamen veröffentlicht und sich darum kümmert, dass ein gültiges TLS-Zertifikat vorhanden ist und HTTP sowie MQTT per TLS ausliefert. Unsere Empfehlung: Der Open-Source-Proxy Traefik ist genau für dieses Szenario entwickelt worden und harmoniert perfekt mit einem Docker-Setup [3].

Läuft Ihre selbst betriebene Umgebung, melden Sie sich an der Weboberfläche an. Anders als in einer gehosteten Testversion auf demo.thingsboard.io können Sie dabei mehrere Rollen einnehmen. Das liegt auch daran, dass ThingsBoard von Haus aus mandantenfähig ist. Auf einem Server dürfen mehrere sogenannte Tenants (Mandanten) unabhängig voneinander existieren. Tenants verwaltet der Systemadministrator, der sich mit der Benutzername-Kennwort-Kombination sysadmin@thingsboard.org und sysadmin anmeldet. Bereits angelegt ist ein Default-Tenant, dessen Administrator tenant@thingsboard.org mit dem Kennwort tenant ist. Innerhalb des Tenants gibt es drei Kunden mit den Benutzernamen customerA@thingsboard.org (sowie customerB und customerC), alle mit dem Startkennwort customer. Um das Folgende mit der eigenen Instanz nachzuvollziehen, melden Sie sich als Tenant-Administrator an.

Schnellstart

Beim ersten Kontakt mit der Oberfläche sind die Begrifflichkeiten etwas verwirrend – das liegt in erster Linie daran, dass ThingsBoard für den Fall vorgesorgt hat, dass Sie Millionen Sensoren für Tausende Kunden verwalten wollen. Im Menü links gibt es daher Entitäten (Entities) und darunter Geräte (Devices) sowie Objekte (Assets). Ein Gerät ist zum Beispiel ein Sensor, mehrere Sensoren können Sie in ein Objekt stecken – wie Sie das nutzen, hängt vom Projekt ab. Ein Objekt kann zum Beispiel ein Gebäude sein, ein Straßenzug oder auch ein Stadtteil. Und wenn das immer noch nicht reicht, um Ihren Sensorpark zu sortieren, dürfen Sie Objekte auch ineinander verschachteln.

Um ein Gefühl für die Funktionsweise von ThingsBoard zu bekommen, lassen Sie Objekte zunächst links liegen und öffnen im Menü die Seite für Geräte. Dort finden Sie einen Temperatursensor namens T1. Indem Sie den in der Liste anklicken, sehen Sie ein Menü mit dessen Details. Die meisten dort eingestellten Optionen können Sie für den Einstieg ignorieren und später entdecken. Zunächst brauchen Sie das Zugangs-Token für das Gerät, das Sie über die blaue Schaltfläche „Zugangs-Token kopieren“ erhalten.

In der Geräteübersicht tauchen Ihre Sensoren auf. Ein Sensor, der gerade Daten eingeliefert hat, wird als aktiv dargestellt.
In der Geräteübersicht tauchen Ihre Sensoren auf. Ein Sensor, der gerade Daten eingeliefert hat, wird als aktiv dargestellt.

Dieser Wert reicht aus, um im Namen des Geräts Messwerte (Telemetrie) beim System einzuliefern – und zwar im Optimalfall als JSON-Objekt. Die zwei populärsten Wege sind HTTP und MQTT und schnell erklärt. Selbst wenn Sie Ihre Thingsboard-Instanz bisher noch nicht im Internet veröffentlicht haben, können Sie den Schritt ausprobieren, indem Sie einfach einen MQTT- oder HTTP-Client auf Ihrem Computer verwenden und so einen Sensor simulieren.

Für HTTP-Einlieferungen gibt es zwei relevante Adressen: Unter <Server>/api/v1/<ID>/telemetry darf ein Sensor Messwerte abgeben. Ersetzt man den letzten Teil durch /attributes, liefert man Metadaten zum Sensor ein. Solche werden nicht als Zeitreihe gespeichert, sondern ergänzen nähere Informationen zum Sensor.

Absetzen können Sie einen HTTP-Befehl mit dem Verb POST zum Beispiel auf der Kommandozeile mit Curl:

curl --request POST --location \
'<URL>/api/v1/<ID>/telemetry'\
-H 'Content-Type: application/json' \
--data '{"temperature": 24.1}'

Austauschen müssen Sie in diesen Zeilen zunächst den Platzhalter <URL>, für die Demo-Instanz schreiben Sie stattdessen https://demo.thingsboard.io. Für den Platzhalter <ID> setzen Sie das Token ein, das bereits in der Zwischenablage liegt. Anhand dieser Zeichenkette prüft Thingsboard einerseits die Berechtigung, auf dem Server Daten abzugeben, und weist andererseits die Daten direkt dem richtigen Sensor zu. Tipp für umfangreichere Experimente mit dem HTTP-API: Mit einem grafischen HTTP-Client wie Postman können Sie sich die Arbeit im Vergleich zu Curl deutlich erleichtern.

Sind schon Daten eines Sensors angekommen, ist ein solches Diagramm mit wenigen Klicks erzeugt – einfacher als mit Excel.
Sind schon Daten eines Sensors angekommen, ist ein solches Diagramm mit wenigen Klicks erzeugt – einfacher als mit Excel.

Unmittelbar nachdem Sie diese HTTP-Anfrage abgesetzt haben, liegt die Änderung auch schon auf dem Server. Um die eingehenden Werte zu bewundern, öffnen Sie den Sensor in der Geräteliste und navigieren in den Reiter „Aktuelle Telemetrie“. Die gute Nachricht: Wenn der Sensor künftig zusätzlich zur Temperatur im Feld temperature auch den CO2-Gehalt in der Luft als co2 melden soll, müssen Sie dafür kein Schema ändern. Das ist schnell ausprobiert – erweitern Sie einfach das JSON-Objekt:

{"temperature": 22, "co2": 415}

Auch dieser Wert landet sofort in der Ansicht und in der Zeitreihendatenbank.

Der Kanal über HTTP(S) ist deshalb so praktisch, weil das Anbinden von echten Sensoren damit sehr zügig über die Bühne geht. Im kostenfreien LoRaWAN The Things Network (TTN) heißt die Funktion zum Beispiel Webhooks. Den oben getesteten Pfad hinterlegt man einfach in der TTN-Oberfläche, ab dann ruft der Server bei jeder eingehenden Nachricht Ihren ThingsBoard-Server per HTTPS an und lädt die Daten als dekodierte JSON-Objekte ab. Neben diesem klickintensiven Weg über Webhooks gibt es noch einen zweiten, um TTN und ThingsBoard miteinander zu verheiraten: sogenannte Integrations. Die sind Teil der kommerziellen ThingsBoard-Versionen und machen das Verbinden von TTN und Thingsboard etwas komfortabler.

Als zweiten Eingangskanal, der auch Teil der Open-Source-Version ist, sollten Sie sich mit MQTT vertraut machen [4]. Über dieses Protokoll können Sie viele Systeme aus dem IoT-Umfeld anbinden – zum Beispiel eine schon bestehende Node-Red-Instanz. Um diesen Kanal zu simulieren, brauchen Sie einen MQTT-Client, der entweder auf der Kommandozeile läuft oder eine grafische Oberfläche bereitstellt. Unter Windows, Linux und macOS läuft zum Beispiel die kostenlose Software „MQTT Explorer“ (zum Download über ct.de/y5x6). Um sich mit dem MQTT-Broker von Thingsboard zu verbinden, brauchen Sie kein Kennwort – nur das Token eines Geräts als Benutzername. Das MQTT-Topic für Telemetriedaten lautet:

v1/devices/me/telemetry

Über das Token weiß Thingsboard, für welchen Sensor die Daten eingeliefert wurden und ordnet sie direkt zu.

Schöner Schirm

Sensordaten kommen im System an und landen als Datenpunkte in der Datenbank – jetzt kann man sie auswerten und visualisieren. Öffnen Sie links im Menü den Punkt Dashboards, hier sind bereits ein paar Beispiele angelegt. In der Demo-Instanz heißt das Dashboard, das die Daten von Sensor T1 darstellt „Environmental monitoring“, in einer selbst betriebenen Umgebung finden Sie eines mit dem Namen „Thermostats“. Beide Dashboards zeigen, was mit Bordmitteln so alles möglich ist: Die Sensoren tauchen links in einer Tabelle auf, dazu gibt es eine Weltkarte, die die Standorte anzeigt und beim Klick auf einen Sensor Details offenbart. Die einzelnen Elemente auf dem Dashboard heißen Widgets, bearbeiten kann man sie, indem man zuerst das Dashboard in den Bearbeitungsmodus versetzt (Stiftsymbol unten rechts) und das Stiftsymbol an einem Widget klickt.

In Dashboards präsentieren Sie die Ergebnisse Ihrer Arbeit: Sensordaten können in Tabellen, Diagrammen und auf Stadt- und Weltkarten dargestellt werden.
In Dashboards präsentieren Sie die Ergebnisse Ihrer Arbeit: Sensordaten können in Tabellen, Diagrammen und auf Stadt- und Weltkarten dargestellt werden.

Wenn Sie lieber mit einem neuen Dashboard beginnen und dort zum Beispiel Diagramme eines Sensors darstellen wollen, können Sie den Weg auch in umgekehrter Richtung beschreiten. Klicken Sie in der Geräteübersicht auf einen Sensor und navigieren Sie zum Tab für die aktuellen Telemetriedaten. Klicken Sie auf eine Zeile, zum Beispiel die Temperatur, erscheint ein Button „Im Widget anzeigen“. Das Widget wiederum können Sie konfigurieren und einem neuen oder bestehenden Dashboard hinzufügen. Nach wenigen Klicks ist das erste Dashboard vorzeigbar.

Damit Sie Ihr Dashboard mit der Welt teilen können, sind zwei Schritte nötig: Zunächst müssen Sie alle Sensoren, die darauf auftauchen sollen, öffentlich schalten. Navigieren Sie dafür in die Geräteübersicht, klicken auf einen Sensor und klicken oben auf den blauen Button „Gerät veröffentlichen“. Dann können Sie in die Übersicht der Dashboards wechseln und das Dashboard publizieren. In der Tabelle gibt es dafür das Symbol mit den drei Punkten, die mit Linien verbunden sind. Sie erhalten eine ziemlich lange URL, die Sie kopieren müssen. Fertig ist Ihr Endprodukt: Schauen Sie sich Ihr Dashboard mit einem zweiten Browser aus Perspektive eines nicht angemeldeten Nutzers an.

Fazit

Es muss nicht immer eine große eigene Softwareentwicklung sein: Mit ThingsBoard bekommen Sie eine Datenplattform, die Ihre Messwerte entgegennimmt, abspeichert, Dashboards erzeugt und der Öffentlichkeit bereitstellt. Und dieser Artikel beschreibt nur einen Bruchteil der Möglichkeiten, die diese Software mitbringt: Für baugleiche Sensoren wollen Sie mit Geräteprofilen arbeiten, Dashboards können noch viel mehr als beschrieben. Und fortgeschrittene Nutzer sollten noch einen Blick auf den Menüpunkt Regelketten werfen – denn bisher wurden die eingehenden Daten nur mit den Standardregeln verarbeitet. Links zur ThingsBoard-Dokumentation finden Sie über ct.de/y5x6.

Was zum Abschluss noch fehlt, ist eine gute Idee, die Sie mit diesem Werkzeugkasten umsetzen wollen: Eine Live-Übersicht über die Positionen von Bussen in der Stadt, eine Live-Karte mit freien Parkplätzen oder ein Umwelt-Dashboard, das Messwerte an verschiedenen Standorten anzeigt. (jam@ct.de)

Software und Dokumentation: ct.de/y5x6

Kommentieren