MasaPI
Posts: 7
Joined: Mon Jun 10, 2019 3:24 pm

Python mit Vergleichsoperatoren|Verständnisprobleme?

Wed Jun 12, 2019 5:13 pm

Hallo alle zusammen,

ich versuche momentan eine kleine Temperatursteuerung zu basteln/zu programmieren.
Leider stoße ich auf Probleme die ich nicht gelöst bekomme.
Ich vermute im Skript ein Probleme zu haben mit den Vergleichsoperatoren.

Ich weiss nicht mehr was ich noch machen soll. Ich schreibe gerade zum dritten oder vierten mal in Python. Ich benutze für solche Sachen ja einen Microcontroller eigentlich. Einen Microcontroller aber am Pi zu haben ist nicht sinvoll, da der Pi das ja auch selber machen kann und schon einen Temperatursensor an Board hat. Dafür muss kein eigener Microcontroller Programmiert und Sensor angebracht werden.

Vieleicht hat ja jemand eine Idee, ich habe jedenfalls keine mehr.

Hier das Skript:

Code: Select all

#Import der benoetigten Komponenten:
import RPi.GPIO as gpio
import os
import time

#GPIO-Setup:
gpio.setmode(gpio.BCM)
gpio.setup(23, gpio.OUT)
gpio.setup(24, gpio.OUT)
gpio.output(23, gpio.LOW)
gpio.output(24, gpio.LOW)

#Variabeln:
tmp = 0 #Temperaturvariable um sie auslesen und vergleichen zu koennen.

#Funktionen zum auslesen der Temperatur:
def measure_temp():
        temp = os.popen("sudo /opt/vc/bin/vcgencmd measure_temp").readline()
        temp = temp.replace("temp=","")
        temp = temp.replace("'C","")
        return(temp)

#Funktion zum Ausschalten der GPIOs:
def fanOff():
        gpio.output(23, gpio.LOW)
        gpio.output(24, gpio.LOW)

#Hauptschleife des Programms zur Steuerung des Luefters:
while True:
        tmp = measure_temp()

        if tmp >= 42:
                gpio.output(23, gpio.HIGH)
        else:
                gpio.output(23, gpio.LOW)

        if tmp >= 50:
                gpio.output(24, gpio.HIGH)
        else:
                gpio.output(24, gpio.LOW)

        if tmp < 42:
                fanOff()

        print(tmp) #Ausgabe um die Schaltzustaenden nachvollziehen zu koennen.
        time.sleep(1)
Wenn jemand was findet oder hilfreiches weiß, ich bin offen dafür.

Vielen Dank im voraus schonmal.

Mit freundlichen Grüßen

MasaPI

fbe
Posts: 527
Joined: Thu Aug 17, 2017 9:08 pm

Re: Python mit Vergleichsoperatoren|Verständnisprobleme?

Wed Jun 12, 2019 8:05 pm

Du vergleichst Strings mit Zahlen.

MasaPI
Posts: 7
Joined: Mon Jun 10, 2019 3:24 pm

Re: Python mit Vergleichsoperatoren|Verständnisprobleme?

Thu Jun 13, 2019 7:33 am

Hallo,
Du vergleichst Strings mit Zahlen.
Wird das nicht neu angenommen bei der Var "tmp" als Nummer?

Ich teste es mal mit "float()" dann.

MasaPI

MasaPI
Posts: 7
Joined: Mon Jun 10, 2019 3:24 pm

Re: Python mit Vergleichsoperatoren|Verständnisprobleme?

Thu Jun 13, 2019 10:04 am

Hallo,

ich habe es jetzt mit dem "float()" probiert und es klappt jetzt.
Nachdem ich nun nochmal die Hauptschleife gekürzt habe und das Beschalten in eine Funktion gepackt habe, funktionierte es auch anständig wie es sollte.

Neue Hauptschleife:

Code: Select all

while True:
        tmp = float(measure_temp())

        if tmp >= 42 and tmp < 44:
                fanOn(1)

        if tmp >= 45:
                fanOn(2)

        if tmp < 42:
                fanOff()

        print(tmp)
        time.sleep(1)
Funktion:

Code: Select all

def fanOn(lvl):
        if lvl == 1:
                gpio.output(23, gpio.HIGH)
        else:
                gpio.output(23, gpio.LOW)

        if lvl == 2:
                gpio.output(24, gpio.HIGH)
        else:
                gpio.output(24, gpio.LOW)
Es war tatsächlich sehr simple. Die Ausgabe, wie oben beschrieben, war ein String. Nachdem Einsatz von "float()" kamen nun endlich die gewünschten Ergebnise zusammen.

Vielen Dank fbe für den Hinweis, der hats gebracht.

Mfg

MasaPI

Sio_x
Posts: 8
Joined: Mon Jun 17, 2019 2:35 pm

Re: Python mit Vergleichsoperatoren|Verständnisprobleme?

Mon Jun 17, 2019 4:40 pm

Das ist so schlimm in Python. Man könnte ja auch meinen, es wäre nicht schlecht, wenn man den Rückgabetyp/Objekt bereits bei der Definition der Funktion beschreibt. Das würde so viele Fehler obsolet machen.

User avatar
mline
Posts: 1319
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: Python mit Vergleichsoperatoren|Verständnisprobleme?

Mon Jun 17, 2019 10:05 pm

Sio_x wrote:
Mon Jun 17, 2019 4:40 pm
..., wenn man den Rückgabetyp/Objekt bereits bei der Definition der Funktion beschreibt. Das würde so viele Fehler obsolet machen.
Die Idee ist eben jede Variable als Variant zu deklarieren um das Ganze so einfach wie möglich zu halten. So muss man sich nicht damit rumschlagen ob es ne Ganzzahl ist und wie lang oder doch ne Fliesskomma oder ein String, Array oder komplexes Objekt?!
Sondern einfach nur woher der Wert kommt.

Das "Problem" hier war ja nur, dass return von os.popen ein String ist.
<~~>

Return to “Deutsch”