openHAB – Geräte über 433MHz auslesen

Viele besitzen einfache „Wetterstationen“, welche über eine Basis und einen Außenfühler verfügen.
Der Außenfühler ist meist ein kleines Zusatzgerät, welches die aktuellen Messwerte per Funk an die Basis in regelmäßgen Abständen schickt.
Diese Daten werden über die freie Frequenz 433MHz übertragen.
Es wäre doch nun cool, wenn wir diese Daten abfangen können, um sie z.B. in openHAB für weitere Automatismen verwenden zu können oder?
Genau das ist möglich!
Mit einem passenden USB-Stick, können wir die Frequenz abfangen und alle Daten automatisiert in openHAB leiten lassen.
Was zu tun ist, kannst du hier ansehen und nachlesen.

Was brauchen wir?

– Ein SDR-USB-Stick (SDR = Software Defined Radio), welcher die Frequenz 433MHz unterstützt (Nooelec NESDR Mini 2+ ODER Nooelec NESDR SMArt v4)
– Ein Linux-System (x86/x64/arm/arm64)
– Root-Zugriff auf das System
– Einen MQTT-Server
– Das Tool rtl_433
– Ca. eine Stunde Zeit, um die Messwerte auszulesen und korrekt einbinden zu können (wir müssen manchmal etwas warten)
– Ein Gerät, was Daten über 433MHz überträgt (Liste an unterstützten Geräten)





Die Installation via System-Repository

# apt update && apt upgrade -y
# apt install rtl-433 -y

Die Installation für ein Raspberry Pi – oder andere nicht direkt unterstützte Systeme.

# apt update && apt upgrade -y
# apt install libtool libusb-1.0-0-dev librtlsdr-dev rtl-sdr cmake mosquitto-clients git -y
# git clone https://github.com/merbanan/rtl_433.git
# cd rtl_433/
# mkdir build
# cd build/
# cmake ../
# make
# make install
# rtl_433 -h

Die allgemeine Verwendung:

Ein kurzer Funktionstest der Anwendung selbst:

# rtl_433 -h

Prüfen, ob der Stick die Daten empfangen kann und auch die Auswertung funktioniert:

# rtl_433

RTL433-Daten zu MQTT:

# rtl_433 -C si -F "mqtt://127.0.0.1:1883,user=MQTT-NUTZERNAME,pass=MQTT-PASSWORT"
# nano /etc/systemd/system/rtl433.service

SystemD-Datei für den automatischen Systemstart für Installation über die Paketquellen:

[Unit]
Description=rtl_443 SDR Receiver Daemon
After=network-online.target

[Service]
ExecStart=/usr/bin/rtl_433 -C si -F "mqtt://127.0.0.1:1883,user=MQTT-NUTZERNAME,pass=MQTT-PASSWORT"
Restart=always

[Install]
WantedBy=multi-user.target

SystemD-Datei für den automatischen Systemstart für die selbst erstellte Anwendung:

[Unit]
Description=rtl_443 SDR Receiver Daemon
After=network-online.target

[Service]
ExecStart=/usr/local/bin/rtl_433 -C si -F "mqtt://127.0.0.1:1883,user=MQTT-NUTZERNAME,pass=MQTT-PASSWORT"
Restart=always

[Install]
WantedBy=multi-user.target
# systemctl daemon-reload
# systemctl enable rtl433.service
# systemctl start rtl433.service

Das Setup wurde von mir erfolgreich mit folgenden Systemen getestet:
– AMD64-CPU (Virtuelle Maschine)
– Raspberry Pi 3B+ (64bit OS)
– Raspberry Pi 4B (64bit OS)
– Raspberry Pi Zero WH (32bit OS)


Wie gut ist die Reichweite?

Diese Frage wurde auch unter dem Video auf YouTube gestellt.
Die Reichweite der Antenne des SDR-RTL-Empfängers ist hierbei ehr zweitrangig.
Viel wichtiger ist hierbei, wie stark die Sendeleistung der jeweiligen Sensoren ist.
Denn es findet hier nur eine einseitige Kommunikation statt.
Der USB-Stick „hört nur zu“ und sendet keinerlei Daten.
Daher kann er auch nur das empfangen, was „laut genug ist“.
Ich habe bereits diverse Sendeeinheiten in meiner Umgebung gefunden und ich habe auch einige in Besitz.
Je nach Hersteller und Modell sind die Sendeleistungen etwas unterschiedlich.
Von nur 15 Meter Reichweite bis zu 40 Meter ist alles enthalten.
Man muss also etwas Glück haben und eine geeignete Position für den Stick mit Antenne im Haus suchen.
Eine größere Antenne kann zwar helfen die Signale abzufangen, sollten aber zu viele Störgeräusche im Funk enthalten sein, bringt die größte Antenne dann auch nicht mehr viel.
Eine pauschale Aussage kann man daher nicht treffen.

