Eigentlich sollte es diesen Artikel gar nicht geben aber leider ist mein Raspberry beim Einrichten des Feiertagskalenders nach einem init 6 nicht wieder aufgewacht. Also habe ich mich kurzfristig entschlossen, den übrig gebliebenen MSI-Wind mit 2GB RAM aus einen zu früh gestorbenen Compaq-Notebook und einer rumliegenden 32GB SSD auszustatten - ich bin richtig begeistert, wie eine SSD, diesen eigentlich betagten PC beschleunigen kann.

Als System habe ich mich für Ubuntu Server 14.04.2 entschieden. Es ist grundsätzlich auch möglich die Desktopversion zu verwenden. Da ich aber im Dauerbetrieb keinen Monitor anschließen werde und auf allen unnötigen Ballast verzichten möchte, habe ich mich eben für die Server-Version entschieden. Herunterladen kann man diese unter: ISO-Image des Ubuntu Server 14.04.2 LTS

Da ich später das eingebaute CD-Laufwerk durch eine größere Festplatte ersetzen möchte, habe ich testweise von einem externen per USB angeschlossenen CD-Laufwerk installiert. Somit wäre auch eine Installation von einem USB-Stick durchaus denkbar.

Das wichtigste bei der Installation ist, dass man gleich den "OpenSSH server" bei der Softwareauswahl markiert, denn sonst wird es mit dem Zugriff per Putty etwas schwierig. ;-)

Wenn die Installation abgeschlossen ist, meldet man sich mit seinem Benutzernamen und Kennwort an. Nun gibt man folgenden Befehle ein:

ip addr show

Daraufhin sollte die derzeit gültige IP-Adresse angezeigt werden. Mit dieser Adresse ist es nun möglich sich per Putty oder einem anderen SSH-Client anzumelden.

Damit es nicht ständig nötig ist, erst mal die IP-Adresse in Erfahrung zu bringen, habe ich mich entschlossen diesem Server, so wie es sich für einen Server gehört, eine feste IP-Adresse zu vergeben. Dazu muss die /etc/network/interfaces bearbeitet werden. Hier ein Auszug aus meine interfaces-Datei:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 192.168.0.8
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1
        dns-nameservers 192.168.0.1

 

Dem User root ein Kennwort geben:

root-Passwort vergeben
sudo -i
sudo passwd root

Und bevor es weiter geht, das System noch auf den neusten Stand bringen:

apt-get update && sudo apt-get -y upgrade && sudo apt-get -y autoremove && sudo reboot

 

 

Für die Hausautomation ist eine genaue Zeit unumgänglich. Deshalb wird jetzt für die richige Systemzeit gesorgt:

apt-get install ntp

Danch die /etc/ntp.conf bearbeiten und ein paar genau und/oder Zeitserver in der Nähe eintragen. Ich habe mich für die beiden ptbtime1.ptb.de und ptbtime2.ptb.de sowie einen Zeitserver in meiner Nähe rustime01.rus.uni-stuttgart.de entschieden:

server 192.53.103.108
server 192.53.103.104
server rustime01.rus.uni-stuttgart.de

Danach einfach

service ntp reload

eingeben.

 

 

Bevor FHEM installiert wird sollten noch ein paar Vorbereitungen getroffen werden. Dazu wir erst Mal Apache installiert:

apt-get install apache2 apache2-doc

Danach werden die für FHEM nötigen Perl-Packete installiert:

apt-get -y install perl libdevice-serialport-perl libio-socket-ssl-perl libwww-perl libxml-simple-perl

Jetzt kann FHEM installiert werden:

wget http://fhem.de/fhem-5.7.deb && sudo dpkg -i fhem-5.7.deb

Nach erfolgter Installation müssen noch ein paar Berechtigungen angepasst werden:

cd /opt
chmod -R a+w fhem && sudo usermod -a -G tty juergen && sudo usermod -a -G tty fhem

 

 

Recht beliebte und preisgünstige Sensoren gibt es für den 1-Wire-Bus. Wie an anderer Stelle schon ein Mal erwähnt, ist der Begriff irreführend. Selbst im pasasitären Betrieb werden noch zwei Drähte benötigt. Ich selbst verwende drei Drähte um genauere und stabilere Messwerte zu erhalten.

Die Temperaturfühler werden an den UBS-Adapter mit einem RJ11-Stecker verbunden. Ich habe ein altes Telefonkabel missbraucht und von den sechs Adern werden nur die ersten drei Adern benötig. Bei mir ist:

- weiß mit 5V
- braun mit Masse (GND)
- grün mit Daten

belegt. Wer mehr Details benötig, der sollte einen Blick in das Datenblatt werfen.

Als Erstes wird die Datei /etc/modprobe.d/blacklist-ds2490.conf erstellt und mit dem Inhalt "blacklist ds2490" versehen.

Danach werden ein paar vorbereitende Installationen durchgeführt:

apt-get install cvs
apt-get update
apt-get install autoconf libtool libusb-dev libfuse-dev
apt-get install php5
apt-get install swig tcl-dev php5-dev python-dev php5-dev php-config
apt-get install libusb++-dev
apt-get install libperl-dev
apt-get install tcl-dev

Und nun die Installation:

cd /opt
wget https://sourceforge.net/projects/owfs/files/owfs/3.0p2/owfs-3.0p2.tar.gz
tar -xzf owfs-3.0p2.tar.gz
cd owfs-3.0p2
./bootstrap
./configure -enable-usb -enable-owfs -enable-w1
make
make install

Ich habe bewusst nicht die neuste Version verwendet, da ich mit der aktuellen Version 3.1p1 meine Probleme hatte.

