Library nutzen um Aktoren zu schalten
SuperManth opened this issue · comments
Hallo,
ich würde gern mit dieser library meine Aktoren aus meinem Python script auf einem RaspberryPi zu schalten. Leider bin ich noch nicht so erfahren und finde gerade nicht heraus wie ich die nutzen kann.
Mein Gedanke war hier:
import fritzhome
FBox = fritzhome("192.168.178.1","SmartHome","SmartHome")
FBox.set_switch_on("880088008800")
bzw.
FBox.set_switch_off("880088008800")
Der Import geht noch, das andere nicht. Ich bin wie gesagt ganz neu in dem Thema. Daher war meine Vorstellung so, das man ein Objekt für die FritzBox erstellt und dann darüber den Aktor mit der AIM schaltet.
Gibt es sowas wie eine Anleitung wie ich die Befehle nutzen kann/muss?
Danke für die Hilfe.
Mario
Hallo Mario,
ich bin gerade in Neuseeland und kann daher den Code nicht direkt testen. Prinzipiell ist deine Herangehensweise jedoch richtig.
Ein paar Fragen zur Eingrenzung des Problems:
- Was für eine Fritzbox und was für Aktoren (Modell) verwendest Du?
- Bekommst du bei
set_switch_on/off
einen Fehler, oder passiert einfach nichts? - Welche Version der Bibliothek verwendest Du? (GitHub / PyPi / ...)
- Funktioniert das Ein/Ausschalten über das CLI-Tool (fritzhome, siehe README)?
Gibt es sowas wie eine Anleitung wie ich die Befehle nutzen kann/muss?
Eine richtige Dokumentation gibt es leider nicht, da ich die Bibliothek immer nach eigenem Bedarf erweitert habe und mittlerweile selbst nicht mehr aktiv nutze.
Grüße aus Kaiteriteri
Michi
Hallo Michi,
kurz zu meinem Projekt. Ich habe ein kleines Script auf einem RaspberryPi geschrieben. Das läuft automatisch und liest eine Serielle-Schnittstelle aus. Wenn etwas empfangen wurde soll eine Steckdose, an der ein Monitor hängt, eingeschaltet werden. Zur Zeit habe ich das mit einem 433MHz Modul gelöst. Leider ist da die Reichweite nicht so weit. Darum wollte ich das nun mit der DECT200 und einer Fritzbox erweitern. Hier zu hause habe ich eine 6490 von Kabeldeutschland. Nachher soll das mit einer 7390 laufen.
Was ich bis jetzt gemacht habe, um zu testen ob das laufen KÖNNTE(!), ist dies Modul mit "pip3 install fritzhome" zu installieren. Dann habe ich Python3 gestartet und dort einfach mal import fritzhome ausgeführt. Das hat geklappt. Dann wie schon beschrieben Fbox = fritzhome("IP-Adresse",User,Passwort) eingegeben. Doch dabei kommt schon die Fehlermeldung "TypeError: 'module' object ist not callable".
Weiter bin ich nicht gekommen.
Grüße aus Hamburg
Mario
Hallo Mario,
ich sehe schon das Problem. Beim Import (import fritzhome
) erhälst du eine Referenz auf ein Modul. Module sind Namensräume in Python, welche selbst wiederum Klassen oder andere Eigenschaften enthalten können. Du versucht das Modul wie eine Funktion/Klasse (fritzhome()
) aufzurufen, was in Python nicht möglich ist und zu der Fehlermeldung führt.
Damit es klappt, musst du die Klassse "FritzBox" innerhalb des Moduls verwenden. Hier zwei Beispiele, aus dem Gedächtnis und ungetestet da ich hier keine FritzBox zur Hand habe.
# --- Initialisierung
# Entweder die Klasse einzeln importieren
from fritzhome import FritzBox
fritz = FritzBox("ip", "user", "pw")
# Oder das ganze Modul und dann Zugriff darauf
import fritzhome
fritz = fritzhome.FritzBox("ip", "user", "pw")
# --- Steuerung
# Actors auflisten
print("Meine Actors:")
print(fritz.get_actors())
# Actor an/aus
fritz.set_switch_on("00:00:00:00:00:00")
fritz.set_switch_off("00:00:00:00:00:00")
Grüße aus Kaiteriteri
Michi
Hallo Michi,
das läuft leider auch nicht. Wenn ich die Klasse importieren will, kommt diese Fehlermeldung:
ImportError: cannot import name 'FritzBox'
Wenn ich nur fritzhome importiere kommt in der Befehlszeile
fritz = fritzhome.FritzBox()
dieser Fehler:
AttributeError: module 'fritzhome' has no attribute 'FritzBox'
Ich habe auch das hier probiert:
fritz = fritzhome("IP", "User", "Passwort")
Dann kommt der Fehler
TypeError: 'module' object is not callable
Entweder mache ich etwas ganz verkehrt oder es gibt hier ein Problem
Gruß Mario
Hallo Mario,
entschuldige bitte die späte Rückmeldung - schlechtes Internet in Down Under und Zeitzonen...
Ich habe das nochmal getestet und in meinem Code war noch ein Fehler. Anbei ein Screenshot mit dem richtigen Import. Ich werde das in der Bibliothek noch korrigieren sobald ich wieder im Lande bin.
Zum Kopieren:
import fritzhome
fritz = fritzhome.fritz.FritzBox("192.168.2.2", "smarthome", "smarthome")
Grüße aus Te Anau
Michi
Hallo Mario,
ich habe das nochmal auf ner frischen Linux-Box getestet. Das Problem ist das alte Paket auf PyPi (wird nur selten aktualisiert).
Ich habe das Paket mal aktualisiert. Bitte versuche zuerst ein Update und schau, ob der Import von oben endlich klappt:
# Falls PyPI das Paket endlich hat
pip install fritzhome==1.0.5
# Installation über Direkt-Link
pip install https://pypi.python.org/packages/a2/df/3b6ca1555f075a4014c8866347bc2e882e88247b80a9725ba97ac32ff52d/fritzhome-1.0.5-py2.py3-none-any.whl
Alternative für die alte Version:
import fritzhome.fritz
fritz = fritzhome.fritz.FritzBox("192.168.2.2", "smarthome", "smarthome")
Grüße vom Lake Tekapo
Michi
Hallo Michi,
danke für Deine Unterstützung. Damit läuft es (alte Version). Ist es normal, das get_actors nur den Namen der Steckdose liefert? Kann man auch die AIM dadurch auslesen? Oder kann man auch mit dem Namen die Dose schalten?
Happy holiday.
Mario
Hallo Mario,
Ist es normal, das get_actors nur den Namen der Steckdose liefert?
get_actors
liefert dir eine Liste von Aktor-Objekten, welche eine Reihe von Eigenschaften haben, abhängig von der Art des Aktors. Beispiele zur Verwendung findest du in der Datei fritzhome/__main__.py
, welche die Basis für das Kommandozeilen-Tool ist.
Besonders die energy-Funktion dürfte für dich interessant sein, diese greift auf Namen, AIN, Status und Temperatur zu und gibt diese aus.
Oder kann man auch mit dem Namen die Dose schalten?
Das direkt nicht. Du könntest jedoch alle Aktoren durchlaufen und nach dem Namen filtern:
for actor in fritz.get_actors():
if actor.name == "Teekocher":
actor.switch_on()
Grüße aus Christchurch
Michi
Hallo Michi,
läuft jetzt. Getestet mit FritzBox6490 FW:6.65 und FRITZ!DECT 200 FW:3.87
Danke