Seite 2 von 2

Re: AVM Heizkörperventil Temperatur setzen

Verfasst: Montag 10. März 2025, 09:26
von __blackjack__
@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.

Re: AVM Heizkörperventil Temperatur setzen

Verfasst: Montag 10. März 2025, 10:39
von anonym108
Danke für den Tipp.
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)

Re: AVM Heizkörperventil Temperatur setzen

Verfasst: Montag 10. März 2025, 11:34
von noisefloor
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:

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)
Eingerückt wird gem. PEP8 immer mit 4 Leerzeichen, nicht mit 3 oder wie viel auch immer.

Gruß, noisefloor

Re: AVM Heizkörperventil Temperatur setzen

Verfasst: Montag 10. März 2025, 11:46
von __blackjack__
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()