Schlagwort-Archive: Home Automation

HomeMatic Funk-Thermostat mit FHEM steuern

In den vorangegangenen zwei Artikeln haben wir zum einen die Basis Infrastruktur für die Heimsteuerung mit FHEM und zum anderen die Steuerung einer Funksteckdose betrachtet. In diesem Artikel werden wir nun auch die Heizkörper in diese Steuerung aufnehmen und damit die Basis für ein gutes Hausklima legen, die auch noch den Geldbeutel schont. Mit etwas Erfahrung kann man diese Steuerung auch erweitern um z. B. die Anwesenheit von Personen in den Wohnräumen festzustellen und entsprechend die Heizleistung anpassen.

Anlernen der Thermostate an FHEM

In meinem Beispiel werde ich einen HomeMatic 105155 Funk-Stellantrieb (HM-CC-RT-DN) verwenden. Diesen sollte man nun auspacken und die Batterien einsetzen. Bitte das Gerät noch nicht montieren – es sei denn Sie stehen darauf durch die Wohnung zu sprinten… Nun setzen wir erst FHEM in den Anlernmodus indem wir folgenden Befehl in die Kommandozeile eingeben:

set HMLAN01 hmPairForSec 60

Wir haben nun 60 Sekunden Zeit die Boost-Taste unseres Funk-Stellantriebs für ca. 3 – 5 Sekunden zu drücken. Auf dem Display sollte nun ein Count Down angezeigt werden, der von 30 abwärts zählt. Erfahrungsgemäß läuft dieser nur wenige Sekunden bis er sich mit unserem HMLan bzw. FHEM verbunden hat. Dies können Sie mit einem Klick auf CUL_HM prüfen. Hier sollte nun ein Thermostat auftauchen. Den Namen dieses Gerätes (startet mit CUL_HM) können Sie schon mal in die zwischenablage kopieren.

image_thumb14-8028791

Hat dies funktioniert, so ist jetzt ein guter Zeitpunkt links oben auf Save config zu klicken (das sollte man sich angewöhnen – es nicht zu machen führt z. T. zu längerem Fehlersuchen…).

[adrotate group=“2″]

Umbenennen der Channels

Unser Gerät hat derzeit noch einen recht kryptischen Namen mit dem man nur eingeschränkt etwas anfangen kann. Ich habe mir daher angewöhnt die relevanten Namen direkt umzubenennen. Durch einen Klick auf den Namen des Gerätes (in meinem Beispiel oben CUL_HM_HM_CC_RT_DN_2E866E) kommt man in die Detailansicht der man auch die derzeit vorhandenen Channels entnehmen kann. Durch Eingabe folgender zwei Befehle in die Kommandozeile werden die Einträge mit vernünftigen Namen versehen (beide Befehle müssen nacheinander eingegeben werden und müssen jeweils mit Enter bestätigt werden):

rename CUL_HM_HM_CC_RT_DN_2E866E LR_Heizung
rename CUL_HM_HM_CC_RT_DN_2E866E_Clima LR_Heizung_Clima

Nach Ausführung der Befehle sollte die Übersicht so aussehen (Save config nicht vergessen ;-)):

image_thumb15-5095582

Zuordnen zu einem (neuen) Raum

Möchte man den Heizkörper einem bestimmten Raum zuordnen (dieser wird auch im Menü auf der Linken Seite angezeigt), so sind folgende Schritte notwendig: Edit filesfhem.cfg in der Datei sucht man den Bereich indem in unserem Beispiel die LR_Heizung_Clima aufgelistet ist und fügt als Attribut einen Raum hinzu:

attr LR_Heizung_Clima room LivingRoom

image_thumb16-6249900

Der Raum wird automatisch erstellt, wenn er noch nicht vorhanden ist. Man muss diesen also nicht zuerst anlegen.

Zeitgesteuerte Temperatursteuerung

Durch einen Klick auf den Raum hat man nun über eine DropBox bereits die Möglichkeit die Temperatur in dem Raum zu steuern. Gleichzeitig kann man natürlich das Gerät weiterhin von Hand steuern bzw. parametrisieren. Da wir eine FHEM Installation besitzen und das Thermostat auch schon verbunden haben, wählen wir natürlich den komfortablen und auch flexibleren Weg. Hierzu müssen wir zuerst eine neue Konfigurationsdatei anlegen. Klicken Sie dafür bitte auf Edit files und wählen Sie 99_Utils.pm aus. Löschen Sie alles aus der Datei bis auf:

