– aktualisiert am 23.12.2021 –
Da das Ruuvi Gateway nun den Bedarf für ein RuuviTag-zu-Internet-Gateway deckt, pflegen wir das RuuviBerry-Image nicht mehr. Diese Anleitung bleibt zu Referenzzwecken online, wird aber nicht mehr unterstützt.
– aktualisiert am 26.10.2020 –
Da RuuviTags selbst keine Internetverbindung haben, müssen Nutzer, die Daten in der Cloud speichern möchten, ein Gerät mit Bluetooth und Internetverbindung als Gateway einrichten. Ein Raspberry Pi 3 ist eine naheliegende Wahl, da er über integriertes BLE und WLAN sowie reichlich Rechenleistung verfügt – und das alles bei angemessenen Kosten und einem geringen Stromverbrauch von weniger als 10 Watt.
Unser Raspberry Pi Image enthält diese Komponenten:
- Raspbian als Basis-Betriebssystem
- WLAN-Hotspot, damit sich Geräte in der Nähe verbinden können.
- RuuviCollector zum Sammeln von Daten
- InfluxDB als Datenbank
- Grafana als Dashboard für InfluxDB

Einrichten des Images
Zuerst laden wir ein offizielles Raspbian-Image von der Raspberry Pi Foundation herunter. Das Image wird gemäß den Anweisungen und Programmen der Raspberry Pi Foundation auf eine 16 GB SD-Karte geflasht. Wenn du planst, den Raspberry Pi als Headless-Node ohne Monitor oder Tastatur zu betreiben, musst du die Karte für eine SSH-Verbindung vorbereiten, indem du eine Datei namens ssh in die Boot-Partition legst. Du kannst auch das WLAN konfigurieren, indem du die Datei wpa_supplicant.conf in das Boot-Verzeichnis kopierst. Howtoraspberrypi hat einen Beitrag mit weiteren Details veröffentlicht.
Sobald du dich einloggst, denke daran, den Pi zu aktualisieren, indem du sudo apt update und sudo apt upgrade ausführst.
Konfigurieren des Hotspots
Die Konfiguration des Raspberry Pi als WLAN-Hotspot erleichtert den Nutzern das Leben, da sie eine drahtlose Verbindung zum Raspberry Pi herstellen können, ohne eine Ethernet-Verbindung zum Router einrichten oder die IP-Adresse suchen zu müssen.
Wir verwenden das RaspiWiFi-Projekt, um den WLAN-Hotspot einzurichten. Der Hotspot kann dann verwendet werden, um andere WLAN-Verbindungen zu konfigurieren oder um auf den Raspi als eigenständiges Gerät zuzugreifen.


Jetzt haben wir einen Hotspot mit einer Landingpage zur Konfiguration der WLAN-Verbindung und können den Raspberry Pi bei Bedarf als eigenständiges Gerät verwenden. Der Hotspot-Name lautet ruuvicollector xxxx und das Passwort ruuviberry.
Auf den Raspberry Pi kann zugegriffen werden, indem man sich mit dem Hotspot verbindet und 10.0.0.1 aufruft, um Grafana anzuzeigen, oder 10.0.0.1:3001, um das WLAN zu konfigurieren.
InfluxDB
InfluxDB ist eine auf Zeitreihendaten spezialisierte Datenbank, die sich perfekt für die Speicherung von RuuviTag-Daten eignet. InfluxData bietet .deb-Builds für armhf an, auch wenn sie dies nicht aktiv bewerben. Gehe einfach zu den Influx-Downloads, wähle das amd64-Paket aus und ersetze amd64 durch armhf. Zum Beispiel:
https://dl.influxdata.com/influxdb/releases/influxdb_1.5.2_amd64.deb wird zu
https://dl.influxdata.com/influxdb/releases/influxdb_1.5.2_armhf.deb
Lade das Paket mit wget herunter und installiere es mit sudo dpkg -i. Starte den Dienst mit sudo systemctl start influxd und überprüfe mit systemctl status influxd, ob er läuft.
Starte die Influx-Konsole mit influx und erstelle mit dem Befehl CREATE DATABASE ruuvi eine Datenbank für die Ruuvi-Messungen.
Grafana
Grafana wird verwendet, um Dashboards zu erstellen und einfache Analysen der Daten durchzuführen. Lade die neuesten Grafana-Binärdateien für den Raspberry Pi von der offiziellen Grafana-Distribution herunter. Raspberry Pi 3, 3B+ und 4 verwenden ARMv7.
Aktiviere Grafana mit
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable grafana-server
sudo /bin/systemctl start grafana-server
sudo /bin/systemctl status grafana-serverWenn alles richtig eingerichtet wurde, können wir nun raspberrypi.local:3000 aufrufen und die Web-Benutzeroberfläche von Grafana sehen. Der Standardbenutzer und das Passwort lauten admin/admin. Wir ändern das Passwort bei der entsprechenden Aufforderung in ruuviberry.

Richte die Verbindung zur InfluxDB mit der Option „set up datasource“ ein. Einstellungen:
Name: Ruuvi
Type: InfluxDB
URL: http://localhost:8086
Access: proxy
Auth: blank
Database: ruuvi
RuuviCollector
RuuviCollector ist ein Java-Programm, das HCIDump abhört und RuuviTag-Daten auswertet. Es bietet auch einige Analysen, wie zum Beispiel den Taupunkt basierend auf Luftfeuchtigkeit und Temperatur. Folge den Anweisungen im GitHub-Repository, um den RuuviCollector zu installieren. Die Python-Bibliothek ruuvitag-sensor enthält zusätzliche Anweisungen zum Einrichten der Berechtigungen für den Bluetooth-Adapter des Raspberry Pi.
In meinem Fall sind diese Befehle erforderlich, um Abhängigkeiten herunterzuladen und Berechtigungen einzurichten:
sudo apt install openjdk-11-jdk
sudo apt install bluez bluez-hcidump
sudo setcap 'cap_net_raw,cap_net_admin+eip' `which hcitool`
sudo setcap 'cap_net_raw,cap_net_admin+eip' `which hcidump`Du kannst den RuuviCollector testen, indem du Folgendes ausführst:
java -jar ruuvi-collector-0.2.jar. Gehe zurück zu raspberrypi.local:3000, erstelle dein erstes Dashboard und füge ein Panel hinzu. Füge Einstellungen für die Anzeige der Temperatur hinzu:
Data Source: Ruuvi
From: autogen ruuvi_measurements
Select: field(temperature) mean()
Group By: time($_interval) tag(mac) fill(null)
Format as: Time series.Dies wählt den Mittelwert der Temperaturen nach MAC innerhalb des Intervalls aus, das von der gewählten Zeitachse abhängt. Dies ermöglicht eine angemessene Leistung bei der Darstellung großer Datensätze und eine gute Präzision bei kleinen Datensätzen. Es kann jedoch vorkommen, dass in sehr kurzen Zeiträumen keine Stichproben angezeigt werden; passe das Zeitintervall an, falls dein Dashboard leer bleibt.

Letzte Feinheiten
Da wir überprüft haben, dass die Basis des Gateways funktioniert, verpassen wir ihm noch den letzten Schliff. Erstelle zunächst ein systemd-Skript, um den RuuviCollector beim Booten automatisch zu starten. Erstelle die Datei ruuvicollector.service und füge diesen Inhalt hinzu, wobei du die Pfade bei Bedarf anpasst:
[Unit]
Description=RuuviCollector Service
After=network.target[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/RuuviCollector
ExecStart=/usr/bin/java -jar /home/pi/RuuviCollector/ruuvi-collector-0.2.jar
Restart=always
[Install]
WantedBy=multi-user.targetFühre dann diese Befehle aus, um das systemd-Skript zu installieren:
sudo cp ruuvicollector.service /etc/systemd/system/
sudo systemctl start ruuvicollector.service
sudo systemctl status ruuvicollector.service
sudo systemctl enable ruuvicollector.serviceJetzt sollte der RuuviCollector beim Booten automatisch starten.
Leite als Nächstes Port 80 auf 3000 um, damit die Nutzer am Ende der URL nicht :3000 eingeben müssen.
sudo apt install nftables
sudo /sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3000
sudo apt install iptables-persistentTeste die Weiterleitung, indem du http://raspberrypi.local aufrufst. Jetzt kannst du den Pi neu starten und bald sollte er wieder online sein und Daten für dich sammeln.
Einige Grafana-Dashboard-Vorlagen findest du unter https://github.com/ruuvi/ruuvi.grafana-dashboards.json .
Wir aktivieren außerdem den anonymen Lesezugriff für Grafana, damit wir uns nicht anmelden müssen, um die Daten zu sehen. Öffne /etc/grafana/grafana.ini in einem Texteditor und aktiviere die anonyme Ansicht.
### Anonymous Auth ###
[auth.anonymous]
# enable anonymous access
enabled = trueFür mehr Sicherheit ersetzen wir das Standardpasswort durch ruuviberry und den Hostnamen durch ruuvicollector mittels raspi-config.
Die BT-Schnittstelle über UART weist gelegentlich Bitfehler auf, was zu ungültigen Daten führt. Wir beheben dies, indem wir die UART-Geschwindigkeit senken, wie in diesem Forenbeitrag beschrieben.
sudo -i
cp -pi /usr/bin/btuart /usr/bin/btuart.orig
sed -e 's/921600/460800/g' < /usr/bin/btuart.orig > /usr/bin/btuart
diff -u /usr/bin/btuart.orig /usr/bin/btuart
exitRaspiWiFi aktualisiert die WLAN-SSID des Hotspots, wenn die SSID in /etc/hostapd/hostapd.conf nicht mit dem konfigurierten Präfix übereinstimmt. Daher ändern wir das Präfix an dieser Stelle in „replaceme“. Es wird beim nächsten Booten durch das Präfix + 4 Buchstaben der HWID ersetzt. Dies ermöglicht es, das Image auf andere Pis zu übertragen und für diese eine neue SSID zu erhalten, anstatt der festen SSID unseres aktuellen Pis. Hinweis: In der RaspiWiFi-Version vom Januar 2020 lautet das Postfix unter Raspbian Buster 1.1
Schließlich kannst du das Gerät ausschalten, die SD-Karte sichern und das Raspberry Pi Image mit pishrink verkleinern. So kannst du das Pi-Image auf verschiedene Raspberry Pi Karten übertragen. Denke nur daran, raspi-config auszuführen und das Dateisystem zu erweitern, wenn du das Image wieder in Betrieb nimmst.
Du kannst auch dieses Playbook verwenden, um dein eigenes, aktuelles Image zu erstellen. https://github.com/ilatvala/ruuvigw
Viel Spaß beim Hacking!