433 MHz Außentemperatur Sensor mit Raspberry Pi auslesen

Kürzlich kam die Idee auf, dass es doch möglich sein muss, drahtlose Sensoren die auf 433 MHz senden die Daten direkt in Klartext auszulesen. Die Suche ergab dass es ein Programm gibt für den Raspberry Pi mit dem Namen „rtl_433“. Es muss ja nicht immer gleich eine Platine mit Sender und Empfänger sein, die dann noch zusammengebaut und programmiert werden muss, es muss einfacher gehen 🙂

Hardware Liste:

Die Installation erfolgt auf dem Raspberry Pi wie folgt:

sudo apt-get update
sudo apt-get upgrade
 
# Abhängikeiten installieren
sudo apt-get install libtool libusb-1.0.0-dev librtlsdr-dev rtl-sdr cmake
 
# rtl_433 Git Repository holen
git clone https://github.com/merbanan/rtl_433.git
 
# in das rtl_433 Verzeichnis wechseln
cd rtl_433/
# Erstelle ein build Verzeichnis
mkdir build
cd build/
# Compile starten
cmake ../
# Make
make
# Install
sudo make install


# Testen, Ausgeben der Programm Parameter
rtl_433 -h
# Ausgabe der Programm Parameter

Gestartet wird das Programm mit „rtl_433 -G“ für alle Geräte.

Ausgabe der Daten aller Sensoren in der Umgebung
Ausgabe der Daten

So sehen dann die Daten aus, für Sensoren die in der näheren Umgebung erreichbar sind und senden. In einem Hochhausgebiet dürfte das ganze sehr interessant werden.

Es werden übrigens auch Autoreifen Sensoren und Fernbedienungen angezeigt.

Teilweise ist es schon richtig krass was da an unverschlüsselte Daten in der Luft einfach so abgreifbar sind.

 

 

Nun habe ich mir auf gut Glück einen Sensor bestellt https://amzn.to/2ItJYg6 um auszuprobieren ob der Sensor vom RTL-433 gelesen und dekodiert werden kann. Ja es hat geklappt und der Sensor hat weniger als 6 Euro gekostet.

Ausgabe Sensordaten
Ausgabe Sensordaten

Die Daten werden im JSON Format angezeigt, die über den Parameter „rtl_433 -G -F json“ mitgegeben werden beim starten des Programm. Dass in der Ausgabe noch Luftfeuchtigkeit angezeigt wird ist falsch und kann ignoriert werden.

 

Die Ausgabe an einen MQTT Broker weitergeben, damit die Daten dann in Node-Red weiter verabeitet werden können.

# rtl_433 -F json -U | mosquitto_pub -h mqtt.unixweb.de -t home/rtl_433 -l

 

Nun können die Daten in Node-Red eingelesen werden um dort angezeigt zu werden.
In meinem Fall hab ich die „id 5“ des Sensor übernommen wie im Trace angezeigt. In Deinem Fall musst Du suchen welche ID Dein Sensor hat und diesen Dann in den Flow eintragen.