Als nächstes habe ich ein Verzeichnis erstellt, auf das ich für Testzwecke mounten möchte:

mkdir /var/1wire
chmod 777 /var/1wire/

Jetzt wird es Zeit den USB-Adapter einzustecken und danach einen lsusb auszuführen. Somit ist leicht ersichtlich an welchem Port der Adapter eingesteckt wurde. Entsprechend muss das Kommando zu Starten des OWFS-Servers angepasst werden:

/opt/owfs/bin/owfs --Celsius -m /var/1wire -u /dev/bus/usb/002

Ein Beenden funktioniert mit: killall owfs

Alternativ kann auch OWHTTPD-Server gestartet werden:

/opt/owfs/bin/owhttpd --Celsius -m /var/1wire -p 3001 -u /dev/bus/usb/002

Diese beiden Dienste dienen nur der Analyse und zum Feststellen der Adresse der Sensoren. Auch ist zu beachen, dass jeder Dienst excusiven Zugriff auf den USB-Port benötigt. Es darf also nur eines diese Dienste laufen.

Für die Kommunikation mit FHEM wird der owserver benötigt. Dieser wird wie folgt gestartet:

/opt/owfs/bin/owserver --Celsius -m /var/1wire -p 3001 -u /dev/bus/usb/002

und beendet mit:

killall owserver

Nach erfolgreichen Tests sollten diese beiden Befehle in das Start/Stop-Script von FHEM integriert werden.

Damit FHEM mit dem nun verfügbaren 1-Wire-Bus etwas anfangen kann sind noch ein paar Zeilen in der fhem.cfg nötig:

#######################################################
# OneWire definieren / owserver muss laufen
define myOWServer OWServer 127.0.0.1:3001

# 1 - Abstellraum
define Abstellraum OWDevice 10.EEA654020800 120
attr Abstellraum IODev myOWServer
attr Abstellraum fp_Grundriss 80,405,0,
attr Abstellraum icon icoKLIMA
attr Abstellraum room Temperature
attr Abstellraum userReadings state {sprintf("%0.1f °C", (ReadingsVal("Abstellraum","temperature",0)))}
define FileLog_Abstellraum FileLog ./log/Abstellraum-%Y.log Abstellraum
attr FileLog_Abstellraum logtype text
define SVG_FileLog_Abstellraum_1 SVG FileLog_Abstellraum:SVG_FileLog_Abstellraum_1:CURRENT
attr SVG_FileLog_Abstellraum_1 room Plots

# 2 - zweiter Sensor
define zweiter_Sensor OWDevice 10.D15C54020800 120
attr zweiter_Sensor IODev myOWServer
attr zweiter_Sensor icon icoKLIMA
attr zweiter_Sensor room Temperature
attr zweiter_Sensor userReadings state {sprintf("%0.1f °C", (ReadingsVal("zweiter_Sensor","temperature",0)))}

Die Buchstaben-Zahlenkollonnen hinter dem OWDevice sind die Adressen der jeweiligen Sensoren. Diese Adressen kann man sich entweder mit owhttpd oder mit owfs besorgen. Das habe ich ja ein paar Zeilen weiter oben beschrieben.

Wer nun möchte, dass Temperaturen in eine Log-Datei geschrieben werden, um daraus Graphen zu erstellen, der muss noch zwei weitere Zeilen einfügen:

define FileLog_Abstellraum FileLog ./log/Abstellraum-%Y.log Abstellraum
attr FileLog_Abstellraum logtype text

Somit wird jede Änderung in einer Log-Datei festgehalten. Wird aus dieser Log-Datei dann ein Graph erstellt, so wird von FHEM eine weitere Zeile erzeugt, die so aussehen kann:

define SVG_FileLog_Abstellraum_1 SVGFileLog_Abstellraum:SVG_FileLog_Abstellraum_1:CURRENT

Damit der erzeugte Graph dann im Menü Plots erscheint füge ich noch eine weitere Zeile ein:

attr SVG_FileLog_Abstellraum_1 room Plots

Alternativ ist es auch möglich die Temperatursensoren mit Hilfe von OWTEMP abzufragen. Da diese Tool aber nicht weiter gepflegt wird rate ich davon ab. Für Testzwecke hänge ich aber trotzem die dafür nötigen Zeilen an:

Um den angezeigten Temperaturwert auf eine Kommastelle zu reduzieren, muss userReadings verwendet werden. Bei mir sieht die entsprechende Konfigurationszeile wie folgt aus:

attr Abstellraum userReadings state {sprintf("%0.1f °C", (ReadingsVal("Abstellraum","temperature",0)))}

Gleichzeitig hänge ich auch ein °C an den Temperaturwert an. Das sieht einfach gefälliger aus und es weiß auch gleich jeder, um was es sich denn dreht.

 

 

Um die Funksteckdosen von Pollin, die ich beim Raspberry-Projekt eingesetzt habe, weiter verwenden zu können, verwende ich der Einfachheit halber den CC1101-USB-Lite 868MHz (CUL) von busware. Üblicherweise muss vor Nutzung dieses Gerätes erst mal die Firmware aufgespielt werden. Am Besten geschieht das auf dem FHEM-PC. Dazu habe ich eine recht gute Anleitung gefunden: CUL flashen

cd /opt
wget http://culfw.de/culfw-1.66.tar.gz
gunzip culfw-1.66.tar.gz
tar xfv culfw-1.66.tar


cd culfw-1.66
cd Devices/
cd CUL

make usbprogram_v3

lsusb

