Funkthermometer Daten mit einen DVB-T empfangen

  • Suche nach rtl-433 , dazu gabs hier im Forum anscheinend auch schon einmal etwas.

    OddSilence56140
    18. April 2019 um 11:05

    Wenn du nichts zu sagen hast, sag einfach nichts.

  • > OK, es egal welchen SDR-Empfänger man nimmt, oder gibt es da "gute" und "schlechte"?

    Selbstverstaendlich gibt es bessere und schlechtere.

    Achte vor allem drauf dass der Stick tatsaechlich SDR kann. Nicht jeder DVB-Stick ist tauglich!

    Mit den nooelec-Sticks hat es gut funktioniert, aber sie sind nicht sehr empfindlich und es gibt deutlich bessere SDR-Adapter. Sie sind (waren?) guenstig und haben den Zweck erfuellt.

  • So ich habe jetzt alles bekommen, dann zum Testen rtl-433 auf Ubuntu installiert und mann kann die Temperatur anzeigen lassen.

    In Python kann man mittels subprocess.Popen die Werte auch empfangen.

    Soweit ist es ja easy.

    Aber mir ist etwas aufgefallen, wenn ich dieses Python Scipt starte, dann wartet es auf das Signal vom sender (kommt genau jede Minute).

    Dann bekomme ich die Ausgabe der Temperatur u.s.w.

    Wenn ich aber das Script wieder abbreche, dann neu starte, kommt fortlaufend [' '] als Ausgabe.

    Warte ich wiederum bis es wieder gesendet hat, dann wartet das es wieder bis das Signal kommt und gibt die richtige Ausgabe.

    Warum ist das so?

    Hier mein script:

    Code
    import subprocess
    
    proc = subprocess.Popen(["rtl_433"], stdout=subprocess.PIPE, universal_newlines=True)
    
    
    while True:
        line   = proc.stdout.readline()
        values = line.split( "," )
    
        print(values)
  • matze1 Ressourcen wieder freigeben ist generell eine gute Idee. `Popen`-Objekte sind Kontextmanager, die sollte man also mit ``with`` verwenden wenn sich das anbietet.

    Dateiobjekte sind iterierbar und liefern die Zeilen. Also statt ``while True:`` könnte man auch einfacher ``for line in proc.stdout:`` schreiben.

    Ungetestet:

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • matze1 Daran das sie eine `__enter__()`- und eine `__exit__()`-Methode haben. Und das hoffentlich irgendwo dokumentiert ist, das sie Kontextmanager sind, diese Methoden haben, mit ``with`` verwendet werden können. Bei `Popen` steht's beispielsweise in der Dokumentation.

    Falls man etwas hat was die Methoden nicht besitzt, aber eine `close()`-Methode, kann man `contextlib.closing()` verwenden.

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

Jetzt mitmachen!

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