zurück zur Startseite

zurück zur Übersicht der Heimautomatisierung

11. Die HomeMatic (Stand 08.11.2018)

Hier geht es um die VCCU, um das pairing, sowie um die USB- und LAN-Adapter. Letztere ermöglichen die Funkkommunikation zwischen dem Raspberry und den HomeMatic-Komponenten.

Es empfiehlt sich bei dem Einsatz von HomeMatic eine virtuelle CCU zu definieren. Damit kann man auch mehrere Adapter betreiben. In meinem Fall kann ich dann z.B. meine Fernbedienung nicht nur im Haus sondern auch in der Tiefgarage nutzen, wenn ich dort einen zweiten Adapter installiere. Am einfachsten nimmt man den sog. LAN-Adapter, der direkt am heimischen Netzwerk angestöpselt wird. Ich habe auch noch einen USB-Adapter am Laufen. Die einzelnen Komponenten kommunizieren dann immer mit dem Adapter, der am besten zu erreichen ist.

Ich habe mich zur Kopplung von HomeMatic-Komponenten aus Kostengründen auch für den USB-Adapter entschieden. Leider läuft der nicht "out-of-the-box" mit FHEM zusammen, sondern es braucht eine Software, welche den LAN-Adapter von HomeMatic emuliert. Nach meinem Verständnis ist das ein Treiber für diese Hardware.

Diese "HMLAN-Emulation" genannte Software findet sich hier, muss aber noch kompiliert werden. Auch muss der Treiber entsprechend gestartet werden. Das geht so:

Zuerst muss man sich wieder über SSH mit dem Raspberry verbinden und sich einloggen. Danach sind folgende Kommandos notwendig:

sudo su
# man bekommt alle notwendigen Rechte

cd /opt
apt-get install build-essential libusb-1.0-0-dev make gcc git-core
git clone git://git.zerfleddert.de/hmcfgusb
# man holt sich die Software auf den Raspberry
# der Quellcode liegt nun im Verzeichnis /opt/hmcfgusb

# wenn man die notwendigen Werkzeuge noch nicht auf dem Raspberry hat
# so sind die folgenden beiden Befehle notwendig:
apt-get install build-essential
apt-get install libusb-1.0-0-dev

cd /opt/hmcfgusb
make
# damit wird der Treiber kompiliert

cp hmcfgusb.rules /etc/udev/rules.d/
# nun kann später ohne root-Rechte gearbeitet werden, den / am Ende beachten

Damit der Treiber „hmland“ vor FHEM gestartet und nach FHEM beendet wird, muss man noch das FHEM Startskript – es liegt in /etc/init.d – anpassen, in den Blöcken 'start' und 'stop' muss quasi nur jeweils 1 Zeile eingefügt werden. So sollen die Blöcke anschließend aussehen, es ist nur die fett markierte Zeile zu ergänzen.

'start')
     echo "Starting fhem..."
    /opt/hmcfgusb/hmland -d -p 1000
     perl fhem.pl fhem.cfg
     RETVAL=$?
     ;;

'stop')
     echo "Stopping fhem..."
     perl fhem.pl $port "shutdown"
     RETVAL=$?
    pkill hmland

Beim Start von FHEM wird nun der Treiber gestartet, welcher auf den Port 1000 hört. Das Ganze kann man mit einem ASCII-Editor auf dem Raspberry machen, z.B. mit vi.

Wir sind ja noch im Superuser-Mode und sollten diesen auch wieder verlassen:

exit

Hinweis 1: Evtl. sind in der FHEM-Version diese beiden Befehle schon enthalten, aber auskommentiert. Man muss dann nur das #-Zeichen entfernen.
Hinweis 2: Ab FHEM-Version 5.9 gibt es die Datei /etc/init.d/fhem nicht mehr. Stattdessen muss ein "service" installiert werden:

cd /etc/systemd/system
sudo vi hmland.service
# in diese Datei den folgenden Code kopieren:

[Unit]
Description=Homematic LAN Adapter service
After=network.target

[Service]
ExecStart=/opt/hmcfgusb/hmland -p 1000

[Install]
WantedBy=multi-user.target

Außerdem muss in der Datei fhem.service in diesem Vereichnis der Eintrag "Wants=network.target " in "Wants=hmland.service" geändert werden.

Es gibt noch weitere Optionen beim Aufruf von hmland, die man aber i.d.R. nicht benötigt. Dies wären:

-D debug mode
-d daemon mode
-h this help
-i interactive mode (connect HM-CFG-USB to terminal)
-l ip listen on given IP address only (for example 127.0.0.1)
-P create PID file /var/run/hmland.pid in daemon mode
-p n listen on port n (default: 1000)
-r n reboot HM-CFG-USB after n seconds (0: no reboot, default: 86400)
-r hh:mm reboot HM-CFG-USB daily at hh:mm
-v verbose mode -V show version (0.09-git)

