Komplexes Thema unter dem Sammelbegriff Heimautomatisierung
Die Automatisierung von Haustechnik ist auf dem Vormarsch und hat auch vor meinem Framework nicht Halt gemacht. Der hier vorliegende Artikel beschreibt ein paar Grundlagen und stellt die Architektur meiner Eigenentwicklung vor.
Prinzipiell wird eine Konfiguration nach dem Schema:
[Heizung_Arbeit] period=10 min=0.0 devid=0x1A85-1 max=1.0 default=0.2 step=0.1 slider=1 type=PWM times= [Heizung_Stube] min=5.0 max=30.0 default=19.0 step=1.0 slider=1 type=Temperature times=7:00 11:00 22.0 17:00 22:00 24.0 [Hoflicht] devid=0x1A85-2 default=Off type=OnOff times=Sonnenuntergang Sonnenaufgang On flipflop=1
zentral und konfigurierbar auf einem Webserver abgelegt. So bekommt jedes zu steuernde Gerät einen [verständlichen Namen]
und eine eindeutige Identity like devid=0x1A85-2
. Letztere setzt sich zusammen aus einer Adresse (Hauscode) sowie einer eindeutigen Nummer für das Gerät innerhalb dieser Gerätegruppe. Diese Konfiguration, die natürlich auch umfangreicher sein kann als das Beispiel obenstehend, wird von der eigentlichen Engine jede Minute abgefragt über einen Webservice. Das bedeutet, dass jede eingestellte Änderung unter Umständen erst eine Minute später wirksam wird, was jedoch nicht weiter tragisch ist.
Tragisch jedoch wäre eine Unerreichbarkeit des Webservices, aus diesem Grund ist die Konfiguration im Original auf der Maschine verfügbar, womit im Fall eines Ausfalls für alle Geräte die jeweiligen Default-Einstellungen geladen werden. Ansonsten ergibt sich der Status für jedes Gerät aus dem Zeitplan, dem Typ und natürlich aus dem Default. Für Geräte ohne Zeitplan bekommt die Engine bei jeder Abfrage den Default als Status.
Ereignisse wie Sonnenuntergang
oder Sonnenaufgang
werden über gleichnamige Methoden auf eine Zeitangabe umgelegt, somit ist die Ereignissteuerung erweiterbar.
Die Engine ist als Perl-Script in die lokale CronTab
so einzutragen, dass es jede Minute aufgerufen wird. Zu konfigurieren sind untenstehende Parameter:
my $main = bless{ host => 'rolfrost', file => 'd:/tmp/dongle.cmp', fallback => 'd:/home/files/hausomat.ini', },'main';
Die unter file
angegebene Datei als Zwischenspeicher für den Status sichert die 1%-Regel, so wird nur gesendet, wenn sich am Status für das jeweilige Gerät eine Änderung ergeben hat. Die unter fallback
angegebene Datei ist die Original-INI-Datei, die als Kopie auf dem Server (host) liegt. Wenn der Server also nicht erreichbar ist, wird für den Status eines jeden Gerätes der Default geladen.
Die an USB zu sendenden Kommandos (Bytesequenzen) sind auf den USB-Dongle PX-1674-675 zugeschnitten der von PEARL vertrieben wird. Das spezielle Perl-Modul PxCMD
(Link siehe oben) benötigt die libusb-win32
.
Datenschutzerklärung: Diese Seite dient rein privaten Zwecken. Auf den für diese Domäne installierten Seiten werden grundsätzlich keine personenbezogenen Daten erhoben. Das Loggen der Zugriffe mit Ihrer Remote Adresse erfolgt beim Provider soweit das technisch erforderlich ist. sos@rolfrost.de.