Hallo, ich habe gelesen, dass man eine 433MHz Funkthermomenter-Frequenz am RasPi mittels DVB-T Stick empfangen kann.
Geht das so einfach mit Python oder muss man da etwas beachten?
wenn ja gibt es dafür Python Module?
Hallo, ich habe gelesen, dass man eine 433MHz Funkthermomenter-Frequenz am RasPi mittels DVB-T Stick empfangen kann.
Geht das so einfach mit Python oder muss man da etwas beachten?
wenn ja gibt es dafür Python Module?
Funkthermometer Daten mit einen DVB-T empfangen? Schau mal ob du hier fündig wirst!
Suche nach rtl-433 , dazu gabs hier im Forum anscheinend auch schon einmal etwas.
OK, es egal welchen SDR-Empfänger man nimmt, oder gibt es da "gute" und "schlechte"?
rtl_433 ist in C geschrieben und nicht in Python.
Die einfachste Variante: rtl_433 starten, das Ausgabeformat auf CSV stellen und den Output in ein Python-Script umleiten.
Beispiel: https://blog.heimetli.ch/rtl433-daten-auslesen.html
> 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.
Wäre so etwas hier schon das richtige?
> Wäre so etwas hier schon das richtige?
Weiss ich nicht, aber immerhin steht SDR drauf, und nach der Beschreibung sollte er einen passenden Chipset haben.
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:
Vielleicht muss man subprocess.Popen(), oder was auch immer nach dem öffnen schliessen, falls das nicht automatisch geschieht?
Ah ich hab gerade festgestellt, dass es nur in der IDLE so ist, wenn ich das Script in der shell starte, dann ist das nicht so.
Hat alles funktioniert, danke schön
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:
matze1 Ressourcen wieder freigeben ist generell eine gute Idee. `Popen`-Objekte sind Kontextmanager, die sollte man also mit ``with`` verwenden wenn sich das anbietet.
Woran erkennt man solche Kontextmanager?
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.
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!