Ist dies geschehen kann man den Stick einfach einstecken. FHEM wird dieses neue Gerät sofort erkennen. Um die 433,92 MHz Funksteckdosen nutzen zu können ist noch eine weitere Zeile nötig:

define CUL_0 CUL /dev/ttyACM0@9600 1034
attr CUL_0 rfmode SlowRF

Mit dieser Zeile kann der Funkstick auch für diese Funksteckdosen verwendet werden. Die zweite Zeile muss nicht zwingend mit angegeben werden, da diese Einstellung per default gilt. Ich habe sie einfach nur der Vollständigkeit halber mit angegeben. Einen Überblick welche Protokolle mit dem CUL unterstützt werden, zeigt die Systemübersicht in der fhemwiki.

Als nächstes wird dann die erste Funksteckdose definiert. Bei mir sehen diese Zeilen so aus:

define Stehlampe IT 0FFFF0FFFF 0F F0
attr Stehlampe IODev CUL_0
attr Stehlampe model itswitch
attr Stehlampe fp_Grundriss 118,205,0,

Um Verwirrungen gleich zu vermeiden verweise ich auf eine recht gute Seite zum Thema Intertechno Code Berechnung, da jeder Hersteller leichte Abweichungen vom Standard hat.

Noch ein Hinweis: So wie ich bisher recherchieren konnte, ist es nicht möglich einen CUL-Stick gleichzeitig für 868 MHz und 433 MHz zu nutzen. Zumindest nicht die Intertechno-Funksteckdosen und Homatic-Aktoren/Sensoren. Somit wird man um zwei Sticks nicht herum kommen. Einen detailierteren Hinweis bekommt man auf folgender Seite: http://www.meintechblog.de/2015/02/fhem-welches-gateway-fuer-welches-system/

 

 

Um die oben beschriebenen Funksteckdosen nach Zeitvorgaben zu steuern, müssen diese definiert sein, so dass sie über die Fhem-Oberfläche bedient werden können und es wird noch etwas Code benötigt, um die Schaltbedingungen zu definieren. Am einfachsten geht dies mit ein paar Beispielen.

 

täglich (durch den * definiert) zu einer bestimmten Zeit schalten:

define Stehlampe_An at *21:00:00 set Stehlampe on

 

nur an bestimmten Wochentagen zu einer bestimmten Zeit schalten:

define Stehlampe_An at *05:59:10 { if($wday >= 1 && $wday <= 5 ) {fhem("set Stehlampe on")} }

oder

define Stehlampe_An at *05:59:10 { if($wday == 1 || $wday == 2  || $wday == 3  || $wday == 4  || $wday == 5 ) {fhem("set Stehlampe on")} }

oder

define Stehlampe_An at *05:59:10 { if(!$we) {fhem("set Stehlampe on")} }

In allen drei Fällen also von Montag bis Freitag.

Sonntag: $wday = 0
Montag: $wday = 1
Dienstag: $wday = 2
Mittwoch: $wday = 3
Donnerstag: $wday = 4
Freitag: $wday = 5
Samstag: $wday = 6

Interessante Links dazu:

http://www.fhemwiki.de/wiki/At

http://www.itbasic.de/fhem-mehrere-433-mhz-steckdosen-auf-einmal-schalten/

Eine Erweiterung dieser Zeitsteuerung ist das Schalten in Abhängigkeit von Sonnenuntergang oder Sonnenaufgang. Dazu sind zuallererst die beiden globalen Parameter latitude und longitude zu setzen.

attr global latitude 48.80913
attr global longitude 9.01151

Ein Befehl zum Abschalten kann dann wie folgt aussehen:

define Stehlampe_Aus at *{sunrise("HORIZON=0.0",0,"06:30","06:55")} set Stehlampe off

Mit diesem Befehl wird die Stehlampe abgeschaltet, wenn die Sonne um 0,0 Grad über dem Horizont steht und zwar nicht vor 6:30 Uhr und nicht später als 6:55 Uhr. Weitere Informationen gibt es unter folgendem Link: http://www.computerhilfen.de/info/smart-home-mit-fhem-intelligente-zeitschaltuhr.html

Dort sind dann auch weitere Varianten zu sunrise und sunset zu finden. Ich habe mich für die Variante HORIZON entschieden, da man mit dieser Variante feiner justieren kann.

 

 

Nachdem Fhem das Licht und die Heizung in Abhängigkeit vom Wochentag und Wochenende steuert, möchte man auch die Feiertage berücksichtigt wissen. Auch dafür ist Fhem bestens gerüstet. Es besteht die Möglichkeit eine Kalender-ICS-Datei oder eine Feiertagsdatei mit der Extension holiday für sein Bundesland zu integrieren. Ich habe mich nach ein paar Versuchen für die Feiertagsdatei entschieden. Wer aber Kalenderdateien bevorzugt, der besucht einfach die Seite ifeiertage.de und lädt sich die für das jeweilige Bundesland passende ICS-Datei herunter.

Wie schon beschrieben, habe ich mich für die Feiertagsdatei entschieden, da ich nicht alle paar Jahre die Datei austauschen möchte. Diese Datei einfach in z.B.: BW_Feiertag.holiday benennen und unter dem Ordner /opt/fhem/FHEM speichern. Wichtig ist dabei, dass die Datei mit .holiday endet!  Danach sind noch ein paar zusätzlich Zeilen in der fhem.cfg nötig:

# Wochenende: $we
# www.ifeiertage.de
attr global holiday2we BW_Feiertag
define BW_Feiertag holiday

Danach bewirkt eine Abfrage mit $we, dass auch Feiertage berücksichtigt werden:

define Nachttischlampe_An at *05:59:00 { if(!$we) {fhem("set Nachttischlampe on")} }