package main;

use strict;
use warnings;
use POSIX;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

Ändern Sie nun den Namen der Datei in 99_myUtils.pm und klicken Sie auf Save as.

image_thumb17-8890772

Damit haben wir das Grundgerüst geschaffen. Nun müssen wir die Heizung noch so einstellen, dass Sie zu den gewünschten Zeiten an geht und den Raum auf die vorgesehene Temperatur bring. Dies erfolgt mit einer Zeile wie dieser (nur exemplarisch):

{ fhem ("set TEST_Heizung_Clima tempListMon prep 06:30 0.0 08:00 22.5 24:00 0.0")};

Hier würde nun für Montags von 00:00 bis 06:30 eine Temperatur von 0 (also off) angestrebt und von 06:30 bis 08:00 eine Temperatur von 22.5 C und danach wieder 0 (also off). Die angegebenen Temperaturen hinter einer Uhrzeit geben also an bis wann diese Temperatur eingestellt sein soll  nicht ab wann! Es ist zudem wichtig, dass jede Zeile mit 24:00 endet!

In meinem Beispiel habe ich mich für folgende Konfiguration entschieden:

# LR_Heizung Temperatur setzen
sub
SetTempList_LR_Heizung()
{
{ fhem ("set LR_Heizung_Clima tempListMon prep 17:00 0.0 18:00 21.0 19:00 22.0 23:00 22.5 24:00 0.0")};
{ fhem ("set LR_Heizung_Clima tempListTue prep 17:00 0.0 18:00 21.0 19:00 22.0 23:00 22.5 24:00 0.0")};
{ fhem ("set LR_Heizung_Clima tempListWed prep 17:00 0.0 18:00 21.0 19:00 22.0 23:00 22.5 24:00 0.0")};
{ fhem ("set LR_Heizung_Clima tempListThu prep 17:00 0.0 18:00 21.0 19:00 22.0 23:00 22.5 24:00 0.0")};
{ fhem ("set LR_Heizung_Clima tempListFri prep 17:00 0.0 18:00 21.0 19:00 22.0 23:00 22.5 24:00 0.0")};
{ fhem ("set LR_Heizung_Clima tempListSat prep 10:00 0.0 12:00 22.0 23:00 22.0 24:00 0.0")};
{ fhem ("set LR_Heizung_Clima tempListSun exec 10:00 0.0 12:00 22.0 23:00 22.0 24:00 0.0")};
}
1;

Die eins am Ende muss man bei weiteren vorhandenen Profilen entsprechend hoch zählen. Man aktiviert dieses Profil durch Eingabe des nachfolgenden Befehls in der Kommandozeile (der Name ist aus dem Funktionsnamen oben abgeleitet!):

{SetTempList_LR_Heizung()}

Die Konfiguration wird bei Thermostaten nicht umgehend übertragen – es kann zwei drei Minuten dauern bis diese auf dem Gerät ankommt und wirkt.

Ich habe mir aktuell vier Profile für meine zwei Test-Thermostate gebaut. Jeweils ein Profil ist für den Normalbetrieb und das zweite für den Sommer- bzw. Urlaubsbetrieb:

# LR_Heizung Temperatur setzen
sub
SetTempList_LR_Heizung()
{
{ fhem ("set LR_Heizung_Clima tempListMon prep 17:00 0.0 18:00 21.0 19:00 22.0 23:00 22.5 24:00 0.0")};
{ fhem ("set LR_Heizung_Clima tempListTue prep 17:00 0.0 18:00 21.0 19:00 22.0 23:00 22.5 24:00 0.0")};
{ fhem ("set LR_Heizung_Clima tempListWed prep 17:00 0.0 18:00 21.0 19:00 22.0 23:00 22.5 24:00 0.0")};
{ fhem ("set LR_Heizung_Clima tempListThu prep 17:00 0.0 18:00 21.0 19:00 22.0 23:00 22.5 24:00 0.0")};
{ fhem ("set LR_Heizung_Clima tempListFri prep 17:00 0.0 18:00 21.0 19:00 22.0 23:00 22.5 24:00 0.0")};
{ fhem ("set LR_Heizung_Clima tempListSat prep 10:00 0.0 12:00 22.0 23:00 22.0 24:00 0.0")};
{ fhem ("set LR_Heizung_Clima tempListSun exec 10:00 0.0 12:00 22.0 23:00 22.0 24:00 0.0")};
}
1;

