Skip to content

FHEM: Heizplan mit Feiertagen

Perl in wenigen Tagen zu lernen ist glücklicherweise keine große Herausforderung, wenn man bereits programmieren kann.

Daher habe ich mein Heizungsskript noch um eine Feiertagskontrolle erweitert. Hierzu sind noch einige Verrenkungen nötig gewesen. Ich habe mir, wie im FHEMWiki beschrieben, eine holiday-Definition in der fhem.cfg angelegt, und verwende diese nun, um zu schauen, ob der aktuelle Tag und die folgenden sechs Tage Feiertage sind.


my %dayHash = ();
for(my $i=0; $i <= 6; $i++)
{
my $dur = DateTime::Duration->new(
years => 0,
months => 0,
weeks => 0,
days => $i,
hours => 0,
minutes => 0,
seconds => 0,
nanoseconds => 0
);
my $dt = DateTime->now; # same as ( epoch => time() )
$dt = $dt->add_duration($dur);
my $month = $dt->month; # 1-12
if($month < 10){$month ="0$month";}
my $day = $dt->day; # 1-31
if($day < 10){$day ="0$day";}
my $dow = $dt->day_of_week_0; # 0-6 (Monday is 0)
my %days = (0 => "Mon",
1 => "Tue",
2 => "Wed",
3 => "Thu",
4 => "Fri",
5 => "Sat",
6 => "Sun"
);
if(fhem("get NRW_Feiertag $month-$day") eq "none")
{
$dayHash{$days{$dow}} = "false";
}
else
{
$dayHash{$days{$dow}} = "true";
}
}


Dieser Code-Schnippsel liefert mir eine Hashtable, aus der ich pro Tag den Status true/false holen kann, also beispielsweise Wed: true.

Um zu prüfen, ob mein Heizplan verändert wurde, lese ich den Timestamp, und vergleiche mit einem angelegten Dummy.

my $lastChanged = $fstat[11];
my $fhemLastChanged = Value("HeizplanLastChanged");


Schließlich werden noch die TimeSets verglichen, so dass nur die veränderten Zeilen geschickt werden.


my $currentTimeSet = ReadingsVal("HeizungWohnzimmer_235134_Clima","tempList$Day","nil");
if($TimeSet ne $currentTimeSet)
{
if($dayHash{"$Day"} eq "true")
{
{ fhem("set " . $Radiator . "_Clima tempList" . $Day . " prep 08:00 17.0 23:00 21.0 24:00 17.0")};
}
else
{
{ fhem("set " . $Radiator . "_Clima tempList" . $Day . " prep " . $TimeSet)};
}
}


Zuguterletzt wird der Dummy HeizplanLastChanged mit dem aktuellen Änderungsdatum versehen:
fhem("set HeizplanLastChanged " . $fstat[11]);

Trackbacks

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Noch keine Kommentare

Die Kommentarfunktion wurde vom Besitzer dieses Blogs in diesem Eintrag deaktiviert.

Kommentar schreiben

Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Formular-Optionen

Kommentare werden erst nach redaktioneller Prüfung freigeschaltet!