Skip to content

FHEM: Heizung (und weitere Geräte) durch Anwesenheit steuern

Eine kleine Übung, die mir viel Spaß und ein wenig Kopfzerbrechen bereitet hat, war die Anwesenheitskontrolle. Was mit "define Variablenname presence lan-ping 123.123.123.123" flott niedergeschrieben ist, hat die ein oder andere Tücke. Aber dazu später mehr.

Die anfängliche Überlegung war, meine Heizung (in Ermangelung weiterer Aktoren) durch Anwesenheit zu schalten. FHEM liefert dabei eingebaut unter anderem die Anwesenheitskontrolle via ICMP. Praktisch, dachte ich mir, da sowohl ich als auch meine Frau nicht ohne Handy aus dem Hause gehen. Leider hat Apple im Iphone den kleinen Fallstrick eingebaut, dass das dumme Gerät keinen ordentlichen Schlafmodus mit reduzierter Sendeleistung hat, sondern sich einfach komplett aus dem WLAN verabschiedet, sobald das Display mal wenige Sekunden nicht aktiv ist. Mein Nexus ist da etwas weniger schwachsinnig gebaut, und reduziert einfach die Leistung.
"FHEM: Heizung (und weitere Geräte) durch Anwesenheit steuern" vollständig lesen

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]);

FHEM: HomeMatic-Thermostate mit Heizplan versorgen

Kurz vor Weihnachten habe ich mir ein CUL-Board für meinen Raspberry Pi gekauft, und zum Spielen noch drei Thermostate HM-CC-RT-DN von HomeMatic. Der Hersteller führt sonst eher die teuersten Produkte für den Heimautomatisierungsbereich, hat aber günstige und gute Thermostate. Meine haben eine stabile Überwurfmutter aus Metall, drei Adapter, damit sie auch auf jede Heizung passen, und generell eine gute Haptik.
"FHEM: HomeMatic-Thermostate mit Heizplan versorgen" vollständig lesen

IPv6-Umstell-o-mania

Es ist soweit. Der Internetanbieter ist gewechselt, 150mbit kommen zu über 80% an, was ich persönlich top finde. Lediglich die Umsetzung der Anbindung ist etwas dürftig: DSLite. Daher bin ich nun dazu gezwungen, meine Anwendungen und Endgeräte auf IPv6 umzustellen, was natürlich auch zu kleinen ... Herausforderungen geführt hat. Um Leidensgenossen diese unter Umständen zu ersparen, will ich hier einmal meine Gedanken niederschreiben.



Generelle IPv6-Fähigkeit: FritzBox Cable 6360 macht es möglich. IP_PD und IP_IA aktiviert, und ab gehts. Standardmäßig kommen alle Microsoft-Geräte bei mir bestens klar. Einige Linux- und BSD-Instanzen wehren sich, aber spielen nach einer schnellen Konfiguration ebenfalls mit. FreeNAS ließ sich bequem über sein Webinterface verstellen, Debian brauchte - zumindest in meiner Konfiguration - einen kleinen Wink mit dem Zaunpfahl in der /etc/network/interfaces: iface eth0 inet6 dhcp.
Im lokalen Netz sind alle Geräte relativ gut per IPv6-Adresse zugänglich. Lediglich die OwnCloud braucht ein wenig Überzeugungsarbeit. In meiner Konfiguration ist ein SSL-Virtualhost eingerichtet, der offenbar nicht korrekt auf IPv6 horcht. Das ist schnell mit Anpassungen in der ports.conf und der genutzten Site nachgezogen:
Die Zeile Listen 443 wird zu Listen *:443 in der ports.conf. Anschließend wird die Site-Konfiguration angepasst: Der Virtualhost bekommt die korrekte Benamung virtualhost *:443, wonach dann der gute Apache durchgestartet wird. Ein fixer tcpdump -i eth0 'port 443' | tee dat zeigt Action auf Port 443.



Doch dann kommt die traurige Ernüchterung: Meine öffentliche IPv6 ist aus dem Internet nicht erreichbar :-( Die Portfreigabe für IPv6, die die FritzBox anbietet, scheint nicht korrekt zu funktionieren. Zahllose versuche, irgendetwas mit Routen o.ä. zu verbessern, führt zu nichts, doch dann kommt die Erleuchtung: Um die Portfreigabe zu aktiveren, muss scheinbar PING6 aktiviert werden. Warum? Wer weiß das schon. Ist auch egal.

Oh(SX86) du Fröhliche...

Kurz vor Weihnachten muss mal wieder etwas geschafft werden! Die fade Berufsschulzeit habe ich mir schon mit C# und diversen Experimenten mit Linux verschönert (Hylafax, UMTS, integrierte Webcam), und nun habe ich versucht, OSX Snow Leopard auf mein gutes Thinkpad X60 und auf mein kleines Fujitsu-Siemens P7230 zu braten - Mit gemischtem Erfolg...

"Oh(SX86) du Fröhliche..." vollständig lesen

Android FTW!

Mein HTC Desire hat mir ja quasi schon vor dem Kauf gefallen. Seit ich es an diesem Wochenende aber endlich gerootet habe, bin ich völlig begeistert! Mit dem Tool unrevoked hat es nicht einmal 10 Minuten zum root gebraucht. Danach kam pays-ROM drauf mit LauncherPro Plus, und ieee802.11n-Unterstützung! Insgesamt läuft das HTC nun auch flotter. Der Ladebildschirm ist nun endlich schwarz, und macht keine nervigen Geräusche mehr beim Booten des Smartphones.


Als nächstes wird sich in's Firmen-VPN verbunden mittels vpnc und dem errechneten Gruppen"secret", welches sich recht einfach bestimmen lässt. Dann läuft auch die Exchange-Verbindung... Wenn das funktioniert, wird ein nandroid-backup erstellt und die nächste ROM ausprobiert. Meine Wahl ist dabei wegen noch mehr Features auf LeeDroid gefallen.

Der neue Recovery-Loader clockwork-mod ist übrigens großartig: Ein komplettes Systembackup mit einem Tastendruck, und die Möglichkeit, unsignierte ROMs, Updates usw. einzuspielen, ohne den S-OFF-Switch zu setzen. So wird nicht mal die Garantie des Gerätes angetastet :-)