Testen läßt sich die Feiertagsdatei, indem man sich einen Feiertag und/oder Urlaub auf den heutigen Tag definiert. FHEM neu starten nicht vergessen.

Meine holiday-Datei sieht wie folgt aus:

# Format für einzelne Tage: 1 MM-DD <Text>
1 01-01 Neujahr
1 01-06 Heilige Drei Koenige
1 05-01 Tag der Arbeit
1 10-03 Tag der deutschen Einheit
1 11-01 Allerheiligen
1 12-25 1. Weihnachtstag
1 12-26 2. Weihnachtstag

# Osterbezogene Feiertage
# Format: 2 <relative Tage von Ostern> <Text>
2 -2 Karfreitag
2  1 Ostermontag
2 39 Christi Himmelfahrt
2 50 Pfingstmontag
2 60 Fronleichnam

#5 -1 Wed 11 23 Buss- und Bettag

# Urlaube
# Format: 4 MM-DD MM-DD <Text>
#4 12-30 12-31 Urlaub1
#4 04-01 04-15 Test-Urlaub

 

 

Ursprünglich hatte ich vor den Funk-Heizkörperthermostat HM-CC-RT-DN mit einem CUL-Stick in FHEM zu integrieren. Bis zum Pairen des Gerätes habe ich es auch hinbekommen. Temperaturwerte konnten auch ausgelesen werden. Allerdings war es mir nicht möglich irgendwelche Kommandos an den Heizköperthermostaten zu schicken. Also habe ich mich entschlossen, der Anleitung von Jörg Hofmann zu folgen und den HomeMatic 085128 LAN Konfigurations-Adapter für die Integration von Homatic-Geräten zu verwenden. Wie aber Jörg Hofmann schon schreibt, ist die Einrichtung des HMLan-Adapters am FHEM-Server etwas "tricky". Bei mir ist als Unitiymedia-Kunde noch zusätzlich das Problem aufgetaucht, dass beide Windows-Programme zum Einrichten der IP-Adresse und zum Konfigurieren der HomeMatic-Geräte entweder gar nicht oder nur mit viel gutem Zureden funktionierten. Schuld ist, so wie ich das sehe, die Connect-Box von Unitymedia und/oder die beiden Programme sind nicht kompatibel zu dieser Box. Nun aber der Reihe nach:

Bevor es richtig los geht muss die Konfigurationssoftware heruntergeladen werden. Dazu geht man auf die Seite http://www.homematic.com/, rollt ganz nach unten und klickt dort auf den Link Downloads. Somit wird man mit der Herstellerseite eQ-3 verbunden. Dort lädt man sich die Software für den HM-CFG-LAN herunter. Ich habe mir die V1.520 heruntergeladen.

Die heruntergeladene ZIP-Datei wird ausgepackt und das Setup ausgeführt. Danach stehen zwei Programme zur Verfügung. Das HomeMatic Lan-Interface dient zum Einstellen einer IP-Adresse für das HM-CFG-LAN sowie zum Ein- und Ausschalten der AES im Netzwerk. Dieses Programm hat bei mir überhaupt nicht funktioniert, in einer normalen IP-V4-Umgebung läuft es aber klaglos.

Und der HomeMatic Konfigurator, der zum Konfigurieren der Endgeräte gedacht ist läuft bei mir nur, wenn ich die IP-Adresse angebe. Dieses Gerät benötigt normalerweise nur die 10-stellige Seriennummer und den 32-stelligen Zugriffscode des HM-CFG-LAN. Bei mir war es aber so, dass ich die IP-Adresse des HM-CFG-LAN eintragen musste, die ja per DHCP zugewiesen wird, damit dieses Programm Kontakt mit dem Gerät aufnehmen konnte.

Wer möchte, kann jetzt die ersten Geräte mit dieser Software verbinden.

Im nächsten Schritt vergeben wir einen eigenen 16-stelligen Sicherheitsschlüssel. Am Besten generiert man sich einen solchen Schlüssel über passwortgenerator.org und speichert  sich diesen Schlüssel in einem separaten Dokument und/oder klebt ihn auf den HM-CFG-LAN. Dieser Schlüssel wird dann über den HomeMatic Konfigurator an den HM-CFG-LAN geschickt.

Nun muss noch die hmId in Erfahrung gebracht werden. Unter Windows 7 liegt die Datei "ids" unter C:\Users\All Users\Bidcos-Service. Den jetzt in Erfahrung gebrachten Wert muss man nur noch in einen Hexadezimalen Wert übersetzen. Dies geht über die Seite: http://www.arndt-bruenner.de/mathe/scripts/Zahlensysteme.htm

Im nächsten Schritt habe ich dem HM-CFG-LAN eine fest IP-Adresse vergeben und die AES-Verschlüsselung über das Netzwerk abgeschaltet. Daraufhin können in der fhem.cfg folgende Zeilen eingetragen werden:

define HMLAN1 HMLAN 192.168.0.5:1000
attr HMLAN1 hmId 2D0C
8D
attr HMLAN1 hmKey 01:JquLP38VYAdA93zR

Natürlich müssen alle angegebenen Werte durch eigene Werte ersetzt werden. Nach einem Neustart von FHEM sollte eine Verbindung zum HM-CFG-LAN aufgebaut werden und dies auch mit dem dauerleuchten der POWER-LED am HM-CFG-LAN und am HMLAN opened in FHEM angezeigt werden. Sollte eine Verbindung nicht zustande kommen, so kann dies daran liegen, dass die AES-Verschlüsselung nicht deaktiviert und/oder eine andere Anwendung eine Verbindung zum HM-CFG-LAN aufgebaut hat.

 

 

 

Immer wenn die Heizperiode beginnt, erfreuen sich elektronisch Heizkörperthermostate großer Beliebtheit, da man diese per Wochenprogramm auf die eigenen Bedürfnisse anpassen kann. Viele dieser Geräte arbeiten autak vor sich hin. Einige sind per Funk steuerbar. Ich habe mich für das HM-CC-RT-DN entschieden, da es ein recht gutes Preis-Leistungsverhältnis hat und über das recht verbreitete HomeMatic-Protokoll steuerbar ist. Wer etwas handwerkliches Geschick verfügt, der kann sich auch einen Bausatz kaufen, sollte aber über einen recht kleinen Torx-Schraubendreher verfügen.

Der HM-CC-RT-DN wird mit FHEM gepairt, indem man in FHEM "set HMLAN1 hmPairForSec 30" eingibt und daraufhin ca. 3 Sekunden lang auf die Boost-Taste vom HM-CC-RT-DN drückt. Daraufhin fängt der HM-CC-RT-DN an von 30 an herunter zu zählen. Üblicherweise wird die 30 noch angezeigt und dann ist der Pair-Vorgang abgeschlossen.

Nun sollte sich das frisch gepairte Gerät unter CUL_HM im Menü zeigen. Da die Gerätebezeichnungen dann doch recht kryptisch sind empfehle ich diese gleich mit sprechenden Namen zu versehen:

rename HM_45F5F1 Heizung_Bad
rename HM_45F5F1_Clima Heizung_Bad_Clima
rename HM_45F5F1_Weather Temperatur_Bad

Mit diesen drei Befehlen wird das Gerät selbst und davon der Kanal 4 umbenannt. Den Kanal 4 benötigt man um Steuerbefehle an den Heizungsthermostaten zu schicken.

Es gibt in FHEM die Möglichkeit Plots zu erstellen. Dazu ist es nötig, folgende Zeile in die fhem.cfg zu integrieren:

define FileLog_Heizung_Bad FileLog ./log/Heizung_Bad-%Y.log Heizung_Bad

Danach einfach FHEM neu starten und den Plot bearbeiten. Bei mir sieht es wie folgt aus:

Dabei verwende ich die flogenden Inputs für die Grafik:

measured-temp
desired-temp
actuator

Wenn man sich mit diesen Grafiken mal ausprobiert hat, erscheint es einem der Aufbau der Eingaben und Auswahl der Inputs doch recht logisch.

Um alle Diagramme in einem Bereich zusammenzufassen, füge ich noch folgende Zeile ein:

attr SVG_FileLog_Heizung_Bad_1 room Plots

Somit werden im Menüpunkt Plots alle Diagramme zusammengefasst.

Nachdem es also möglich ist, Daten vom Heizkörpterthermostaten zu empfangen und auszuwerten, sollten  im nächsten Schritt Daten und Befehle an den Heizkörperthermostaten gesendet werden. Für den ersten Test reicht es, wenn man die Tastensperre setzt und auch wieder löscht. Dazu gibt es auf der WIKI von FHEM eine recht gute Auflistung.

set Heizung_Bad regSet btnLock on
set Heizung_Bad regSet btnLock off

Es kann bis zu 2:30 Minuten dauern, bis die Befehle von FHEM an den Thermostaten gesendet worden sind. So viel Geduld muss man schon aufbringen. Zeigen diese Befehle am Thermostaten dann ihre Wirkung, kann man davon ausgehen, dass die Kommounikation funktioniert. Bei Versuchen mit dem CUL-Stick bin ich bereits an dieser Hürde gescheitert.

Das nächste interessante Kommando ist das Aktivieren des Urlaubs/Party-Modus. Dieser Befehl erfolgt über Kanal 4 (_Clima) und sieht wie folgt aus:

set Heizung_Bad_Clima controlParty 16 20.05.16 16:30 21.05.16 05:00

Dadurch wird
vom 20.05.2016, 16:30 Uhr
bis 21.05.2016, 05:00 Uhr
die gewünschte Raumtemperatur auf 16 °C eingestellt.
Es werden nur Uhrzeiten zu jeder vollen oder halben Stunde angenommen (Minuten also 00 oder 30).

Im nächsten Schritt wird ein Script erstellt, mit dem ein Wochenprogramm an den Heizungsthermostaten geschickt wird. Dafür scheint es verschiedene Lösungsansätze zu geben. Ich habe mich dafür entschieden ein Script zu erstellen, dass beim Aufruf ein vollständiges Wochenprogramm überträgt. Diese Script heißt bei mir 99_myUtils.pm und befindet sich im Verzeichnis FHEM.

package main;
use strict;
use warnings;
use POSIX;
sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

# Enter you functions below _this_ line.
# Heizung_Bad_Clima Temperatur setzen
sub
SetTempList_Heizung_Bad()
{
{ fhem ("set Heizung_Bad_Clima tempListMon prep 05:30 17.0 06:10 27.0 12:00 17.0 15:00 17.0 18:00 17.0 21:00 17.0 24:00 17.0")};
{ fhem ("set Heizung_Bad_Clima tempListTue prep 05:30 17.0 06:10 27.0 12:00 17.0 15:00 17.0 18:00 17.0 21:00 17.0 24:00 17.0")};
{ fhem ("set Heizung_Bad_Clima tempListWed prep 05:30 17.0 06:10 27.0 12:00 17.0 15:00 17.0 18:00 17.0 21:00 17.0 24:00 17.0")};
{ fhem ("set Heizung_Bad_Clima tempListThu prep 05:30 17.0 06:10 27.0 12:00 17.0 15:00 17.0 18:00 17.0 21:00 17.0 24:00 17.0")};
{ fhem ("set Heizung_Bad_Clima tempListFri prep 05:30 17.0 06:10 27.0 12:00 17.0 15:00 17.0 18:00 17.0 21:00 17.0 24:00 17.0")};
{ fhem ("set Heizung_Bad_Clima tempListSat prep 07:30 17.0 09:00 27.0 12:00 17.0 15:00 17.0 18:00 17.0 21:00 17.0 24:00 17.0")};
{ fhem ("set Heizung_Bad_Clima tempListSun exec 07:30 17.0 09:00 27.0 12:00 17.0 15:00 17.0 18:00 17.0 21:00 17.0 24:00 17.0")};
}
1;

