Haushaltgeräte, Steckdosen, Licht usw. über Internet steuern und regeln

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.

Architektur und Datenfluss

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.

Engine und Hardware PX-1674

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.


Anbieter: nmq​rstx-18­@yahoo.de, die Seite verwendet funktionsbedingt einen Session-Cookie und ist Bestandteil meines nach modernen Aspekten in Perl entwickelten Frameworks.