Wetterstation über Funk (433MHz) auslensen

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo,
    ich würde gerne mehrer Temperatursensoren (Bressmer 3CH) einer Wetterstation mit meinem RPI2 über Funk (433MHz) auslesen.
    Hierfür habe ich das Projekt rtl_433 entdeckt, welches Wetter-Funkstationen mittels DVB-T Sticks ausliest. Meine Temperatursesoren sind dort sogar in der Datenbank hinterlegt, wodurch ich mir das "entfrickeln" der Funksingale komplett sparen kann. :)
    Da ich noch kein passenden DVB_T Stick besitze, habe ich mich gefragt ob es soche Projekte zum auslesen von Wetterstation auch für die einfachen 433MHz Funkmodule gibt, wo einige Temperatursesoren schon in der Datenbank hinterlegt sind?
    Hat da jemand Erfahrung mit?

    Gruß,
    H.

  • Ich habe das Signal eines Sensors von Pearl zuerst ueber einen DVB-Stick empfangen: Temperaturmessung mit rtl_433

    Letztes Wochenende habe ich es mit einem guenstigen 433MHz-Empfaenger von Conrad und einem Arduino realisiert. Dabei habe ich mich stark auf die Beschreibung von rtl_433 gestuetzt.

    Diese Projekt ist noch nicht dokumentiert und es gibt keinen Langzeittest, aber es scheint gut zu laufen.

    Wenn der Sensor das Prologue-Protokoll benutzt, dann gibt es also eine Loesung. Die anderen werden wohl nicht viel komplizierter sein.

  • Auf dem Raspberry 2 (recht altes Raspbian) habe ich ein File namens /etc/modprobe.d/no-rtl.conf erstellt, mit folgendem Inhalt:

    Code
    blacklist dvd_usb_rtl28xxu
    blacklist rtl2832
    blacklist rtl2830

    Die Idee kommt vermutlich von http://www.satsignal.eu/raspberry-pi/dump1090.html

    Fuer einen kurzen Test kann man auch die Module von Hand mit rmmod entfernen.


    Auf dem Debian habe ich rtl_sdr selbst kompiliert, mit einer Option die die Module deaktiviert bevor der Stick benutzt wird.

    Einmal editiert, zuletzt von Tell (18. September 2016 um 08:46)

  • Klasse, vielen vielen Dank für die Hilfe!
    Durch anlegen des Files läufts jetzt endlich :thumbs1:

    jnAM4Hx.png

    Darf ich dich noch fragen wie Du das speichern der Messwerte umgesetzt hast?
    Zum starten hab ich rtl_433 in die rc.local gepackt und um die Messwerte zu speichern die Ausgabe mit > umgeleitet ( "rtl_433 -R 51 > /tmp/test.txt").
    Mein Problem ist nun das die Umleitung nicht wie üblich die Ausgabe (/tmp/test.txt) überschreibt, sondern die Messwerte nur anhängt. Da ich aber mit einem anderem Programm die aktuellen Messwerte aus der Datei auslesen (und in einer anderen Datenbank speichern) will, benötige ich zwingend dass die Ausgabe/Datei bei einem neuem Messwert überschrieben wird (es darf immer nur der aktuellste Messwert in der Datei gespeichert sein). Hast Du eine Idee wie ich das umsetzen könnte?


    Gruß,
    H.

  • Warum denn immer gleich eine Datenbank ??

    Ich speichere die Daten im CSV-Format, damit kann ich eigentlich alles machen... Aber Ok, jeder nach seinem Gusto.

    Es gibt prinzipiell vier Moeglichkeiten:

    * die Ausgabe von rtl_433 anpassen
    Das muesste zu machen sein, das Programm hat eine saubere Struktur

    * rtl_433 mit cron (oder so) starten und nur eine bestimmte Zeit laufen lassen
    Es gibt eine Option die das moeglich macht (hab's aber nicht probiert)

    * Das Lese-Programm so aendern dass es immer nur den letzten Eintrag nimmt
    (Wie findet das ueberhaupt heraus dass es neue Daten gibt ?)

    * Ein Programm das die Ausgaben von rtl_433 zerstueckelt und in ein File schreibt
    Und das ueber eine Pipe an rtl_433 anhaengen.
    (Das duerfte sehr einfach zu machen sein)

  • mir geht es eigentlich nicht direkt um die Datenbank (bzw. nicht nur). Ich nutzen zum Visualisieren der Daten auf einem Web Server das Programm RPi-Monitor und würde auch dort gerne die Ausgabe von rtl_433 (also die Temperatur) hinzufügen.
    Eigentlich ist dies auch sehr einfach, das Programm bietet hierfür eine Config-Datei, in der man den Pfad zu der Quelle (Textdatei) angibt und mit "regexp" festlegt was aus der Datei angezeigt werden soll (tu mich noch ein wenig schwer mit regexp, mir fällt jedenfalls keine Lösung damit ein nur den aktuellsten Eintrag auszuwählen. Fals es doch gehen sollt, wäre es aber immer noch "unschön" dass dann die Daten zwei mal gespeichert werden) . Das Programm liest danach in festgelegten Abständen die Datei aus.

    Ich habe es jetzt mal vorerst (nach deinem Vorschlag) mit einem crone job gelöst, welcher rtl_433 in bestimmten Abständen startet und rtl_433 sich selbst dann nach ein paar Sekunden wieder beendet.
    Das funktioniert soweit, nur ist es natürlich ein wenig unschön das sich rtl_433 die ganze Zeit startet und beendet.
    Am besten wäre natürlich wenn ich die Ausgabe von rtl_433 anpassen könnte. Ich hab auch schon alle " File I/O options"auf der GitHub Seite ausprobiert, jedoch erfolglos.

    Gruß,
    H.

    Einmal editiert, zuletzt von Harald654 (19. September 2016 um 15:08)


  • Nein, bisher gibt es keine solche Option bei rtl_433. Da muss man schon den Sourcecode erweitern und neu compilieren.
    Fuer jemanden der das kann, duerfte es keine grosse Sache sein ;)

    Achso, so war das gemeint :)
    Das aber eine Hausnummer zu groß für mich! Stehe noch relativ am Anfang was Programmieren angeht.



    Es ist nicht mein Projekt und deshalb habe ich nicht vor, die Dok zu RPi-Monitor zu lesen. Was kann das Ding ?

    RPi-Monitor stellt Systemwerte des RPi auf einem Webserver grafisch dar (und archiviert diese wenn gewollt), lässt sich aber über die config beliebig und sehr einfach erweitern.
    exqujk33.png
    (rechts unten hab ich zum Testen die ausgelesene Temperatur von rtl_433 eingefügt)

    Um den Webserver mit beliebigen Werten (z.B Die Raumtemperatur durch rtl_433) zu erweitern benötigt das Programm den Zielpfad des gespeicherten Wertes. Mit regexp wird dann angegeben was aus der Datei übernommen/angezeigt werden soll. Diese wird dann in festgelegten Abständen ausgelesen.
    Für die CPU load Werte sieht das dann z.B. so aus:
    78qfo8a2.png


    Gruß,
    H.

    Einmal editiert, zuletzt von Harald654 (19. September 2016 um 21:07)

  • Kann man anstelle eines Files auch ein Linux-Kommando angeben ?
    Oder gar eine Pipeline ?

    Wenn ein Linux-Kommando moeglich ist, dann holt dieser Befehl:

    Code
    awk '-F[: \t]+' '/Temperature/ { temp = $3; } END { print temp; }' log.txt

    die letzte Temperatur aus dem Logfile.

    Oder das Logformat auf JSON stellen, die letzte Zeile mit tail rausholen

    Code
    tail -1 log.txt

    und die Temperatur mit einer Regexp rauslesen.

    Einmal editiert, zuletzt von Tell (19. September 2016 um 23:37)

  • Hallo Tell,
    entschuldige meine späte Antwort.
    Linux-Kommandos ignoriert das Programm leider. Aber mir ist gerade aufgefallen dass das Programm Dateien immer vom der letzten Zeile aus liest. Somit konnte ich mit dem Regexp"(\d+-\d+-\d+)\s(\d+:\d+:\d+),(.+?),(\d+),(\d+),(\w+),([0-9.]+),(\d+)" die Daten im CSV-Format auslesen :)
    Danke nochmals für deine Hilfe.

    Gruß,
    H.

    Einmal editiert, zuletzt von Harald654 (21. September 2016 um 22:23)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!