Was sind Störquellen?

Wie üblich beim Funk, ist alles Elektromagnetische ein Problem.
Kühlschränke, Kochstellen, Mikrowellen, Spiegel, … sind übliche Feinde.
Der Stick mit Antenne sollte aber am besten auch nicht direkt auf elektronischen Geräten liegen wie z.B. dem Raspberry Pi, Smartphones oder Fernseher.
Ein schöner großer TV ist z.B. ein super Abschirmungsort für die Signale.

Wo sollte ich die Antenne also am besten platzieren?

Am besten an einem Ort, wo min. 50cm im Umkreis der Antenne nichts in irgendeiner Form elektromagnetische Wellen ausstrahlen kann.
(Dazu gehören auch Stromkabel!)
Probiere auch dein Glück, indem du die Antenne in horizontaler oder vertikaler Postion anbringst.
Ich habe bei mit mit einer geraden vertikalen Position die beste Erfahrung gemacht.
Habe ich die Antenne leicht geneigt, ist der ein oder andere weiter entferne Sensor nicht mehr sauber empfangbar gewesen.


Für den einfachen Start mit MQTT, hier noch ein Beispiel für ein Thing.
Hier können wir die Temperatur, Luftfeuchtigkeit und der Zeitstempel der letzten Messung erfassen.

Ein Tipp: Im Pfad ist ein + Symbol.
Das ist ein Platzhalter / Wildcard.
Damit ersparen wir uns viel Anpassungsarbeit, wenn die Sender nach z.B. einem Akkuwechsel einen neuen Kanal bzw. eine neue ID haben.
Sofern im Gesamtpfad keine weiteren Modelle mit dem genau gleichen Namen und Haupt-ID vorkommen, funktioniert das wunderbar.

things:
  mqtt:topic:MqttBroker:MqttRtl433Temperatur:
    bridge: mqtt:broker:MqttBroker
    label: MQTT Wetterstation Temperatur Außen
    location: Außen
    channels:
      Temperatur:
        type: number
        label: Temperatur
        config:
          stateTopic: rtl_433/XXXXXXXXXXXXX/devices/LaCrosse-TX141THBv2/0/+/temperature_C
          min: -50
          max: 50
          unit: °C
      LetztesUpdate:
        type: datetime
        label: Letztes Update
        description: ""
        config:
          stateTopic: rtl_433/XXXXXXXXXXXXX/devices/LaCrosse-TX141THBv2/0/+/time
      Luftfeuchtigkeit:
        type: number
        label: Luftfeuchtigkeit
        config:
          stateTopic: rtl_433/XXXXXXXXXXXXX/devices/LaCrosse-TX141THBv2/0/+/humidity
          min: 0
          max: 100
          unit: '%'

3 Kommentare

  1. Danke, tolle Anleitung!
    Ich scheitere am letzten Punkt:
    Ich kriege die Daten uebermittelt, Format:
    2025-07-11 00:35:26.671 [INFO ] [openhab.event.ChannelTriggeredEvent ] - mqtt:broker:MQTT:TS_FT002 triggered {"time":"2025-07-11 00:35:26","model":"TS-FT002","id":240,"depth_cm":83,"temperature_C":17.0,"transmit_s":180,"flags":8,"mic":"CHECKSUM"}

    Wenn ich dann aber mit dem Generic MTT Thing einen Channel anlege und mit JSONPATH versuche die einzelnen Daten zu extrahieren, dann passiert nichts.
    Die Things sind online, JSONPath Transformation ist installiert. Verwenden z.B. diesen Syntax fuer die Temperatur:
    JSONPATH:$.temperature_C

    Hast du irgendeine Idee?

    • Hi!
      Es sieht danach aus, dass du das ganze Gerät per MQTT rein schickst und nicht nur die Temperatur.
      Das sorgt dafür, dass openHAB alles in ein Channel schreiben würde. Das ist natürlich doof.
      Du musst pro Wert, den das Gerät übermittelt, ein Channel anlegen.
      Sieht dann in Code-Form so aus:
      UID: mqtt:topic:MqttBroker:MqttRtl433Wetterstation
      label: MQTT Wetterstation
      thingTypeUID: mqtt:topic
      configuration: {}
      bridgeUID: mqtt:broker:MqttBroker
      location: Garten
      channels:
      - id: Temperatur
      channelTypeUID: mqtt:number
      label: Temperatur
      configuration:
      unit: °C
      min: -50
      stateTopic: rtl_433/GERÄTE-NAME/devices/XXXXXXX/XXX/XXX/temperature_C
      max: 50

      Damit sollte das funktionieren.
      Das ist ca. die Stelle 19:00 im Video.

  2. Perfektes Tutorial – danke fuer den Hinweis!

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden.