Daten von FRITZ!Box-DECT-Steckdose mit Python auslesen

 

Um Daten von den DECT-Steckdosen von AVM (FRITZ!Box) mit Python auszulesen, muss man folgendermaßen vorgehen:

 

1. Neuen Benutzer in FRITZ!Box zum Auslesen anlegen

Unter "System" - "FRITZ!Box-Benutzer" einen neuen Benutzer mit Benutzernamen und Passwort anlegen und als Berechtigung nur "Smart Home".

 

2. FRITZ!Box-Funktion zum Auslesen aktivieren

Unter "Heimnetz" - "Netzwerk" - "Netzwerkeinstellungen" den Haken bei "Zugriff für Apps erlauben"

 

3. Liste der Steckdosen merken

Die Steckdosen werden später per Index (Start bei 0) angesprochen.

Unter "Smart Home" - "Geräte und Gruppen" kann man sich die Steckdosen anzeigen lassen. Der erste Eintrag hat den Index 0, der zweite hat den Index 1 usw.

 

4. "fritzconnection" installieren (Linux)

Ich habe es nicht geschafft, das Paket mit pip3 install fritzconnection zu installieren, deshalb habe ich das so hier gemacht:

Die gepackte Bibliothek von https://pypi.org/project/fritzconnection/ herunterladen und mit

sudo python3 setup.py install

installieren.

 

5. Skript zum Anzeigen einer Temperatur

 
#!/usr/bin/python3
# -*- coding: utf-8 -*-
from fritzconnection import FritzConnection
# FritzBox Zugangsdaten
FRITZBOX_IP = "192.168.177.1" # Standard-IP der FritzBox (anpassen, falls anders)
USER = "API" # Falls du einen Benutzer konfiguriert hast (sonst leer lassen)
PASSWORD = "api1234567890#" # Dein FritzBox-Passwort
# Verbindung zur FritzBox herstellen
fc = FritzConnection(address=FRITZBOX_IP, user=USER, password=PASSWORD)
print (fc.call_action("X_AVM-DE_Homeauto", "GetGenericDeviceInfos", NewIndex=0))
# Temperatur abrufen
try:
          temperature = fc.call_action("X_AVM-DE_Homeauto", "GetGenericDeviceInfos", NewIndex=0)["NewTemperatureCelsius"]
          temperature = temperature / 10 # Temperatur ist in 0.1°C angegeben
          print(f" ️ Temperatur der Steckdose: {temperature}°C")
except Exception as e:
          print(f"⚠️ Fehler beim Abrufen der Temperatur: {e}")
 

Die benutzte Aktion kann man hier nachlesen: https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_homeauto.pdf

 

Man kan sich alle verfügbaren Elemente der Liste, die zu der gewählten Steckdose verfügbar sind, folgendermaßen anzeigen lassen:

print (fc.call_action("X_AVM-DE_Homeauto", "GetGenericDeviceInfos", NewIndex=0))

Das Ergebnis sieht dann ungefähr so aus:

{'NewAIN': '08761 0061134', 'NewDeviceId': 16, 'NewFunctionBitMask': 35712, 'NewFirmwareVersion': '04.27', 'NewManufacturer': 'AVM', 'NewProductName': 'FRITZ!DECT 200', 'NewDeviceName': 'Steckdose 1', 'NewPresent': 'CONNECTED', 'NewMultimeterIsEnabled': 'ENABLED', 'NewMultimeterIsValid': 'VALID', 'NewMultimeterPower': 68, 'NewMultimeterEnergy': 1090644, 'NewTemperatureIsEnabled': 'ENABLED', 'NewTemperatureIsValid': 'VALID', 'NewTemperatureCelsius': 210, 'NewTemperatureOffset': 0, 'NewSwitchIsEnabled': 'ENABLED', 'NewSwitchIsValid': 'VALID', 'NewSwitchState': 'OFF', 'NewSwitchMode': 'AUTO', 'NewSwitchLock': False, 'NewHkrIsEnabled': 'DISABLED', 'NewHkrIsValid': 'INVALID', 'NewHkrIsTemperature': 0, 'NewHkrSetVentilStatus': 'CLOSED', 'NewHkrSetTemperature': 0, 'NewHkrReduceVentilStatus': 'CLOSED', 'NewHkrReduceTemperature': 0, 'NewHkrComfortVentilStatus': 'CLOSED', 'NewHkrComfortTemperature': 0}

Interessant sind:

'NewDeviceName': Name der Steckdose, eingestellt in der FRITZ!Box
'NewMultimeterPower': Aktuell gemessene Leistung in 0.01 W
'NewTemperatureCelsius': Aktuell gemessene Temperator in 0.1 °C

Dann noch andere Informationen, wie z.B. ob die Steckdose verbunden ist, ob sie eingeschaltet ist usw.

- -