# BR_Heizung Temperatur setzen
sub
SetTempList_BR_Heizung()
{
{ fhem ("set BR_Heizung_Clima tempListMon prep 06:30 0.0 08:00 22.5 24:00 0.0")};
{ fhem ("set BR_Heizung_Clima tempListTue prep 06:30 0.0 08:00 22.5 24:00 0.0")};
{ fhem ("set BR_Heizung_Clima tempListWed prep 06:30 0.0 08:00 22.5 24:00 0.0")};
{ fhem ("set BR_Heizung_Clima tempListThu prep 06:30 0.0 08:00 22.5 24:00 0.0")};
{ fhem ("set BR_Heizung_Clima tempListFri prep 06:30 0.0 08:00 22.5 24:00 0.0")};
{ fhem ("set BR_Heizung_Clima tempListSat prep 24:00 0.0")};
{ fhem ("set BR_Heizung_Clima tempListSun exec 24:00 0.0")};
}
2;

# LR_Heizung aus schalten
sub
SetTempList_LR_Heizung_off()
{
{ fhem ("set LR_Heizung_Clima tempListMon prep 24:00 0.0")};
{ fhem ("set LR_Heizung_Clima tempListTue prep 24:00 0.0")};
{ fhem ("set LR_Heizung_Clima tempListWed prep 24:00 0.0")};
{ fhem ("set LR_Heizung_Clima tempListThu prep 24:00 0.0")};
{ fhem ("set LR_Heizung_Clima tempListFri prep 24:00 0.0")};
{ fhem ("set LR_Heizung_Clima tempListSat prep 24:00 0.0")};
{ fhem ("set LR_Heizung_Clima tempListSun exec 24:00 0.0")};
}
3;

# BR_Heizung aus schalten
sub
SetTempList_BR_Heizung_off()
{
{ fhem ("set BR_Heizung_Clima tempListMon prep 24:00 0.0")};
{ fhem ("set BR_Heizung_Clima tempListTue prep 24:00 0.0")};
{ fhem ("set BR_Heizung_Clima tempListWed prep 24:00 0.0")};
{ fhem ("set BR_Heizung_Clima tempListThu prep 24:00 0.0")};
{ fhem ("set BR_Heizung_Clima tempListFri prep 24:00 0.0")};
{ fhem ("set BR_Heizung_Clima tempListSat prep 24:00 0.0")};
{ fhem ("set BR_Heizung_Clima tempListSun exec 24:00 0.0")};
}
4;

HomeMatic Funk-Steckdose einbinden, den Stromverbrauch messen und an bestimmten Zeiten schalten (Zeitschaltuhr)

Nachdem wir im letzten HowTo den HMLan Adapter an unser Fhem angebunden haben, geht es nun darum die erste schaltbare Funk-Steckdose in Betrieb zu nehmen und automatisch zu schalten. Hierzu sind einige wenige Schritte notwendig und ein paar kleine Fallstricke zu umgehen. Ich werde einen HomeMatic Funk-Schaltaktor mit Leistungsmessung einbinden und für meine Weihnachtsbeleuchtung eine Zeitschaltung aktivieren.

Zuerst müssen wir unser FHEM bzw. HMLan Adapter in den Anlernmodus versetzen. Dies erreichen wir am einfachsten indem wir in der Befehlszeile in FHEM (Textbox ganz oben am Bildschirm) folgende Zeichenfolge eingeben:

set HMLAN01 PairForSec 60

Diese gibt uns für 60 Sekunden die Möglichkeit Geräte einzubinden (zu paaren). Hierzu müssen wir innerhalb dieser Zeit an unserer Funk-Steckdose noch für 3 – 5 Sekunden den großen grauen Button drücken. Nun sollte nach einem Klick auf den Menüpunkt CUL_HM folgendes Bild zu sehen sein:

