AVM Heizkörperventil Temperatur setzen
- __blackjack__
- User
- Beiträge: 13882
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@El Achimo: Die Fehlerbehandlung ist kaputt. Falls die Anmeldung fehlschlägt, wird trotzdem `set_target_temperature()` aufgerufen, was natürlich nicht funktioniert wenn man nicht angemeldet ist.
“Man wirft uns vor, wir hätten kein Programm, das Programm sei nicht umsetzbar, und die anderen Parteien hätten das alles auch im Programm.“ — Pavel Mayer, Piratenpartei
Danke für den Tipp.
Das einzige, was in der Exeption schief gehen kann, ist der Login.
Hier ist der angepasste Code.
Das einzige, was in der Exeption schief gehen kann, ist der Login.
Hier ist der angepasste Code.
Code: Alles auswählen
# from pyfritzhome import *
from pyfritzhome import Fritzhome
import sys
# Verbindung zur FRITZ!Box herstellen
host = '10.0.0.1'
username = 'fhem'
password = 'strengstens geheim'
fha = Fritzhome(host=host, user=username, password=password)
try:
fha.login()
print ("Login erfolgreich")
except:
print ("Login fehlgeschlagen")
sys.exit()
# AIN des Heizkörperreglers
ain = '13979 0362472' # Beispiel-AIN; ersetzen Sie dies durch die tatsächliche AIN Ihres Geräts
print(ain)
# Neue Solltemperatur in °C
neue_solltemperatur = 15.5
# Setzen der neuen Solltemperatur
fha.set_target_temperature(ain, neue_solltemperatur)
- noisefloor
- User
- Beiträge: 4118
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
man sollte _nie_ nackte `try...except` verwenden, weil man damit _alle_ Fehler abfängt und wegbügelt, auch Programmierfehler. Will man aber in der Regel nicht. Darum Fehler immer gezielt abfangen. Im gegebenen Fall macht es IMHO Sinn, eine `try...except..else`block zu verwenden:
Eingerückt wird gem. PEP8 immer mit 4 Leerzeichen, nicht mit 3 oder wie viel auch immer.
Gruß, noisefloor
man sollte _nie_ nackte `try...except` verwenden, weil man damit _alle_ Fehler abfängt und wegbügelt, auch Programmierfehler. Will man aber in der Regel nicht. Darum Fehler immer gezielt abfangen. Im gegebenen Fall macht es IMHO Sinn, eine `try...except..else`block zu verwenden:
Code: Alles auswählen
...
try:
fha.login()
print ("Login erfolgreich")
except LoginError: #<- welche Exception wirklich geworfen wird prüfen und korrigieren
print ("Login fehlgeschlagen")
else:
# AIN des Heizkörperreglers
ain = '13979 0362472' # Beispiel-AIN; ersetzen Sie dies durch die tatsächliche AIN Ihres Geräts
print(ain)
# Neue Solltemperatur in °C
neue_solltemperatur = 15.5
# Setzen der neuen Solltemperatur
fha.set_target_temperature(ain, neue_solltemperatur)
Gruß, noisefloor
- __blackjack__
- User
- Beiträge: 13882
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Sich sauber wieder von der Fritzbox abmelden, wäre auch ganz nett.
Code: Alles auswählen
#!/usr/bin/env python3
from pyfritzhome import Fritzhome, LoginError
HOST = "10.0.0.1"
USERNAME = "fhem"
PASSWORD = "strengstens geheim"
HEIZKOERPERREGLER_AIN = "13979 0362472"
NEUE_SOLLTEMPERATUR = 15.5 # in °C
def main():
fritzhome = Fritzhome(host=HOST, user=USERNAME, password=PASSWORD)
try:
fritzhome.login()
except LoginError:
print("Login fehlgeschlagen")
else:
print("Login erfolgreich")
print(HEIZKOERPERREGLER_AIN)
fritzhome.set_target_temperature(
HEIZKOERPERREGLER_AIN, NEUE_SOLLTEMPERATUR
)
finally:
fritzhome.logout()
if __name__ == "__main__":
main()
“Man wirft uns vor, wir hätten kein Programm, das Programm sei nicht umsetzbar, und die anderen Parteien hätten das alles auch im Programm.“ — Pavel Mayer, Piratenpartei