Homematic-fhem.cfg-Neuinstallation

Aus FHEMWiki
Wechseln zu: Navigation, Suche
Dieser Artikel ist zur Löschung vorgemerkt.

Begründung: Artikel enthält mAn nichts, was nicht schon in anderen Wiki-Artikeln enthalten ist. Ist vom Autor nie vollendet worden und seit langem (2015) nicht gepflegt und erweitert worden. Aufgrund der Doppelungen zu den Wiki-Artikeln würde eine Pflege durch Dritte unnötigen Aufwand mit kaum Nutzen verursachen.


Sowohl Homematic als auch fhem sind komplexe Lösungen bezüglich der Hard- und Software. Viele Lösungen erschliessen sich erst nach Wochen des Lesens von Forenartikeln, Wiki-Beiträgen oder Google (Blogartikel). Viele der dort vorgestellten Lösungen und Beispiele sind bereits veraltet oder beziehen sich auf ältere fhem-Instanzen. Die "Fehler" oder nicht optimalen Lösungsansätze werden so kopiert, implementiert und erst nach Monaten des Produktivbetriebes und des Wissenzuwachses des Anwenders verbessert.

Diese Seite versucht, für Anfänger und Neueinsteiger eine Referenzlösung oder eine Basisversion der fhem.cfg bereitzustellen. Die vorgeschlagenen Konfigurationen beziehen sich dabei ausdrücklich nur auf Homematic- und fhem. Für andere Protokolle mögen andere Konfigurationen sinnvoller sein.

Die vorgeschlagene Konfiguration wurde in Blöcke zerlegt und jeder Block kurz erläutert. Für eine vollständige fhem.cfg sind alle Blöcke mit Cut&Paste zusammenzufügen und als fhem.cfg in das fhem-Installationsverzeichnis zu speichern.

Globale Einstellungen

Webzugang, Dateizugriff, Syntax-Highlighting

####
# G.0 Global settings
define WEB FHEMWEB 8083 global
attr WEB JavaScripts codemirror/fhem_codemirror.js
attr WEB codemirrorParam { "theme":"blackboard", "lineNumbers":true }
attr WEB editConfig 1
attr WEB fwcompress 0
attr WEB room hidden
attr WEB stylesheetPrefix dark

fhem ist danach unter der Adresse http://<IP>:8083/fhem erreichbar. Die Einstellung editConfig 1 erlaubt den Zugriff auf den eingebauten Editor und die Dateien, die beiden Referenzen auf codemirror fügen Syntax-Highlightning hinzu. Das fhem-Theme wird auf dark umgestellt.

Sender Definitionen

Es gibt mehrere Sender für fhem und Homematic:

  1. HM-USB (Konfigurations-USB-Stick)
  2. HM-LAN (Netzwerk-Sender)
  3. CULsC/CUNO/...

