Weltweiter kostenloser Versand ab 120 € Bestellwert – Zahlung mit PayPal und Stripe – Hergestellt in Finnland

Ruuvi Gateway mit einem privaten Server verbinden

Wie alle Ruuvi-Produkte soll auch das Ruuvi Gateway zwei sehr unterschiedliche Anwendungsfälle abdecken: Plug-and-Play-Nutzer, die eine „funktioniert einfach“-Erfahrung wollen, auf der einen Seite – und Enthusiasten, die experimentieren, anpassen und ihre eigenen Systeme betreiben möchten, auf der anderen. Dieser Artikel zeigt Schritt für Schritt, wie du ein Ruuvi Gateway über MQTT, NodeJS, InfluxDB und Grafana mit einem privaten Server verbindest.

MQTT wird verwendet, um das Ruuvi Gateway mit einem privaten Server zu verbinden, sodass du Ruuvi Cloud parallel mit einem Gateway-Gerät betreiben kannst. MQTT hält außerdem eine dauerhafte Verbindung zwischen Gateway und Gerät, wodurch das Backend jedes Datenpaket empfangen kann, das das Gateway erhält.

Einen privaten DigitalOcean-Server für RuuviTag-Daten einrichten

Ruuvi Cloud startete zwar als Open Source, aber wir haben schnell gemerkt, dass der Einrichtungsaufwand und die Wartung einer eigenen Lösung mehr Aufwand bedeuten und weniger flexibel sind als eine fertige Lösung – zumindest für Nutzer, die nur ihre persönlichen Sensoren unterstützen möchten. Deshalb haben wir für die Anleitung zum privaten Server einen vertrauten Stack aus weit verbreiteten Open-Source-Komponenten gewählt, statt ein Ruuvi-Cloud-Clone-Setup zu beschreiben.

Diese Anleitung wurde auf Debian getestet, das auf DigitalOcean läuft. Die Hardware-Anforderungen hängen von der Menge der verarbeiteten Daten ab, aber für eine leichte Last mit einigen Dutzend Sensoren sollte jede Instanz für 10–20 USD ausreichen.

Komponenten für einen privaten Server installieren

Mosquitto-MQTT-Broker für Ruuvi Gateway

Mosquitto ist ein Open-Source-MQTT-Broker. Wir nutzen ihn, um Nachrichten von den Gateways zu empfangen und sie an unsere NodeJS-Anwendung weiterzuleiten, die zur Verarbeitung der Daten lauscht.

Um Mosquitto zu installieren, führe Folgendes aus:

sudo apt-get install mosquitto

NodeJS-Open-Source-Server zum Ausführen von JavaScript

NodeJS ist eine Open-Source-Serverumgebung, die JavaScript-Code ausführt. Wir verwenden NodeJS als „Klebstoff“, um die Komponenten zu verbinden.

Die mit Debian Package Control ausgelieferten NodeJS-Versionen sind ziemlich veraltet, daher verwenden wir das NodeSource-Repository, um eine aktuelle NodeJS-Version zu installieren. Im Terminal ausführen:

sudo apt install curl
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt install nodejs

InfluxDB-Datenbank für RuuviTag-Sensor-IoT-Daten

InfluxDB ist eine Time-Series-Datenbank, das heißt, sie ist speziell dafür ausgelegt, Daten zu verarbeiten, die nach steigenden Zeitstempeln sortiert sind. Das passt perfekt zu Sensordaten. Obwohl die aktuelle InfluxDB inzwischen bei Version 2.x ist, verwenden wir aus Kompatibilitätsgründen mit unserem Glue-Code weiterhin 1.x-Distributionen.

Influx hält aktuelle Installationsanweisungen bereit unter: https://docs.influxdata.com/influxdb/v1.8/introduction/install/#. Aktuell kannst du Folgendes ausführen:

wget -q https://repos.influxdata.com/influxdb.key

echo '23a1c8836f0afc5ed24e0486339d7cc8f6790b83886c4c96995b88a061c5bb5d influxdb.key' | sha256sum -c && cat influxdb.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdb.gpg > /dev/null

echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdb.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list
 
sudo apt-get update && sudo apt-get install influxdb

sudo systemctl unmask influxdb.service

sudo systemctl start influxdb

Wichtig: InfluxDB verwendet standardmäßig keine Authentifizierung, das heißt, jeder kann auf deine Datenbank zugreifen. Influx stellt Anweisungen zum Einrichten der Authentifizierung bereit unter: https://docs.influxdata.com/influxdb/v1.8/administration/authentication_and_authorization/.

Sobald InfluxDB läuft, starte das Influx-Terminal und erstelle Datenbanken. Wenn du Authentifizierung eingerichtet hast, gib deinem Nutzer Schreibzugriff auf die Datenbanken. Die Beispiele unten unterstützen einige benutzerdefinierte Datenformate; verpflichtend ist nur die Datenbank „ruuvi“.

CREATE DATABASE ruuvi
CREATE DATABASE acceleration
CREATE DATABASE fft

Wenn du Authentifizierung eingerichtet hast, kannst du separate Admin-, Writer- und Reader-Nutzer anlegen:

CREATE USER admin WITH PASSWORD '<password>' WITH ALL PRIVILEGES
CREATE USER ruuvi_writer WITH PASSWORD '123456'
CREATE USER ruuvi_reader WITH PASSWORD '123456'
GRANT WRITE ON ruuvi TO ruuvi_writer
GRANT READER ON ruuvi TO ruuvi_reader
GRANT WRITE ON fft TO ruuvi_writer
GRANT READER ON fft TO ruuvi_reader
GRANT WRITE ON acceleration TO ruuvi_writer
GRANT READER ON acceleration TO ruuvi_reader

Grafana zur Visualisierung von RuuviTag-Sensordaten

Grafana ist eine plattformübergreifende Open-Source-Webanwendung für Analytics und interaktive Visualisierung. Sie bietet Diagramme, Grafiken und Alerts für das Web …

Wikipedia

Einfach gesagt ist Grafana ein Tool, mit dem du Dashboards zum Anzeigen von Daten einrichtest. Du kannst es installieren mit:

sudo apt-get install -y apt-transport-https

sudo apt-get install -y software-properties-common wget

sudo wget -q -O /usr/share/keyrings/grafana.key https://packages.grafana.com/gpg.key

echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://packages.grafana.com/oss/deb beta main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

sudo apt-get update

sudo apt-get install grafana

Glue-Logik

Die Logik, die die Teile serverseitig zusammenführt, liegt im TypeScript-Repository: https://github.com/ojousima/ojousima.mqtt2influx.ts.

Den neuesten Code kannst du herunterladen, indem du Folgendes ausführst:

sudo apt-get install git
git clone https://github.com/ojousima/ojousima.mqtt2influx.ts

Nach dem Klonen des Projekts musst du die Zugangsdaten und die Konfiguration einrichten.

cd ojousima.mqtt2influx.ts
cp .env.ts.example .env.ts
nano .env.ts

Nachdem du deine Server-URL und Passwörter eingegeben hast, musst du das Projekt kompilieren und ausführen.

npm run-script build
node lib/src/index.js

Wenn alles reibungslos läuft, kannst du die Glue-Logik mit „forever weiterlaufen lassen.

sudo npm -i -g forever
forever start lib/src/index.js

Ruuvi-Gateway-Einrichtung zum Senden von Daten an einen privaten Server

Das Ruuvi Gateway lässt sich schnell über die Konfigurationsoberfläche einrichten. Gehe wie gewohnt durch die Konfiguration und wähle dann in den Cloud-Optionen „Advanced Settings“.

Ruuvi-Gateway-Konfigurationsassistent. Du kannst Daten entweder an Ruuvi Cloud oder an deinen eigenen privaten Server senden.

In der Konfiguration für einen benutzerdefinierten Server kannst du die HTTP-Standardeinstellung aktiviert lassen, um weiterhin an die Ruuvi Cloud zu senden. Aktiviere das Kästchen MQTT(S) und gib deine Serverdaten ein. Die Glue-Logik verwendet das Präfix „ruuvi“ und die Gateway-ID, um die Messwerte den Gateways zuzuordnen.

Daten an deinen eigenen Server senden. Es gibt verschiedene Möglichkeiten, Daten an deinen eigenen Server zu senden.

Wenn du fertig bist, sollte alles bereit sein, damit du ein paar Dashboards einrichten kannst.

Dashboards in Grafana für RuuviTag-Daten einrichten

Datenquellen einrichten

Als Erstes müssen wir Grafana sagen, wo sich die Datenbank befindet und wie die Verbindung hergestellt wird. Das Beispiel der Glue-Logik unterstützt einige experimentelle Formate, aber wir verwenden hier nur Standard-Ruuvi-Daten.

Melde dich bei Grafana an, gib bei Bedarf ein neues Admin-Passwort ein und wähle unten links das Zahnrad. Dann „Configuration“ -> „Data Sources“ -> „Add data source“.

Grafana bezieht Daten aus InfluxDB.

Wähle im Dialog „Add data source“ „Influx DB“. Wenn Grafana und Influx auf demselben Server laufen, verwende die HTTP-URL http://localhost:8086 und gib die Datenbankdetails ein. In diesem Beispiel wären das:

database: ruuvi
user:     ruuvi_reader
password: 123456

Benenne die Datenquelle so, dass du dich daran erinnerst, mit welcher Datenbank sie verbunden war.

Als Nächstes kannst du dein eigenes Dashboard erstellen oder eines importieren von: https://github.com/ruuvi/ruuvi.grafana-dashboards.json. Beim Importieren der Dashboards wähle die Data Source aus, die die Datenbank enthält, die das Dashboard verwendet; Standard-Ruuvi-Messwerte nutzen zum Beispiel die Datenbank „raw“, wenn alles wie in der Beispielumgebung des mqtt2influx-Projekts konfiguriert ist.

Ebenso muss der Measurement-Name in der Konfiguration übereinstimmen – hier ist es „raw_measurement“. Du kannst die Panel-Konfiguration im Dashboard sehen, indem du bei Panels auf „edit“ klickst.

Datenquelle in Grafana definieren.

Wenn alles geklappt hat, solltest du jetzt dein Ruuvi-Dashboard auf deinem eigenen Server am Laufen haben.

Dashboard-Ansicht in Grafana. Grafana ist ein großartiges Tool, um Daten zu visualisieren.

Fehlersuche beim Grafana- und InfluxDB-Setup

Wenn du keine Daten auf deinem Dashboard siehst, kannst du Folgendes prüfen:

Gateway zum MQTT-Broker

Verbinde dich mit einem Client deiner Wahl mit deinem MQTT-Broker. MQTT X ist eine Option, es gibt aber viele weitere. Sobald du verbunden bist, abonniere das Wildcard-Topic /# und prüfe, ob unter den „ruuvi“-Topics Aktivität zu sehen ist. Wenn nicht, überprüfe deine Gateway-Konfiguration noch einmal; wenn doch, prüfe als Nächstes das Projekt ojousima.mqtt2influx.ts.

Glue-Logik

Du kannst das Programm im Terminal per SSH ausführen und schauen, ob Fehler auftauchen. Wenn es keine Fehler gibt, kannst du in src/influx.ts in der Funktion rawToInflux eine console.log-Zeile hinzufügen, um zu sehen, ob das Projekt versucht, Daten in Influx zu speichern.

InfluxDB

Du kannst prüfen, ob Daten in InfluxDB vorhanden sind, indem du dich auf deinem Server anmeldest und die Influx-Shell öffnest, indem du „influx“ eingibst. Danach kannst du dir Daten in der Datenbank ansehen, z. B.:

USE raw
SHOW SERIES

Das sollte die Sensoren ausgeben, die du in der Datenbank hast, z. B.:

raw_measurement,dataFormat=5,gateway_id=DD:C3:3B:AB:2F:FC,mac=DA:35:40:88:09:7B
raw_measurement,dataFormat=5,gateway_id=DD:C3:3B:AB:2F:FC,mac=E5:83:B4:04:90:52
raw_measurement,dataFormat=5,gateway_id=DD:C3:3B:AB:2F:FC,mac=F6:3A:84:A8:E4:CF
raw_measurement,dataFormat=5,gateway_id=DD:C3:3B:AB:2F:FC,mac=F6:81:DD:6E:FE:D8
raw_measurement,dataFormat=5,gateway_id=DD:C3:3B:AB:2F:FC,mac=FA:60:2B:73:87:E1
raw_measurement,dataFormat=5,gateway_id=E8:CD:63:50:2D:9C,mac=E9:D3:D4:23:A0:EF
raw_measurement,dataFormat=5,gateway_id=E8:CD:63:50:2D:9C,mac=EB:A1:0F:22:E2:20
raw_measurement,dataFormat=5,gateway_id=E8:CD:63:50:2D:9C,mac=F2:DE:8B:DA:AB:AE

Grafana

Wenn alles oben zu funktionieren scheint, prüfe, ob deine Grafana-Datenquellen korrekt konfiguriert sind und du Zeitbereiche ausgewählt hast, in denen Daten vorhanden sein sollten.

Fazit

Das Ruuvi Gateway so einzurichten, dass es deine eigenen Daten an deinen eigenen Server weiterleitet, ist ziemlich unkompliziert und in ein paar Stunden erledigt. Von Ruuvi-Geräten entstehen keine zusätzlichen Kosten, aber dein Server verursacht laufende Kosten – typischerweise im Bereich von 10–20 USD pro Monat.

Hol dir jetzt ein paar Ruuvi Sensors und miss deine Welt.