Bresser Wetterstation MQTT

Veröffentlicht von brun am

Viele Wetterstationen können mit Hilfe der Software rtl_433 emfangen werden. rtl_433 wird hierbei als Brücke zwischen dem Signal der Wetterstation (868MHz) und dem MQTT-Server verwendet. Ich verwende eine Bresser 5-in-1 Wetter Center-Station (Link). rtl_433 ist aber ebenfalls mit vielen anderen Wettersationen kompatibel. Dazu einfach einen Blick in die Dokumentation werfen.

Der Empfang erfolgt mit Hilfe eines SDR-USB Sticks (auch ein DVBT-Stick mit RTL2832-Chipsatz ist möglich).


Installation von rtl_433

Link zur Software: https://github.com/merbanan/rtl_433

Die Software kann z.B. auf einem Raspberry Pi oder innerhalb einer Virtuellen Maschine (VM, Ubuntu 20.04 server) erfolgen.

rtl_433 kann als Linux-Paket installiert werden (unter Debian mit apt-get install rtl-433). In meinem Fall konnte mit dieser Version jedoch keine erfolgreiche Decodierung erreicht werden. Deshalb der Weg über die manuelle Compillierung, welche bei mir die Wetterstation auf Anhieb erfolgreich empfangen konnte.

Zur Verwendung des SDR-Sticks zunächst folgende Vorkehrungen treffen:

In die Datei

sudo nano /etc/modprobe.d/blacklist.conf

folgende Einträge ergänzen:

# Blacklist DVBT-SDR Stick (disable the Stick for DVBT)
blacklist dvb_usb_rtl28xxu
blacklist rtl2832
blacklist rtl2830

Nun kann der SDR-Stick eingesteckt und mit der eigentlichen Installation begonnen werden. Die hier angegeben Paketversionen müssen nicht zwangsläufig verwendet werden funktionierten in meinem Fall jedoch auf Anhieb.

sudo apt-get install git libtool=2.4.6-14 libusb-1.0-0-dev=2:1.0.23-2build1 librtlsdr-dev=0.6.0-3 rtl-sdr=0.6.0-3 build-essential cmake pkg-config

git clone https://github.com/merbanan/rtl_433.git
cd rtl_433/
mkdir build
cd build
cmake ..
make
sudo make install

Die Funtkion des SDR-Sticks kann mit Hilfe des Befehls rtl_test -t geprüft werden.

Testen des Empfangs