HM-USB weist die geringsten Latenzen in der Kommandoverarbeitung auf, ist jedoch auf die Länge eines USB-Kabels beschränkt. HM-LAN-Konfigurationsadapter benötigen ein Netzwerk-Anschluß, können in der Sendeleistung modifiziert (http://www.ip-symcon.de/forum/threads/18411-Umbau-HM-LAN-Adapter-auf-Lambda-1-2-Dipol-Antenne) werden kann und sind für größere Gebäude daher praktischer. CULs/CUNO/... haben den Nachteil, keinen Kommando-Zeitstempel an fhem mitzuteilen, was eine Latenzminimierung verhindert und zu Problemen führen kann.

####
# G1. HomeMatic-sender definition - use HM-USB over HMLAN, avoid CULs (no timestamps, no AES)
# Uncomment at least one definition - hmId not specified as we are using a VCCU (see G.2)

# CUL definition on USB (this example on Raspberry Pi Model B)
define CUL0 CUL /dev/ttyACM0@38400 1234
attr CUL0 rfmode HomeMatic
attr CUL0 verbose 4

# HMLAN definition (192.168.1.100 = IP address of HMLAN, needs to remain the same)
define HMLAN1 HMLAN 192.168.1.100:1000 

Das Beispiel führt eine Variante für eine CUL und eine HMLAN-Gerät an. Das HM-LAN sollte mit Hilfe der Windows-Software auf eine statische IP-Adresse konfiguriert sein (siehe HM-CFG-LAN_LAN_Konfigurations-Adapter).

Da eine Homematic-fhem-Installation immer eine VCCU nutzen sollte, wird keine Zentralen-ID (hmId) spezifiert. Diese ID wird von der VCCU bereitgestellt.

Virtuelle CCU

Info blue.png
Dieser Schritt ist optional, wird aber empfohlen.


Im nächsten Schritt wird eine virtuelle CCU (VCCU) angelegt, die die Sender aus dem vorherigen Abschnitt (zum Beispiel CUL, HM-CFG-LAN) als reine I/O-Geräte verwendet; die HomeMatic-Geräte werden mit dieser VCCU gepaired. So können die HomeMatic-Geräte flexibel zu I/O-Geräten zugewiesen werden, beispielsweise um die Reichweite durch mehrere Sender zu erhöhen.

 ###
 # G.2 HomeMatic-specific - we always want to use a VCCU
 # 1A2B3C indicates HomeMatic ID of VCCU. CUL0 is one of possible senders (like HMLLAN)
 # A VCCU may have multiple IO devices (more than one HMLAN plus more than one CUL)
 
 define vccu CUL_HM 1A2B3C
 attr vccu IODev CUL0
 attr vccu IOList CUL0
 attr vccu model CCU-FHEM
 attr vccu subType virtual
 attr vccu webCmd virtual:update

In diesem Beispiel wird nur ein IO-Gerät (CUL0) genutzt. Die Homematic-Zentralen-ID wird auf den Wert 1A2B3C gesetzt.

Wetter-Vorhersage

Es gibt mehrere Möglichkeiten, eine Wettervorhersage zu realisieren (s. Wetter und Wettervorhersagen. Diese Lösung basiert auf dem Yahoo-Wetterdienst. Dieser identifiziert Orte (für die Wettervorhersage) anhand einer ID in der URL. Zur Ermittlung dieser ID sucht man auf Yahoo Weather nach dem Ort und kopiert die ID in die Definition in der fhem.cfg. Eine ausführliche Erläuterung gibt es auf der Modulseite Weather.

####
# G.3: Weather forecast
# 12833034 indicates the https://weather.yahoo.com/ city ID within the URL

define MyWeather Weather 12833034 3600 de
attr MyWeather room Wettervorhersage

define weblink_MyWeather weblink htmlCode {WeatherAsHtml("MyWeather")}
attr weblink_MyWeather room Wettervorhersage

Der zweite Wert der Wetter-Definition definiert das Aktualisierungs-Intervall in Sekunden (hier 60*60 = 3600 = 1 Stunde).

Feiertage und Schulferien

Feiertage und Schulferien können von fhem automatisch mit Hilfe externer Webseiten ermittelt werden. Diese sind (in Deutschland) abhängig vom Land. Die URL für die externe Seite muß daher einmalig (für das Bundesland) und jährlich (für das Kalenderjahr) angepaßt werden. Weitere Hinweise und Hilfe gibt es unter Wochenende,_Feiertage_und_Schulferien.

####
# G.4: German school and public bank holidays
# Adjust each Jan-01 the URL

define Ferien Calendar ical url http://www.schulferien.org/iCal/Ferien/icals/Ferien_Schleswig_Holstein_2014.ics 43200
define Ferientag dummy
define Ferien.notify notify Ferien { fhem "set Ferientag " . (ReadingsVal("Ferien", "modeStart", "") =~ "schulferien" ? 1: 0) }

Auf die gesetzte Umgebungsvariable kann dann in sunset-/sunrise-Kommandos Bezug genommen werden, um z.B. eine Außenbeleuchtung zu Ferien- und Feiertagen später einzuschalten:

 ... at *05:30:00 { if ( !($we) && !(Value("Ferientag")) ) { fhem(" ...

$we kennzeichnet ein Wochenende und Value("Ferientag") einen schulfreien Tag. Dieses Beispiel würde nur an normalen Schultagen ausgeführt.

Datenbank-Logging

Die meisten Anleitungen von fhem lassen Nachrichten in getrennte textbasierte Logfiles speichern. Dies ist elegant und hilfreich am Anfang, da ein "tail -f <LOGDATEI>" auf der Kommandozeile direkt Änderungen und neue Nachrichten anzeigt. Auch eine automatische Rotation ist mit Hilfe der Platzhalter %Y (für Jahr) und %M (für Monat) einfach einzurichten.

Jedoch sind Schreiboperationen auf SD-Karten auf Mini-Computern meist recht langsam (z.B. auf einem Raspberry Pi). Auch fehlt der zentrale, gemeinsame Blick über Geräte hinweg und es wird aufwendig, Graphen zu erzeugen, die auf mehreren Logfiles basieren. Für solche Vorhaben ist das Neue Graphing Frontend viel besser geeignet. Dieses setzt jedoch eine datenbankbasierte Nachrichtenverwaltung voraus.

Eine generelle Einführung findet sich Neues_Charting_Frontend und in der Forendiskussion, die sich Stand Dez 2014 auf über 55 Seiten hinzieht.

Einige Hinweise:

  1. Das Datenbank-Schema benötigt einen INDEX. Dieser wird auf der Kommandozeile im sqlite3-Administrationsprogram erzeugt. Manche der Anleitungen im WWW beinhalten diesen Schritt nicht, er ist aber zwingend notwendig um die Performance (speziell auf Raspberry Pi-Geräten) im angemessenen Rahmen zu halten
  2. Auch wenn es phantastisch ist, historische Daten lange zu speichern - im täglichen Gebrauch spielen sie kaum eine Rolle. Normale Anwender sind daher gut beraten, alle älteren Daten automatisch löschen zu lassen. Dies läßt sich z.B. über einen monatlichen Cronjob realisieren, der alle Daten älter als X Monate (X = 1, 2 oder 3) löscht. Davor ist fhem zu stoppen, danach neu zu starten.
  3. Die Datenbank wird langsamer, je mehr Einträge vorhanden sind. Speziell auf Raspberry Pi-Geräten ist es daher sinnvoll, den Umfang des Loggings zu beschränken - auf die Werte, die wirklich von Interesse sind. Dazu können zum einen die unerwünschten Informationen generell limitiert, zusätzliche Informationen Geräte-spezifisch ausgeschlossen oder nur einen Eintrag bei einer Änderung eines Readings (z.B. Temperatur, Strom) generiert werden.

Die notwendigen Einstellungen sind:

Anlegen des Such-Indices in der Datenbank:

CREATE INDEX Search_Idx ON `history` (DEVICE, READING, TIMESTAMP);

Generelles Limitieren der Datenbank-Logeinträge, anstelle von der üblichen .*:.*-Anweisung:

define myDbLog DbLog ./db.conf .*:.*(temperature|desiredTemperature|valveposition|humidity |humidity_absolute|dewpoint|tempdiff_avg_day|tempdiff).*

Limitieren auf Nachricht bei geändertem Status (überspringt Nachrichten bei gleichbleibendem Status):

attr <GERÄT> event-on-change-reading state

Neues Graphing Frontend

Todo: Will be added soon


Longitude/Latitude-Definitionen

Zur Ermittlung von Sonnenaufgang- und -untergangs-Zeiten ist die genaue Geo-Position notwendig. fhem realisiert die Berechnung mittels der sunset-/sunrise-Funktionen und dem Twilight-Modul. Alle drei Werte benötigen die GPS-Koordinaten.

attr global latitude  49.628
attr global longitude 10.455

Zur Ermittlung dieser Werte hilft https://maps.google.de/ und ein Linksklick in die Nähe des eigenen Wohnortes. Die Werte stehen dann in der URL, begonnen ab dem @-Zeichen:

https://www.google.de/maps/@49.6287114,10.4550891,13z

Die erste Zahl ist der Wert für latitude (in diesem Beispiel 49.6287114), das Komma trennt die Zahl vom longitude (in diesem Beispiel 12.064) und die dritte Zahl steht für den Zoomwert (und darf ignoriert werden).

HMInfo-Modul

Das HMInfo erweitert die Diagnose und Vorgaben (Template)-Möglichkeiten von Homematic. Es ist essentiell zur Identifizierung von Funkreichweitenproblemen und zur Profilerstellung von Heizprofilen. Eingebunden wird es mit den Anweisungen:

define hm HMinfo
attr hm sumERROR battery:ok,sabotageError:off,powerError:ok,overload:off,overheat:off,reduced:off,motorError:no,error:none,uncertain:yes,smoke_detect:none,cover:closed
attr hm sumStatus battery,sabotageError,powerError,motor
attr hm webCmd update:protoEvents short:rssi:peerXref:configCheck:models

Danach stellt es Befehle mittels "get hm ..." und "set hm ..." zur Verfügung.

Für die Funkreichweitendiagnose ist

get hm rssi

mit den Ausgaben von MIN/MAX/AVG an allen IO-Geräten (CUL, HMLAN, Repeater) hilfreich.

Für Heizprofile erzeugt der Befehl

 set hm tempList save <DATEINAME> 

eine Datei im fhem-Rootverzeichnis, die dann editiert und zurück in die Thermostaten und Radiatorensteuerung geschrieben werden kann.

Taupunkt-Berechnung

Todo: Will be added soon


Anwesenheitserkennung

Todo: Will be added soon


Geräte-spezifische Konfigurationen

Todo: Will be added soon


Cronjobs

Backup-Scrip für Konfigurationsdateien

Das folgende Script als Cronjob definiert prüft, ob sich die Konfigurationsdateien von fhem verändert haben und sichert diese in ein anderes Verzeichnis:

 #!/bin/sh
 
 FHEMDIR="/opt/fhem"
 BACKUPDIR="/root/fhem/backup"
 
 NOW=`date +%Y%m%d-%H:%M`
 
 mkdir -p ${BACKUPDIR}
 
 for FILES in fhem.cfg tempList.cfg db.cfg; do
 
 	# First run: copy config file to backup directory
 	if [ ! -f ${BACKUPDIR}/${FILES} ]; then
 
 		# Copy if file exists - some run without db.cfg or tempList.cfg
 		if [ -f ${FHEMDIR}/${FILES} ]; then
 			cp ${FHEMDIR}/${FILES} $BACKUPDIR
 		fi
 
 	# All other runs: diff the configurations files
 	else
 		DIFFRESULT=`diff -q ${FHEMDIR}/${FILES} $BACKUPDIR/${FILES}`
 
 		# If any change
 		if [ -n "${DIFFRESULT}" ]; then 
 
 			# Copy over file for future comparisons
 			cp -f ${FHEMDIR}/${FILES} ${BACKUPDIR}/${FILES}
 
 			# Archive file
 			cp -f ${FHEMDIR}/${FILES} ${BACKUPDIR}/${FILES}.${NOW}
 			gzip -9 ${BACKUPDIR}/${FILES}.${NOW}
 		fi
 	fi
 done

Bei mir ist dies als /etc/cron.d/backup-fhem-cfgs.sh abgespeichert und als Cronjob mittels */5 * * * * /etc/cron.d/backup-fhem-cfg.sh definiert.