Wenn man sich einmal daran gewöhnt hat, dank FHEM so gut wie nichts mehr anfassen müssen und einen Grossteil aller Aktionen durch die Gebäudesteuerung / Automatisierung durchführen zu lassen, entsteht schnell der Wunsch nach mehr.
Bald ist es wieder einmal soweit und die Uhren werden umgestellt. Wir wollen jetzt lieber keine Diskussion lostreten, ob eine Zeitumstellung sinnvoll ist oder nicht.
Vielmehr schauen wir uns einmal kurz an, wie man diesen „Umstand“ nutzen kann, und ausgehend von der Zeitumstellung entsprechende Aktionen im Eigenheim ausführen lassen kann.
Ausgehend davon, dass im Frühjahr die ein oder andere Steuerungsautomatik „manuell“ via Tabletsteuerung umgestellt wird kam mir der Gedanke, dieses zukünftig automatisdch durchführen zu lassen. Neben einer dämmerungsabhängigen Lichsteuerung in und ausserhalb des Hauses, erfolgt eine ebenso dämmerungsgesteuerte Rolladensteuerung. Darüber hinaus ist noch eine entsprechende solarertragsgesteuerte Gebäudebelüftung. In den vergangenen Jahren hatten wir immer die entsprechenden Automatiken in Verbindung mit der Zeitumstellung deaktiviert. Dieses soll nun eine Automatik übernehmen.
Wie gehen wir in FHEM vor…..?
In der FHEM internen Variable $isdst wir der Status der aktuellen Zeitphase gespeichert. Während der Winterzeit hat diese Variable den Wert 0, zur Sommerzeit den Wert 1.
Über ein paar Zeilen Perl Script in der 99_myUtils.pm der FHEM Instanz lesen wir diese Systemvariable aus.
Hierzu habe ich nun eine Funktion „SummerTime“ erstellt:
sub SummerTime()
{
#!/usr/bin/perl
use strict;
use warnings;
# Modul zur Lokalisierung der Zeit importieren
use Time::Local;
# Aktuelle lokale Zeit in Sekunden seit dem Unix-Epochenzeitpunkt (1. Januar 1970) abrufen
my $time = time();
# Mit localtime() die lokale Zeit in eine Liste umwandeln
my @local_time = localtime($time);
# Die tm_isdst-Komponente aus der Liste extrahieren, die angibt, ob DST aktiv ist (1) oder nicht (0)
my $is_dst = $local_time[8];
# Überprüfen, ob DST aktiv ist, und entsprechende Nachricht ausgeben
if ($is_dst) {
fhem ("set SummerTime on");
} else {
fhem ("set SummerTime off");
}
}
Diese Funktion liest die Variable $istdst aus, prüft via klassischem IF auf den Inhalt und schaltet einen zuvor erstelles Dummy auf on bzw. off.
Damit das Ganze in regelmässigen Abständen geprüft wird, packt man den Funktionsaufruf in ein alle 12 Stunden wiederkehrendes at.
define at_SummerTime_check +*12:00:00 {SummerTime()}
Um nun entsprechende auf den Zustand des Dummy zu reagieren, werden noch 2 kleine notify Logiken erstellt, die dann die eigentlichen Aktionen, je nach Zustand des Dummies, auslösen.
SummerTime ist ON
define n_SummerTime_on notify SummerTime:on set LichA off; set RA off, set ecoHeat on
SummerTime ist OFF
define n_SummerTime_on notify SummerTime:on set LichA on; set RA on, set ecoHeat off
Damit nicht jedes Mal, wenn das SummerTime Dummy gelesen wird ein Event ausgelöst wird, setzt man in den Attributen des Dummy noch event-on-change-reading auf den state! Wenn sich die Herrrschaften auf EU Ebene nicht noch was neues einfallen lassen, sollte ja eine Eventauslösung 2 mal im Jahr ausreichend sein ;-). Som,it ist sichergestellt, dass das Notify immer nur dann abgefeuert wird, wenn das SummerTime Dummy den Wert/Zustand ändert. Je nach Anzahl der umgesetzten Logiken etc. ist jedes granular gesteurte Event in bezug auf die Gesamtperformance ein Mehrwert.
Alternativ kann man aber auch anstelle eines gesonderten Dummies, den via Funktion ermittelten Zeitphasenwert in ein Reading eines vorhandenen Gerätes schreiben und damit entsprechend arbeiten. Das ist dann reine Geschmackssache. Zudem kann man sich überlegen, ob masn in Abhängigkeit zur Zeitphase auch Einfluss auf die Heizungssteuerung nehmen möchte. Ist wie immer Geschmacksache.
Um den Ganzen noch ein Krönchen aufzusetzen und ein rotes Schleifchen drum zu machen, lasse ich das Ganze noch im TableUI anzeigen.
Das Uhrensymbol ist während der „Winterzeitphase“ grau – zur Sommerzeit grün.
Auch ‚define at_SummerTime_check +*12:00:00 {SummerTime()}‘ funktioniert nicht. Es fehlt die Modulbezeichnung „at“.
Also: ‚define at_SummerTime_check at +*12:00:00 {SummerTime()} ‚.
Mann, Mann, Mann…
Hauptsache irgendwas rausgehauen, ohne es vorher überhaupt zu testen. Kein Wunder, das in Hessen nix funktioniert.
Was ist das eigentlich oben, auf dem Foto? Der Diemelsee?
Gruß Karsten
kerkerker. Bei soviel at´s kann man ja mal was vergessen. Aber dafür gibt´s ja Hilfe aus anderen Bundesländern 😉
Sehr schön.
Das „) hab ich ebenfalls im Posting mal korrigiert.
Bezgl. Foto: Also der Diemelsee ist nicht dabei…Auch nicht der Möhnesee 🙂
} else {
fhem („set SummerTime off)“; (Klammer>Anführungsstriche)
}
erzeugt einen Syntax Error.
} else {
fhem („set SummerTime off“); (Anführungsstriche>Klammer)
}
wäre richtig.