Soll nun das Wochenprogramm übermittelt werden, muss nur das Kommando

{SetTempList_Heizung_Bad()}

in das Eingabefeld von FHEM eingegeben werden.

Um dieses Script mit FHEM zu erstellen geht man wie folgt vor:

  • Edit files
  • myUtilsTemplate.pm anklicken
  • Save as 99_myUtils.pm

Wichtig ist, dass alle sub-Funktionen am Schluss eine fortlaufende Nummer mit einem Semikolon erhalten müssen.

In der fhemwiki werden Temperaturlisten und alternative Wochenprogramme beschrieben. Sicherlich ist es Geschmacksache, wer welche Vorgehensweise verwendet.

Wer möchte, der kann die gemessene Temperatur in einem extra Raum(Menüpunkt) anzeigen lassen. Also einen schellen Überblick über alle Temperaturen. Dazu füge ich noch ein paar Zeilen in die fhem.cfg ein:

attr Temperatur_Badr room Temperature
attr Temperatur_Bad userReadings state {sprintf("%0.1f °C", (ReadingsVal("Temperatur_Bad","measured-temp",0)))}
attr Temperatur_Bad icon icoKLIMA

 

 

Eine recht interessante Option ist die Anwesenheitserkennung. Ich selbst verwende die Möglichkeit von Lan-Ping auf mein Tablet. Weitere Möglichkeiten werden in der Wiki-Seite beschrieben. Dazu verwende ich folgende Zeilen:

#######################################################
# Ping-Ueberwachung
define JT_Tablet PRESENCE lan-ping 192.168.2.181 60
attr JT_Tablet ping_count 4

Selbstverständlich ist darauf zu achten, dass das Tablet oder Smartphone immer die gleiche IP-Adresse hat. Dies geschieht am Besten im Router und/oder DHCP-Server.

In der FHEM-Web-Oberfläche sieht die Anwesenheit dann wie folgt aus:

Die folgende Zeile bewirkt das Abschalten einer Lampe zu einer bestimmte Zeit nur bei Abwesenheit.

define Stehlampe_Aus_1 at *22:30:00 {if(ReadingsVal("JT_Tablet","presence","") eq "absent"){fhem("set Stehlampe off")}}

Bei Anwesenheit bleibt die Lampe an. Dadurch lässt sich recht einfach eine Anwesenheitssimulation realisieren.

Sollte es nötig sein, dass die Anwesenheitssimulation auf mehr als eine Person(Gerät) reagiert, empfiehlt sich die Verwendung einer Variablen, die das Ergebnis einer Oder-Verknüpfung enthält. In meinem Fall sind es zwei Zeilen:

define jemand_da dummy
define bewohnt at +*00:01 {if((ReadingsVal("JT_Tablet","presence","") eq "present")||(ReadingsVal("Partner_Smart","presence","") eq "present")){fhem("set jemand_da present")} else {fhem("set jemand_da absent")}}

Die Oder-Verknüpfung von JT_Tablet und Partner_Smart kann bei Bedarf erweitert werden. Eine Auswertung der neuen Variablen erfolgt wie im folgenden Beispiel:

define Nachttischlampe_An_1 at *22:28:00 {if(ReadingsVal("jemand_da","state","") eq "absent"){fhem("set Nachttischlampe blink 1 420")}}

 

 

Jetzt kann es aber sein, dass diese Anwesenheitserkennung einfach nicht funktioniert, weil das Smartphone, wenn es nicht benutzt wird, sich einfach in den Stromsparmodus schaltet und sein WLAN deaktiviert. Von diesen Geräten gibt es ja löblicherweise immer mehr, so dass der Akku etwas länger durchhält, was aber dazu führt, dass die oben beschriebene Anwesenheitserkennung nicht funktioniert. Für Haushalte, die eine Fritzbox benutzen, gibt es eine Lösung, die ich unter folgendem Link gefunden habe:

https://wiki.fhem.de/wiki/FRITZBOX

Ich selbst habe sie an einer Fritzbox 6490 Cable erfolgreich getestet. Allerdings ist mir aufgefallen, dass die Subroutine bei mir einfach nicht funktionieren will. Aber es gibt trotzdem die Möglichkeit einer Abfrage.

Was ist also zu tun? Als Erstes müssen als User root ein paar Packete nachinstalliert werden:

apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl

apt-get install libnet-telnet-perl

Ist die Installation erfolgreich verlaufen, können in der fhem.cfg zwei weitere Zeilen eingefügt werden:

define FritzBox FRITZBOX 192.168.2.1
attr FritzBox boxUser Benutzername

Die IP-Adresse ist der jeweiligen Umgebung anzupassen und der Benutzername muss in der Fritzbox unter System > FRITZ!Box-Benutzer angelegt werden. Damit sich dieser Benutzer auch anmelden kann, muss noch im Reiter "Anmeldung im Heimnetz" die Auswahl "Anmeldung mit FRITZ!Box-Benutzernamen und Kennwort" getroffen und übernommen werden.

