stehe gerade etwas auf dem Schlauch und benötige Eure Hilfe. Habe in meinem Programm eine Klasse welche ich zweimal aufrufe. In meinem __main__ habe ich eine TRY - Anweisung welche im 10 Sekunden Takt der Klasse diverse Variablen übergibt und dann die dortige Funktion "LuefterSteuern()" aufruft. Im Shell sehe ich daß dies 3 Mal richtig funktioniert. Im vierten Aufruf bekomme ich im Traceback die Info dass ich ein Attribut nicht habe.
hier der Auszug aus dem Shell / Traceback. Ich habe zur besseren Übersicht nach jedem Durchlauf eine Leerzeile eingefügt:
10-000802f8f890: 24.75 °C
10-000802f8e0ef: 24.38 °C
24.75 / 28.0 / 2.0
ich bin im ELIF Zweig
24.375 / 28.0 / 2.0
ich bin im ELIF Zweig
LuefterWR1_EIN: 0 / LuefterWR2_EIN: 0
10-000802f8f890: 29.00 °C
10-000802f8e0ef: 24.31 °C
29.0 / 28.0 / 2.0
ich bin im IF Zweig
24.312 / 28.0 / 2.0
ich bin im ELIF Zweig
LuefterWR1_EIN: 1 / LuefterWR2_EIN: 0
10-000802f8f890: 30.25 °C
10-000802f8e0ef: 24.31 °C
30.25 / 28.0 / 2.0
ich bin im IF Zweig
24.312 / 28.0 / 2.0
ich bin im ELIF Zweig
LuefterWR1_EIN: 1 / LuefterWR2_EIN: 0
10-000802f8f890: 28.75 °C
10-000802f8e0ef: 24.31 °C
28.75 / 28.0 / 2.0
Traceback (most recent call last):
File "/ablage/nfs/pi/WrKuehl.py", line 217, in <module>
LuefterWR1_EIN = LuefterWR1.LuefterSteuern()
File "/ablage/nfs/pi/WrKuehl.py", line 90, in LuefterSteuern
return self.LuefterEin
AttributeError: 'Luefter' object has no attribute 'LuefterEin'
hier der etsprechende Code... Achtung Line 90 stimmt nicht.
Code: Alles auswählen
#Klasse Luefter anlegen
class Luefter(object):
def __init__(self, isttemp, solltemp, hysterese):
self.fIsttemp = isttemp
self.fSolltemp = solltemp
self.fHysterese = hysterese
def LuefterSteuern(self):
print(str(self.fIsttemp) + " / " + str(self.fSolltemp) + " / " + str(self.fHysterese))
#Berechnung Schalttemperaturen
self.fTempLuefterEIN = (self.fSolltemp + (self.fHysterese/2))
self.fTempLuefterAUS = (self.fSolltemp - (self.fHysterese/2))
#Vergleich Isttemperatur - Schalttemperaturen
if self.fIsttemp >= self.fTempLuefterEIN:
print("ich bin im IF Zweig")
self.LuefterEin = 1
elif self.fIsttemp <= self.fTempLuefterAUS:
print("ich bin im ELIF Zweig")
self.LuefterEin = 0
#Rükgabe Lüfter EIN/AUS
return self.LuefterEin
...
...
...
if __name__ == "__main__":
#Klasse config Objekt INI-File zuweisen
config = Config(INI_FILE)
#GPIO Zuweisung: Pin 11 --> GPIO17 / Pin 12 --> GPIO18
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT)
GPIO.setup(12, GPIO.OUT)
#Verzeichnisstruktur prüfen
CheckAblage()
#Werte aus INI-File ermitteln
fSolltemp = float(config.read_value_ini_file(INI_ITEM_SOLLTEMP))
fHysterese = float(config.read_value_ini_file(INI_ITEM_HYSTERESE))
iAktuallisierung = int(config.read_value_ini_file(INI_ITEM_AKTUALLISIERUNG))
#zyklische Ablaufsteuerung
PrgEnde = PrgEndeUhrzeit()
while PrgEnde == 0:
try:
fIsttempWR1, fIsttempWR2 = TempRead()
LuefterWR1 = Luefter(fIsttempWR1, fSolltemp, fHysterese)
LuefterWR2 = Luefter(fIsttempWR2, fSolltemp, fHysterese)
LuefterWR1_EIN = LuefterWR1.LuefterSteuern()
LuefterWR2_EIN = LuefterWR2.LuefterSteuern()
print("LuefterWR1_EIN: " + str(LuefterWR1_EIN) + " / LuefterWR2_EIN: " + str(LuefterWR2_EIN))
RelaisLuefter1(LuefterWR1_EIN)
RelaisLuefter2(LuefterWR2_EIN)
time.sleep(iAktuallisierung)
PrgEnde = PrgEndeUhrzeit()
except KeyboardInterrupt:
GPIO.cleanup()
sys.exit(0)
#ENDE
GPIO.cleanup()
sys.exit(0)
Ich hoffe ich habe das verständlich rübergebracht.