image_thumb11-8676254

Ist dies der Fall, dann bitte ein Mal im Menü auf der linken Seite auf Save config klicken. Wenn wir nun auf den Punkt unter powerMeter klicken müsste in etwa folgendes zu sehen sein:

image_thumb12-9620737

Ich habe dem channel_01 bereits einen schönen Namen gegeben. Dies richten wir nun ebenfalls für den channel_02 ein (dieser ist für die Verbrauchsmessung zuständig). Geben Sie hierzu bitte folgendes in die Befehlszeile (ganz oben auf der Seite) ein und bestätigen Sie die Eingabe nach jeder Zeile indem Sie die Taste Enter betätigen:

rename CUL_HM_HM_ES_PMSw1_Pl_2C8749_Sw LR_Aussenbeleuchtung
rename CUL_HM_HM_ES_PMSw1_Pl_2C8749_Pwr LR_Aussenbeleuchtung_Verbrauch
define D_Aussenbeleuchtung_Verbrauch dummy
define D_Aussenbeleuchtung_Verbrauch_SET notify LR_Aussenbeleuchtung_Verbrauch {my $var= ReadingsVal("LR_Aussenbeleuchtung_Verbrauch","power",0);; fhem("set D_Aussenbeleuchtung_Verbrauch $var");;}

Wenn Sie nun auf den Menüpunkt Unsorted klicken sollte dieser so aussehen und Ihnen damit das ein und aus schalten der Steckdose sowie das ablesen der Verbrauchswerte ermöglichen. Ist dies der Fall, dann bitte erneut auf Save config klicken.

image_thumb13-6574340

Um eine Zeitschaltung zu aktivieren gehen wir nun auf den Menüpunkt Edit files und klicken dort auf fhem.cfg. Basierend auf den oben vergebenen Namen geben wir am Ende der Datei folgendes ein und bestätigen dies anschließend mit einem Klick auf Save fhem.cfg

# Zeitschaltuhr Aussenbeleuchtung
define LR_Aussenbeleuchtung_an at *{sunset(-900,"16:00","21:30")} set LR_Aussenbeleuchtung on
define LR_Aussenbeleuchtung_aus at *23:59:59 set LR_Aussenbeleuchtung off

Mit diesen Zeilen wird die Aussenbeleuchtung nun zum Sonnenuntergang eingeschaltet und um 23:59 Uhr wieder aus geschaltet.

[adrotate group=“2″]

HomeMatic HMLan-Adapter an FHEM-Server anbinden

Nachdem meine Frau vor einer Woche darauf bestanden hat, dass ich die Weihnachtsbeleuchtung anbringe, musste ich leider feststellen, dass unsere Zeitschaltuhr nicht mehr funktioniert. Damit war der perfekte Zeitpunkt gekommen einen Fuß in die Home-Automation zu bekommen. Ich habe mich also auf dem Markt umgesehen und bin recht schnell bei den Produkten von HomeMatic hängen geblieben (scheinen zumindest mal an Sicherheit gedacht zu haben und die können AES schreiben ;-)). Um das Projekt nicht zu einfach werden zu lassen, habe ich mich zur Steuerung für das Open Source Projekt FHEM entschieden und mir daher folgende Komponenten zugelegt (Affiliate Links):

  • 1 x EQ3 85128 HomeMatic Konfigurations-Adapter LAN
  • 1 x HomeMatic 130248 Zwischenstecker-Schaltaktor mit Leistungsmessung
  • 2 x HomeMatic 105155 Funk-Stellantrieb
  • 1 x Raspberry PI 3

FHEM auf dem Raspberry PI installieren

Die Installation von FHEM auf einem Debian basierten System ist denkbar einfach, da es dafür ein fertiges Paket gibt. Die Einleitung und auch ein paar Hinweise zu möglichen Problemen findet man im FHEM Wiki.

HomeMatic Lan Adapter

Hat man das Betriebssystem am laufen geht es daran die Hardware mit der Software zu verbinden. Das notwendige Bindeglied zwischen den Steuerelementen (Aktoren) und unserer Zentrale bildet der HomeMatic HMLan Adapter. Er wird entweder via USB oder via LAN angeschlossen und wandelt unsere Signale in Funksignale um die die Aktoren verstehen und sendet deren Antworten an unsere Zentrale zurück. Um dieses Setup zum fliegen zu bekommen sind einige Schritte notwendig, die ich nachfolgend beschreibe.