Als nächstes wird das Kennwort für den Benutzer in fhem gesetzt.

set FritzBox password Kennwort

Diese Zeile hat in der fhem.cfg aber aus Sicherheitsgründen nichts verloren.

Dann wird noch die letzte Zeile eingefügt.

attr FritzBox allowTR064Command 1

Nun sollte nach einem Neustart von fhem das Modul FRITZBOX funktionieren. - Leider war ich nicht in der Lage die Subroutine fehlerfrei in Betrieb zu nehmen. Deshalb habe ich mir meine eigene Abfrage erstellt:

define Juergen_da dummy
define JT_LG at +*00:02 {if((ReadingsVal("FritzBox", "mac_10_F1_F2_4C_9F_62", "weg")) eq "weg"){fhem("set Juergen_da absent")} else {fhem("set Juergen_da present")}} 


 

 

Bei mir hatte sich im Bad das Problem gestellt, dass mit dem Einschalten des Badlichts auch der Start des Abzugslüfters aktiviert wurde. Da es recht unnötig ist, wenn man mal kurz ins Bad möchte, den Lüfter jedes Mal zu aktivieren, habe ich mir eine Lösung mit einer indirekten Beleuchtung aus LED-Bändern ausgedacht. Sie soll mit einen Funkschalter (vergleichbar mit einer Funksteckdose) ein- und ausgeschaltet werden. Dieser Funkschalter wird indirekt über FHEM von einem Funkwandtaster gesteuert. Ausgewählt habe ich mir den Homatic HM-PB-2-WM55.

Leider musste ich feststellen, das die Inbetriebnahme eines solchen Funktasters und das Verbinden von Aktoren über FHEM nicht sonderlich gut dokumentiert ist. Deshalb versuche ich es an dieser Stelle.

Bervor es richtig los geht, ist dafür zu sorgen, dass folgende Zeilen nicht auskommentiert sind:

define autocreate autocreate
attr autocreate autosave 1

Dann gibt man wie bei allen Homatic-Geräten in der Eingabezeile von FHEM diese Zeile ein:

set HMLAN1 hmPairForSec 30

Daraufhin betätigt man kurz die Anlerntaste auf der Rückseite des Funktasters. Die LED des Funktasters wird grün blinken. Wenn das Blinken beendet ist, kann man in FHEM die Konfiguration sichern. Danach sollte eine neue Sektion in der fhem.cfg stehen. Nun gebe ich folgende drei Zeilen nacheinande in das Eingabefeld von FHEM ein:

rename HM_2A7512 Lichttaster_Bad
rename HM_2A7512_Btn_01 Lichttaster_Bad_Btn_01
rename HM_2A7512_Btn_02 Lichttaster_Bad_Btn_02

Und jetzt wieder die Konfiguration sichern.

Im jetzigen Zustand wird FHEM ein Betätigen, kurz oder lang, der beiden Taster registrieren. Die LED vom Taster wird aber gelb und rot aufleuchten, da der Funktaster von FHEM keine Rückmeldung erhält.

Grundsätzlich ist es zwar möglich, diesen Zustand beizubehalten aber schöner ist es, wenn der Taster eine Rückmeldung erhält und daraufhin grün aufleuchtet. Um dieses Ziel zu erreichen muss in FHEM ein virtueller Aktor eingerichtet werden. Dazu habe ich nach langem Suchen auch eine ganz gute Seite in der FHEM-wiki gefunden: CUL HM

In meinem Fall habe ich meiner fhem.cfg die folgenden drei Zeilen angefügt:

define virtualCCU CUL_HM 32240C
attr virtualCCU model CCU-FHEM
attr virtualCCU IODev HMLAN1

Die CUL_HM entspricht dann der realen hmId.

FHEM stoppen und neu starten.

Danach gibt man

set virtualCCU virtual 2

im Eingabefeld von FHEM ein. Die "2" steht für die zwei Tasten.

Die Konfiguration sichern.

Daraufhin gibt man die letzten drei Zeilen im Eingabefeld von FHEM ein:

set Lichttaster_Bad_Btn_01 peerChan 0 virtualCCU_Btn1 single set
set Lichttaster_Bad_Btn_02 peerChan 0 virtualCCU_Btn2 single set
set Lichttaster_Bad getConfig

Jetzt noch kurz die Anlerntaste auf der Rückseite betätigen und die Konfiguration sichern.

Um die Tastendrucke jetzt auszuwerten, habe ich noch folgende Zeilen erstellt:

define LED_Bad_A notify (Lichttaster_Bad_Btn_01:Short.*) {fhem("set LED_Bad on")}
define LED_Bad_B notify (Lichttaster_Bad_Btn_02:Short.*) {fhem("set LED_Bad off")}
define LED_Bad_C notify (Lichttaster_Bad_Btn_01:Long.*) {fhem("set AirWick blink 1 900")}
define LED_Bad_D notify (Lichttaster_Bad_Btn_02:Long.*) {fhem("set AirWick off")}

Mit Hilfe dieser vier Zeilen ist es möglich, mit einem zweifach-Taster, vier verschiedene Funktionen auszulösen.

Leider musste ich nach einiger Zeit feststellen, dass die Kommunikation zwischen dem LAN Konfigurations-Adapter und den Heizkörperthermostaten HM-CC-RT-DN nach Inbetriebnahme dieses Wandtasters nicht mehr richtig funktioniert. Der Grund liegt möglicherweise in der Verschlüsselung dieser beiden Geräte. Um dieses Problem zu lösen kann man sich einen zweiten LAN Konfigurations-Adapter oder einen CUL verwenden um den Wandtaster zu betreiben.

 

 

