AVM Heizkörperventil Temperatur setzen

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Benutzeravatar
__blackjack__
User
Beiträge: 13919
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.
“I am Dyslexic of Borg, Your Ass will be Laminated” — unknown
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)
Benutzeravatar
noisefloor
User
Beiträge: 4149
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:

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
Benutzeravatar
__blackjack__
User
Beiträge: 13919
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()
“I am Dyslexic of Borg, Your Ass will be Laminated” — unknown
Antworten