Konfiguration: Unterschied zwischen den Versionen
Fabian (Diskussion | Beiträge) (Kapitel für Syntax-Highlighting besser hervorgehoben) |
Fabian (Diskussion | Beiträge) (→Auslagerung von Definitionen: Kapitel umbenannt, komplett umgeschrieben und mit Beispielkonfiguration versehen) |
||
Zeile 68: | Zeile 68: | ||
== | == Aufteilung komplexerer Konfigurationen == | ||
Die Methode der Auslagerung von Definitionen gehört zum "Expertenmodus". Sie sollte nur bei detaillierter Kenntnis der Auswirkungen gewählt werden. | '''Hinweis:''' Die Methode der Auslagerung von Definitionen gehört zum "Expertenmodus". Sie sollte nur bei detaillierter Kenntnis der Auswirkungen gewählt werden. | ||
Wenn die Konfiguration des fhem mit der Zeit wächst, wird sie schnell unübersichtlich. Dann kann es sich anbieten nicht mehr alle Konfigurationen in der einen fhem.cfg zu machen, sondern sie in verschiedene eigene Konfigurations-Dateien auszulagern. Diese werden dann in der "Haupt-Konfiguration" fhem.cfg mithilfe von <code>include</code> eingebunden. | |||
Nur Konfigurationsdateien, die im Verzeichnis <installationsverzeichnis>/FHEM liegen, werden unter "Edit files" zur Bearbeitung mit dem integrierten Editor aufgeführt. | Bei der Aufteilung der Konfiguration sind ein paar Punkte zu beachten: | ||
* Sämtliche <code>attr global</code> Definitionen '''müssen''' in der fhem.cfg bleiben. | |||
* Nur Konfigurationsdateien, die im Verzeichnis <installationsverzeichnis>/FHEM liegen, werden unter "Edit files" zur Bearbeitung mit dem integrierten Editor aufgeführt. | |||
* Um Änderungen in den "Teil-Konfigurationen" muss die "Haupt-Konfiguration" fhem.cfg neu eingelesen oder der fhem neu gestartet werden. | |||
=== Debugging einer verteilten Konfiguration === | |||
Eine einfache Methode zum Debuggen der Konfiguration geht wie folgt: | |||
# Teil-Konfigurationen im internen oder externen Editor bearbeiten | |||
# Haupt-Konfiguration fhem.cfg im Online-Editor öffnen und wieder abspeichern. Etwaige Fehl-Konfigurationen werden direkt angezeigt. | |||
=== Beispiel einer verteilten Konfiguration === | |||
Die folgende verteilte Konfiguration ist sicher schon etwas exzessiv, gibt aber einen guten Überblick über die Möglichkeiten: | |||
1. fhem.cfg (Haupt-Konfiguration) | |||
<pre> | |||
attr global userattr DbLogExclude devStateIcon devStateStyle fp_DG fp_OG fp_EG fp_Keller icon sortby webCmd widgetOverride | |||
attr global autoload_undefined_devices 1 | |||
attr global modpath . | |||
attr global motd Error messages while initializing | |||
attr global sendStatistics manually | |||
attr global statefile ./log/fhem.save | |||
attr global updateInBackground 1 | |||
attr global verbose 3 | |||
# Geo-Koordinaten | |||
attr global latitude 52.518611 | |||
attr global longitude 13.376111 | |||
# Zentrales Logging pro Kalenderwoche | |||
attr global logfile ./log/fhem-%Y-w%W.log | |||
###################################################### | |||
### fhem System configs | |||
###################################################### | |||
include ./FHEM/fhem_1_interfaces.cfg | |||
include ./FHEM/fhem_2_dashboard.cfg | |||
include ./FHEM/fhem_3_logging.cfg | |||
include ./FHEM/fhem_4_devices.cfg | |||
include ./FHEM/fhem_5_floorplans.cfg | |||
###################################################### | |||
### Haus | |||
###################################################### | |||
include ./FHEM/fhem_raeume.cfg | |||
include ./FHEM/fhem_remoteserver_balkon.cfg | |||
###################################################### | |||
### Sonstiges | |||
###################################################### | |||
include ./FHEM/fhem_systemstate.cfg | |||
include ./FHEM/fhem_battery.cfg | |||
include ./FHEM/fhem_wetter_dwd.cfg | |||
include ./FHEM/fhem_wetter_yr.cfg | |||
include ./FHEM/fhem_muell.cfg | |||
include ./FHEM/fhem_internet.cfg | |||
</pre> | |||
Für jede dieser includes gibt es dann eine eigene Konfigurationsdatei. | |||
== Konfiguration in einer SQL Datenbank == | == Konfiguration in einer SQL Datenbank == |
Version vom 14. Februar 2015, 18:28 Uhr
Die Konfiguration eines Fhem Systems wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei fhem.cfg
, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das Standard Webinterface im Stil "dark".
Grundstruktur
In einer Standardinstallation sind alle Definitionen in der Datei fhem.cfg
abgelegt; diese Datei befindet sich im Installationsverzeichnis (z. B. /opt/fhem
). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.
Autocreate
Sofern die "Autocreate" Funktion aktiv ist (define autocreate autocreate
), werden unter bestimmten Umständen Objekte automatisch angelegt. Diese Definitionen werden immer in der Start-Konfigurationsdatei abgelegt und abgespeichert. Nach der Erstinstallation von Fhem ist die "Autocreate" Funktion standardmäßig aktiv.
Bearbeitung der Konfiguration
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Für Einsteiger empfiehlt sich grundsätzlich die Verwendung des "Befehl-Eingabefeld" und der "Objektdetails" mit eingeschalteter Syntaxhervorhebung. Die Methoden "Integrierter Editor" und insbesondere "Externer Editor" sollten als "Expertenmodus" angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes "Save config" nicht erfolgt ist, bevor ein "rereadcfg" oder Neustart von Fhem durchgeführt wird.
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch anklicken des roten ? anzeigen zu lassen.
Befehl-Eingabefeld
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als "Kommando-Eingabefeld" oder kurz "Eingabefeld"), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z. B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der <Enter>-Taste werden die Änderungen unmittelbar wirksam.
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: "Save config" (aus dem Menü in der linken Spalte) anklicken oder den Befehl "save" im Befehl-Eingabefeld eingeben.
Objektdetails
Durch Anklicken des Namensfeldes eines Objekts werden die Objektdetails aufgerufen. Je nach Objekttyp stehen auf dieser Seite verschiedene Optionen zur Manipulation von Objekteigenschaften zur Verfügung:
-
DEF
zur Anpassung der Definition - Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der
attr
Knopf anzuklicken) - je nach Objekttyp stehen weitere / andere Aktionen zur
Nach einem Klick auf "Modify" werden die Änderungen an der Defintion unmittelbar wirksam.
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: "Save config" (aus dem Menü in der linken Spalte) anklicken oder den Befehl "save" im Befehl-Eingabefeld eingeben.
Integrierter Editor
Sollte ein direktes Editieren der Konfigurationsdatei als nötig erachtet werden, wird der Editor über den entsprechenden Menüeintrag in der linken Spalte erreicht. Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen ("Escapen" von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.
Syntaxhervorhebung
Seit Anfang April 2014 ist der in Fhem integrierte Editor um Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen erweitert.
Um die Funktionalität zu aktivieren müssen die folgenden zwei Attribute gesetzt werden:
attr WEB JavaScripts codemirror/fhem_codemirror.js
attr WEB codemirrorParam { "theme":"blackboard", "lineNumbers":true }
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für
- Bearbeitung der Objektdetails
- Integrierter Editor
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.
Der Forums-Thread unter der Überschrift Javascript Editor einbinden enthält die Diskussion zum Entwicklungsprozess.
Externer Editor
Unter bestimmten Umständen kann auch das Editieren der Konfiguration mit einem externen Editor wie z. B.
- Notepad++ (mit der nppFTP-Erweiterung)
- nano in einer Telnet Sitzung
- in wfftp integrierter / integrierbarer Editor
- ...
sinnvoll sein (duplizieren von Definitionen, globale Änderungen, umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen ("Escapen" von Sonderzeichen, verdoppeln von Semikolon). Nach dem Abspeichern der editierten Datei werden die Änderungen erst nach erneutem Einlesen der Konfiguration aktiv, korrekte Syntax und Semantik vorausgesetzt.
Notwendige Aktionen nach Durchführung der Änderung: "rereadcfg" oder Neustart von Fhem.
Syntaxhervorhebung
Syntax-Highlighting kann bei verschiedenen externen Editoren verwendet werden, näheres s. Syntax Highlighting bei externen Editoren.
Aufteilung komplexerer Konfigurationen
Hinweis: Die Methode der Auslagerung von Definitionen gehört zum "Expertenmodus". Sie sollte nur bei detaillierter Kenntnis der Auswirkungen gewählt werden.
Wenn die Konfiguration des fhem mit der Zeit wächst, wird sie schnell unübersichtlich. Dann kann es sich anbieten nicht mehr alle Konfigurationen in der einen fhem.cfg zu machen, sondern sie in verschiedene eigene Konfigurations-Dateien auszulagern. Diese werden dann in der "Haupt-Konfiguration" fhem.cfg mithilfe von include
eingebunden.
Bei der Aufteilung der Konfiguration sind ein paar Punkte zu beachten:
- Sämtliche
attr global
Definitionen müssen in der fhem.cfg bleiben. - Nur Konfigurationsdateien, die im Verzeichnis <installationsverzeichnis>/FHEM liegen, werden unter "Edit files" zur Bearbeitung mit dem integrierten Editor aufgeführt.
- Um Änderungen in den "Teil-Konfigurationen" muss die "Haupt-Konfiguration" fhem.cfg neu eingelesen oder der fhem neu gestartet werden.
Debugging einer verteilten Konfiguration
Eine einfache Methode zum Debuggen der Konfiguration geht wie folgt:
- Teil-Konfigurationen im internen oder externen Editor bearbeiten
- Haupt-Konfiguration fhem.cfg im Online-Editor öffnen und wieder abspeichern. Etwaige Fehl-Konfigurationen werden direkt angezeigt.
Beispiel einer verteilten Konfiguration
Die folgende verteilte Konfiguration ist sicher schon etwas exzessiv, gibt aber einen guten Überblick über die Möglichkeiten:
1. fhem.cfg (Haupt-Konfiguration)
attr global userattr DbLogExclude devStateIcon devStateStyle fp_DG fp_OG fp_EG fp_Keller icon sortby webCmd widgetOverride attr global autoload_undefined_devices 1 attr global modpath . attr global motd Error messages while initializing attr global sendStatistics manually attr global statefile ./log/fhem.save attr global updateInBackground 1 attr global verbose 3 # Geo-Koordinaten attr global latitude 52.518611 attr global longitude 13.376111 # Zentrales Logging pro Kalenderwoche attr global logfile ./log/fhem-%Y-w%W.log ###################################################### ### fhem System configs ###################################################### include ./FHEM/fhem_1_interfaces.cfg include ./FHEM/fhem_2_dashboard.cfg include ./FHEM/fhem_3_logging.cfg include ./FHEM/fhem_4_devices.cfg include ./FHEM/fhem_5_floorplans.cfg ###################################################### ### Haus ###################################################### include ./FHEM/fhem_raeume.cfg include ./FHEM/fhem_remoteserver_balkon.cfg ###################################################### ### Sonstiges ###################################################### include ./FHEM/fhem_systemstate.cfg include ./FHEM/fhem_battery.cfg include ./FHEM/fhem_wetter_dwd.cfg include ./FHEM/fhem_wetter_yr.cfg include ./FHEM/fhem_muell.cfg include ./FHEM/fhem_internet.cfg
Für jede dieser includes gibt es dann eine eigene Konfigurationsdatei.
Konfiguration in einer SQL Datenbank
Seit April 2014 (Fhem-Version 5079) können Definitionen alternativ zur Speicherung in einer einfachen Text-Konfigurationsdatei(en) in einer SQL Datenbank abgelegt werden. Hierzu dienen configDB (Hilfsmodul) und configdb (command), die in der commandref dokumentiert sind.
Voraussetzung
Datenbank
Unterstützt werden:
Perl-Module
- Text::Diff (libtext-diff-perl)
- DBI (libdbi-perl)
- Je nach Datenbank:
- DBD::SQLite (libdbd-sqlite3-perl)
- DBD::mysql (libdbd-mysql-perl)
- DBD::Pg (libdbd-pg-perl)
configDB.conf
In einer Datei namens configDB.conf werden die Parameter für eine Verbindung zur Datenbank (host, username, password, etc.) hinterlegt. Diese muß im fhem Hauptverzeichnis liegen (z.B. /opt/fhem).
- Sqlite
%dbconfig= ( connection => "SQLite:dbname=/opt/fhem/configDB.db", user => "", password => "" );
- MySQL
%dbconfig= ( connection => "mysql:database=configDB;host=localhost;port=3306", user => "fhemuser", password => "fhempassword", );
- PostgreSQL:
%dbconfig= ( connection => "Pg:database=configDB;host=localhost", user => "fhemuser", password => "fhempassword" );
Datenbankerstellung
Es muß zuerst eine leere Datenbank erstellt werden. Die Tabellen werden automatisch erstellt.
- Sqlite
pi@raspberrypi ~ $ sqlite3 configDB.db SQLite version 3.7.13 2012-07-17 17:46:21 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> pragma auto_vacuum=2; sqlite> .quit
- MySQL
pi@raspberrypi ~ $ mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2937 Server version: 5.5.41-0+wheezy1 (Debian) Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> CREATE DATABASE `configDB` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; Query OK, 1 row affected (0.04 sec) mysql> GRANT CREATE, SELECT, INSERT, DELETE, UPDATE ON `mahowi`.* TO 'fhemuser'@'%'; Query OK, 0 rows affected (0.04 sec) mysql> \q Bye
- PostgreSQL
TBD
Migration der Konfiguration auf configDB
- Im laufenden fhem
configdb migrate
eingeben. Das kann eine Weile dauern. Wenn die Migration beendet ist, werden die Datenbank-Statistiken angezeigt. Die Original fhem.cfg wird nicht verändert. - fhem herunterfahren (
shutdown
) - fhem neu starten mit
perl fhem.pl configDB
. - Eventuell in /etc/init.d/fhem die Zeile
perl fhem.pl fhem.cfg
auskommentieren und das # vor der Zeileperl fhem.pl configDB
löschen.
Das war's. Ab jetzt wird die gesamte Konfiguration in einer Datenbank gespeichert.
Weitere Details zu dieser "Alternative":
- Fhem Forum - Tester gesucht
- Fhem Forum - Vorüberlegungen