FHEM

Ab Version 1.8.22 wird nun auch das FHEM-System unterstützt.

Derzeit wird “nur” eine Telnet-Verbindung unterstützt (d.h. eigentlich nur intern des LANs, aber das reicht ja wohl für diesen Zweck) und ohne SSL. Dies ist auch die schnellste Verbindung. Bei Bedarf kann das noch erweitert werden (HTTP, HTTPS, Telnet mit SSL), aber ohne Bedarf werde ich mich da nicht dransetzen. Mit SSL fängt man sich eine Menge Probleme ein (Zertifikate, self-signed, …), auf die ich gern verzichten würde.

Die Ansteuerung kann man auf zwei verschiedene Arten durchführen:

  1. Über eine Dummy-Variable, deren reading von Personal Sunrise gesetzt wird.
  2. Über den Aufruf einer Perl-Funktion, der die Parameter direkt übergeben werden.

In beiden Fällen kann man den zu benutzenden Variablen- bzw. Funktions-Namen an das eigene Namen-System anpassen. Wenn man pro FHEM-Server mehrere Benutzer unterstützen möchte, vergibt man einfach verschiedene Namen.

Es werden 2 Parameter übergeben:

  1. Der Typ der Simulation:
    Sonnenaufgang = Wecker = “Sunrise”
    Sonnenuntergang = Einschlafhilfe = “Sunset”
  2. Der Fortschritt:
    erst “init”, dann der Prozentbereich 0…100, dann “exit” (oder “cancelled”, wenn der Weckvorgang per D&D abgebrochen wird).

1. Dummy-Variable

Man muss in FHEM eine Dummy-Variable (Voreinstellung “auto_PersonalSunrise”) anlegen:

define auto_PersonalSunrise dummy

Da das State-Reading nur einen Wert haben kann, werden beide Parameter auf einmal, getrennt durch Schrägstrich, gesetzt.

Wenn man dann eine der Simulationen ausführt, sieht man in der Web-Oberfläche, wie sich das State-reading ändert, z.B.

Sunrise/init
Sunrise/0
Sunrise/3.4
Sunrise/6.5

Sunrise/100
Sunrise/exit (oder Sunrise/cancelled)

Über ein Notify (oder DOIF) kann man diesen Parameter nun auswerten, um die eigene Steuerung umzusetzen.

Tip: Man kann so auch nur auf “Sunrise/exit” reagieren und dann beispielsweise alle Lichter einschalten in der Wohnung oder im Zimmer, ohne dass irgendein Dimmer benötigt wird (die Sonnen-Simulation kann man über den Bildschirm machen). Oder ein Radio einschalten. Oder…

define n_PS notify auto_PersonalSunrise:Sunrise/exit set Licht_* on

oder Rolladen hoch:

defmod di_PS DOIF ([auto_PersonalSunrise] eq “Sunrise/exit”) (set Rollo_schlafzimmer up)

oder für Radio-/Sonos-/…steuerung kann man “init” dazu verwenden, Musik abzuspielen, die Prozentwerte für die Lautstärke, und “exit”, um auf einen anderen Stream (Nachrichten?) umzuschalten.

2. Perl-Funktion

Bei dieser Funktionsweise wird für jeden Fortschrittswert eine Funktion aufgerufen. Voreinstellung ist onPersonalSunriseProgress, so dass Personal Sunrise für jeden Fortschritt die folgende Zeile an FHEM übergibt:

{ onPersonalSunriseProgress(<Typ>, <Fortschritt>) }

Hiermit kann man komplexere Aktionen über die Perl-Funktion, die entsprechend in einer 99_my*.pl-Datei definiert wird, durchführen lassen. Das einfachste ist:

sub onPersonalSunriseProgress($$) {
my ($Mode, $Progress) = @_;
Log 2, “mode=’$Mode’, progress=’$Progress'”;
}

und im Log sieht man nun

mode=’Sunrise’, progress=’init’
mode=’Sunrise’, progress=’0′

mode=’Sunrise’, progress=’100′
mode=’Sunrise’, progress=’exit’ (oder mode=’Sunrise’, progress=’cancelled’)