AVM Heizkörperventil Temperatur setzen

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Benutzeravatar
__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
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: 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:

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: 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
Antworten