Nachdem ich seit ein paar Jahren die Funk-Wetterstation WS-9130-IT betreibe, habe ich mir gedacht, dass es praktisch wäre, den Funksensor auch in FHEM zu integrieren. Da es sich bei dem Außensensor um ein Gerät der recht preisgünstigen Temperatur- und Luftfeuchtigkeitssensoren von LaCrosse handelt, habe ich mich entschlossen einen JeeLink USB-Funk-Transceiver in meine FHEM-Installation zu integrieren. Diesen kann man bei Jeelabs für ca. 37 Euro inkl. Versand erwerben.

Die Inbetriebnahme des JeeLink USB-Funk-Transceiver gestaltet sich wie auf der Seite von Christoph Klima beschrieben, sehr einfach. Dabei sind folgende Schritte durchzuführen:

  • JeeLink an einen freien USB-Slot am FHEM-Server einstecken.
  • Per Putty als root auf dem fhem-Server anmelden.
  • Im Terminal einen neuen Knoten für den JeeLink angelegen.
    mknod /dev/ttyUSB0 c 188 0
    Bei mir erschien eine Warnmeldung, dass der Knoten bereits existiert.
    Diese Meldung kann man ignorieren.
    Nun das Programm
    "AVR Dude" installieren.
    apt-get install avrdude
  • In der Weboberfläche von FHEM wird der JeeLink jetzt als Objekt angelegt, wozu folgende Befehle nacheinander mit Enter in der FHEM-Kommandozeile am oberen Bildrand abgesendet werden.
    update check
    update
    shutdown restart
    define myJeeLink JeeLink /dev/ttyUSB0@57600
    Wer mit dem Jeelink verschiedene Temperatur- und Luftfeuchtigkeitssensoren betreiben will, die teilweise unterschiedliche Datenraten (9.579 und 17.241 kbps) verwenden, muss den Toggle-Modus des Jeelink aktivieren (30t). Zusätzlich kann die helle Geräte-LED des Jeelink deaktiviert werden (0a v).
    attr myJeeLink initCommands 30t 0a v
    Wer zu diesem Kommando detailiertere Infomationen benötigt, der schaut auf der FHEMWiKi nach.
  • Nun sind alle Schritte vorbereitet und das Flashen kann beginnen. Hierzu wird in FHEM der folgende Befehl abgesetzt:
    set myJeeLink flash LaCrosse
    Nach diesem Befehl erfolgt ein recht langer Output, aus dem hervorgehen sollte, dass der Flash-Vorgang erfolgreich war und der JeeLink nun in FHEM verwendet werden kann (opened).

Um einen dieser LaCrosse-Sensoren nutzen zu können, wird wie bei HomeMatic-Geräten auch ein Pairing vorgenommen, welches den Sensor über das JeeLink mit FHEM verbindet. Damit dies funktioniert, ist es wichtig, dass die Funktion "autocreate" aktiviert ist. Für das Pairing gibt man auf der Eingabezeile des Webinterface folgendes Kommando ein:

set myJeeLink LaCrossePairForSec 60

Jetzt müssen innerhalb von 60 Sekunden die Batterien des neuen Sensors eingelegt werden. Daraufhin gibt das Messgerät ein Pairing-Signal von sich, welches von dem ebenfalls im Pairing-Modus befindlichen JeeLink empfangen wird.

Nachdem der Pairing-Vorgang erfolgreich durchgeführt wurde, taucht in FHEM links in der Seitenleiste ein neuer Raum mit dem Namen "LaCrosse" auf, in dem das neu angelegte Funk-Thermometer zu finden ist.

Als nächstes gebe ich dem neuen Sensor einen sprechenden Namen. Das kann dann so ähnlich aussehen:

rename LaCrosse_08 Terrasse

Damit die Ansicht im Webfrontend von FHEM etwas aufgehübscht wird, verwende ich folgende Zeile:

attr Terrasse userReadings state {sprintf("%0.1f °C", (ReadingsVal("Terrasse","temperature",0)))}

Zum Erzeugen eines Plots verwende ich die folgenden drei Zeilen:

define FileLog_Terrasse FileLog ./log/Terrasse-%Y.log Terrasse
define SVG_FileLog_Terrasse_1 SVG FileLog_Terrasse:SVG_FileLog_Terrasse_1:CURRENT
attr SVG_FileLog_Terrasse_1 room Plots

Wie man einen solchen Plot in FHEM bearbeitet, habe ich bereits beim Heizkörperthermostat HM-CC-RT-DN beschrieben.

Zum Schluss noch eine Eigenheit, die mir aufgefallen ist:
Da der JeeLink-USB-Stick mein drittes Funk-Gateway ist, musste ich erstaunt feststellen, das zwar die Installation recht einfach verläuft aber sich dieser Stick von Anwesenheit eines CUL oder eines HomeMatic-LAN-Adapters gestört fühlt. Dies äussert sich dadurch, dass die angezeigen Messwerte starken Schwankungen unterliegen. Für Abhilfe kann man sorgen, indem man dafür sorgt, dass der JeeLink einen größeren Abstand (ca. 40cm) zu den beiden Geräten hat. Möglicherweise hilft aber auch eine nachträgliche Abschirmung. Ein weiterer Punkt der auffällig ist, das diese Stick recht wählerisch ist, was die Qualität des Verlängerungskabels angeht. Aus diesem Grund habe ich mich entschieden, diesen Stick direkt in die USB-Buchse vom PC zu stecken.