Seriennummer und AES Schlüssel des HMLan-Adapters

Den AES-Schlüssel sowie die Seriennummer des HMLan Adapters findet ihr auf der Rückseite des HMLan Adapters. Ich würde euch empfehlen diesen abzuschreiben und in einem Texteditor zu speichern. Wir werden beide noch öfter benötigen. Wer auf nummer Sicher gehen möchte erfährt später auch noch wie man den AES Schlüssel auf einen eigenen Wert ändern kann. (Würde diesen Schritt sehr empfehlen!)

HomeMatic Software

Dem HMLan Adapter ist eine CD beigelegt mit Hilfe des darauf befindlichen Installers erhält man zwei kleine Hilfsprogramme installiert, die wir im folgenden benötigen werden. Daher bitte jetzt die CD einlegen und die Installation starten.

HMLan Adapter unter Windows mit der HomeMatic Software vorkonfigurieren

Es ist empfehlenswert den HMLan-Adapter mit einer festen IP Adresse zu versorgen um eine zuverlässige Kommunikation sicherstellen zu können. Um diese Aufgabe auszuführen öffnet man das Tool HomeMatic Lan-Interface Configurator und wählt darin den Menüpunkt Change IP Settings. In dieser Maske kann man auch die Firmware seines HMLan Adapters updaten – dies ist insbesondere empfehlenswert, wenn die initiale Suche des HMLan Adapters länger gedauert hat.

snaghtmlbd72014_thumb-9102327

In dem sich öffnenden Fenster gibt man eine freie feste IP Adresse aus seinem LAN ein. Ja, ich habe zuhause ein Class B Netz – die meisten werden hier eine IP in der Form 192.168.1.xxx und eine Subnetz Maske von 255.255.255.0 eingeben müssen. Der Haken bezüglich der AES Verschlüsselung sollte vorerst gesetzt bleiben. Nach einem klick auf OK muss nun der AES Schlüssel eingegeben werden.

snaghtmlbd9fa8c_thumb-6742336

Nach dem ändern der IP sollte man das Gerät vom Strom trennen und damit neu starten um zu prüfen ob alles wie gewünscht funktioniert hat.

Als nächstes starten wir die ebenfalls mitgelieferte Software HomeMatic-Komponenten Konfigurieren. Um die Verbindung der Software mit dem HMLan Adapter herzustellen wählt man Datei und dann Konfigurieren und in der nächsten Maske HomeMatic-Lan-Interface.

snaghtmlbee61b1_thumb-2679598

In der nächsten Maske gibt man nun erneut die Seriennummer sowie den Zugriffscode (AES Schlüssel) ein:

snaghtmlbf00ce0_thumb-1283252

Die nächste Seite sollte nun bestätigen, dass ein HMLan gefunden und verbunden wurde. Gleichzeitig taucht rechts unten im Eck der Anwendung der Hinweis auf Verbunden mit [Seriennummer]@LAN. Wenn diese Meldung nicht auftaucht hilft es ggf. den Adapter ein mal neu zu starten. Wichtig ist, dass die AES Signierung der LAN Kommunikation zu diesem Zeitpunkt noch eingeschaltet ist (siehe oben).

Sicherheitsschlüssel bzw. AES Schlüssel ändern

Nachdem der HomeMatic Konfigurator mit dem HMLan Adapter verbunden ist, ist ein guter Zeitpunkt um den voreingestellten Sicherheitsschlüssel zu ändern. Dieser scheint bei den meisten Geräten identisch zu sein und ist damit nicht wirklich schwer zu erraten. Insbesondere wenn man mit seiner Installation auch kritische Dinge wie z. B. Türen und Fenster steuern möchte, so ist dieser Schritt absolut zwingend. Ich würde empfehlen einen Schlüssel (~ 32 Zeichen) vorab zu erstellen und an einem sicheren Ort aufzubewahren (z. B. Passwortcontainer + Ausdruck).

Um den Schlüssel zu ändern startet klicken wir im HomeMatic Konfigurator und klicken auf Einstellungen:

snaghtmlc77b4a9_thumb-8948485

und geben den neuen Schlüssel in das dafür vorgesehene Feld ein:

image_thumb8-3252293

Bereits verbundene Geräte werden bei diesem Vorgang direkt auch mit dem neuen Schlüssel versorgt. Man muss somit evtl. bereits angelernte Geräte nicht erneut einbinden bzw. vorher entfernen und neu einbinden.

[adrotate group=“2″]

HMLan HMID für die Verbindung mit FHEM auslesen

Für die Verbindung mit FHEM benötigen wir die HMID des HMLan Adapters. Unter Windows 8 und Windows 10 befindet sich dieser in folgendem Pfad “C:\ProgramData\Bidcos-Service” und dort in der Datei ids. Öffnet man diese mit einem Texteditor steht dort nur eine Zeile mit

BidCoS-Address = 1234567

Findet ihr diesen Ordner nicht oder wird dort die Datei nicht angezeigt, dann helfen zwei Schritte. Erstens sollten versteckte Dateien und Ordner angezeigt werden und zweitens kann man einfach nach dem Ordner Bidcos-Service suchen (in einigen Foren konnte man lesen, dass dieser z. T. auch in den Benutzerprofilen zu finden war).

Nun müssen wir diese ID noch von ihrer dezimalen Schreibweise in eine Hexadezimale Schreibweise umwandeln. Das geht am einfachsten mit dem Windows Taschenrechner. Man öffnet diesen einfach und wechselt unter Ansicht auf die Programmierer-Ansicht. Dort gibt man die ID von oben ein:

image_thumb9-6254444

und klickt dann auf der linken Seite auf Hex um den Wert umzuwandeln:

snaghtmlc05eece_thumb-9227843

Der gesuchte Wert ist also 12D687 (notieren – den haben wir nicht nur zum Spaß gesucht ;-)).

FHEM mit dem HMLan-Adapter verbinden

Um den HMLan-Adapter in FHEM einbinden zu können ist es notwendig die Netzwerkseitige Verschlüsselung der Kommunikation von FHEM zum HMLan-Adapter zu deaktivieren. Da die Verbindung selbst entweder über ein hoffentlich verschlüsseltes WLan oder über das private LAN läuft, ist das zwar unschön aber kein sonderlich großes Sicherheitsproblem. Um die Verschlüsselung zu deaktivieren starten wir die bereits oben erwähnte Software HomeMatic Lan-Interface Configurator und deaktivieren unter den Netzwerkeinstellung die Option AES Encrypt Lan-Communication. Die Verbindung das HMLan-Adapters zu den Aktoren wird weiterhin mit unserem AES Schlüssel signiert (nicht verschlüsselt) und kann somit nicht durch jeden übernommen werden.

snaghtmlc7c63d1_thumb-3978096

An diesem Punkt sollten die Windows basierten HomeMatic Anwendungen geschlossen werden damit FHEM exklusiven Zugriff auf den HMLan bekommen kann. Wir wechseln nun auf die WebGUI von FHEM und wählen dort im Menü Edit filesfhem.cfg aus und fügen nachfolgende Zeilen am Ende ein (die IP Adresse sowie die HMID muss natürlich durch die eigene ersetzt werden):

define HMLAN01 HMLAN 10.11.1.4:1000
attr HMLAN01 hmId 12D687

Den selbst gewählten AES Schlüssel gibt man am besten direkt über die Befehlzeile (nicht in der fhem.cfg) ein (ist einfacher).

attr HMLAN01 hmKey [Ihr_KEY]

Nach einem Klick auf Save them.cfg sind auch schon alle notwendigen Schritte erledigt um den HMLan Adapter anzubinden.

Update: Seit kurzem kann man die fhem.cfg nicht mehr einfach so über den Befehl oben bearbeiten. Man muss zuerst folgenden Befehl in die Kommandozeile eingeben, die Konfiguration speichern und den fhem Server neu starten:

attr WEB editConfig 1
shutdown restart

Prüfen kann man dies durch einen Klick auf den Menüpunkt Everything – hier sollte unser HMLAN01 nun mit dem Status open auftauchen:

image_thumb10-9918978