[{"id":"4658c68b.f6537","type":"tab","label":"RTL 433 Scanner","disabled":false,"info":""},{"id":"db43e6a6.ad003","type":"mqtt in","z":"4658c68b.f6537","name":"von mqtt.unixweb.de home/rtl_433","topic":"home/rtl_433","qos":"0","broker":"c979da80.ef2bb","x":220,"y":280,"wires":[["b4d56bcd.7a81f"]]},{"id":"b4d56bcd.7a81f","type":"json","z":"4658c68b.f6537","name":"to JSON","property":"payload","action":"","pretty":false,"x":500,"y":280,"wires":[["409479af.9f69e8"]]},{"id":"409479af.9f69e8","type":"switch","z":"4658c68b.f6537","name":"Filter","property":"payload.id","propertyType":"msg","rules":[{"t":"eq","v":"9","vt":"str"},{"t":"eq","v":"75","vt":"str"},{"t":"eq","v":"5","vt":"str"},{"t":"eq","v":"87","vt":"str"},{"t":"eq","v":"122","vt":"str"},{"t":"eq","v":"255","vt":"str"},{"t":"else"}],"checkall":"false","repair":false,"outputs":7,"x":670,"y":280,"wires":[[],[],["bc62083d.78bae8","96060036.9a3168"],[],[],["4585ac6b.9748c4"],["aa9b2ac4.e88c08"]],"outputLabels":["","75","86","87","","255","alle Anderen"]},{"id":"aa9b2ac4.e88c08","type":"debug","z":"4658c68b.f6537","name":"Ausgabe: alle anderen Model ","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":960,"y":380,"wires":[]},{"id":"4585ac6b.9748c4","type":"debug","z":"4658c68b.f6537","name":"TFA pool temperature sensor","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload.model","x":960,"y":320,"wires":[]},{"id":"bc62083d.78bae8","type":"debug","z":"4658c68b.f6537","name":"Generic temperature sensor 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload.temperature_C","x":970,"y":260,"wires":[]},{"id":"6c9284f3.083734","type":"comment","z":"4658c68b.f6537","name":"MQTT Daten an mqtt.unixweb.de","info":"","x":210,"y":180,"wires":[]},{"id":"96060036.9a3168","type":"debug","z":"4658c68b.f6537","name":"Generic humidity sensor 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload.humidity","x":960,"y":200,"wires":[]},{"id":"c979da80.ef2bb","type":"mqtt-broker","z":"","name":"unixweb","broker":"mqtt.unixweb.de","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""}]

So sehen die Daten dann in Node-Red aus und können in Dashboards etc. übernommen werden.

Daten in Node-Red

Mein Testaufbau mit einem einfachen USB-Dongle. Daneben ein Octopus IoT Board zur Referenzmessung der Temperatur. Die Abweichung des Temperatur Sensor beträgt ca. 0.5 bis 1 Grad ° C, was durchaus im Bereich der Toleranz liegt.

Mit diesem Artikel will ich zeigen, dass es auch Leuten möglich ist ohne Löten und programmieren einen Temperatur Sensor aufzubauen und die Daten so anzeigen zu lassen damit man nicht immer auf das Display des Sensors schauen muss. Nun können Beispiele für Frostschutz und Hitzewarnungen programmiert werden. Der Sensor wird hoffentlich durch den Einsatz von Batterien 2AAA mehrere Monate oder 1 Jahr ohne Batteriewechsel funktionieren, wir werden es testen 🙂
Wenn ich daran denke was es für ein Aufwand ist mit einem Arduino so einen Sensor aufzubauen, ist diese Lösung wirklich smart und einfach. Bei Frage einfach Kommentar hier unter dem Artikel hinterlassen.

Viel Spaß beim basteln und probieren wünscht Joachim

7 Kommentare

    1. Hallo Thomas

      Dein Artikel war auf jeden Fall eine Inspiration das Thema mal anzuschauen und zu probieren.
      Danke dafür 🙂

      Grüße Joachim
      PS: Ja DSGVO ist in aller Munde und ich muss es nochmal ändern

  1. Hallo Joachim,
    tolles Projekt. Nur bei der Installation habe ich bei Zeile 16 eine Fehlermeldung erhalten (Kommando nicht gefunden). Was mach ich falsch?

    1. Hallo Hans-Dieter

      da hab ich doch tatsächlich noch etwas vergessen zu installieren bzw. zu dokumentieren.
      Danke für den Hinweis.

      Mach mal folgendes :
      sudo apt install cmake

      Dann sollte die Zeile 16 nun auch funktionieren.

      Beste Grüße , Joachim

  2. Moin Joachim,

    ich bekomme beim Weiterleiten an den MQTT-Broker eine Fehlermeldung:

    Connection Refused: not authorised.

    Was muß ich noch ändern ?

    Gruß Heiner

    1. Hallo Heiner

      dann stimmt irgendwas mit der Zusammenstellung des Kommando in der Shell nicht.
      Probier mal „mosquitto_pub -h mqtt.unixweb.de -p 1883 -t home/rtl -m 5“ ob das geht.
      Wenn das geht muss auch alles andere funktionieren, bitte 1:1 übernehmen.

      Grüße , Joachim

  3. Habe den Fehler gefunden. Ich hatte den Server bereits auf localhost geändert, aber in dem Moment keinen MQTT Broker hochgefahren. Jetzt funktioniert alles 😉

    DAnke für Deine Hilfe.

    Gruß Heiner

Kommentar hinterlassen

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

*