Mein USB-Adapter hat noch die alte Firmware, mit der Konsequenz, dass alle 24 Stunden automatisch ein Reset ausgelöst wird. Damit ist können für einige Sekunden die HomeMatic-Komponenten nicht mehr angesprochen werden. Mit neuer Firmware ist der Reset nicht mehr notwendig. Zum Glück ist die Firmware aber so aktuell (mindestens 0.092 ist notwendig), dass eine Aktualisierung möglich ist. Benötigt wird 0.097.

Die aktuelle Firmwareversion kann über die SSH-Verbindung zum Raspberry so herausgefunden werden:

cd /opt/hmcfgusb
# Wechsel zum richtigen Verzeichnis

./hmland -i
# Information abfragen, diese liefert ungefähr das folgende
HHM-USB-IF,03C4,JEQ0535122,1DB155,000000,0001B663,0000
# Es folgen noch weitere zu ignorierende Informationen.
# Die 03C4 ist hierbei die Version in Hex (in Dezimal: 964).

Die Firmwaredatei heisst hmusbif.03c7.enc und findet sich auf den Download-Seiten des HomeMatic-Herstellers eq3 (Link). In der Zip-Datei findet sich u.a. die benötigte Datei, auf den Raspberry kopiert werden muss. Ich habe sie im Verzeichnis /opt/hmcfgusb abgelegt.

Hat man diese Voraussetzungen geschaffen, kann man die Firmware nun aktualisieren. Dazu darf aber der Adapter nicht aktiv sein. Entsprechend muss man FHEM stoppen und nach dem Aktualisieren wieder starten. Auf dem Raspberry muss man dazu die Befehle eingeben.

sudo su
# damit man alle Rechte hat

/etc/init.d/fhem stop
# fhem stoppen

./flash-hmcfgusb hmusbif.03c7.enc
#damit erfolgt das update

/etc/init.d/fhem start
# fhem wieder starten

Den USB-Adapter sollte man auf alle Fälle direkt an einer Schnittstelle des Raspberry betreiben und nicht noch einen Hub dazwischen schalten. Bei mir funktioniert er einwandfrei, trotz gelegentlicher Meldungen "usb-transfer took more than 100ms (1039ms), this may lead to timing problems!" (anstelle 1039 sind es irgendwelche andere Zahlen). Das ganze Haus wird damit funktechnisch schon recht gut abgedeckt. Ich habe aber zur optimalen Kommunikation neben dem USB-Adapter in der oberen Etage des Hauses noch einen LAN-Adapter im Erdgeschoss installiert.

Alle Komponenten, die FHEM kennen soll, müssen definiert werden.

Nun kann man den neuen HMLAN in FHEM einbinden.

define hmusb HMLAN 127.0.0.1:1000
attr room Zentrale
# Da ich diesen zuerst definiert habe, bekomme ich eine HomeMatic-Id, die danach immer zu beachten ist

define hmlan1 HMLAN 192.168.178.50:1000
attr hmlan1 hmId 2CC699
attr room Zentrale
# Die HomeMatic-spezifische Datenverschlüsselung muss deaktiviert werden (siehe HomeMatic-Dokumentation).
# Die IP-Adresse verrät mir meine Fritzbox.

Nun kann endlich auch die virtuelle HomeMatic-CCU definiert werden.

define xx_Zentrale CUL_HM 2CC699
attr xx_Zentrale model CCU-FHEM
attr xx_Zentrale IOList hmusb,hmlan1
attr xx_Zentrale IOgrp vccu
attr xx_Zentrale event-on-change-reading .*
attr xx_Zentrale expert 2_full
attr xx_Zentrale model CCU-FHEM
attr xx_Zentrale room Zentrale
attr xx_Zentrale subType virtual
attr xx_Zentrale webCmd virtual:update

Wichtige Anmerkung: diese Definitionen sollten erledigt sein, bevor die erste Homematic-Komponente angelernt ("pairing") wird.

Man kann zu einem späteren Zeitpunkt noch weitere Adapter hinzu fügen, es ist lediglich das Attribut IOList zu ergänzen.

HomeMatic-Komponenten sind bei der Inbetriebnahme zu "pairen". Wie das geht, ist bei den einzelnen HomeMatic-Komponenten beschrieben. Damit FHEM bereit für das "pairen" ist (wir haben ja keine original HomeMatic-CCU) ist folgender Befehl einzugeben:

set xx_Zentrale hmPairForSec 60

Jetzt hat man 1 Minute Zeit das "Pairen" durchzuführen - meist ist nur eine Taste an der HomeMatic-Komponente zu drücken. Daraufhin wird die entsprechende Komponente in FHEM angelegt. Hat man alles richtig gemacht (u.a. auch "autocreate" eingestellt, oder richtiger gesagt, die Grundeinstellung "autocreate" nicht entfernt), so werden die entsprechenden Daten in FHEM gleich definiert.

Wichtig: zuerst in FHEM das „Pairen“ aktivieren und danach die HomeMatic-Komponente für das „Pairen“ bedienen!. Umgekehrt funktioniert es nicht richtig!

weiter zu: 12. Die Energiemessung