Als Antenne kann bei geringer Entfernung zur Wetterstation die dem DVBT-Stick mitgelieferte Antenne verwendet werden. Anderenfalls empfiehlt es sich eine 868MHz Groundplane-Antenne zu bauen (Quelle: https://www.darc.de/fileadmin/filemounts/distrikte/o/ortsverbaende/38/Downloads/Bericht_868MHz_Antennen_V2.0.pdf):

 (Bildquelle)

Für die Frequenz 868MHz beträgt die Länge eines einzelnen Drahtes lambda/4 = 1/4 * 300/868MHz * 0.96 = 8,29cm.

Mit der passenden Antenne kann nun ein erster Empfangstest stattfinden:

rtl_433 -f 868M

Nach wenigen Sekunden/Minuten sollte ein erfolgreicher Empfang zustande gekommen sein. Die Ausgabe zeigt die Decodierten Messwerte:

time      : 2021-12-30 10:05:47
model     : Bresser-6in1  id        : 27384665
channel   : 0             Battery   : 1             Temperature: 19.8 C
Humidity  : 53            Sensor type: 1            Wind Gust : 0.8 m/s
Wind Speed: 0.8 m/s       Direction : 144           Integrity : CRC

Es kann teilweise vorkommen, dass in einer Nachricht nicht alle Messwerte gesendet werden. Der Empfang kann mit STRG-C beendet werden.

Produktivbetrieb mit MQTT

Die Einstellungen für den Betrieb werden in einer Konfigurationsdatei festgelegt. Dafür wird zunächst die Beispieldatei in das Programmverzeichnis kopiert und anschließend geöffnet.

sudo mkdir /etc/rtl_433
sudo cp conf/rtl_433.example.conf /etc/rtl_433/rtl_433.conf
sudo nano /etc/rtl_433/rtl_433.conf

In dieser Datei folgende Zeilen auskommentieren und anpassen:

frequency     868M          # Empfangsfrequenz der Wetterstation
sample_rate   1000000
report_meta   time:iso      # Fomat des Zeitstempels ISO
output        mqtt://---MQTT-SERVER-IP---:1883,user=USERNAME,pass=PASSWORD,retain=0,devices=rtl_433[/protocol]       # Ausgabe mit MQTT

Achtung: Bei dieser Art der Konfiguration kann es vorkommen, dass auch andere Wettersationen des gleichen Typs empfangen werden, sofern sie in Reichweite des Empfängers sind. Dies kann durch einen Abgleich der id der eigenen Station vermieden werden. Zu beachten ist dabei jedoch, dass sich die id nach jedem Reset bzw. Batteriewechsel ändert und damit jedes mal eine erneute Konfigurationsänderung nöitg ist.

Damit nur die Eigene Wetterstation (bzw. nur Sationen des gleichen Typs wie die eigene) empfangen wird, können in der Datei alle Protokolle außer das benötigte auskommentiert (# vor jede Zeile) oder gelöscht werden. Die einzige benötigte Zeile für diese Wetterstation muss erhalten bleiben:

protocol 172 # Bresser Weather Center 6-in-1, 7-in-1 indoor, new 5-in-1, 3-in-1 wind gauge, Froggit WH6000, Ventus C8488A

Nun kann diese Datei gespeichert und geschlossen werden.

Es wird zuletzt noch der automatische Start beim Hochfahren konfiguriert:

sudo nano /etc/systemd/system/rtl_433-mqtt.service

In diese Datei wird der folgende Inhalt eingefügt und gespeichert:

[Unit]
Description=rtl_433 to MQTT publisher
After=network.target
[Service]
ExecStart=/usr/local/bin/rtl_433
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target

Nun kann der Autostart aktiviert werden:

sudo systemctl enable rtl_433-mqtt.service
sudo systemctl start rtl_433-mqtt.service
sudo systemctl status rtl_433-mqtt.service

(Eine Deaktivierung kann mit sudo systemctl disable rtl_433-mqtt.service erfolgen.)

rtl_433 erzeugt nun für jeden Messwert eine MQTT-Nachricht. Der Name des MQTT-Topics entspricht dabei dem Messwertname, z.B. rtl_433/172/wind_avg_m_s oder rtl_433/172/temperature_C.

Datenverarbeitung mit Node-Red

rtl_433 erzeugt bei jeder Nachricht für jeden Messwert eine MQTT-Nachricht, welche mit Node-Red weiterverarbeitet werden kann. Ich habe einen Node-Red-Flow erstellt, welcher die Messwerte im Node-Red-Dashboard darstellt sowie in eine Influx-DB Datenbank schreibt. Somit ist auch eine Visualisierung mit Grafana möglich. In Node-Red erfolgt ebenfalls die Berechnung von Taupunkt und Hitzeindex (gefühlte Temperatur) aus den Messwerten sowie eine Umrechung der Windgeschwindigkeit in km/h und eine entsprechende Windstärke (Beaufortskala).

Screenshot des Node-Red Flows (klicken zum vergrößern):

Der Flow (wetter_bresser_node_red_flow.json) kann aus der Github-Repository heruntergeladen und importiert werden. Es werden folgende Erweiterungs-Nodes benötigt: node-red-dashboard, node-red-contrib-influxdb und node-red-contrib-calculate.



This work by Dustin Brunner is licensed under CC BY 4.0

Creative Commons Lizenzvertrag
Dieses Werk von Dustin Brunner ist lizenziert unter einer Creative Commons Namensnennung 4.0 International Lizenz.

9 Kommentare

Anonymous · 16. Oktober 2022 um 16:22

I had no idea this was possible.
Great article, thanks for sharing.

Ron · 28. Januar 2023 um 20:31

Vielen Dank für die Super-Beschreibung. Ich habe mir daraufhin die gleiche Wetterstation besorgt und relativ problemlos nachbauen können.
Kleine Anmerkung zur Installation: wenn man die o.g. Versionen angibt, kommen Fehler. Daher habe ich das ohne Lieblingsversion installiert mit „sudo apt-get install git libtool libusb-1.0-0-dev librtlsdr-dev rtl-sdr build-essential cmake pkg-config“.
Das rtl-433 konnte ich auf meinem Raspi 3B+ ohne eigene Kompilierung installieren und nutzen. Nachteil ist in meinen Augen, dass die CPU-Auslastung um 15% steigt.

Also nochmal vielen Dank!

    brun · 29. Januar 2023 um 16:57

    Hallo,
    freut mich, dass der Beitrag hilfreich war. Die Paketversionen habe ich ursprünglich extra mit angegeben um sicherzustellen dass die Installation funktioniert. Vielleicht gehen die jetzt durch irgendein Update nicht mehr :).
    LG

Andreas · 22. März 2023 um 12:04

Hallo, toller Beitrag, er hat mir sehr geholfen, meine Bresser 6in1 an zu zapfen.
Ich habe auch ein Visualisierung hinbekommen, alles prima. Nur eins will mir nicht gelingen, ein Autostart!
Ich habe die Datei „rtl_433-mqtt.service“ nirgendwo gefunden. Sicher muss man die dann noch anlegen? Und wo steht dann meine lange Komandozeil? (rtl_433 -f868M -F json | mosquitto_pub -h localhost -t Wetterdaten -l ) Schon mal Danke für Deine Hilfe.
LG Andreas

    brun · 23. März 2023 um 10:01

    Hallo,
    natürlich muss die Datei erst angelegt werden, die Anleitung bzw. der Inhalt dieser Datei steht oben am Ende des Abschnitts „Produktivbetrieb mit MQTT“ (Vorletztes Code-Listing). Der Inhalt des Kommandozeilen-Befehls wird über die „/etc/rtl_433/rtl_433.conf“-Datei Konfiguriert (steht ebenfalls oben). Danach kann rtl_433 ohne zusätzliche Parameter aufgerufen werden. Beim (Auto-)Start erkennt die Software dann automatisch ob eine Konfigurationsdatei vorhanden ist und übernimmt die Einstellungen daraus.
    LG

      Andreas · 28. März 2023 um 18:22

      Ich danke für die Info.
      Noch eine Frage.
      Auf dem Originalen Bresser-Display wird auch der Luftdruck angegeben, aber der wird ja gar nicht übertragen, jedenfalls bekomme ich den nicht. Wird der etwa berechnet??

        brun · 30. März 2023 um 19:15

        Der Luftdruck wird direkt von der Basisstation/dem Display gemessen und demzufolge nicht übertragen. Dies ist möglich, da der Luftdruck normalerweise ja überall gleich ist (innen und außen). Das ist auch einer der Gründe warum ich die Station noch um zusätzliche Sensoren erweitert habe (siehe https://www.brunweb.de/esp8266-mqtt-wetterstation/).

          Andreas · 4. April 2023 um 12:35

          Ich bedanke mich sehr!

Michael · 24. März 2024 um 17:21

Hallo, danke fürs zeigen. Ich versuche das mal. Ich habe bereits eine Nodered und Influx-Datenbank produktiv. MQTT nutze ich für die komplette Kommunikation zwischen den Sensoren. Viele Grüße aus Bonn.

Schreibe einen Kommentar zu Andreas Antworten abbrechen

Avatar-Platzhalter

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert