Abfrage einbauen : Sensor vorhanden?

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Umulmer: Was heisst Du bekommst keine Werte? Das könnte nur passieren wenn `temperatur_lesen()` jetzt doch irgendwie definiert ist und das eine Endlosschleife ist. Ansonsten hat die Funktion garantiert irgend einen Rückgabewert, oder löst eine Ausnahme aus.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Umulmer
User
Beiträge: 11
Registriert: Samstag 20. November 2021, 12:27

Bitte schreib doch noch einige Zeilen um Werte über print() anzuzeigen. Bei meinen Versuchen läuft das Programm ohne Ausgabe durch.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das Programm ist doch nur eine Funktion. Da wird nichts aufgerufen. Das musst du dann schon selbst einbauen.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Um noch mal klar zu machen, was mein Vorschlag war:

Code: Alles auswählen

except KeyboardInterrupt:
ist durch

Code: Alles auswählen

finally:
zu ersetzen, und dann stellt sich, wenn alles andere so bleibt wie bisher, der gewuenschte Effekt ein: egal warum das Programm abschmiert (und eben nicht nur, wenn man C-c drueckt!), wird alles ausgeschaltet.

Der ganze Rest ist wirklich sehr schlecht programmiert (jaja, ich weiss, Anfaenger, aber so ist es halt trotzdem), und da wuerde ich, wenn das sonst so tut, am besten gar nichts dran rumdrehen.
Umulmer
User
Beiträge: 11
Registriert: Samstag 20. November 2021, 12:27

Hallo deets,
einbau finally: erfolgreich. Danke
Frage : wie kann ich im laufende Programm ein Input aufrufen um die Vorgabe der Wohnzimmertemperatur zu ändern ?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Was meinst du genau mit Input? Den Befehl Input, oder allgemein einen Weg, einen Eingabe zu tätigen?
Umulmer
User
Beiträge: 11
Registriert: Samstag 20. November 2021, 12:27

in meinem laufenden Programm, in der try schleife eine Eingabe ( Änderung einer Variablen ) zu machen. Diese darf auch beim Programmstart erscheinen.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das du was ändern willst, ist mir schon klar. Was mir nicht klar ist: wie soll die Änderung erfolgen? Einen Wert über die Tastatur einzulesen ist schlecht aus mehreren Gründen: es blockiert, darum muss man also herum arbeiten. Es erfordert Tastatur und Monitor und Terminal. Haben deine Familienmitglieder da Bock drauf, nur weil es 2 Grad wärmer werden soll? Und auch gestalterisch ist das eine Sackgasse. Was willst du also warum ändern?
Umulmer
User
Beiträge: 11
Registriert: Samstag 20. November 2021, 12:27

Code: Alles auswählen

def grad_lesen9():
    try:
        file = open('/sys/bus/w1/devices/28-3c01e076f457/w1_slave')
        time.sleep(0.2)  #Wartezeit ja/nein?
        filecontent = file.read()
        file.close()

        pos = filecontent.rfind('t=') + 2
        temperature_string = filecontent[pos:]
        temperature = float(temperature_string) / 100 #temperatur in 1/10tel Grad
        return temperature
    except FileNotFoundError:
        temperature = 0
        print(" Sensor nicht vorhanden")
        snvh = snvh + 1 #Zähler der Störungen
        restart() # Unterbrechung des Pluspol der Onewire, Pause 20 sec
        return temperature
Ich habe eine neue Definition fürs auslesen der ds18b20 Sensoren erstellt. Der Vorteil ist das der Programmabsturz vermieden wird.
Vielleich hilft ja die Def für Funktionen bei der eine Pause keine Rolle spielt.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich halte das für einen Rückschritt. Das du eine reset Funktion hast, ist natürlich gut. Aber dann einfach 0 zurück zu geben, statt in einen Fehlerzustand zu wechseln, wenn es nicht geklappt hat, erweckt doch nur die Illusion, dass da etwas funktioniert.
Antworten