<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://wiki.fhem.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rapster</id>
	<title>FHEMWiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.fhem.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rapster"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Rapster"/>
	<updated>2026-04-10T22:56:27Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=15495</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=15495"/>
		<updated>2016-06-03T15:54:34Z</updated>

		<summary type="html">&lt;p&gt;Rapster: CODEMIRROR: &amp;lt;FHEMWEB&amp;gt; =&amp;gt; TYPE=FHEMWEB&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
=== Syntaxhervorhebung ===&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren, muss folgendes Attribut auf die entsprechende FHEMWEB-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr TYPE=FHEMWEB JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
* &#039;STRG + F&#039; =&amp;gt; Suche starten&lt;br /&gt;
* &#039;STRG + G&#039; =&amp;gt; Zum nächsten Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + G&#039; =&amp;gt; Zum vorherigen Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + F&#039; =&amp;gt; Einzeln Ersetzen&lt;br /&gt;
* &#039;SHIFT + Ctrl + R&#039; =&amp;gt; Im gesamten Dokument Ersetzen&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung der aktuellen Zeile, oder auch mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch-/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
* &#039;ALT + G&#039; =&amp;gt; Jump-To-Line, falls das Modul jump-to-line.js über den entsprechenden codemirrorParam geladen wurde.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit dem FHEMWEB-Attribut &#039;&#039;codemirrorParam&#039;&#039; und den Parametern, welche auf der [https://codemirror.net/doc/manual.html#config codemirror Seite] zu finden sind, noch weiter angepasst werden, z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr TYPE=FHEMWEB codemirrorParam { &amp;quot;indentWithTabs&amp;quot;:false, &amp;quot;indentUnit&amp;quot;:2, &amp;quot;autocomplete&amp;quot;:false, &amp;quot;height&amp;quot;:&amp;quot;auto&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würde der Text statt mit Tabulatoren mit Leerzeichen und statt der standardmäßigen vier Leerzeichen, nur noch mit zwei Leerzeichen bei Verwenden von &#039;TAB&#039; oder &#039;SHIFT+TAB&#039; eingerückt werden, und Autovervollständigung mit STRG+SPACE wird deaktiviert (die Dateien show-hint.js und show-hint.css werden nicht mehr geladen); darüber hinaus wird die Höhe des Editors automatisch dem Inhalt angepasst.&lt;br /&gt;
&lt;br /&gt;
Folgende codemirror-Parameter werden standardmäßig gesetzt und können unter anderen mit dem Attribut &#039;&#039;codemirrorParam&#039;&#039; überschrieben werden:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Standardwert !! Wert !! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;matchBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;matchbrackets.js&#039;&#039; und aktiviert die Markierung zusammengehörender Klammern.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoRefresh&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;autorefresh.js&#039;&#039;, durch welches unter anderem verhindert wird, dass beim zweiten Aufruf von Codemirror ein schwarzer Editor ohne Inhalt angezeigt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;search&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt die Module &#039;&#039;search.js, searchcursor.js, dialog.js&#039;&#039;, sowie den stylesheet &#039;&#039;dialog.css&#039;&#039; und aktiviert die Suchen &amp;amp; Ersetzen Funktionalität.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;comment&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;comment.js&#039;&#039; und aktiviert die Funktionalität mit STRG+Q Zeilen auszukommentieren / Kommentare zu entfernen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocomplete&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;show-hint.js&#039;&#039; sowie den stylesheet &#039;&#039;show-hint.css&#039;&#039; und aktiviert die Funktionalität, mit STRG+SPACE die Autovervollständigung zu verwenden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocompleteAlways&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn zusätzlich zu &amp;quot;autocomplete&amp;quot; aktiviert, wird die Befehlsvervollständigung bei jedem Tastendruck durchgeführt (nicht nur durch STRG+SPACE).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoCloseBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;closebrackets.js&#039;&#039; und aktiviert die Funktionalität, dass ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;jumpToLine&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;jump-to-line.js&#039;&#039; und aktiviert die Funktionalität, dass mit ALT+G zu bestimmten Zeilen gesprungen werden kann.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;jumpToLine_extraKey&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| z.B. &amp;quot;ALT-H&amp;quot;&lt;br /&gt;
| Hierdurch lässt sich die Standardtastenbelegung ALT+G für jumpToLine anpassen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;keyMap&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| &amp;quot;vim&amp;quot;&lt;br /&gt;
| Hierdurch wird wie in dem Beispiel die Datei fhem/www/codemirror/vim.js oder eine andere in diesem Ordner befindliche *.js Datei geladen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentUnit&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| integer&lt;br /&gt;
| Gibt an, wieviele Leerzeichen ein TAB-Block umfasst.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;type&amp;quot;&lt;br /&gt;
| &amp;quot;fhem&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Der Standard codemirror-mode, default wird hier die &#039;&#039;fhem.js&#039;&#039; geladen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;theme&amp;quot;&lt;br /&gt;
| &amp;quot;blackboard&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Das Standard codemirrer-theme, default wird hier die &#039;&#039;blackboard.css&#039;&#039; geladen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentWithTabs&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird mit Tabulator statt Leerzeichen eingerückt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autofocus&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird der Fokus beim laden von codemirror automatisch in das Editor-Fenster gesetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;lineNumbers&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, werden die Zeilennummern im Editor angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;smartIndent&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Kontext-sensitive Einrückung (&#039;&#039;true&#039;&#039;) oder &amp;quot;gleiche Einrückung wie vorherige Zeile&amp;quot; (&#039;&#039;false&#039;&#039;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;height&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| integer / &amp;quot;auto&amp;quot;&lt;br /&gt;
| Entweder die standard, automatische, oder benutzerdefinierte Höhe des Editorfensters verwenden. (Im DEF sowie bei Attributen)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahrenen Benutzern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 (Mmodul) und configdb (Befehl), die in der [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=15494</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=15494"/>
		<updated>2016-06-03T12:14:49Z</updated>

		<summary type="html">&lt;p&gt;Rapster: codemirrorParam&amp;#039;s: jumpToLine_extraKey, keyMap&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
=== Syntaxhervorhebung ===&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren, muss folgendes Attribut auf die entsprechende FHEMWEB-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
* &#039;STRG + F&#039; =&amp;gt; Suche starten&lt;br /&gt;
* &#039;STRG + G&#039; =&amp;gt; Zum nächsten Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + G&#039; =&amp;gt; Zum vorherigen Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + F&#039; =&amp;gt; Einzeln Ersetzen&lt;br /&gt;
* &#039;SHIFT + Ctrl + R&#039; =&amp;gt; Im gesamten Dokument Ersetzen&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung der aktuellen Zeile, oder auch mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch-/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
* &#039;ALT + G&#039; =&amp;gt; Jump-To-Line, falls das Modul jump-to-line.js über den entsprechenden codemirrorParam geladen wurde.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit dem FHEMWEB-Attribut &#039;&#039;codemirrorParam&#039;&#039; und den Parametern, welche auf der [https://codemirror.net/doc/manual.html#config codemirror Seite] zu finden sind, noch weiter angepasst werden, z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; codemirrorParam { &amp;quot;indentWithTabs&amp;quot;:false, &amp;quot;indentUnit&amp;quot;:2, &amp;quot;autocomplete&amp;quot;:false, &amp;quot;height&amp;quot;:&amp;quot;auto&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würde der Text statt mit Tabulatoren mit Leerzeichen und statt der standardmäßigen vier Leerzeichen, nur noch mit zwei Leerzeichen bei Verwenden von &#039;TAB&#039; oder &#039;SHIFT+TAB&#039; eingerückt werden, und Autovervollständigung mit STRG+SPACE wird deaktiviert (die Dateien show-hint.js und show-hint.css werden nicht mehr geladen); darüber hinaus wird die Höhe des Editors automatisch dem Inhalt angepasst.&lt;br /&gt;
&lt;br /&gt;
Folgende codemirror-Parameter werden standardmäßig gesetzt und können unter anderen mit dem Attribut &#039;&#039;codemirrorParam&#039;&#039; überschrieben werden:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Standardwert !! Wert !! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;matchBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;matchbrackets.js&#039;&#039; und aktiviert die Markierung zusammengehörender Klammern.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoRefresh&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;autorefresh.js&#039;&#039;, durch welches unter anderem verhindert wird, dass beim zweiten Aufruf von Codemirror ein schwarzer Editor ohne Inhalt angezeigt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;search&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt die Module &#039;&#039;search.js, searchcursor.js, dialog.js&#039;&#039;, sowie den stylesheet &#039;&#039;dialog.css&#039;&#039; und aktiviert die Suchen &amp;amp; Ersetzen Funktionalität.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;comment&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;comment.js&#039;&#039; und aktiviert die Funktionalität mit STRG+Q Zeilen auszukommentieren / Kommentare zu entfernen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocomplete&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;show-hint.js&#039;&#039; sowie den stylesheet &#039;&#039;show-hint.css&#039;&#039; und aktiviert die Funktionalität, mit STRG+SPACE die Autovervollständigung zu verwenden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocompleteAlways&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn zusätzlich zu &amp;quot;autocomplete&amp;quot; aktiviert, wird die Befehlsvervollständigung bei jedem Tastendruck durchgeführt (nicht nur durch STRG+SPACE).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoCloseBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;closebrackets.js&#039;&#039; und aktiviert die Funktionalität, dass ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;jumpToLine&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;jump-to-line.js&#039;&#039; und aktiviert die Funktionalität, dass mit ALT+G zu bestimmten Zeilen gesprungen werden kann.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;jumpToLine_extraKey&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| z.B. &amp;quot;ALT-H&amp;quot;&lt;br /&gt;
| Hierdurch lässt sich die Standardtastenbelegung ALT+G für jumpToLine anpassen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;keyMap&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| &amp;quot;vim&amp;quot;&lt;br /&gt;
| Hierdurch wird wie in dem Beispiel die Datei fhem/www/codemirror/vim.js oder eine andere in diesem Ordner befindliche *.js Datei geladen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentUnit&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| integer&lt;br /&gt;
| Gibt an, wieviele Leerzeichen ein TAB-Block umfasst.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;type&amp;quot;&lt;br /&gt;
| &amp;quot;fhem&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Der Standard codemirror-mode, default wird hier die &#039;&#039;fhem.js&#039;&#039; geladen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;theme&amp;quot;&lt;br /&gt;
| &amp;quot;blackboard&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Das Standard codemirrer-theme, default wird hier die &#039;&#039;blackboard.css&#039;&#039; geladen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentWithTabs&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird mit Tabulator statt Leerzeichen eingerückt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autofocus&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird der Fokus beim laden von codemirror automatisch in das Editor-Fenster gesetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;lineNumbers&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, werden die Zeilennummern im Editor angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;smartIndent&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Kontext-sensitive Einrückung (&#039;&#039;true&#039;&#039;) oder &amp;quot;gleiche Einrückung wie vorherige Zeile&amp;quot; (&#039;&#039;false&#039;&#039;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;height&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| integer / &amp;quot;auto&amp;quot;&lt;br /&gt;
| Entweder die standard, automatische, oder benutzerdefinierte Höhe des Editorfensters verwenden. (Im DEF sowie bei Attributen)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahrenen Benutzern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 (Mmodul) und configdb (Befehl), die in der [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=15466</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=15466"/>
		<updated>2016-06-02T09:48:15Z</updated>

		<summary type="html">&lt;p&gt;Rapster: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
=== Syntaxhervorhebung ===&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren, muss folgendes Attribut auf die entsprechende FHEMWEB-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
* &#039;STRG + F&#039; =&amp;gt; Suche starten&lt;br /&gt;
* &#039;STRG + G&#039; =&amp;gt; Zum nächsten Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + G&#039; =&amp;gt; Zum vorherigen Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + F&#039; =&amp;gt; Einzeln Ersetzen&lt;br /&gt;
* &#039;SHIFT + Ctrl + R&#039; =&amp;gt; Im gesamten Dokument Ersetzen&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung der aktuellen Zeile, oder auch mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch-/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
* &#039;ALT + G&#039; =&amp;gt; Jump-To-Line, falls das Modul jump-to-line.js über den entsprechenden codemirrorParam geladen wurde.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit dem FHEMWEB-Attribut &#039;&#039;codemirrorParam&#039;&#039; und den Parametern, welche auf der [https://codemirror.net/doc/manual.html#config codemirror Seite] zu finden sind, noch weiter angepasst werden, z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; codemirrorParam { &amp;quot;indentWithTabs&amp;quot;:false, &amp;quot;indentUnit&amp;quot;:2, &amp;quot;autocomplete&amp;quot;:false, &amp;quot;height&amp;quot;:&amp;quot;auto&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würde der Text statt mit Tabulatoren mit Leerzeichen und statt der standardmäßigen vier Leerzeichen, nur noch mit zwei Leerzeichen bei Verwenden von &#039;TAB&#039; oder &#039;SHIFT+TAB&#039; eingerückt werden, und Autovervollständigung mit STRG+SPACE wird deaktiviert (die Dateien show-hint.js und show-hint.css werden nicht mehr geladen); darüber hinaus wird die Höhe des Editors automatisch dem Inhalt angepasst.&lt;br /&gt;
&lt;br /&gt;
Folgende codemirror-Parameter werden standardmäßig gesetzt und können unter anderen mit dem Attribut &#039;&#039;codemirrorParam&#039;&#039; überschrieben werden:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Standardwert !! Wert !! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;matchBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;matchbrackets.js&#039;&#039; und aktiviert die Markierung zusammengehörender Klammern.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoRefresh&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;autorefresh.js&#039;&#039;, durch welches unter anderem verhindert wird, dass beim zweiten Aufruf von Codemirror ein schwarzer Editor ohne Inhalt angezeigt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;search&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt die Module &#039;&#039;search.js, searchcursor.js, dialog.js&#039;&#039;, sowie den stylesheet &#039;&#039;dialog.css&#039;&#039; und aktiviert die Suchen &amp;amp; Ersetzen Funktionalität.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;comment&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;comment.js&#039;&#039; und aktiviert die Funktionalität mit STRG+Q Zeilen auszukommentieren / Kommentare zu entfernen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocomplete&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;show-hint.js&#039;&#039; sowie den stylesheet &#039;&#039;show-hint.css&#039;&#039; und aktiviert die Funktionalität, mit STRG+SPACE die Autovervollständigung zu verwenden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocompleteAlways&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn zusätzlich zu &amp;quot;autocomplete&amp;quot; aktiviert, wird die Befehlsvervollständigung bei jedem Tastendruck durchgeführt (nicht nur durch STRG+SPACE).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoCloseBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;closebrackets.js&#039;&#039; und aktiviert die Funktionalität, dass ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;jumpToLine&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;jump-to-line.js&#039;&#039; und aktiviert die Funktionalität, dass mit ALT+G zu bestimmten Zeilen gesprungen werden kann.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentUnit&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| integer&lt;br /&gt;
| Gibt an, wieviele Leerzeichen ein TAB-Block umfasst.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;type&amp;quot;&lt;br /&gt;
| &amp;quot;fhem&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Der Standard codemirror-mode, default wird hier die &#039;&#039;fhem.js&#039;&#039; geladen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;theme&amp;quot;&lt;br /&gt;
| &amp;quot;blackboard&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Das Standard codemirrer-theme, default wird hier die &#039;&#039;blackboard.css&#039;&#039; geladen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentWithTabs&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird mit Tabulator statt Leerzeichen eingerückt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autofocus&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird der Fokus beim laden von codemirror automatisch in das Editor-Fenster gesetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;lineNumbers&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, werden die Zeilennummern im Editor angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;smartIndent&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Kontext-sensitive Einrückung (&#039;&#039;true&#039;&#039;) oder &amp;quot;gleiche Einrückung wie vorherige Zeile&amp;quot; (&#039;&#039;false&#039;&#039;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;height&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| integer / &amp;quot;auto&amp;quot;&lt;br /&gt;
| Entweder die standard, automatische, oder benutzerdefinierte Höhe des Editorfensters verwenden. (Im DEF sowie bei Attributen)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahrenen Benutzern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 (Mmodul) und configdb (Befehl), die in der [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=15465</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=15465"/>
		<updated>2016-06-02T08:44:29Z</updated>

		<summary type="html">&lt;p&gt;Rapster: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
=== Syntaxhervorhebung ===&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren, muss folgendes Attribut auf die entsprechende FHEMWEB-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
* &#039;STRG + F: Suche starten&lt;br /&gt;
* &#039;STRG + G: Zum nächsten Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + G: Zum vorherigen Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + F: Einzeln Ersetzen&lt;br /&gt;
* &#039;SHIFT + Ctrl + R: Im gesamten Dokument Ersetzen&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung der aktuellen Zeile, oder auch mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch-/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
* &#039;ALT + G&#039; =&amp;gt; Jump-To-Line, falls das Modul jump-to-line.js über den entsprechenden codemirrorParam geladen wurde.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit dem FHEMWEB-Attribut &#039;&#039;codemirrorParam&#039;&#039; und den Parametern, welche auf der [https://codemirror.net/doc/manual.html#config codemirror Seite] zu finden sind, noch weiter angepasst werden, z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; codemirrorParam { &amp;quot;indentWithTabs&amp;quot;:false, &amp;quot;indentUnit&amp;quot;:2, &amp;quot;autocomplete&amp;quot;:false, &amp;quot;height&amp;quot;:&amp;quot;auto&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würde der Text statt mit Tabulatoren mit Leerzeichen und statt der standardmäßigen vier Leerzeichen, nur noch mit zwei Leerzeichen bei Verwenden von &#039;TAB&#039; oder &#039;SHIFT+TAB&#039; eingerückt werden, und Autovervollständigung mit STRG+SPACE wird deaktiviert (die Dateien show-hint.js und show-hint.css werden nicht mehr geladen); darüber hinaus wird die Höhe des Editors automatisch dem Inhalt angepasst.&lt;br /&gt;
&lt;br /&gt;
Folgende codemirror-Parameter werden standardmäßig gesetzt und können unter anderen mit dem Attribut &#039;&#039;codemirrorParam&#039;&#039; überschrieben werden:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Standardwert !! Wert !! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;matchBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;matchbrackets.js&#039;&#039; und aktiviert die Markierung zusammengehörender Klammern.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoRefresh&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;autorefresh.js&#039;&#039;, durch welches unter anderem verhindert wird, dass beim zweiten Aufruf von Codemirror ein schwarzer Editor ohne Inhalt angezeigt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;search&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt die Module &#039;&#039;search.js, searchcursor.js, dialog.js&#039;&#039;, sowie den stylesheet &#039;&#039;dialog.css&#039;&#039; und aktiviert die Suchen &amp;amp; Ersetzen Funktionalität.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;comment&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;comment.js&#039;&#039; und aktiviert die Funktionalität mit STRG+Q Zeilen auszukommentieren / Kommentare zu entfernen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocomplete&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;show-hint.js&#039;&#039; sowie den stylesheet &#039;&#039;show-hint.css&#039;&#039; und aktiviert die Funktionalität, mit STRG+SPACE die Autovervollständigung zu verwenden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocompleteAlways&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn zusätzlich zu &amp;quot;autocomplete&amp;quot; aktiviert, wird die Befehlsvervollständigung bei jedem Tastendruck durchgeführt (nicht nur durch STRG+SPACE).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoCloseBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;closebrackets.js&#039;&#039; und aktiviert die Funktionalität, dass ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;jumpToLine&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;jump-to-line.js&#039;&#039; und aktiviert die Funktionalität, dass mit ALT+G zu bestimmten Zeilen gesprungen werden kann.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentUnit&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| integer&lt;br /&gt;
| Gibt an, wieviele Leerzeichen ein TAB-Block umfasst.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;type&amp;quot;&lt;br /&gt;
| &amp;quot;fhem&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Der Standard codemirror-mode, default wird hier die &#039;&#039;fhem.js&#039;&#039; geladen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;theme&amp;quot;&lt;br /&gt;
| &amp;quot;blackboard&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Das Standard codemirrer-theme, default wird hier die &#039;&#039;blackboard.css&#039;&#039; geladen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentWithTabs&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird mit Tabulator statt Leerzeichen eingerückt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autofocus&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird der Fokus beim laden von codemirror automatisch in das Editor-Fenster gesetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;lineNumbers&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, werden die Zeilennummern im Editor angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;smartIndent&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Kontext-sensitive Einrückung (&#039;&#039;true&#039;&#039;) oder &amp;quot;gleiche Einrückung wie vorherige Zeile&amp;quot; (&#039;&#039;false&#039;&#039;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;height&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| integer / &amp;quot;auto&amp;quot;&lt;br /&gt;
| Entweder die standard, automatische, oder benutzerdefinierte Höhe des Editorfensters verwenden. (Im DEF sowie bei Attributen)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahrenen Benutzern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 (Mmodul) und configdb (Befehl), die in der [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=15464</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=15464"/>
		<updated>2016-06-02T08:44:12Z</updated>

		<summary type="html">&lt;p&gt;Rapster: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
=== Syntaxhervorhebung ===&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren, muss folgendes Attribut auf die entsprechende FHEMWEB-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
* &#039;STRG + F: Suche starten&lt;br /&gt;
* &#039;STRG + G: Zum nächsten Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + G: Zum vorherigen Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + F: Einzeln Ersetzen&lt;br /&gt;
* &#039;SHIFT + Ctrl + R: Im gesamten Dokument Ersetzen&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung der aktuellen Zeile, oder auch mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch-/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
* &#039;ALT + G&#039; =&amp;gt; Jump-To-Line, falls das Modul jump-to-line.js über den entsprechenden codemirrorParam geladen wurde.&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit dem FHEMWEB-Attribut &#039;&#039;codemirrorParam&#039;&#039; und den Parametern, welche auf der [https://codemirror.net/doc/manual.html#config codemirror Seite] zu finden sind, noch weiter angepasst werden, z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; codemirrorParam { &amp;quot;indentWithTabs&amp;quot;:false, &amp;quot;indentUnit&amp;quot;:2, &amp;quot;autocomplete&amp;quot;:false, &amp;quot;height&amp;quot;:&amp;quot;auto&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würde der Text statt mit Tabulatoren mit Leerzeichen und statt der standardmäßigen vier Leerzeichen, nur noch mit zwei Leerzeichen bei Verwenden von &#039;TAB&#039; oder &#039;SHIFT+TAB&#039; eingerückt werden, und Autovervollständigung mit STRG+SPACE wird deaktiviert (die Dateien show-hint.js und show-hint.css werden nicht mehr geladen); darüber hinaus wird die Höhe des Editors automatisch dem Inhalt angepasst.&lt;br /&gt;
&lt;br /&gt;
Folgende codemirror-Parameter werden standardmäßig gesetzt und können unter anderen mit dem Attribut &#039;&#039;codemirrorParam&#039;&#039; überschrieben werden:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Standardwert !! Wert !! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;matchBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;matchbrackets.js&#039;&#039; und aktiviert die Markierung zusammengehörender Klammern.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoRefresh&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;autorefresh.js&#039;&#039;, durch welches unter anderem verhindert wird, dass beim zweiten Aufruf von Codemirror ein schwarzer Editor ohne Inhalt angezeigt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;search&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt die Module &#039;&#039;search.js, searchcursor.js, dialog.js&#039;&#039;, sowie den stylesheet &#039;&#039;dialog.css&#039;&#039; und aktiviert die Suchen &amp;amp; Ersetzen Funktionalität.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;comment&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;comment.js&#039;&#039; und aktiviert die Funktionalität mit STRG+Q Zeilen auszukommentieren / Kommentare zu entfernen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocomplete&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;show-hint.js&#039;&#039; sowie den stylesheet &#039;&#039;show-hint.css&#039;&#039; und aktiviert die Funktionalität, mit STRG+SPACE die Autovervollständigung zu verwenden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocompleteAlways&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn zusätzlich zu &amp;quot;autocomplete&amp;quot; aktiviert, wird die Befehlsvervollständigung bei jedem Tastendruck durchgeführt (nicht nur durch STRG+SPACE).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoCloseBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;closebrackets.js&#039;&#039; und aktiviert die Funktionalität, dass ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;jumpToLine&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;jump-to-line.js&#039;&#039; und aktiviert die Funktionalität, dass mit ALT+G zu bestimmten Zeilen gesprungen werden kann.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentUnit&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| integer&lt;br /&gt;
| Gibt an, wieviele Leerzeichen ein TAB-Block umfasst.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;type&amp;quot;&lt;br /&gt;
| &amp;quot;fhem&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Der Standard codemirror-mode, default wird hier die &#039;&#039;fhem.js&#039;&#039; geladen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;theme&amp;quot;&lt;br /&gt;
| &amp;quot;blackboard&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Das Standard codemirrer-theme, default wird hier die &#039;&#039;blackboard.css&#039;&#039; geladen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentWithTabs&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird mit Tabulator statt Leerzeichen eingerückt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autofocus&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird der Fokus beim laden von codemirror automatisch in das Editor-Fenster gesetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;lineNumbers&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, werden die Zeilennummern im Editor angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;smartIndent&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Kontext-sensitive Einrückung (&#039;&#039;true&#039;&#039;) oder &amp;quot;gleiche Einrückung wie vorherige Zeile&amp;quot; (&#039;&#039;false&#039;&#039;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;height&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| integer / &amp;quot;auto&amp;quot;&lt;br /&gt;
| Entweder die standard, automatische, oder benutzerdefinierte Höhe des Editorfensters verwenden. (Im DEF sowie bei Attributen)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahrenen Benutzern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 (Mmodul) und configdb (Befehl), die in der [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=15463</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=15463"/>
		<updated>2016-06-02T08:32:04Z</updated>

		<summary type="html">&lt;p&gt;Rapster: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
=== Syntaxhervorhebung ===&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren, muss folgendes Attribut auf die entsprechende FHEMWEB-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
* &#039;STRG + F: Suche starten&lt;br /&gt;
* &#039;STRG + G: Zum nächsten Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + G: Zum vorherigen Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + F: Einzeln Ersetzen&lt;br /&gt;
* &#039;SHIFT + Ctrl + R: Im gesamten Dokument Ersetzen&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung der aktuellen Zeile, oder auch mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch-/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit dem FHEMWEB-Attribut &#039;&#039;codemirrorParam&#039;&#039; und den Parametern, welche auf der [https://codemirror.net/doc/manual.html#config codemirror Seite] zu finden sind, noch weiter angepasst werden, z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; codemirrorParam { &amp;quot;indentWithTabs&amp;quot;:false, &amp;quot;indentUnit&amp;quot;:2, &amp;quot;autocomplete&amp;quot;:false, &amp;quot;height&amp;quot;:&amp;quot;auto&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würde der Text statt mit Tabulatoren mit Leerzeichen und statt der standardmäßigen vier Leerzeichen, nur noch mit zwei Leerzeichen bei Verwenden von &#039;TAB&#039; oder &#039;SHIFT+TAB&#039; eingerückt werden, und Autovervollständigung mit STRG+SPACE wird deaktiviert (die Dateien show-hint.js und show-hint.css werden nicht mehr geladen); darüber hinaus wird die Höhe des Editors automatisch dem Inhalt angepasst.&lt;br /&gt;
&lt;br /&gt;
Folgende codemirror-Parameter werden standardmäßig gesetzt und können unter anderen mit dem Attribut &#039;&#039;codemirrorParam&#039;&#039; überschrieben werden:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Standardwert !! Wert !! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;matchBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;matchbrackets.js&#039;&#039; und aktiviert die Markierung zusammengehörender Klammern.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoRefresh&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;autorefresh.js&#039;&#039;, durch welches unter anderem verhindert wird, dass beim zweiten Aufruf von Codemirror ein schwarzer Editor ohne Inhalt angezeigt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;search&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt die Module &#039;&#039;search.js, searchcursor.js, dialog.js&#039;&#039;, sowie den stylesheet &#039;&#039;dialog.css&#039;&#039; und aktiviert die Suchen &amp;amp; Ersetzen Funktionalität.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;comment&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;comment.js&#039;&#039; und aktiviert die Funktionalität mit STRG+Q Zeilen auszukommentieren / Kommentare zu entfernen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocomplete&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;show-hint.js&#039;&#039; sowie den stylesheet &#039;&#039;show-hint.css&#039;&#039; und aktiviert die Funktionalität, mit STRG+SPACE die Autovervollständigung zu verwenden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocompleteAlways&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn zusätzlich zu &amp;quot;autocomplete&amp;quot; aktiviert, wird die Befehlsvervollständigung bei jedem Tastendruck durchgeführt (nicht nur durch STRG+SPACE).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoCloseBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;closebrackets.js&#039;&#039; und aktiviert die Funktionalität, dass ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;jumpToLine&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;jump-to-line.js&#039;&#039; und aktiviert die Funktionalität, dass mit ALT+G zu bestimmten Zeilen gesprungen werden kann.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentUnit&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| integer&lt;br /&gt;
| Gibt an, wieviele Leerzeichen ein TAB-Block umfasst.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;type&amp;quot;&lt;br /&gt;
| &amp;quot;fhem&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Der Standard codemirror-mode, default wird hier die &#039;&#039;fhem.js&#039;&#039; geladen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;theme&amp;quot;&lt;br /&gt;
| &amp;quot;blackboard&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Das Standard codemirrer-theme, default wird hier die &#039;&#039;blackboard.css&#039;&#039; geladen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentWithTabs&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird mit Tabulator statt Leerzeichen eingerückt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autofocus&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird der Fokus beim laden von codemirror automatisch in das Editor-Fenster gesetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;lineNumbers&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, werden die Zeilennummern im Editor angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;smartIndent&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Kontext-sensitive Einrückung (&#039;&#039;true&#039;&#039;) oder &amp;quot;gleiche Einrückung wie vorherige Zeile&amp;quot; (&#039;&#039;false&#039;&#039;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;height&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| integer / &amp;quot;auto&amp;quot;&lt;br /&gt;
| Entweder die standard, automatische, oder benutzerdefinierte Höhe des Editorfensters verwenden. (Im DEF sowie bei Attributen)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahrenen Benutzern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 (Mmodul) und configdb (Befehl), die in der [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=15459</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=15459"/>
		<updated>2016-06-01T21:54:15Z</updated>

		<summary type="html">&lt;p&gt;Rapster: codemirrorParam jumpToLine hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
=== Syntaxhervorhebung ===&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren muss folgendes Attribut auf die entsprechende fhemweb-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
* &#039;STRG + F: Suche starten&lt;br /&gt;
* &#039;STRG + G: Zum nächsten Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + G: Zum vorherigen Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + F: Einzeln Ersetzen&lt;br /&gt;
* &#039;SHIFT + Ctrl + R: Im gesamten Dokument Ersetzen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung der aktuellen Zeile, oder auch mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch-/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit dem FHEMWEB-Attribut &#039;codemirrorParam&#039; und den Parametern welche unter https://codemirror.net/doc/manual.html#config zu finden sind noch weiter angepasst werden. z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; codemirrorParam { &amp;quot;indentWithTabs&amp;quot;:false, &amp;quot;indentUnit&amp;quot;:2, &amp;quot;autocomplete&amp;quot;:false, &amp;quot;height&amp;quot;:&amp;quot;auto&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würde der Text statt mit Tabulatoren mit Leerzeichen und statt den default 4 Leerzeichen, nurnoch mit 2 Leerzeichen bei verwenden von &#039;TAB&#039; oder &#039;SHIFT+TAB&#039; eingerückt werden, &lt;br /&gt;
und Autovervollständigung mit STRG+SPACE wird deaktiviert (die Dateien show-hint.js und show-hint.css werden nicht mehr geladen), sowie wird die Höhe des Editors automatisch dem Inhalt angepasst.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende codemirror-Parameter werden standardmäßig gesetzt und können unter anderen mit dem Attribut codemirrorParam überschrieben werden:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Standardwert !! Wert !! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;matchBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;matchbrackets.js&#039;&#039; und aktiviert die Markierung zusammengehörender Klammern.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoRefresh&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;autorefresh.js&#039;&#039; durch welches unter anderem verhindert wird dass beim zweiten Aufruf von Codemirror ein schwarzer Editor ohne Inhalt angezeigt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;search&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt die Module &#039;&#039;search.js, searchcursor.js, dialog.js&#039;&#039;, sowie den stylesheet &#039;&#039;dialog.css&#039;&#039; und aktiviert die Suchen &amp;amp; Ersetzen Funktionalität.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;comment&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;comment.js&#039;&#039; und aktiviert die Funktionalität mit STRG+Q Zeilen auszukommentieren / Kommentare zu entfernen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocomplete&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;show-hint.js&#039;&#039;, sowie den stylesheet &#039;&#039;show-hint.css&#039;&#039; und aktiviert die Funktionalität mit STRG+SPACE die Autovervollständigung zu verwenden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocompleteAlways&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn zusätzlich zu &amp;quot;autocomplete&amp;quot; aktiviert, wird die Befehlsvervollständigung bei jedem Tastendruck durchgeführt (nicht nur durch STRG+SPACE).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoCloseBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;closebrackets.js&#039;&#039; und aktiviert die Funktionalität dass ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;jumpToLine&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;jump-to-line.js&#039;&#039; und aktiviert die Funktionalität dass mit ALT+G zu bestimmten Zeilen gesprungen werden kann.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentUnit&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| integer&lt;br /&gt;
| Gibt an wieviele Leerzeichen ein TAB-Block umfasst.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;type&amp;quot;&lt;br /&gt;
| &amp;quot;fhem&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Der Standard codemirror-mode, default wird hier die &#039;&#039;fhem.js&#039;&#039; geladen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;theme&amp;quot;&lt;br /&gt;
| &amp;quot;blackboard&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Das Standard codemirrer-theme, default wird hier die &#039;&#039;blackboard.css&#039;&#039; geladen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentWithTabs&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird mit Tabulator statt Leerzeichen eingerückt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autofocus&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird der Fokus beim laden von codemirror automatisch in das Editor-Fenster gesetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;lineNumbers&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, werden die Zeilennummern im Editor angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;smartIndent&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Whether to use the context-sensitive indentation that the mode provides (or just indent the same as the line before).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;height&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| integer / &amp;quot;auto&amp;quot;&lt;br /&gt;
| Entweder die standard, automatische, oder benutzerdefinierte Höhe des Editorfensters Verwenden. (Im DEF sowie bei Attributen)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
* ...&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahreneren Usern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=15162</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=15162"/>
		<updated>2016-04-19T14:00:37Z</updated>

		<summary type="html">&lt;p&gt;Rapster: New codemirrorParam &amp;quot;height&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
=== Syntaxhervorhebung ===&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren muss folgendes Attribut auf die entsprechende fhemweb-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
* &#039;STRG + F: Suche starten&lt;br /&gt;
* &#039;STRG + G: Zum nächsten Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + G: Zum vorherigen Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + F: Einzeln Ersetzen&lt;br /&gt;
* &#039;SHIFT + Ctrl + R: Im gesamten Dokument Ersetzen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung der aktuellen Zeile, oder auch mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch-/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit dem FHEMWEB-Attribut &#039;codemirrorParam&#039; und den Parametern welche unter https://codemirror.net/doc/manual.html#config zu finden sind noch weiter angepasst werden. z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; codemirrorParam { &amp;quot;indentWithTabs&amp;quot;:false, &amp;quot;indentUnit&amp;quot;:2, &amp;quot;autocomplete&amp;quot;:false, &amp;quot;height&amp;quot;:&amp;quot;auto&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würde der Text statt mit Tabulatoren mit Leerzeichen und statt den default 4 Leerzeichen, nurnoch mit 2 Leerzeichen bei verwenden von &#039;TAB&#039; oder &#039;SHIFT+TAB&#039; eingerückt werden, &lt;br /&gt;
und Autovervollständigung mit STRG+SPACE wird deaktiviert (die Dateien show-hint.js und show-hint.css werden nicht mehr geladen), sowie wird die Höhe des Editors automatisch dem Inhalt angepasst.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende codemirror-Parameter werden standardmäßig gesetzt und können unter anderen mit dem Attribut codemirrorParam überschrieben werden:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Standardwert !! Wert !! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;matchBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;matchbrackets.js&#039;&#039; und aktiviert die Markierung zusammengehörender Klammern.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoRefresh&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;autorefresh.js&#039;&#039; durch welches unter anderem verhindert wird dass beim zweiten Aufruf von Codemirror ein schwarzer Editor ohne Inhalt angezeigt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;search&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt die Module &#039;&#039;search.js, searchcursor.js, dialog.js&#039;&#039;, sowie den stylesheet &#039;&#039;dialog.css&#039;&#039; und aktiviert die Suchen &amp;amp; Ersetzen Funktionalität.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;comment&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;comment.js&#039;&#039; und aktiviert die Funktionalität mit STRG+Q Zeilen auszukommentieren / Kommentare zu entfernen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocomplete&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;show-hint.js&#039;&#039;, sowie den stylesheet &#039;&#039;show-hint.css&#039;&#039; und aktiviert die Funktionalität mit STRG+SPACE die Autovervollständigung zu verwenden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocompleteAlways&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn zusätzlich zu &amp;quot;autocomplete&amp;quot; aktiviert, wird die Befehlsvervollständigung bei jedem Tastendruck durchgeführt (nicht nur durch STRG+SPACE).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoCloseBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;closebrackets.js&#039;&#039; und aktiviert die Funktionalität dass ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentUnit&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| integer&lt;br /&gt;
| Gibt an wieviele Leerzeichen ein TAB-Block umfasst.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;type&amp;quot;&lt;br /&gt;
| &amp;quot;fhem&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Der Standard codemirror-mode, default wird hier die &#039;&#039;fhem.js&#039;&#039; geladen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;theme&amp;quot;&lt;br /&gt;
| &amp;quot;blackboard&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Das Standard codemirrer-theme, default wird hier die &#039;&#039;blackboard.css&#039;&#039; geladen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentWithTabs&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird mit Tabulator statt Leerzeichen eingerückt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autofocus&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird der Fokus beim laden von codemirror automatisch in das Editor-Fenster gesetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;lineNumbers&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, werden die Zeilennummern im Editor angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;smartIndent&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Whether to use the context-sensitive indentation that the mode provides (or just indent the same as the line before).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;height&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| integer / &amp;quot;auto&amp;quot;&lt;br /&gt;
| Entweder die standard, automatische, oder benutzerdefinierte Höhe des Editorfensters Verwenden. (Im DEF sowie bei Attributen)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
* ...&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahreneren Usern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HttpUtils&amp;diff=12791</id>
		<title>HttpUtils</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HttpUtils&amp;diff=12791"/>
		<updated>2015-11-06T18:57:40Z</updated>

		<summary type="html">&lt;p&gt;Rapster: fixed sslargs example for SSL_verify_mode&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Hilfsfunktionen für HTTP-Zugriffe&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=HttpUtils.pm&lt;br /&gt;
|ModOwner=rudolfkoenig ({{Link2FU|8|Forum}} / [[Benutzer Diskussion:Rudolfkoenig|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[HttpUtils]](.pm) ist sowohl für Modulentwickler als auch für Endanwender gedacht, um Daten via HTTP auszutauschen. Es stellt dabei eine Reihe von Funktionen zur Verfügung und wird beispielsweise vom Modul [[HTTPMOD]] intensiv genutzt.&lt;br /&gt;
&lt;br /&gt;
== Funktionen ==&lt;br /&gt;
Es ist zu beachten, dass bei den Funktionen&lt;br /&gt;
* GetHttpFile&lt;br /&gt;
* GetFileFromURL&lt;br /&gt;
* GetFileFromURLQuiet&lt;br /&gt;
* HttpUtils_BlockingGet&lt;br /&gt;
ein sogenannter &amp;quot;blockierender&amp;quot; Aufruf durchgeführt wird. Das bedeutet, dass FHEM bei einem Aufruf einer dieser Funktionen solange wartet und dabei absolut nichts macht, bis die Antwort vom HTTP-Server eintrifft und die Funktion damit beendet ist. Das kann bei Verbindungsproblemen evtl. dazu führen, dass FHEM für die gesamte Wartezeit (Timeout) steht und nichts verarbeitet. Problematisch ist das gerade bei Anwendungen oder Hardware, die eine zeitnahe Reaktion von FHEM erwarten (z.B. HomeMatic-Geräte).&lt;br /&gt;
&lt;br /&gt;
Es wird daher empfohlen, die Funktionen so sparsam wie möglich zu verwenden und die Timeouts so niedrig wie möglich zu halten, um ein längeres Einfrieren von FHEM möglichst zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann die Funktion &lt;br /&gt;
:&amp;lt;code&amp;gt;HttpUtils_NonblockingGet&amp;lt;/code&amp;gt;&lt;br /&gt;
verwendet werden, welche ein Blockieren von FHEM verhindert. Wie das genau funktioniert, wird in dem entsprechenden Kapitel beschrieben.&lt;br /&gt;
&lt;br /&gt;
Die im Folgenden beschriebenen Funktionen sind für Modulentwickler/Endanwender zur direkten Nutzung gedacht.&lt;br /&gt;
&lt;br /&gt;
=== GetHttpFile ===&lt;br /&gt;
Die Funktion GetHttpFile ist die denkbar einfachste Variante um eine URL aufzurufen. &lt;br /&gt;
:&amp;lt;code&amp;gt;GetHttpFile($server, $file)&amp;lt;/code&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter!! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$server&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mandatory&#039;&#039;&lt;br /&gt;
|| Der DNS-Name oder die IP-Adresse des HTTP-Servers&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;www.myhost.com&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;192.168.0.10&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$file&amp;lt;/code&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mandatory&#039;&#039;&lt;br /&gt;
|| Die Datei, welche auf dem HTTP-Server aufgerufen werden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
* &#039;&#039;/&#039;&#039;&lt;br /&gt;
* &#039;&#039;/index.html&#039;&#039;&lt;br /&gt;
* &#039;&#039;/directory/image.jpg&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Funktionsergebnis ist der Inhalt der aufgerufenen Seite in Form einer Zeichenkette.&lt;br /&gt;
&lt;br /&gt;
=== GetFileFromURL ===&lt;br /&gt;
Die Funktion GetFileFromURL ruft die HTTP-URL auf und gibt als Funktionsergebnis den Seiteninhalt zurück. Im Gegensatz zu GetHttpFile beinhaltet GetFileFromURL einige Zusatzoptionen in Form von Funktionsparametern.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Aufruf: &amp;lt;code&amp;gt;GetFileFromURL($url, &#039;&#039;[$timeout], [$data], [$noshutdown], [$loglevel]&#039;&#039;)&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter!! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$url&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mandatory&#039;&#039;&lt;br /&gt;
|| Die HTTP-URL, welche aufgerufen werden soll. Diese kann optional Usernamen, Passwort und einen Port enthalten. Sowohl HTTP als auch HTTPS wird hierbei unterstützt.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;http://www.myhost.com/directory/&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;https://www.myhost.com/&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;http://www.myhost.com:8080/&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;http://foo:bar@www.myhost.com/&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$timeout&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Die maximale Dauer in Sekunden für die HTTP-Anfrage&lt;br /&gt;
&lt;br /&gt;
Beispiel: 5 &#039;&#039;(Sekunden)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Standardwert: 4 Sekunden&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$data&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Wenn man Daten via HTTP-POST übertragen möchte, so kann man die Nutzdaten über $data übergeben. Die Daten werden dabei als Formulardaten übertragen. Wenn man den Content-Type beeinflussen oder mehrere Formular-Felder senden möchte, sollte man zur Funktion HttpUtils_BlockingGet oder HttpUtils_NonblockingGet greifen.&lt;br /&gt;
&lt;br /&gt;
Standardwert: &#039;&#039;[leer]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$noshutdown&amp;lt;/code&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Wenn $noshutdown auf 1 gesetzt ist, wird dem HTTP-Server nicht implizit mitgeteilt, dass die Verbindung nach dem Request geschlossen werden soll. Viele Webserver schließen in solch einem Fall die Verbindung, bevor sie die Antwort senden. Bei 0 wird dem Webserver mitgeteilt, dass der Sendevorgang beendet ist und nun die Antwort abgewartet wird.&lt;br /&gt;
&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$loglevel&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Das [[verbose|Loglevel]], in dem sämtliche Logmeldungen zu dieser HTTP-Abfrage erzeugt werden sollen.&lt;br /&gt;
&lt;br /&gt;
Standardwert: 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Funktionsergebnis ist der Inhalt der aufgerufenen Seite in Form eines Strings.&lt;br /&gt;
&lt;br /&gt;
=== GetFileFromURLQuiet ===&lt;br /&gt;
Diese Funktion funktioniert ähnlich wie GetFileFromURL. Allerdings wird die tatsächliche URL in allen erzeugten Log-Meldungen unkenntlich gemacht um z.B. Zugangsdaten nicht preiszugeben. Die aufgerufene Seite wird ebenfalls als Funktionsergebnis zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Aufruf: &amp;lt;code&amp;gt;GetFileFromURLQuiet($url, &#039;&#039;[$timeout], [$data], [$noshutdown], [$loglevel]&#039;&#039;)&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter!! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$url&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mandatory&#039;&#039;&lt;br /&gt;
|| Die HTTP-URL, welche aufgerufen werden soll. Diese kann optional Usernamen, Passwort und einen Port enthalten. Sowohl HTTP als auch HTTPS wird hierbei unterstützt.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;http://www.myhost.com/directory/&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;https://www.myhost.com/&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;http://www.myhost.com:8080/&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;http://foo:bar@www.myhost.com/&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$timeout&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Die maximale Dauer in Sekunden für die HTTP-Anfrage&lt;br /&gt;
&lt;br /&gt;
Beispiel: 5 &#039;&#039;(Sekunden)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Standardwert: 4 Sekunden&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$data&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Wenn man Daten via HTTP-POST übertragen möchte, so kann man die Nutzdaten über &amp;lt;code&amp;gt;$data&amp;lt;/code&amp;gt; übergeben. Die Daten werden dabei als Formulardaten übertragen. Wenn man den Content-Type beeinflussen möchte, oder mehrere Formular-Felder senden möchte, sollte man zur Funktion HttpUtils_BlockingGet oder HttpUtils_NonblockingGet greifen.&lt;br /&gt;
&lt;br /&gt;
Standardwert: &#039;&#039;[leer]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$noshutdown&amp;lt;/code&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Wenn $noshutdown auf 1 gesetzt ist, wird dem HTTP-Server nicht implizit mitgeteilt, dass die Verbindung nach dem Request geschlossen werden soll. Viele Webserver schließen in solch einem Fall die Verbindung bevor, sie die Antwort senden. Bei 0 wird dem Webserver mitgeteilt, dass der Sendevorgang beendet ist und nun die Antwort abgewartet wird.&lt;br /&gt;
&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$loglevel&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Das Loglevel, in dem sämtliche Logmeldungen zu dieser HTTP-Abfrage erzeugt werden sollen.&lt;br /&gt;
&lt;br /&gt;
Standardwert: 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Funktionsergebnis ist der Inhalt der aufgerufenen Seite in Form eines Strings.&lt;br /&gt;
&lt;br /&gt;
=== HttpUtils_BlockingGet ===&lt;br /&gt;
Wenn die bisher genannten Funktionen nicht ausreichen um die gewünschte Abfrage durchzuführen, so kann man diese Funktion verwenden. Aufgrund zahlreicher Parameter ermöglicht sie viele Anpassungsmöglichkeiten. Diese Funktion hat dabei nicht wie üblich eine Liste an Funktionsparametern, sondern lediglich einen Parameter, welcher eine Hashreferenz mit allen Funktionsparametern darstellt. Dieser Hash enthält sämtliche Parameter inkl. Werten. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Aufruf: &amp;lt;code&amp;gt;HttpUtils_BlockingGet($param)&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Parameter $param ist eine Referenz auf eine Hash-Struktur, welche die einzelnen Parameter enthält. Der Hash $param kann folgende Optionen beinhalten:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:175px&amp;quot; | Parameter !! style=&amp;quot;width:auto&amp;quot; | Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{url}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mandatory&#039;&#039;&lt;br /&gt;
 || Die HTTP-URL, welche aufgerufen werden soll. Diese kann optional Usernamen, Passwort und einen Port enthalten. Sowohl HTTP als auch HTTPS wird hierbei unterstützt.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;http://www.myhost.com/directory/&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;https://www.myhost.com/&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;http://www.myhost.com:8080/&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;http://foo:bar@www.myhost.com/&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; |&#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{timeout}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Die maximale Dauer in Sekunden für die HTTP-Anfrage&lt;br /&gt;
&lt;br /&gt;
Beispiel: 5 &#039;&#039;(Sekunden)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Standardwert: 4 Sekunden&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; |&#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{data}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Wenn man Daten via HTTP-POST übertragen möchte, so kann man die Nutzdaten über &amp;lt;code&amp;gt;$param-&amp;gt;{data}&amp;lt;/code&amp;gt; übergeben. Die Daten werden dabei als Formulardaten übertragen. Die Daten können dabei auf zwei Arten übergeben werden:&lt;br /&gt;
&lt;br /&gt;
1. Daten als String:&lt;br /&gt;
:* Die Daten werden komplett als gesamter String in &amp;lt;code&amp;gt;$param-&amp;gt;{data}&amp;lt;/code&amp;gt; abgelegt (z.B.: $param-&amp;gt;{data} = &amp;quot;Jede Menge tolle Daten&amp;quot;).&lt;br /&gt;
2. Daten als Hash:&lt;br /&gt;
:* Die Daten werden als Hash mit Key-Value-Pairs übergeben (z.B.: &amp;lt;code&amp;gt;$param-&amp;gt;{data}{field1} = &amp;quot;value1&amp;quot;, $param{data}{field2} = &amp;quot;value2&amp;quot;, ...&amp;lt;/code&amp;gt; ). Die Daten werden dann als Formulardaten mit mehrfachen Datenfeldern übertragen.&lt;br /&gt;
&lt;br /&gt;
Standardwert: &#039;&#039;[leer]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{noshutdown}&amp;lt;/code&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
||Wenn &amp;lt;code&amp;gt;$param-&amp;gt;{noshutdown}&amp;lt;/code&amp;gt; auf 1 gesetzt ist, wird dem HTTP-Server nicht implizit mitgeteilt, dass die Verbindung nach dem Request geschlossen werden soll. Viele Webserver schließen in solch einem Fall die Verbindung, bevor sie die Antwort senden. Bei 0 wird dem Webserver mitgeteilt, dass der Sendevorgang beendet ist und nun die Antwort abgewartet wird.&lt;br /&gt;
&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{loglevel}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Das Loglevel, in dem sämtliche Logmeldungen zu dieser HTTP-Abfrage erzeugt werden sollen.&lt;br /&gt;
&lt;br /&gt;
Standardwert: 4&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{hideurl}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Wenn dieser Parameter den Wert 1 trägt, wird die URL in sämtlichen Log-Ausgaben unkenntlich gemacht. Dies ist nützlich um z.B. Zugangsdaten geheim zu halten.&lt;br /&gt;
&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{ignoreredirects}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Wenn dieser Parameter den Wert 1 trägt, werden Umleitungen durch den Server ignoriert und der Request beendet. Dies kann erforderlich sein um evtl. Cookies aus der Antwort, welche eine Umleitung enthält aus dem HTTP Header zu extrahieren um diese im nächsten Request weiterzuverwenden.&lt;br /&gt;
&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{method}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
||Die HTTP-Methode, welche zur Abfrage verwendet werden soll. Sofern keine Daten übertragen werden ist dies standardmäßig &amp;quot;GET&amp;quot;, ansonsten &amp;quot;POST&amp;quot;. Es können aber auch andere Methoden verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Standardwert: &amp;quot;GET&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{keepalive}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
||Wenn dieser Parameter auf 1 gesetzt ist, wird dem Server der Wunsch mitgeteilt, die Verbindung offen zu lassen für weitere Anfragen. Sobald die Antwort auf den jeweiligen Request eintrifft, bleibt die TCP-Verbindung bestehen (sofern der Server dies unterstützt). Anschließend kann man den Parameter-Hash mit einer neuen URL und Optionen füllen. Der Parameter &amp;quot;keepalive&amp;quot; sollte dabei weiterhin gesetzt bleiben, sofern die Verbindung auch weiterhin möglichst erhalten bleiben soll. &lt;br /&gt;
&lt;br /&gt;
Um eine offene Verbindung endgültig zu schließen, muss die Funktion [[HttpUtils#HttpUtils_Close|HttpUtils_Close]] aufgerufen werden.&lt;br /&gt;
&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{header}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Eigene HTTP-Header-Zeilen können über diesen Parameter eingebracht werden. Er kann dazu genutzt werden um z.B. den Content-Type festzulegen, oder einfach nur zusätzliche Header-Felder zu setzen. Es gibt zwei Möglichkeiten, diesen Parameter zu befüllen.&lt;br /&gt;
&lt;br /&gt;
# Als &#039;&#039;&#039;Zeichenkette&#039;&#039;&#039;. Mehrere Header-Zeilen müssen dabei mit &amp;quot;\r\n&amp;quot; getrennt werden.&lt;br /&gt;
# Als &#039;&#039;&#039;Hash-Struktur&#039;&#039;&#039;. Hierbei findet eine Zuordnung von Header-Bezeichnung zum Wert als Key-Value-Pair statt.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;quot;User-Agent: Mozilla/1.22&#039;&#039;&#039;&amp;lt;u&amp;gt;\r\n&amp;lt;/u&amp;gt;&#039;&#039;&#039;Content-Type: application/xml&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;quot;Content-Type: application/xml&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;{ &amp;quot;User-Agent&amp;quot; =&amp;gt;  &amp;quot;Mozilla/1.22&amp;quot;, &amp;quot;Content-Type&amp;quot; =&amp;gt; &amp;quot;application/xml&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;{ &amp;quot;Content-Type&amp;quot; =&amp;gt; &amp;quot;application/xml&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Standardwert: &#039;&#039;[leer]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{sslargs}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Eigene SSL-Optionen können über diesen Parameter eingebracht werden. Er kann dazu genutzt werden um z.B. die SSL-Zertifikats Verifikation abzuschalten. Die SSL-Optionen müssen als eigene Hash-Referenz übergeben werden. Eine Liste aller möglichen Optionen findet man in der Perl-Dokumentation zu [http://search.cpan.org/~sullr/IO-Socket-SSL-2.016/lib/IO/Socket/SSL.pod#Description_Of_Methods IO::Socket::SSL].&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
* &amp;lt;code&amp;gt;$param-&amp;gt;{sslargs} = { SSL_verify_mode =&amp;gt; 0, sslOpt2 =&amp;gt; &#039;sslVal2&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Standardwert: &#039;&#039;{ }&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{httpversion}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Die HTTP-Version, welche zur Abfrage verwendet werden soll. Standardmäßig werden alle Abfragen mit HTTP/1.0 durchgeführt. Falls es jedoch notwendig ist HTTP/1.1 zu verwenden, so sollte &amp;lt;code&amp;gt;$param-&amp;gt;{httpversion}&amp;lt;/code&amp;gt; auf &amp;quot;1.1&amp;quot; gesetzt werden. Bei Version 1.1 wird automatisch der Header &amp;quot;&amp;lt;code&amp;gt;Connection: close&amp;lt;/code&amp;gt;&amp;quot; implizit mitgesendet.&lt;br /&gt;
&lt;br /&gt;
Standardwert: &amp;quot;1.0&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Als Rückgabewert von HttpUtils_BlockingGet wird ein Array mit zwei Rückgabewerten zurückgegeben:&lt;br /&gt;
:&amp;lt;code&amp;gt;($err, $data) = HttpUtils_BlockingGet( … )&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese zwei Rückgabewerte haben folgende Bedeutung:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Rückgabewert !! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$err&amp;lt;/code&amp;gt;&#039;&#039;&#039;|| Falls beim Aufruf der URL ein Fehler aufgetreten ist (z.B. Server nicht erreichbar oder Verbindungstimeout), dann ist dieser Wert mit einer Fehlermeldung gefüllt. &lt;br /&gt;
&lt;br /&gt;
Wenn kein Fehler aufgetreten ist, ist dieser Wert mit einem Leerstring gefüllt (&amp;lt;code&amp;gt;$err = &amp;quot;&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$data&amp;lt;/code&amp;gt;&#039;&#039;&#039;|| Die Ergebnisdaten, welche der HTTP-Server zurückgeliefert hat. Die Daten werden als Klartext in Form eines gesamten Strings zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Falls ein Fehler aufgetreten ist, ist dieser Wert mit einem Leersting gefüllt (&amp;lt;code&amp;gt;$data = &amp;quot;&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== HttpUtils_NonblockingGet ===&lt;br /&gt;
{{Randnotiz|RNText=Die Funktion HttpUtils_NonblockingGet ist nicht komplett durchgehend &amp;quot;non-blocking&amp;quot;. DNS-Abfragen sind weiterhin blockierend. Insbesondere wenn der DNS-Name nicht aufgelöst werden kann.}}&lt;br /&gt;
Diese Funktion arbeitet ähnlich wie HttpUtils_BlockingGet. Allerdings wird das Ergebnis nicht als Funktionsergebnis zurückgegeben. Die Funktion HttpUtils_NonblockingGet initiiert den Verbindungsaufbau und übergibt alles weitere an FHEM interne Routinen. Sobald eine Antwort vom HTTP-Server eintrifft, wird eine Callback-Funktion mit verschiedenen Parametern (unter anderem auch das Ergebnis) aufgerufen, um die Antwort entgegenzunehmen und weiter zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Der Aufruf ist daher ähnlich zu HttpUtils_BlockingGet mit nur einem Parameter-Hash:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Aufruf: &amp;lt;code&amp;gt;HttpUtils_NonblockingGet($param)&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:175px&amp;quot; | Parameter !! style=&amp;quot;width:auto&amp;quot; | Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; | &#039;&#039;&#039;&#039;&#039;&amp;lt;br&amp;gt;Alle Hash-Parameter, welche für HttpUtils_BlockingGet gelten, sind auch für HttpUtils_NonblockingGet gültig&#039;&#039;&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{callback}&amp;lt;/code&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mandatory&#039;&#039;&lt;br /&gt;
|| Eine Funktion (oder eine Referenz auf eine Funktion), welche die Ergebnisdaten entgegennimmt und die Antwort entsprechend weiterverarbeitet. Die Callback-Funktion muss dabei 3 Parameter erwarten. Die Funktionsparameter der Callback-Funktion werden im nachfolgenden Abschnitt näher erläutert.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
* &amp;lt;code&amp;gt;$param-&amp;gt;{callback} = \&amp;amp;MyCallbackFn&amp;lt;/code&amp;gt; — &#039;&#039;(Referenzzeiger auf Funktionsname)&#039;&#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;$param-&amp;gt;{callback} = sub($$$){ … }&amp;lt;/code&amp;gt; —  &#039;&#039;(direkte Funktionsdefinition)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;Benutzerdefinierte Parameter&#039;&#039; &lt;br /&gt;
|| Es können im Hash weitere benutzerdefinierte Parameter gesetzt werden, welche evtl. in der Callback-Funktion benötigt werden, um die Antwort korrekt zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel bei der Modul-Programmierung währe das $hash des aktuellen Devices. Alle gesetzten Parameter sind in der Callback-Funktion direkt abrufbar und können ausgewertet werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
* &amp;lt;code&amp;gt;$param-&amp;gt;{hash} = $hash&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;$param-&amp;gt;{command} = &amp;quot;on&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
Ein Funktionsrückgabewert von HttpUtils_NonblockingGet existiert nicht, da die eigentliche Rückgabe der Daten über die Callback-Funktion erfolgt. Die Callback-Funktion wird aufgerufen, sobdald der HTTP-Request abgeschlossen ist, oder ein Fehler aufgetreten ist. Der Funktionsaufruf erfolgt mit den folgenden Parametern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; &#039;&#039;MyCallbackFn&#039;&#039; ( $param, $err, $data )&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese 3 Parameter haben dabei folgende Bedeutung:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$param&amp;lt;/code&amp;gt;&#039;&#039;&#039; || Der Parameter-Hash, mit allen Argumenten die beim Aufruf der Funktion übergeben worden sind.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich, dass der Parameter-Hash nach erfolgter Abfrage zusätzliche oder veränderte Elemente enthält:&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{redirects}&amp;lt;/code&amp;gt;&#039;&#039;&#039; - Die Anzahl an Umleitungen die erfolgte, bis die Anfrage beantwortet wurde.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{url}&amp;lt;/code&amp;gt;&#039;&#039;&#039; - Die URL, die nach erfolgter Umleitung die Anfrage beantwortet hat.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{protocol}&amp;lt;/code&amp;gt;&#039;&#039;&#039; - Das verwendete Protokoll, welches zur Abfrage verwendet wurde (&amp;quot;http&amp;quot; oder &amp;quot;https&amp;quot;).&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{path}&amp;lt;/code&amp;gt;&#039;&#039;&#039; - Der Pfad, welcher auf dem HTTP-Server angefragt wurde.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{host}&amp;lt;/code&amp;gt;&#039;&#039;&#039; - Der Name oder die IP-Adresse des HTTP-Servers.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{httpheader}&amp;lt;/code&amp;gt;&#039;&#039;&#039; - Der gesamte HTTP Header, welcher der Server bei der letzten Antwort zurücklieferte.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{code}&amp;lt;/code&amp;gt;&#039;&#039;&#039; - Der HTTP-Statuscode, mit dem die Anfrage vom Server beantwortet wurde.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{addr}&amp;lt;/code&amp;gt;&#039;&#039;&#039; - Die HTTP-URL ohne Pfad und evtl. Authentifizerungsinformationen des HTTP-Servers (z.B. &amp;quot;&amp;lt;nowiki&amp;gt;http://myserver.com:8080&amp;lt;/nowiki&amp;gt;&amp;quot;).&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{auth}&amp;lt;/code&amp;gt;&#039;&#039;&#039; - Die Zugangsdaten als &amp;lt;code&amp;gt;Username:Passwort&amp;lt;/code&amp;gt;, welcher verwendet wurde um sich gegenüber dem HTTP-Server zu authentifizieren (nur wenn Authentifizierung benutzt wurde).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$err&amp;lt;/code&amp;gt;&#039;&#039;&#039;|| Falls beim Aufruf der URL ein Fehler aufgetreten ist (z.B. Server nicht erreichbar oder Verbindungstimeout), dann ist dieser Wert mit einer Fehlermeldung gefüllt. &lt;br /&gt;
&lt;br /&gt;
Wenn kein Fehler aufgetreten ist, ist dieser Wert mit einem Leerstring gefüllt (&amp;lt;code&amp;gt;$err = &amp;quot;&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$data&amp;lt;/code&amp;gt;&#039;&#039;&#039;|| Die Ergebnisdaten, welche der HTTP-Server zurückgeliefert hat. Die Daten werden als Klartext in Form eines gesamten Strings zurückgegeben. Es handelt sich hierbei ausschließlich um den HTTP-Body. &lt;br /&gt;
&lt;br /&gt;
Falls ein Fehler aufgetreten ist, ist dieser Wert mit einem Leersting gefüllt (&amp;lt;code&amp;gt;$data = &amp;quot;&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Callback-Funktion kann nun die Daten aus der HTTP-Antwort verarbeiten oder bei Fehlern entsprechende Log-Meldungen ausgeben.&lt;br /&gt;
&lt;br /&gt;
==== Beispiel für HttpUtils_NonblockingGet() für Modulprogrammierer ====&lt;br /&gt;
Das folgende Beispiel soll eine Hilfestellung für eigene Anwendungen geben&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;use HttpUtils;&lt;br /&gt;
sub X_GetHttpResponse($)&lt;br /&gt;
{&lt;br /&gt;
    my ($hash, $def) = @_;&lt;br /&gt;
    my $name = $hash-&amp;gt;{NAME};&lt;br /&gt;
    my $param = {&lt;br /&gt;
                    url        =&amp;gt; &amp;quot;http://www.foo.de&amp;quot;,&lt;br /&gt;
                    timeout    =&amp;gt; 5,&lt;br /&gt;
                    hash       =&amp;gt; $hash,                                                                                  # Muss gesetzt werden, damit die Callback funktion wieder $hash hat&lt;br /&gt;
                    method     =&amp;gt; &amp;quot;GET&amp;quot;,                                                                                  # Lesen von Inhalten&lt;br /&gt;
                    header     =&amp;gt; &amp;quot;agent: TeleHeater/2.2.3\r\nUser-Agent: TeleHeater/2.2.3\r\nAccept: application/json&amp;quot;,  # Den Header gemäss abzufragender Daten ändern&lt;br /&gt;
                    callback   =&amp;gt;  \&amp;amp;X_ParseHttpResponse                                                                  # Diese Funktion soll das Ergebnis dieser HTTP Anfrage bearbeiten&lt;br /&gt;
                };&lt;br /&gt;
                              HttpUtils_NonblockingGet($param);                                                                                     # Starten der HTTP Abfrage. Es gibt keinen Return-Code. &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
sub X_ParseHttpResponse($)&lt;br /&gt;
{&lt;br /&gt;
    my ($param, $err, $data) = @_;&lt;br /&gt;
    my $hash = $param-&amp;gt;{hash};&lt;br /&gt;
    my $name = $hash-&amp;gt;{NAME};&lt;br /&gt;
&lt;br /&gt;
    if($err ne &amp;quot;&amp;quot;)                                                                                                         # wenn ein Fehler bei der HTTP Abfrage aufgetreten ist&lt;br /&gt;
    {&lt;br /&gt;
        Log3 $name, 3, &amp;quot;error while requesting &amp;quot;.$param-&amp;gt;{url}.&amp;quot; - $err&amp;quot;;                                                  # Eintrag fürs Log&lt;br /&gt;
        readingsSingleUpdate($hash, &amp;quot;fullResponse&amp;quot;, &amp;quot;ERROR&amp;quot;);                                                              # Readings erzeugen&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    elsif($data ne &amp;quot;&amp;quot;)                                                                                                     # wenn die Abfrage erfolgreich war ($data enthält die Ergebnisdaten des HTTP Aufrufes)&lt;br /&gt;
    {&lt;br /&gt;
        Log3 $name, 3, &amp;quot;url &amp;quot;.$param-&amp;gt;{url}.&amp;quot; returned: $data&amp;quot;;                                                            # Eintrag fürs Log&lt;br /&gt;
&lt;br /&gt;
        # An dieser Stelle die Antwort parsen / verarbeiten mit $data&lt;br /&gt;
&lt;br /&gt;
        readingsSingleUpdate($hash, &amp;quot;fullResponse&amp;quot;, $data);                                                                # Readings erzeugen&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    # Damit ist die Abfrage zuende.&lt;br /&gt;
    # Evtl. einen InternalTimer neu schedulen&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HttpUtils_Close ===&lt;br /&gt;
&lt;br /&gt;
Für den Abbruch von offenen Verbindungen und noch laufenden NonBockingGet-Aufrufen gibt es die Funktion HttpUtils_Close. Diese kann z.B. beim Löschen eines Devices oder Herunterfahren des Servers aufgerufen werden, um bestehende Verbindungen zu schliessen.&lt;br /&gt;
&lt;br /&gt;
Wenn man den Parameter &amp;quot;keepalive&amp;quot; beim Aufruf von HttpUtils_NonBlockingGet/HttpUtils_BlockingGet gesetzt hat, muss man HttpUtils_Close aufrufen um die Verbindung tatsächlich zu schließen, da diese noch durch den Server offen gehalten werden kann.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Aufruf: &amp;lt;code&amp;gt;HttpUtils_Close($param)&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:175px&amp;quot; | Parameter !! style=&amp;quot;width:auto&amp;quot; | Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$param&amp;lt;/code&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mandatory&#039;&#039;&lt;br /&gt;
|| Der Hash, der beim vorherigen Aufruf an HTTPUtils Funktionen (HttpUtils_NonblockingGet oder HttpUtils_BlockingGet) übergeben wurde&lt;br /&gt;
&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Development]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12774</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12774"/>
		<updated>2015-11-04T14:45:01Z</updated>

		<summary type="html">&lt;p&gt;Rapster: fhem_codemirror &amp;quot;autocompleteAlways&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren muss folgendes Attribut auf die entsprechende fhemweb-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
* &#039;STRG + F: Suche starten&lt;br /&gt;
* &#039;STRG + G: Zum nächsten Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + G: Zum vorherigen Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + F: Einzeln Ersetzen&lt;br /&gt;
* &#039;SHIFT + Ctrl + R: Im gesamten Dokument Ersetzen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung der aktuellen Zeile, oder auch mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch-/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit dem FHEMWEB-Attribut &#039;codemirrorParam&#039; und den Parametern welche unter https://codemirror.net/doc/manual.html#config zu finden sind noch weiter angepasst werden. z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; codemirrorParam { &amp;quot;indentWithTabs&amp;quot;:false, &amp;quot;indentUnit&amp;quot;:2, &amp;quot;autocomplete&amp;quot;:false }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würde der Text statt mit Tabulatoren mit Leerzeichen und statt den default 4 Leerzeichen, nurnoch mit 2 Leerzeichen bei verwenden von &#039;TAB&#039; oder &#039;SHIFT+TAB&#039; eingerückt werden, &lt;br /&gt;
und Autovervollständigung mit STRG+SPACE wird deaktiviert (die Dateien show-hint.js und show-hint.css werden nicht mehr geladen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende codemirror-Parameter werden standardmäßig gesetzt und können unter anderen mit dem Attribut codemirrorParam überschrieben werden:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Standardwert !! Wert !! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;matchBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;matchbrackets.js&#039;&#039; und aktiviert die Markierung zusammengehörender Klammern.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoRefresh&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;autorefresh.js&#039;&#039; durch welches unter anderem verhindert wird dass beim zweiten Aufruf von Codemirror ein schwarzer Editor ohne Inhalt angezeigt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;search&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt die Module &#039;&#039;search.js, searchcursor.js, dialog.js&#039;&#039;, sowie den stylesheet &#039;&#039;dialog.css&#039;&#039; und aktiviert die Suchen &amp;amp; Ersetzen Funktionalität.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;comment&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;comment.js&#039;&#039; und aktiviert die Funktionalität mit STRG+Q Zeilen auszukommentieren / Kommentare zu entfernen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocomplete&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;show-hint.js&#039;&#039;, sowie den stylesheet &#039;&#039;show-hint.css&#039;&#039; und aktiviert die Funktionalität mit STRG+SPACE die Autovervollständigung zu verwenden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocompleteAlways&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn zusätzlich zu &amp;quot;autocomplete&amp;quot; aktiviert, wird die Befehlsvervollständigung bei jedem Tastendruck durchgeführt (nicht nur durch STRG+SPACE).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoCloseBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;closebrackets.js&#039;&#039; und aktiviert die Funktionalität dass ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentUnit&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| integer&lt;br /&gt;
| Gibt an wieviele Leerzeichen ein TAB-Block umfasst.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;type&amp;quot;&lt;br /&gt;
| &amp;quot;fhem&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Der Standard codemirror-mode, default wird hier die &#039;&#039;fhem.js&#039;&#039; geladen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;theme&amp;quot;&lt;br /&gt;
| &amp;quot;blackboard&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Das Standard codemirrer-theme, default wird hier die &#039;&#039;blackboard.css&#039;&#039; geladen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentWithTabs&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird mit Tabulator statt Leerzeichen eingerückt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autofocus&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird der Fokus beim laden von codemirror automatisch in das Editor-Fenster gesetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;lineNumbers&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, werden die Zeilennummern im Editor angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;smartIndent&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Whether to use the context-sensitive indentation that the mode provides (or just indent the same as the line before).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
* ...&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahreneren Usern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12773</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12773"/>
		<updated>2015-11-04T13:41:00Z</updated>

		<summary type="html">&lt;p&gt;Rapster: fhem_codemirror &amp;quot;autocompleteAlways&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren muss folgendes Attribut auf die entsprechende fhemweb-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
* &#039;STRG + F: Suche starten&lt;br /&gt;
* &#039;STRG + G: Zum nächsten Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + G: Zum vorherigen Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + F: Einzeln Ersetzen&lt;br /&gt;
* &#039;SHIFT + Ctrl + R: Im gesamten Dokument Ersetzen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung der aktuellen Zeile, oder auch mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch-/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit dem FHEMWEB-Attribut &#039;codemirrorParam&#039; und den Parametern welche unter https://codemirror.net/doc/manual.html#config zu finden sind noch weiter angepasst werden. z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; codemirrorParam { &amp;quot;indentWithTabs&amp;quot;:false, &amp;quot;indentUnit&amp;quot;:2, &amp;quot;autocomplete&amp;quot;:false }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würde der Text statt mit Tabulatoren mit Leerzeichen und statt den default 4 Leerzeichen, nurnoch mit 2 Leerzeichen bei verwenden von &#039;TAB&#039; oder &#039;SHIFT+TAB&#039; eingerückt werden, &lt;br /&gt;
und Autovervollständigung mit STRG+SPACE wird deaktiviert (die Dateien show-hint.js und show-hint.css werden nicht mehr geladen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende codemirror-Parameter werden standardmäßig gesetzt und können unter anderen mit dem Attribut codemirrorParam überschrieben werden:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Standardwert !! Wert !! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;matchBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;matchbrackets.js&#039;&#039; und aktiviert die Markierung zusammengehörender Klammern.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoRefresh&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;autorefresh.js&#039;&#039; durch welches unter anderem verhindert wird dass beim zweiten Aufruf von Codemirror ein schwarzer Editor ohne Inhalt angezeigt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;search&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt die Module &#039;&#039;search.js, searchcursor.js, dialog.js&#039;&#039;, sowie den stylesheet &#039;&#039;dialog.css&#039;&#039; und aktiviert die Suchen &amp;amp; Ersetzen Funktionalität.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;comment&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;comment.js&#039;&#039; und aktiviert die Funktionalität mit STRG+Q Zeilen auszukommentieren / Kommentare zu entfernen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocomplete&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;show-hint.js&#039;&#039;, sowie den stylesheet &#039;&#039;show-hint.css&#039;&#039; und aktiviert die Funktionalität mit STRG+SPACE die Autovervollständigung zu verwenden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocompleteAlways&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn zusätzlich zu &amp;quot;autocomplete&amp;quot; aktiviert, wird die Befehlsvervollständigung bei jedem Tastendruck durchgeführt (nicht nur durch STRG+SPACE).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoCloseBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;closebrackets.js&#039;&#039; und aktiviert die Funktionalität dass ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentUnit&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| integer&lt;br /&gt;
| Gibt an wieviele Leerzeichen ein TAB-Block umfasst.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;type&amp;quot;&lt;br /&gt;
| &amp;quot;fhem&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Der Standard codemirror-mode, default wird hier die &#039;&#039;fhem.js&#039;&#039; geladen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;theme&amp;quot;&lt;br /&gt;
| &amp;quot;blackboard&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Das Standard codemirrer-theme, default wird hier die &#039;&#039;blackboard.css&#039;&#039; geladen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentWithTabs&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird mit Tabulator statt Leerzeichen eingerückt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autofocus&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird der Fokus beim laden von codemirror automatisch in das Editor-Fenster gesetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;lineNumbers&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, werden die Zeilennummern im Editor angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;smartIndent&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Whether to use the context-sensitive indentation that the mode provides (or just indent the same as the line before).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
* ...&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahreneren Usern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12726</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12726"/>
		<updated>2015-10-30T15:38:06Z</updated>

		<summary type="html">&lt;p&gt;Rapster: changed codemirrorParam example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren muss folgendes Attribut auf die entsprechende fhemweb-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
* &#039;STRG + F: Suche starten&lt;br /&gt;
* &#039;STRG + G: Zum nächsten Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + G: Zum vorherigen Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + F: Einzeln Ersetzen&lt;br /&gt;
* &#039;SHIFT + Ctrl + R: Im gesamten Dokument Ersetzen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung der aktuellen Zeile, oder auch mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch-/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit dem FHEMWEB-Attribut &#039;codemirrorParam&#039; und den Parametern welche unter https://codemirror.net/doc/manual.html#config zu finden sind noch weiter angepasst werden. z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; codemirrorParam { &amp;quot;indentWithTabs&amp;quot;:false, &amp;quot;indentUnit&amp;quot;:2, &amp;quot;autocomplete&amp;quot;:false }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würde der Text statt mit Tabulatoren mit Leerzeichen und statt den default 4 Leerzeichen, nurnoch mit 2 Leerzeichen bei verwenden von &#039;TAB&#039; oder &#039;SHIFT+TAB&#039; eingerückt werden, &lt;br /&gt;
und Autovervollständigung mit STRG+SPACE wird deaktiviert (die Dateien show-hint.js und show-hint.css werden nicht mehr geladen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende codemirror-Parameter werden standardmäßig gesetzt und können unter anderen mit dem Attribut codemirrorParam überschrieben werden:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Standardwert !! Wert !! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;matchBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;matchbrackets.js&#039;&#039; und aktiviert die Markierung zusammengehörender Klammern.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoRefresh&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;autorefresh.js&#039;&#039; durch welches unter anderem verhindert wird dass beim zweiten Aufruf von Codemirror ein schwarzer Editor ohne Inhalt angezeigt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;search&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt die Module &#039;&#039;search.js, searchcursor.js, dialog.js&#039;&#039;, sowie den stylesheet &#039;&#039;dialog.css&#039;&#039; und aktiviert die Suchen &amp;amp; Ersetzen Funktionalität.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;comment&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;comment.js&#039;&#039; und aktiviert die Funktionalität mit STRG+Q Zeilen auszukommentieren / Kommentare zu entfernen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocomplete&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;show-hint.js&#039;&#039;, sowie den stylesheet &#039;&#039;show-hint.css&#039;&#039; und aktiviert die Funktionalität mit STRG+SPACE die Autovervollständigung zu verwenden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoCloseBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;closebrackets.js&#039;&#039; und aktiviert die Funktionalität dass ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentUnit&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| integer&lt;br /&gt;
| Gibt an wieviele Leerzeichen ein TAB-Block umfasst.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;type&amp;quot;&lt;br /&gt;
| &amp;quot;fhem&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Der Standard codemirror-mode, default wird hier die &#039;&#039;fhem.js&#039;&#039; geladen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;theme&amp;quot;&lt;br /&gt;
| &amp;quot;blackboard&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Das Standard codemirrer-theme, default wird hier die &#039;&#039;blackboard.css&#039;&#039; geladen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentWithTabs&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird mit Tabulator statt Leerzeichen eingerückt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autofocus&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird der Fokus beim laden von codemirror automatisch in das Editor-Fenster gesetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;lineNumbers&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, werden die Zeilennummern im Editor angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;smartIndent&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Whether to use the context-sensitive indentation that the mode provides (or just indent the same as the line before).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
* ...&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahreneren Usern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12725</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12725"/>
		<updated>2015-10-30T13:34:37Z</updated>

		<summary type="html">&lt;p&gt;Rapster: fhem_codemirror.js: Disabled smartIndent by default&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren muss folgendes Attribut auf die entsprechende fhemweb-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
* &#039;STRG + F: Suche starten&lt;br /&gt;
* &#039;STRG + G: Zum nächsten Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + G: Zum vorherigen Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + F: Einzeln Ersetzen&lt;br /&gt;
* &#039;SHIFT + Ctrl + R: Im gesamten Dokument Ersetzen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung der aktuellen Zeile, oder auch mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch-/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit dem FHEMWEB-Attribut &#039;codemirrorParam&#039; und den Parametern welche unter https://codemirror.net/doc/manual.html#config zu finden sind noch weiter angepasst werden. z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; codemirrorParam { &amp;quot;indentUnit&amp;quot;:2, &amp;quot;autoCloseBrackets&amp;quot;:true, &amp;quot;autocomplete&amp;quot;:false }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würde der Text statt mit den default 4 Leerzeichen, nurnoch mit 2 Leerzeichen bei verwenden von &#039;TAB&#039; oder &#039;SHIFT+TAB&#039; eingerückt werden, &lt;br /&gt;
sowie werden ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen,&lt;br /&gt;
und Autovervollständigung mit STRG+SPACE wird deaktiviert (die Dateien show-hint.js und show-hint.css werden nicht mehr geladen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende codemirror-Parameter werden standardmäßig gesetzt und können unter anderen mit dem Attribut codemirrorParam überschrieben werden:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Standardwert !! Wert !! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;matchBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;matchbrackets.js&#039;&#039; und aktiviert die Markierung zusammengehörender Klammern.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoRefresh&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;autorefresh.js&#039;&#039; durch welches unter anderem verhindert wird dass beim zweiten Aufruf von Codemirror ein schwarzer Editor ohne Inhalt angezeigt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;search&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt die Module &#039;&#039;search.js, searchcursor.js, dialog.js&#039;&#039;, sowie den stylesheet &#039;&#039;dialog.css&#039;&#039; und aktiviert die Suchen &amp;amp; Ersetzen Funktionalität.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;comment&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;comment.js&#039;&#039; und aktiviert die Funktionalität mit STRG+Q Zeilen auszukommentieren / Kommentare zu entfernen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocomplete&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;show-hint.js&#039;&#039;, sowie den stylesheet &#039;&#039;show-hint.css&#039;&#039; und aktiviert die Funktionalität mit STRG+SPACE die Autovervollständigung zu verwenden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoCloseBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;closebrackets.js&#039;&#039; und aktiviert die Funktionalität dass ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentUnit&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| integer&lt;br /&gt;
| Gibt an wieviele Leerzeichen ein TAB-Block umfasst.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;type&amp;quot;&lt;br /&gt;
| &amp;quot;fhem&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Der Standard codemirror-mode, default wird hier die &#039;&#039;fhem.js&#039;&#039; geladen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;theme&amp;quot;&lt;br /&gt;
| &amp;quot;blackboard&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Das Standard codemirrer-theme, default wird hier die &#039;&#039;blackboard.css&#039;&#039; geladen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentWithTabs&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird mit Tabulator statt Leerzeichen eingerückt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autofocus&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird der Fokus beim laden von codemirror automatisch in das Editor-Fenster gesetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;lineNumbers&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, werden die Zeilennummern im Editor angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;smartIndent&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Whether to use the context-sensitive indentation that the mode provides (or just indent the same as the line before).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
* ...&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahreneren Usern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12724</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12724"/>
		<updated>2015-10-30T13:13:42Z</updated>

		<summary type="html">&lt;p&gt;Rapster: fhem_codemirror.js: Enabled indentWithTabs by default&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren muss folgendes Attribut auf die entsprechende fhemweb-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
* &#039;STRG + F: Suche starten&lt;br /&gt;
* &#039;STRG + G: Zum nächsten Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + G: Zum vorherigen Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + F: Einzeln Ersetzen&lt;br /&gt;
* &#039;SHIFT + Ctrl + R: Im gesamten Dokument Ersetzen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung der aktuellen Zeile, oder auch mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch-/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit dem FHEMWEB-Attribut &#039;codemirrorParam&#039; und den Parametern welche unter https://codemirror.net/doc/manual.html#config zu finden sind noch weiter angepasst werden. z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; codemirrorParam { &amp;quot;indentUnit&amp;quot;:2, &amp;quot;autoCloseBrackets&amp;quot;:true, &amp;quot;autocomplete&amp;quot;:false }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würde der Text statt mit den default 4 Leerzeichen, nurnoch mit 2 Leerzeichen bei verwenden von &#039;TAB&#039; oder &#039;SHIFT+TAB&#039; eingerückt werden, &lt;br /&gt;
sowie werden ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen,&lt;br /&gt;
und Autovervollständigung mit STRG+SPACE wird deaktiviert (die Dateien show-hint.js und show-hint.css werden nicht mehr geladen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende codemirror-Parameter werden standardmäßig gesetzt und können unter anderen mit dem Attribut codemirrorParam überschrieben werden:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Standardwert !! Wert !! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;matchBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;matchbrackets.js&#039;&#039; und aktiviert die Markierung zusammengehörender Klammern.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoRefresh&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;autorefresh.js&#039;&#039; durch welches unter anderem verhindert wird dass beim zweiten Aufruf von Codemirror ein schwarzer Editor ohne Inhalt angezeigt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;search&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt die Module &#039;&#039;search.js, searchcursor.js, dialog.js&#039;&#039;, sowie den stylesheet &#039;&#039;dialog.css&#039;&#039; und aktiviert die Suchen &amp;amp; Ersetzen Funktionalität.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;comment&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;comment.js&#039;&#039; und aktiviert die Funktionalität mit STRG+Q Zeilen auszukommentieren / Kommentare zu entfernen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocomplete&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;show-hint.js&#039;&#039;, sowie den stylesheet &#039;&#039;show-hint.css&#039;&#039; und aktiviert die Funktionalität mit STRG+SPACE die Autovervollständigung zu verwenden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoCloseBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;closebrackets.js&#039;&#039; und aktiviert die Funktionalität dass ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentUnit&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| integer&lt;br /&gt;
| Gibt an wieviele Leerzeichen ein TAB-Block umfasst.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;type&amp;quot;&lt;br /&gt;
| &amp;quot;fhem&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Der Standard codemirror-mode, default wird hier die &#039;&#039;fhem.js&#039;&#039; geladen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;theme&amp;quot;&lt;br /&gt;
| &amp;quot;blackboard&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Das Standard codemirrer-theme, default wird hier die &#039;&#039;blackboard.css&#039;&#039; geladen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentWithTabs&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird mit Tabulator statt Leerzeichen eingerückt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autofocus&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird der Fokus beim laden von codemirror automatisch in das Editor-Fenster gesetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;lineNumbers&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, werden die Zeilennummern im Editor angezeigt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
* ...&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahreneren Usern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12723</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12723"/>
		<updated>2015-10-30T12:43:17Z</updated>

		<summary type="html">&lt;p&gt;Rapster: fhem_codemirror.js: Enabled autoCloseBrackets by default&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren muss folgendes Attribut auf die entsprechende fhemweb-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
* &#039;STRG + F: Suche starten&lt;br /&gt;
* &#039;STRG + G: Zum nächsten Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + G: Zum vorherigen Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + F: Einzeln Ersetzen&lt;br /&gt;
* &#039;SHIFT + Ctrl + R: Im gesamten Dokument Ersetzen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung der aktuellen Zeile, oder auch mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch-/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit dem FHEMWEB-Attribut &#039;codemirrorParam&#039; und den Parametern welche unter https://codemirror.net/doc/manual.html#config zu finden sind noch weiter angepasst werden. z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; codemirrorParam { &amp;quot;indentUnit&amp;quot;:2, &amp;quot;autoCloseBrackets&amp;quot;:true, &amp;quot;autocomplete&amp;quot;:false }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würde der Text statt mit den default 4 Leerzeichen, nurnoch mit 2 Leerzeichen bei verwenden von &#039;TAB&#039; oder &#039;SHIFT+TAB&#039; eingerückt werden, &lt;br /&gt;
sowie werden ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen,&lt;br /&gt;
und Autovervollständigung mit STRG+SPACE wird deaktiviert (die Dateien show-hint.js und show-hint.css werden nicht mehr geladen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende codemirror-Parameter werden standardmäßig gesetzt und können unter anderen mit dem Attribut codemirrorParam überschrieben werden:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Standardwert !! Wert !! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;matchBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;matchbrackets.js&#039;&#039; und aktiviert die Markierung zusammengehörender Klammern.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoRefresh&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;autorefresh.js&#039;&#039; durch welches unter anderem verhindert wird dass beim zweiten Aufruf von Codemirror ein schwarzer Editor ohne Inhalt angezeigt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;search&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt die Module &#039;&#039;search.js, searchcursor.js, dialog.js&#039;&#039;, sowie den stylesheet &#039;&#039;dialog.css&#039;&#039; und aktiviert die Suchen &amp;amp; Ersetzen Funktionalität.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;comment&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;comment.js&#039;&#039; und aktiviert die Funktionalität mit STRG+Q Zeilen auszukommentieren / Kommentare zu entfernen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocomplete&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;show-hint.js&#039;&#039;, sowie den stylesheet &#039;&#039;show-hint.css&#039;&#039; und aktiviert die Funktionalität mit STRG+SPACE die Autovervollständigung zu verwenden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoCloseBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;closebrackets.js&#039;&#039; und aktiviert die Funktionalität dass ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentUnit&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| integer&lt;br /&gt;
| Gibt an wieviele Leerzeichen ein TAB-Block umfasst.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;type&amp;quot;&lt;br /&gt;
| &amp;quot;fhem&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Der Standard codemirror-mode, default wird hier die &#039;&#039;fhem.js&#039;&#039; geladen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;theme&amp;quot;&lt;br /&gt;
| &amp;quot;blackboard&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Das Standard codemirrer-theme, default wird hier die &#039;&#039;blackboard.css&#039;&#039; geladen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentWithTabs&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird mit tabs statt Leerzeichen eingerückt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autofocus&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird der Fokus beim laden von codemirror automatisch in das Editor-Fenster gesetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;lineNumbers&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, werden die Zeilennummern im Editor angezeigt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
* ...&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahreneren Usern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12695</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12695"/>
		<updated>2015-10-28T10:29:15Z</updated>

		<summary type="html">&lt;p&gt;Rapster: fhem_codemirror&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren muss folgendes Attribut auf die entsprechende fhemweb-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
* &#039;STRG + F: Suche starten&lt;br /&gt;
* &#039;STRG + G: Zum nächsten Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + G: Zum vorherigen Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + F: Einzeln Ersetzen&lt;br /&gt;
* &#039;SHIFT + Ctrl + R: Im gesamten Dokument Ersetzen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung der aktuellen Zeile, oder auch mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch-/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit dem FHEMWEB-Attribut &#039;codemirrorParam&#039; und den Parametern welche unter https://codemirror.net/doc/manual.html#config zu finden sind noch weiter angepasst werden. z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; codemirrorParam { &amp;quot;indentUnit&amp;quot;:2, &amp;quot;autoCloseBrackets&amp;quot;:true, &amp;quot;autocomplete&amp;quot;:false }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würde der Text statt mit den default 4 Leerzeichen, nurnoch mit 2 Leerzeichen bei verwenden von &#039;TAB&#039; oder &#039;SHIFT+TAB&#039; eingerückt werden, &lt;br /&gt;
sowie werden ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen,&lt;br /&gt;
und Autovervollständigung mit STRG+SPACE wird deaktiviert (die Dateien show-hint.js und show-hint.css werden nicht mehr geladen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende codemirror-Parameter werden standardmäßig gesetzt und können unter anderen mit dem Attribut codemirrorParam überschrieben werden:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Standardwert !! Wert !! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;matchBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;matchbrackets.js&#039;&#039; und aktiviert die Markierung zusammengehörender Klammern.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoRefresh&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;autorefresh.js&#039;&#039; durch welches unter anderem verhindert wird dass beim zweiten Aufruf von Codemirror ein schwarzer Editor ohne Inhalt angezeigt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;search&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt die Module &#039;&#039;search.js, searchcursor.js, dialog.js&#039;&#039;, sowie den stylesheet &#039;&#039;dialog.css&#039;&#039; und aktiviert die Suchen &amp;amp; Ersetzen Funktionalität.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;comment&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;comment.js&#039;&#039; und aktiviert die Funktionalität mit STRG+Q Zeilen auszukommentieren / Kommentare zu entfernen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocomplete&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;show-hint.js&#039;&#039;, sowie den stylesheet &#039;&#039;show-hint.css&#039;&#039; und aktiviert die Funktionalität mit STRG+SPACE die Autovervollständigung zu verwenden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoCloseBrackets&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;closebrackets.js&#039;&#039; und aktiviert die Funktionalität dass ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentUnit&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| integer&lt;br /&gt;
| Gibt an wieviele Leerzeichen ein TAB-Block umfasst.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;type&amp;quot;&lt;br /&gt;
| &amp;quot;fhem&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Der Standard codemirror-mode, default wird hier die &#039;&#039;fhem.js&#039;&#039; geladen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;theme&amp;quot;&lt;br /&gt;
| &amp;quot;blackboard&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Das Standard codemirrer-theme, default wird hier die &#039;&#039;blackboard.css&#039;&#039; geladen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentWithTabs&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird mit tabs statt Leerzeichen eingerückt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autofocus&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird der Fokus beim laden von codemirror automatisch in das Editor-Fenster gesetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;lineNumbers&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, werden die Zeilennummern im Editor angezeigt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
* ...&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahreneren Usern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12694</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12694"/>
		<updated>2015-10-28T10:28:20Z</updated>

		<summary type="html">&lt;p&gt;Rapster: fhem_codemirror&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren muss folgendes Attribut auf die entsprechende fhemweb-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
* &#039;STRG + F: Suche starten&lt;br /&gt;
* &#039;STRG + G: Zum nächsten Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + G: Zum vorherigen Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + F: Einzeln Ersetzen&lt;br /&gt;
* &#039;SHIFT + Ctrl + R: Im gesamten Dokument Ersetzen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung der aktuellen Zeile, oder auch mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch-/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit folgendem Attribut und den Parametern welche unter https://codemirror.net/doc/manual.html#config zu finden sind noch weiter angepasst werden. z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; codemirrorParam { &amp;quot;indentUnit&amp;quot;:2, &amp;quot;autoCloseBrackets&amp;quot;:true, &amp;quot;autocomplete&amp;quot;:false }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würde der Text statt mit den default 4 Leerzeichen, nurnoch mit 2 Leerzeichen bei verwenden von &#039;TAB&#039; oder &#039;SHIFT+TAB&#039; eingerückt werden, &lt;br /&gt;
sowie werden ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen,&lt;br /&gt;
und Autovervollständigung mit STRG+SPACE wird deaktiviert (die Dateien show-hint.js und show-hint.css werden nicht mehr geladen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende codemirror-Parameter werden standardmäßig gesetzt und können unter anderen mit dem Attribut codemirrorParam überschrieben werden:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Standardwert !! Wert !! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;matchBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;matchbrackets.js&#039;&#039; und aktiviert die Markierung zusammengehörender Klammern.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoRefresh&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;autorefresh.js&#039;&#039; durch welches unter anderem verhindert wird dass beim zweiten Aufruf von Codemirror ein schwarzer Editor ohne Inhalt angezeigt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;search&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt die Module &#039;&#039;search.js, searchcursor.js, dialog.js&#039;&#039;, sowie den stylesheet &#039;&#039;dialog.css&#039;&#039; und aktiviert die Suchen &amp;amp; Ersetzen Funktionalität.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;comment&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;comment.js&#039;&#039; und aktiviert die Funktionalität mit STRG+Q Zeilen auszukommentieren / Kommentare zu entfernen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocomplete&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;show-hint.js&#039;&#039;, sowie den stylesheet &#039;&#039;show-hint.css&#039;&#039; und aktiviert die Funktionalität mit STRG+SPACE die Autovervollständigung zu verwenden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoCloseBrackets&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;closebrackets.js&#039;&#039; und aktiviert die Funktionalität dass ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentUnit&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| integer&lt;br /&gt;
| Gibt an wieviele Leerzeichen ein TAB-Block umfasst.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;type&amp;quot;&lt;br /&gt;
| &amp;quot;fhem&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Der Standard codemirror-mode, default wird hier die &#039;&#039;fhem.js&#039;&#039; geladen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;theme&amp;quot;&lt;br /&gt;
| &amp;quot;blackboard&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Das Standard codemirrer-theme, default wird hier die &#039;&#039;blackboard.css&#039;&#039; geladen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentWithTabs&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird mit tabs statt Leerzeichen eingerückt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autofocus&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird der Fokus beim laden von codemirror automatisch in das Editor-Fenster gesetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;lineNumbers&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, werden die Zeilennummern im Editor angezeigt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
* ...&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahreneren Usern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12693</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12693"/>
		<updated>2015-10-28T10:17:13Z</updated>

		<summary type="html">&lt;p&gt;Rapster: fhem_codemirror&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren muss folgendes Attribut auf die entsprechende fhemweb-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
* &#039;STRG + F: Suche starten&lt;br /&gt;
* &#039;STRG + G: Zum nächsten Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + G: Zum vorherigen Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + F: Einzeln Ersetzen&lt;br /&gt;
* &#039;SHIFT + Ctrl + R: Im gesamten Dokument Ersetzen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung der aktuellen Zeile, oder auch mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch-/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit folgendem Attribut und den Parametern welche unter https://codemirror.net/doc/manual.html#config zu finden sind noch weiter angepasst werden. z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; codemirrorParam { &amp;quot;indentUnit&amp;quot;:2, &amp;quot;autoCloseBrackets&amp;quot;:true }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würde der Text statt mit den default 4 Leerzeichen, nurnoch mit 2 Leerzeichen bei verwenden von &#039;TAB&#039; oder &#039;SHIFT+TAB&#039; eingerückt werden, sowie werden ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende codemirror-Parameter werden standardmäßig gesetzt und können unter anderen mit dem Attribut codemirrorParam überschrieben werden:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Standardwert !! Wert !! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;matchBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;matchbrackets.js&#039;&#039; und aktiviert die Markierung zusammengehörender Klammern.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoRefresh&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;autorefresh.js&#039;&#039; durch welches unter anderem verhindert wird dass beim zweiten Aufruf von Codemirror ein schwarzer Editor ohne Inhalt angezeigt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;search&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt die Module &#039;&#039;search.js, searchcursor.js, dialog.js&#039;&#039;, sowie den stylesheet &#039;&#039;dialog.css&#039;&#039; und aktiviert die Suchen &amp;amp; Ersetzen Funktionalität.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;comment&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;comment.js&#039;&#039; und aktiviert die Funktionalität mit STRG+Q Zeilen auszukommentieren / Kommentare zu entfernen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocomplete&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;show-hint.js&#039;&#039;, sowie den stylesheet &#039;&#039;show-hint.css&#039;&#039; und aktiviert die Funktionalität mit STRG+SPACE die Autovervollständigung zu verwenden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoCloseBrackets&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;closebrackets.js&#039;&#039; und aktiviert die Funktionalität dass ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentUnit&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| integer&lt;br /&gt;
| Gibt an wieviele Leerzeichen ein TAB-Block umfasst.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;type&amp;quot;&lt;br /&gt;
| &amp;quot;fhem&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Der Standard codemirror-mode, default wird hier die &#039;&#039;fhem.js&#039;&#039; geladen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;theme&amp;quot;&lt;br /&gt;
| &amp;quot;blackboard&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Das Standard codemirrer-theme, default wird hier die &#039;&#039;blackboard.css&#039;&#039; geladen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentWithTabs&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird mit tabs statt Leerzeichen eingerückt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autofocus&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird der Fokus beim laden von codemirror automatisch in das Editor-Fenster gesetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;lineNumbers&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, werden die Zeilennummern im Editor angezeigt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
* ...&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahreneren Usern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12692</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12692"/>
		<updated>2015-10-28T10:15:28Z</updated>

		<summary type="html">&lt;p&gt;Rapster: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren muss folgendes Attribut auf die entsprechende fhemweb-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
* &#039;STRG + F: Suche starten&lt;br /&gt;
* &#039;STRG + G: Zum nächsten Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + G: Zum vorherigen Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + F: Einzeln Ersetzen&lt;br /&gt;
* &#039;SHIFT + Ctrl + R: Im gesamten Dokument Ersetzen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung der aktuellen Zeile, oder auch mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch-/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit folgendem Attribut und den Parametern welche unter https://codemirror.net/doc/manual.html#config zu finden sind noch weiter angepasst werden. z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; codemirrorParam { &amp;quot;indentUnit&amp;quot;:2, &amp;quot;autoCloseBrackets&amp;quot;:true }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würde der Text statt mit den default 4 Leerzeichen, nurnoch mit 2 Leerzeichen bei verwenden von &#039;TAB&#039; oder &#039;SHIFT+TAB&#039; eingerückt werden, sowie werden ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende codemirror-Parameter werden standardmäßig gesetzt und können unter anderen mit dem Attribut codemirrorParam überschrieben werden:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Standardwert !! Wert !! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;matchBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;matchbrackets.js&#039;&#039; und aktiviert die Markierung zusammengehörender Klammern.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoRefresh&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;autorefresh.js&#039;&#039; durch welches unter anderem verhindert wird dass beim zweiten Aufruf von Codemirror ein schwarzer Editor ohne Inhalt angezeigt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;search&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt die Module &#039;&#039;search.js, searchcursor.js, dialog.js&#039;&#039;, sowie den stylesheet &#039;&#039;dialog.css&#039;&#039; und aktiviert die Suchen &amp;amp; Ersetzen Funktionalität.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;comment&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;comment.js&#039;&#039; und aktiviert die Funktionalität mit STRG+Q Zeilen auszukommentieren / Kommentare zu entfernen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocomplete&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;show-hint.js&#039;&#039;, sowie den stylesheet &#039;&#039;show-hint.css&#039;&#039; und aktiviert die Funktionalität mit STRG+SPACE die Autovervollständigung zu verwenden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoCloseBrackets&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Lädt das Modul &#039;&#039;closebrackets.js&#039;&#039; und aktiviert die Funktionalität dass ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentUnit&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| integer&lt;br /&gt;
| Gibt an wieviele Leerzeichen ein TAB-Block umfasst.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;type&amp;quot;&lt;br /&gt;
| &amp;quot;fhem&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Der Standard codemirror-mode, default wird hier die &#039;&#039;fhem.js&#039;&#039; geladen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;theme&amp;quot;&lt;br /&gt;
| &amp;quot;blackboard&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Das Standard codemirrer-theme, default wird hier die &#039;&#039;blackboard.css&#039;&#039; geladen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentWithTabs&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird mit tabs statt Leerzeichen eingerückt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autofocus&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird der Fokus beim laden von codemirror automatisch in das Editor-Fenster gesetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;lineNumbers&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, werden die Zeilennummern im Editor angezeigt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
* ...&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahreneren Usern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12691</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12691"/>
		<updated>2015-10-28T10:11:37Z</updated>

		<summary type="html">&lt;p&gt;Rapster: fhem_codemirror&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren muss folgendes Attribut auf die entsprechende fhemweb-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
* &#039;STRG + F: Suche starten&lt;br /&gt;
* &#039;STRG + G: Zum nächsten Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + G: Zum vorherigen Treffer&lt;br /&gt;
* &#039;SHIFT + Ctrl + F: Einzeln Ersetzen&lt;br /&gt;
* &#039;SHIFT + Ctrl + R: Im gesamten Dokument Ersetzen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung der aktuellen Zeile, oder auch mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch-/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit folgendem Attribut und den Parametern welche unter https://codemirror.net/doc/manual.html#config zu finden sind noch weiter angepasst werden. z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; codemirrorParam { &amp;quot;indentUnit&amp;quot;:2, &amp;quot;autoCloseBrackets&amp;quot;:true }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würde der Text statt mit den default 4 Leerzeichen, nurnoch mit 2 Leerzeichen bei verwenden von &#039;TAB&#039; oder &#039;SHIFT+TAB&#039; eingerückt werden, sowie werden ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende codemirror-Parameter werden standardmäßig gesetzt und können unter anderen mit dem Attribut codemirrorParam überschrieben werden:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Standardwert !! Wert !! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;matchBrackets&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Läd das Modul &#039;&#039;matchbrackets.js&#039;&#039; und aktiviert die Markierung zusammengehörender Klammern.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoRefresh&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Läd das Modul &#039;&#039;autorefresh.js&#039;&#039; durch welches unter anderem verhindert wird dass beim zweiten Aufruf von Codemirror ein schwarzer Editor ohne Inhalt angezeigt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;search&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Läd die Module &#039;&#039;search.js, searchcursor.js, dialog.js&#039;&#039;, sowie den stylesheet &#039;&#039;dialog.css&#039;&#039; und aktiviert die Suchen &amp;amp; Ersetzen Funktionalität.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;comment&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Läd das Modul &#039;&#039;comment.js&#039;&#039; und aktiviert die Funktionalität mit STRG+Q Zeilen auszukommentieren / Kommentare zu entfernen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autocomplete&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Läd das Modul &#039;&#039;show-hint.js&#039;&#039;, sowie den stylesheet &#039;&#039;show-hint.css&#039;&#039; und aktiviert die Funktionalität mit STRG+SPACE die Autovervollständigung zu verwenden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autoCloseBrackets&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Läd das Modul &#039;&#039;closebrackets.js&#039;&#039; und aktiviert die Funktionalität dass ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentUnit&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| integer&lt;br /&gt;
| Gibt an wieviele Leerzeichen ein TAB-Block umfasst.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;type&amp;quot;&lt;br /&gt;
| &amp;quot;fhem&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Der Standard codemirror-mode, default wird hier die &#039;&#039;fhem.js&#039;&#039; geladen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;theme&amp;quot;&lt;br /&gt;
| &amp;quot;blackboard&amp;quot;&lt;br /&gt;
| string&lt;br /&gt;
| Das Standard codemirrer-theme, default wird hier die &#039;&#039;blackboard.css&#039;&#039; geladen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;indentWithTabs&amp;quot;&lt;br /&gt;
| false&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird mit tabs statt Leerzeichen eingerückt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;autofocus&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, wird der Fokus beim laden von codemirror automatisch in das Editor-Fenster gesetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;lineNumbers&amp;quot;&lt;br /&gt;
| true&lt;br /&gt;
| boolean&lt;br /&gt;
| Wenn aktiviert, werden die Zeilennummern im Editor angezeigt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
* ...&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahreneren Usern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12687</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12687"/>
		<updated>2015-10-27T19:10:32Z</updated>

		<summary type="html">&lt;p&gt;Rapster: fhem_codemirror&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren muss folgendes Attribut auf die entsprechende fhemweb-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
* Ctrl-F:       Start searching&lt;br /&gt;
* Ctrl-G:       Find next&lt;br /&gt;
* Shift-Ctrl-G: Find previous&lt;br /&gt;
* Shift-Ctrl-F: Replace&lt;br /&gt;
* Shift-Ctrl-R: Replace all&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung der aktuellen Zeile, oder auch mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit folgendem Attribut und den Parametern welche unter https://codemirror.net/doc/manual.html#config zu finden sind noch weiter angepasst werden. z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; codemirrorParam { &amp;quot;indentUnit&amp;quot;:2, &amp;quot;autoCloseBrackets&amp;quot;:true }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würde der Text statt mit den default 4 Leerzeichen, nurnoch mit 2 Leerzeichen bei verwenden von &#039;TAB&#039; oder &#039;SHIFT+TAB&#039; eingerückt werden, sowie werden ()[]{}&#039;&#039;&amp;quot;&amp;quot; automatisch geschlossen.&lt;br /&gt;
&lt;br /&gt;
Folgende codemirror-Parameter werden standartmäßig gesetzt und können unter anderen mit dem Attribut codemirrorParam überschrieben werden:&lt;br /&gt;
* indentUnit: 4&lt;br /&gt;
* indentWithTabs: false&lt;br /&gt;
* autoCloseBrackets: false&lt;br /&gt;
* matchBrackets: true&lt;br /&gt;
* autofocus: true&lt;br /&gt;
* theme: &amp;quot;blackboard&amp;quot;&lt;br /&gt;
* lineNumbers: true&lt;br /&gt;
* autoRefresh: true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
* ...&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahreneren Usern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12685</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12685"/>
		<updated>2015-10-27T18:59:10Z</updated>

		<summary type="html">&lt;p&gt;Rapster: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren muss folgendes Attribut auf die entsprechende fhemweb-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
* Ctrl-F:       Start searching&lt;br /&gt;
* Ctrl-G:       Find next&lt;br /&gt;
* Shift-Ctrl-G: Find previous&lt;br /&gt;
* Shift-Ctrl-F: Replace&lt;br /&gt;
* Shift-Ctrl-R: Replace all&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung der aktuellen Zeile, oder auch mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit folgendem Attribut und den Parametern welche unter https://codemirror.net/doc/manual.html#config zu finden sind noch weiter angepasst werden. z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; codemirrorParam { &amp;quot;indentUnit&amp;quot;:2 }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würde der Text statt mit den default 4 Leerzeichen, nurnoch mit 2 Leerzeichen bei verwenden von &#039;TAB&#039; oder &#039;SHIFT+TAB&#039; eingerückt werden.&lt;br /&gt;
&lt;br /&gt;
Folgende codemirror-Paramter werden standartmäßig gesetzt und können unter anderen mit dem Attribut codemirrorParam überschrieben werden:&lt;br /&gt;
* indentUnit: 4&lt;br /&gt;
* indentWithTabs: false&lt;br /&gt;
* autoCloseBrackets: false&lt;br /&gt;
* matchBrackets: true&lt;br /&gt;
* autofocus: true&lt;br /&gt;
* theme: &amp;quot;blackboard&amp;quot;&lt;br /&gt;
* lineNumbers: true&lt;br /&gt;
* autoRefresh: true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
* ...&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahreneren Usern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12684</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12684"/>
		<updated>2015-10-27T18:58:44Z</updated>

		<summary type="html">&lt;p&gt;Rapster: fhem_codemirror&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren muss folgendes Attribut auf die entsprechende fhemweb-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
* Ctrl-F:       Start searching&lt;br /&gt;
* Ctrl-G:       Find next&lt;br /&gt;
* Shift-Ctrl-G: Find previous&lt;br /&gt;
* Shift-Ctrl-F: Replace&lt;br /&gt;
* Shift-Ctrl-R: Replace all&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung der aktuellen Zeile, oder auch mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit folgendem Attribut und den Parametern welche unter https://codemirror.net/doc/manual.html#config zu finden sind noch weiter angepasst werden. z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; codemirrorParam { &amp;quot;indentUnit&amp;quot;:2 }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würde der Text statt mit den default 4 Leerzeichen, nurnoch mit 2 Leerzeichen bei verwenden von &#039;TAB&#039; oder &#039;SHIFT+TAB&#039; eingerückt werden.&lt;br /&gt;
&lt;br /&gt;
Folgende codemirror-Paramter werden standartmäßig gesetzt und können unter anderen mit dem Attribut codemirrorParam überschrieben werden:&lt;br /&gt;
* indentUnit: 4&lt;br /&gt;
* indentWithTabs: false&lt;br /&gt;
* autoCloseBrackets: false&lt;br /&gt;
* matchBrackets: true&lt;br /&gt;
* autofocus: true&lt;br /&gt;
* theme: &amp;quot;blackboard&amp;quot;&lt;br /&gt;
* lineNumbers: true&lt;br /&gt;
* autoRefresh: true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
* ...&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahreneren Usern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12682</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12682"/>
		<updated>2015-10-27T18:37:35Z</updated>

		<summary type="html">&lt;p&gt;Rapster: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren muss folgendes Attribut auf die entsprechende fhemweb-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
* Ctrl-F:       Start searching&lt;br /&gt;
* Ctrl-G:       Find next&lt;br /&gt;
* Shift-Ctrl-G: Find previous&lt;br /&gt;
* Shift-Ctrl-F: Replace&lt;br /&gt;
* Shift-Ctrl-R: Replace all&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung der aktuellen Zeile, oder auch mehrerer markierter Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierten Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit folgendem Attribut und den Parametern welche unter https://codemirror.net/doc/manual.html#config zu finden sind noch weiter angepasst werden. z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; codemirrorParam { &amp;quot;indentUnit&amp;quot;:2 }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würde der Text statt mit den default 4 Leerzeichen, nurnoch mit 2 Leerzeichen bei verwenden von &#039;TAB&#039; oder &#039;SHIFT+TAB&#039; eingerückt werden.&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
* ...&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahreneren Usern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12681</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12681"/>
		<updated>2015-10-27T18:34:33Z</updated>

		<summary type="html">&lt;p&gt;Rapster: fhem_codemirror&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren muss folgendes Attribut auf die entsprechende fhemweb-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
* Ctrl-F:       Start searching&lt;br /&gt;
* Ctrl-G:       Find next&lt;br /&gt;
* Shift-Ctrl-G: Find previous&lt;br /&gt;
* Shift-Ctrl-F: Replace&lt;br /&gt;
* Shift-Ctrl-R: Replace all&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierten Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit folgendem Attribut und den Parametern welche unter https://codemirror.net/doc/manual.html#config zu finden sind noch weiter angepasst werden. z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; codemirrorParam { &amp;quot;indentUnit&amp;quot;:2 }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würden statt den default 4 Leerzeichen, nurnoch 2 Leerzeichen bei verwenden der &#039;TAB&#039;-Taste geschrieben.&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
* ...&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahreneren Usern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12680</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12680"/>
		<updated>2015-10-27T18:34:01Z</updated>

		<summary type="html">&lt;p&gt;Rapster: fhem_codemirror&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren muss folgendes Attribut auf die entsprechende fhemweb-Instanz gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;FHEMWEB&amp;gt; JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
* Ctrl-F:       Start searching&lt;br /&gt;
* Ctrl-G:       Find next&lt;br /&gt;
* Shift-Ctrl-G: Find previous&lt;br /&gt;
* Shift-Ctrl-F: Replace&lt;br /&gt;
* Shift-Ctrl-R: Replace all&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierten Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit folgendem Attribut und den Parametern welche unter https://codemirror.net/doc/manual.html#config zu finden sind noch weiter angepasst werden. z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr WEB codemirrorParam { &amp;quot;indentUnit&amp;quot;:2 }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würden statt den default 4 Leerzeichen, nurnoch 2 Leerzeichen bei verwenden der &#039;TAB&#039;-Taste geschrieben.&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
* ...&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahreneren Usern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12679</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12679"/>
		<updated>2015-10-27T18:31:06Z</updated>

		<summary type="html">&lt;p&gt;Rapster: fhem_codemirror&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren muss folgendes Attribut gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr WEB JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
* Ctrl-F:       Start searching&lt;br /&gt;
* Ctrl-G:       Find next&lt;br /&gt;
* Shift-Ctrl-G: Find previous&lt;br /&gt;
* Shift-Ctrl-F: Replace&lt;br /&gt;
* Shift-Ctrl-R: Replace all&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Folgende hilfreiche Tastenkombinationen werden desweiteren automatisch erstellt:&lt;br /&gt;
* &#039;TAB&#039; =&amp;gt; Einrücken von Text, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile. &lt;br /&gt;
* &#039;SHIFT + TAB&#039; =&amp;gt; Verringern der Einrückung, auch mehrerer markierter Zeilen auf einmal, oder mindestens einer komplett markierten Zeile.&lt;br /&gt;
* &#039;STRG + Q&#039; =&amp;gt; Auskommentieren oder Kommentar der Zeile entfernen in welcher sich der Cursor gerade befindet, oder mehrerer markierten Zeilen auf einmal.&lt;br /&gt;
* &#039;STRG + UP&#039; oder &#039;STRG + DOWN&#039; =&amp;gt; Hoch/Runterscrollen des Textes ohne den Cursor umzusetzen.&lt;br /&gt;
&lt;br /&gt;
Der Editor kann mit folgendem Attribut und den Parametern welche unter https://codemirror.net/doc/manual.html#config zu finden sind noch weiter angepasst werden. z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr WEB codemirrorParam { &amp;quot;indentUnit&amp;quot;:2 }&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Beispiel würden statt den default 4 Leerzeichen, nurnoch 2 Leerzeichen bei verwenden der &#039;TAB&#039;-Taste geschrieben.&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
* ...&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahreneren Usern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12652</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Konfiguration&amp;diff=12652"/>
		<updated>2015-10-25T17:20:46Z</updated>

		<summary type="html">&lt;p&gt;Rapster: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; eines Fhem [[Systemübersicht|Systems]] wird im Normalfall definiert durch Eintragungen in der Konfigurationsdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt;, die standardmäßig im Fhem-Installationsverzeichnis abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anderweitig erwähnt, beziehen sich alle weiteren Aussagen und Bildschirmfotos auf das [[PGM2|Standard Webinterface]] im Stil &amp;quot;dark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Grundstruktur ==&lt;br /&gt;
In einer Standardinstallation sind alle Definitionen in der Datei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; abgelegt; diese Datei befindet sich im Installationsverzeichnis (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;). Soll alternativ eine andere (Start-)Konfigurationsdatei verwendet werden, so ist deren Name beim Start von Fhem mitzugeben.&lt;br /&gt;
&lt;br /&gt;
== Autocreate ==&lt;br /&gt;
Sofern die &amp;quot;Autocreate&amp;quot; Funktion aktiv ist (&amp;lt;code&amp;gt;define autocreate autocreate&amp;lt;/code&amp;gt;), 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 &amp;quot;Autocreate&amp;quot; Funktion standardmäßig aktiv.&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung der Konfiguration ==&lt;br /&gt;
[[Bild:saveConfig.png|mini|120px|links|&amp;quot;Knopf&amp;quot; zum Speichern der Konfigurationsänderungen]]&lt;br /&gt;
[[Bild:saveConfigChangeList.png|mini|220px|rechts|Beispiel einer Liste der ungesicherten Anderungen der Konfiguration]]&lt;br /&gt;
Die Fhem-Konfiguration kann auf verschiedene Arten bearbeitet werden. Nicht nur für Einsteiger empfiehlt sich grundsätzlich die Verwendung des &amp;quot;Befehl-Eingabefeld&amp;quot; und der &amp;quot;Objektdetails&amp;quot; mit eingeschalteter Syntaxhervorhebung. Die Methoden &amp;quot;Integrierter Editor&amp;quot; und insbesondere &amp;quot;Externer Editor&amp;quot; sollten als &amp;quot;Expertenmodus&amp;quot; angesehen und nur in begründeten (Ausnahme-)Fällen angewendet werden; viele Automatiken und Fehlerkontrollen/-hinweise von Fhem stehen bei diesen Methoden nicht zur Verfügung. Insbesondere beim Mischen der Arten können unerwünschte und/oder unerwartete Effekte auftreten, so beispielsweise, wenn ein benötigtes &amp;quot;Save config&amp;quot; nicht erfolgt ist, bevor ein &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem durchgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Seit Mitte Januar 2015 ist es, wie im Bild rechts gezeigt, möglich, sich eine Teilliste der ungesicherten Konfigurationsänderungen durch Anklicken des roten {{Taste|?}} anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
=== Befehl-Eingabefeld ===&lt;br /&gt;
[[Bild:ConfCommandField.png|thumb|300px|Right|Befehl-Eingabefeld]]&lt;br /&gt;
Eingaben in das Befehl-Eingabefeld (teilweise auch bezeichnet als &amp;quot;Kommando-Eingabefeld&amp;quot; oder kurz &amp;quot;Eingabefeld&amp;quot;), das sich oben auf jeder Seite des Standardinterfaces befindet, stellen einen schnellen und einfachen Weg dar, um z.&amp;amp;nbsp;B. neue Objekte zu definieren (im dargestellten Beispiel die Zuweisung eines (ggf. neuen) Raumes zu einem Objekt). Nach Bestätigung mit der &amp;lt;Enter&amp;gt;-Taste werden die Änderungen unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Objektdetails ===&lt;br /&gt;
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:&lt;br /&gt;
* [[Bild:ConfModifyDEF.png|300px|right]] &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; zur Anpassung der Definition &lt;br /&gt;
* [[Bild:ConfAttrDropdown.png|300px|right]] Attribute / Attributwerte aus Auswahllisten (nach Auswahl der Werte ist der &amp;lt;code&amp;gt;attr&amp;lt;/code&amp;gt; Knopf anzuklicken) &lt;br /&gt;
* je nach Objekttyp stehen weitere / andere Aktionen zur &lt;br /&gt;
Nach einem Klick auf &amp;quot;Modify&amp;quot; werden die Änderungen an der Defintion unmittelbar wirksam.&lt;br /&gt;
&lt;br /&gt;
Die Änderung müssen manuell in der Konfigurationsdatei abspeichert werden, ansonsten gehen die Änderungen beim Neustart verloren: &amp;quot;Save config&amp;quot; (aus dem Menü in der linken Spalte) anklicken oder den Befehl &amp;quot;save&amp;quot; im Befehl-Eingabefeld eingeben.&lt;br /&gt;
&lt;br /&gt;
=== Integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditFiles.png|thumb|300px|links|Aufruf des integrierten Editors]]&lt;br /&gt;
[[Bild:ConfEditSyntaxHighlight.png|mini|300px|rechts|Editfenster (Ausschnitt) mit Syntaxhervorhebung]]&lt;br /&gt;
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 (&amp;quot;Escapen&amp;quot; von Sonderzeichen, verdoppeln von Semikolon). Mit dem Abspeichern der editierten Datei werden die Änderungen unmittelbar aktiv, korrekte Syntax und Semantik vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Seit Februar 2015 ist die Bearbeitung der Konfiguration über den Integrierten Editor als nicht empfohlene Variante standardmäßig gesperrt. Rudolf König dazu: &#039;&#039;&amp;quot;Durch das direkte Editieren der Datei kann FHEM die Fehler der Benutzer nicht so gut abfangen (kein dropdown, wizard, etc), bzw. die Fehlermeldungen sind etwas aufwendiger  zu interpretieren, d.h. man muss sie lesen und verstehen. Dass sowas nicht selbstverstaendlich ist, beweist gerade diese Diskussion, und solche Probleme muessen wir (die Supporter) hier im Forum ausbaden. Deswegen sollten die Anfaenger nicht dazu ermuntert werden, die Konfiguration in FHEMWEB direkt zu editieren. Verboten ist es keinesfalls, es wird seit gestern nur eine kleine Huerde (Hinweis + Eintrittspruefung) hingelegt.&amp;quot;&#039;&#039; [http://forum.fhem.de/index.php/topic,33839.msg262029.html#msg262029]&lt;br /&gt;
&lt;br /&gt;
=== Syntaxhervorhebung / Erweiterter integrierter Editor ===&lt;br /&gt;
[[Bild:ConfEditDEFAutocomplete.png|mini|300px|rechts|Automatische Vervollständigung / Befehlsauswahlfenster (&amp;quot;se&amp;quot; getippt, dann Strg+Leertaste gedrückt)]]&lt;br /&gt;
Fhem besitzt Syntaxhervorhebungs-, Befehlsauswahl- und Befehlsvervollständigungsfunktionen.&lt;br /&gt;
&lt;br /&gt;
Um die Funktionalität zu aktivieren muss folgendes Attribut gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr WEB JavaScripts codemirror/fhem_codemirror.js&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Editor kann nun mit folgendem Attribut und den Parametern welche unter https://codemirror.net/doc/manual.html#config zu finden sind noch weiter angepasst werden. z.B.:  &lt;br /&gt;
:&amp;lt;code&amp;gt;attr WEB codemirrorParam { &amp;quot;indentUnit&amp;quot;:2 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im erweiterten Editor ist nun auch Suchen und Ersetzen mit folgenden Tastenkombinationen möglich:&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
* Ctrl-F:       Start searching&lt;br /&gt;
* Ctrl-G:       Find next&lt;br /&gt;
* Shift-Ctrl-G: Find previous&lt;br /&gt;
* Shift-Ctrl-F: Replace&lt;br /&gt;
* Shift-Ctrl-R: Replace all&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Syntaxhervorhebung / Befehlsvervollständigung, sofern aktiviert, ist wirksam für&lt;br /&gt;
* Bearbeitung der [[Konfiguration#Objektdetails|Objektdetails]]&lt;br /&gt;
* [[Konfiguration#Integrierter Editor|Integrierter Editor]]&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus wird (wie im Bildauschnitt dargestellt) über Strg+Leertaste eine Befehlsauswahl bzw. automatische Befehlsvervollständigung angeboten.&lt;br /&gt;
&lt;br /&gt;
Der Forums-Thread unter der Überschrift [http://forum.fhem.de/index.php/topic,20444.0.html Javascript Editor einbinden] enthält die Diskussion zum Entwicklungsprozess.&lt;br /&gt;
&lt;br /&gt;
=== Externer Editor ===&lt;br /&gt;
Das Editieren der Konfiguration kann auch mit einem externen Editor wie z.&amp;amp;nbsp;B.&lt;br /&gt;
* Notepad++ (mit der nppFTP-Erweiterung)&lt;br /&gt;
* nano in einer Telnet Sitzung&lt;br /&gt;
* in wfftp integrierter / integrierbarer Editor&lt;br /&gt;
* ...&lt;br /&gt;
erfolgen (duplizieren von Definitionen (auch möglich mit [http://www.fhem.de/commandref#copy copy]), globale Änderungen (auch möglich mit [http://www.fhem.de/commandref#rename rename], [http://www.fhem.de/commandref#attr attr], ..), umsortieren von Definitionen, etc.). In diesem Fall sollte der Benutzer sich mit der Bedienung des Editors in der gewählten Umgebung hinreichend gut auskennen.&lt;br /&gt;
&lt;br /&gt;
Auf die Einhaltung der Syntax von Befehlen und Definitionen ist zu achten, teilweise sind besondere Maßnahmen zu ergreifen (&amp;quot;Escapen&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Notwendige Aktionen nach Durchführung der Änderung: &amp;quot;rereadcfg&amp;quot; oder Neustart von Fhem.&lt;br /&gt;
&lt;br /&gt;
==== Syntaxhervorhebung ====&lt;br /&gt;
&#039;&#039;&#039;Syntax-Highlighting&#039;&#039;&#039; kann bei verschiedenen externen Editoren verwendet werden, näheres s. [[Syntax Highlighting bei externen Editoren]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufteilung der fhem.cfg in mehrere Konfigurationsdateien ==&lt;br /&gt;
Die fhem.cfg kann bei Bedarf mit Hilfe des Befehls [[include]] in mehrere Konfigurationsdateien aufgeteilt werden. Dies ist als &#039;&#039;&#039;&amp;quot;Expertenmodus&amp;quot;&#039;&#039;&#039; zu betrachten und sollte (wenn überhaupt) nur von erfahreneren Usern angewendet werden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in einer SQL Datenbank ==&lt;br /&gt;
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 [http://fhem.de/commandref.html#configDB commandref] dokumentiert sind.&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu dieser &amp;quot;Alternative&amp;quot;:&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20194.0.html Tester gesucht]&lt;br /&gt;
* Fhem Forum - [http://forum.fhem.de/index.php/topic,20117.0.html Vorüberlegungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HttpUtils&amp;diff=12046</id>
		<title>HttpUtils</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HttpUtils&amp;diff=12046"/>
		<updated>2015-08-22T12:51:31Z</updated>

		<summary type="html">&lt;p&gt;Rapster: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Allgemein =&lt;br /&gt;
&lt;br /&gt;
Das Modul HttpUtils.pm ist sowohl für Modulentwickler, als auch Endanwender gedacht um Daten via HTTP auszutauschen. Es stellt dabei eine Reihe von Funktionen bereit, auf die in diesem Artikel näher eingegangen werden soll.&lt;br /&gt;
&lt;br /&gt;
Erstellt wurde HttpUtils.pm von Rudolf König.&lt;br /&gt;
&lt;br /&gt;
== Die Funktionen im Einzelnen ==&lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass bei den Funktionen&lt;br /&gt;
&lt;br /&gt;
* GetHttpFile&lt;br /&gt;
* GetFileFromURL&lt;br /&gt;
* GetFileFromURLQuiet&lt;br /&gt;
* HttpUtils_BlockingGet&lt;br /&gt;
&lt;br /&gt;
ein sogenannter &amp;quot;blockierender&amp;quot; Aufruf durchgeführt wird. Das bedeutet, dass FHEM bei einem Aufruf einer dieser Funktionen solange wartet und dabei absolut nichts macht, bis die Antwort vom HTTP-Server eintrifft und die Funktion damit beendet ist. Das kann bei Verbindungsproblemen evtl. dazu führen, dass FHEM für die gesamte Wartezeit (Timeout) steht und nichts verarbeitet. Problematisch ist so etwas gerade bei Anwendungen oder Hardware, die eine zeitnahe Reaktion von FHEM erwarten (z.B. HomeMatic-Geräte).&lt;br /&gt;
&lt;br /&gt;
Es wird daher empfohlen die Funktionen so sparsam wie möglich zu verwenden und die Timeouts so niedrig wie möglich zu halten um ein längeres Einfrieren von FHEM möglichst zu verhindern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alternativ kann man die Funktion &lt;br /&gt;
&lt;br /&gt;
* HttpUtils_NonblockingGet&lt;br /&gt;
&lt;br /&gt;
verwenden, welche ein Blockieren von FHEM verhindert. Wie das genau funktioniert, wird in dem entsprechenden Kapitel beschrieben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende Funktionen sind für Modulentwickler/Endanwender zur direkten Nutzung gedacht:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GetHttpFile ===&lt;br /&gt;
&lt;br /&gt;
Die Funktion GetHttpFile ist die denkbar einfachste Variante um eine URL aufzurufen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Aufruf: &amp;lt;code&amp;gt;GetHttpFile($server, $file)&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter!! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$server&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mandatory&#039;&#039;&lt;br /&gt;
|| Der DNS-Name oder die IP-Adresse des HTTP-Servers&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;www.myhost.com&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;192.168.0.10&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$file&amp;lt;/code&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mandatory&#039;&#039;&lt;br /&gt;
|| Die Datei, welche auf dem HTTP-Server aufgerufen werden soll.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
* &#039;&#039;/&#039;&#039;&lt;br /&gt;
* &#039;&#039;/index.html&#039;&#039;&lt;br /&gt;
* &#039;&#039;/directory/image.jpg&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Funktionsergebnis ist der Inhalt der aufgerufenen Seite in Form eines Strings.&lt;br /&gt;
&lt;br /&gt;
=== GetFileFromURL ===&lt;br /&gt;
&lt;br /&gt;
Die Funktion GetFileFromURL ruft die HTTP-URL auf und gibt als Funktionsergebnis den Seiteninhalt zurück. Im Gegensatz zu GetHttpFile beinhaltet GetFileFromURL einige Zusatzoptionen in Form von Funktionsparametern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Aufruf: &amp;lt;code&amp;gt;GetFileFromURL($url, &#039;&#039;[$timeout], [$data], [$noshutdown], [$loglevel]&#039;&#039;)&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter!! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$url&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mandatory&#039;&#039;&lt;br /&gt;
|| Die HTTP-URL, welche aufgerufen werden soll. Diese kann optional Usernamen, Passwort und einen Port enthalten. Sowohl HTTP als auch HTTPS wird hierbei unterstützt.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;http://www.myhost.com/directory/&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;https://www.myhost.com/&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;http://www.myhost.com:8080/&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;http://foo:bar@www.myhost.com/&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$timeout&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Die maximale Dauer in Sekunden für die HTTP-Anfrage&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beispiel: 5 &#039;&#039;(Sekunden)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Standardwert: 4 Sekunden&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$data&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Wenn man Daten via HTTP-POST übertragen möchte, so kann man die Nutzdaten über $data übergeben. Die Daten werden dabei als Formulardaten übertragen. Wenn man den Content-Type beeinflussen oder mehrere Formular-Felder senden möchte, sollte man zur Funktion HttpUtils_BlockingGet oder HttpUtils_NonblockingGet greifen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standardwert: &#039;&#039;[leer]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$noshutdown&amp;lt;/code&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Wenn $noshutdown auf 1 gesetzt ist, wird dem HTTP-Server nicht implizit mitgeteilt, dass die Verbindung nach dem Request geschlossen werden soll. Viele Webserver schließen in solch einem Fall die Verbindung bevor sie die Antwort senden. Bei 0 wird dem Webserver mitgeteilt, dass der Sendevorgang beendet ist und nun die Antwort abgewartet wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$loglevel&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Das Logleve, in dem sämtliche Logmeldungen zu dieser HTTP-Abfrage erzeugt werden sollen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standardwert: 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Funktionsergebnis ist der Inhalt der aufgerufenen Seite in Form eines Strings.&lt;br /&gt;
&lt;br /&gt;
=== GetFileFromURLQuiet ===&lt;br /&gt;
&lt;br /&gt;
Diese Funktion funktioniert ähnlich wie GetFileFromURL. Allerdings wird die tatsächliche URL in allen erzeugten Log-Meldungen unkenntlich gemacht um z.B. Zugangsdaten nicht preiszugeben. Die aufgerufene Seite wird ebenfalls als Funktionsergebnis zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Aufruf: &amp;lt;code&amp;gt;GetFileFromURLQuiet($url, &#039;&#039;[$timeout], [$data], [$noshutdown], [$loglevel]&#039;&#039;)&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter!! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$url&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mandatory&#039;&#039;&lt;br /&gt;
|| Die HTTP-URL, welche aufgerufen werden soll. Diese kann optional Usernamen, Passwort und einen Port enthalten. Sowohl HTTP als auch HTTPS wird hierbei unterstützt.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;http://www.myhost.com/directory/&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;https://www.myhost.com/&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;http://www.myhost.com:8080/&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;http://foo:bar@www.myhost.com/&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$timeout&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Die maximale Dauer in Sekunden für die HTTP-Anfrage&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beispiel: 5 &#039;&#039;(Sekunden)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Standardwert: 4 Sekunden&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$data&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Wenn man Daten via HTTP-POST übertragen möchte, so kann man die Nutzdaten über &amp;lt;code&amp;gt;$data&amp;lt;/code&amp;gt; übergeben. Die Daten werden dabei als Formulardaten übertragen. Wenn man den Content-Type beeinflussen möchte, oder mehrere Formular-Felder senden möchte, sollte man zur Funktion HttpUtils_BlockingGet oder HttpUtils_NonblockingGet greifen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standardwert: &#039;&#039;[leer]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$noshutdown&amp;lt;/code&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Wenn $noshutdown auf 1 gesetzt ist, wird dem HTTP-Server nicht implizit mitgeteilt, dass die Verbindung nach dem Request geschlossen werden soll. Viele Webserver schließen in solch einem Fall die Verbindung bevor sie die Antwort senden. Bei 0 wird dem Webserver mitgeteilt, dass der Sendevorgang beendet ist und nun die Antwort abgewartet wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$loglevel&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Das Loglevel, in dem sämtliche Logmeldungen zu dieser HTTP-Abfrage erzeugt werden sollen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standardwert: 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Funktionsergebnis ist der Inhalt der aufgerufenen Seite in Form eines Strings.&lt;br /&gt;
&lt;br /&gt;
=== HttpUtils_BlockingGet ===&lt;br /&gt;
&lt;br /&gt;
Wenn die bisher genannten Funktionen nicht ausreichen um die gewünschte Abfrage durchzuführen, so kann man diese Funktion verwenden. Aufgrund zahlreicher Parameter ermöglicht sie viele Anpassungsmöglichkeiten. Diese Funktion hat dabei nicht wie üblich eine Liste an Funktionsparametern, sondern lediglich einen Parameter, welcher ein Hash mit allen Funktionsparametern darstellt. Dieser Hash enthält sämtliche Parameter inkl. Werten. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Aufruf: &amp;lt;code&amp;gt;HttpUtils_BlockingGet($param)&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Parameter $param ist eine Referenz auf eine Hash-Struktur, welche die einzelnen Parameter enthält. Der Hash $param kann folgende Optionen beinhalten:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:175px&amp;quot; | Parameter !! style=&amp;quot;width:auto&amp;quot; | Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{url}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mandatory&#039;&#039;&lt;br /&gt;
 || Die HTTP-URL, welche aufgerufen werden soll. Diese kann optional Usernamen, Passwort und einen Port enthalten. Sowohl HTTP als auch HTTPS wird hierbei unterstützt.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;http://www.myhost.com/directory/&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;https://www.myhost.com/&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;http://www.myhost.com:8080/&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&amp;lt;nowiki&amp;gt;http://foo:bar@www.myhost.com/&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; |&#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{timeout}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Die maximale Dauer in Sekunden für die HTTP-Anfrage&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beispiel: 5 &#039;&#039;(Sekunden)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Standardwert: 4 Sekunden&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; |&#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{data}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Wenn man Daten via HTTP-POST übertragen möchte, so kann man die Nutzdaten über &amp;lt;code&amp;gt;$param-&amp;gt;{data}&amp;lt;/code&amp;gt; übergeben. Die Daten werden dabei als Formulardaten übertragen. Die Daten können dabei auf zwei Arten übergeben werden:&lt;br /&gt;
&lt;br /&gt;
1. Daten als String:&lt;br /&gt;
:* Die Daten werden komplett als gesamter String in &amp;lt;code&amp;gt;$param-&amp;gt;{data}&amp;lt;/code&amp;gt; abgelegt (z.B.: $param-&amp;gt;{data} = &amp;quot;Jede Menge tolle Daten&amp;quot;).&lt;br /&gt;
2. Daten als Hash:&lt;br /&gt;
:* Die Daten werden als Hash mit Key-Value-Pairs übergeben (z.B.: $param-&amp;gt;{data}{field1} = &amp;quot;value1&amp;quot;, $param{data}{field2} = &amp;quot;value2&amp;quot;, ... ). Die Daten werden dann als Formulardaten mit mehrfachen Datenfeldern übertragen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standardwert: &#039;&#039;[leer]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{noshutdown}&amp;lt;/code&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
||Wenn &amp;lt;code&amp;gt;$param-&amp;gt;{noshutdown}&amp;lt;/code&amp;gt; auf 1 gesetzt ist, wird dem HTTP-Server nicht implizit mitgeteilt, dass die Verbindung nach dem Request geschlossen werden soll. Viele Webserver schließen in solch einem Fall die Verbindung bevor sie die Antwort senden. Bei 0 wird dem Webserver mitgeteilt, dass der Sendevorgang beendet ist und nun die Antwort abgewartet wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{loglevel}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Das Loglevel, in dem sämtliche Logmeldungen zu dieser HTTP-Abfrage erzeugt werden sollen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standardwert: 4&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{hideurl}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Wenn dieser Parameter den Wert 1 trägt, wird die URL in sämtlichen Log-Ausgaben unkenntlich gemacht. Dies ist nützlich um z.B. Zugangsdaten geheim zu halten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{ignoreredirects}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Wenn dieser Parameter den Wert 1 trägt, werden Umleitungen durch den Server ignoriert und der Request beendet. Dies kann erforderlich sein um evtl. Cookies aus der Antwort, welche eine Umleitung enthält aus dem HTTP Header zu extrahieren um diese im nächsten Request weiterzuverwenden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{method}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
||Die HTTP-Methode, welche zur Abfrage verwendet werden soll. Sofern keine Daten übertragen werden ist dies standardmäßig &amp;quot;GET&amp;quot;, ansonsten &amp;quot;POST&amp;quot;. Es können aber auch andere Methoden verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standardwert: &amp;quot;GET&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{header}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Eigene HTTP-Header-Zeilen können über diesen Parameter eingebracht werden. Er kann dazu genutzt werden um z.B. den Content-Type festzulegen, oder einfach nur zusätzliche Header-Felder zu setzen. Mehrere Header-Zeilen müssen dabei mit &amp;quot;\r\n&amp;quot; getrennt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
* &amp;lt;code&amp;gt;User-Agent: Mozilla/1.22&#039;&#039;&#039;&amp;lt;u&amp;gt;\r\n&amp;lt;/u&amp;gt;&#039;&#039;&#039;Content-Type: application/xml&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Content-Type: application/xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standardwert: &#039;&#039;[leer]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{sslargs}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Eigene SSL-Optionen können über diesen Parameter eingebracht werden. Er kann dazu genutzt werden um z.B. die SSL-Zertifikats Verifikation abzuschalten. Die SSL-Optionen müssen als eigene Hash-Referenz übergeben werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
* &amp;lt;code&amp;gt;$param-&amp;gt;{sslargs} = { SSL_verify_mode =&amp;gt; &#039;SSL_VERIFY_NONE&#039;, sslOpt2 =&amp;gt; &#039;sslVal2&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standardwert: &#039;&#039;{ }&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{httpversion}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;optional&#039;&#039;&lt;br /&gt;
|| Die HTTP-Version, welche zur Abfrage verwendet werden soll. Standardmäßig werden alle Abfragen mit HTTP/1.0 durchgeführt. Falls es jedoch notwendig ist HTTP/1.1 zu verwenden, so sollte &amp;lt;code&amp;gt;$param-&amp;gt;{httpversion}&amp;lt;/code&amp;gt; auf &amp;quot;1.1&amp;quot; gesetzt werden. Bei Version 1.1 wird automatisch der Header &amp;quot;&amp;lt;code&amp;gt;Connection: close&amp;lt;/code&amp;gt;&amp;quot; implizit mitgesendet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standardwert: &amp;quot;1.0&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Als Rückgabewert von HttpUtils_BlockingGet wird ein Array mit 2 Rückgabewerten zurückgegeben:&lt;br /&gt;
&lt;br /&gt;
 ($err, $data) = HttpUtils_BlockingGet( … )&lt;br /&gt;
&lt;br /&gt;
Diese 2 Rückgabewerten haben folgende Bedeutung:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Rückgabewert !! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$err&amp;lt;/code&amp;gt;&#039;&#039;&#039;|| Falls beim Aufruf der URL ein Fehler aufgetreten ist (z.B. Server nicht erreichbar oder Verbindungstimeout), dann ist dieser Wert mit einer Fehlermeldung gefüllt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn kein Fehler aufgetreten ist, ist dieser Wert mit einem Leerstring gefüllt (&amp;lt;code&amp;gt;$err = &amp;quot;&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$data&amp;lt;/code&amp;gt;&#039;&#039;&#039;|| Die Ergebnisdaten, welche der HTTP-Server zurückgeliefert hat. Die Daten werden als Klartext in Form eines gesamten Strings zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls ein Fehler aufgetreten ist, ist dieser Wert mit einem Leersting gefüllt (&amp;lt;code&amp;gt;$data = &amp;quot;&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== HttpUtils_NonblockingGet ===&lt;br /&gt;
{{Randnotiz|RNText=Die Funktion HttpUtils_NonblockingGet ist nicht komplett durchgehend &amp;quot;non-blocking&amp;quot;. DNS-Abfragen sind nachwievor blockierend. Insbesondere wenn der DNS-Name nicht aufgelöst werden kann.}}&lt;br /&gt;
Diese Funktion arbeitet ähnlich wie HttpUtils_BlockingGet. Allerdings wird das Ergebnis nicht als Funktionsergebnis zurückgegeben. Die Funktion HttpUtils_NonblockingGet initiiert den Verbindungsaufbau und übergibt alles weitere an FHEM interne Routinen. Sobald eine Antwort vom HTTP-Server eintrifft, wird eine Callback-Funktion mit verschiedenen Parametern (unter anderem auch das Ergebnis) aufgerufen, um die Antwort entgegenzunehmen und weiter zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Aufruf ist daher ähnlich zu HttpUtils_BlockingGet mit nur einem Parameter-Hash:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Aufruf: &amp;lt;code&amp;gt;HttpUtils_NonblockingGet($param)&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:175px&amp;quot; | Parameter !! style=&amp;quot;width:auto&amp;quot; | Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot; | &#039;&#039;&#039;&#039;&#039;&amp;lt;br&amp;gt;Alle Hash-Parameter, welche für HttpUtils_BlockingGet gelten, sind auch für HttpUtils_NonblockingGet gültig&#039;&#039;&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{callback}&amp;lt;/code&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mandatory&#039;&#039;&lt;br /&gt;
|| Eine Funktion (oder eine Referenz auf eine Funktion), welche die Ergebnisdaten entgegennimmt und die Antwort entsprechend weiterverarbeitet. Die Callback-Funktion muss dabei 3 Parameter erwarten. Die Funktionsparameter der Callback-Funktion werden im nachfolgenden Abschnitt näher erläutert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
* &amp;lt;code&amp;gt;$param-&amp;gt;{callback} = \&amp;amp;MyCallbackFn&amp;lt;/code&amp;gt; — &#039;&#039;(Referenzzeiger auf Funktionsname)&#039;&#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;$param-&amp;gt;{callback} = sub($$$){ … }&amp;lt;/code&amp;gt; —  &#039;&#039;(direkte Funktionsdefinition)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|  style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;Benutzerdefinierte Parameter&#039;&#039; &lt;br /&gt;
|| Es können im Hash weitere benutzerdefinierte Parameter gesetzt werden, welche evtl. in der Callback-Funktion benötigt werden, um die Antwort korrekt zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel bei der Modul-Programmierung währe das $hash des aktuellen Devices. Alle gesetzten Parameter sind in der Callback-Funktion direkt abrufbar und können ausgewertet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
* &amp;lt;code&amp;gt;$param-&amp;gt;{hash} = $hash&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;$param-&amp;gt;{command} = &amp;quot;on&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein Funktionsrückgabewert von HttpUtils_NonblockingGet existiert nicht, da die eigentliche Rückgabe der Daten über die Callback-Funktion erfolgt. Die Callback-Funktion wird aufgerufen, sobdald der HTTP-Request abgeschlossen ist, oder ein Fehler aufgetreten ist. Der Funktionsaufruf erfolgt mit den folgenden Parametern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; &#039;&#039;MyCallbackFn&#039;&#039; ( $param, $err, $data )&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese 3 Parameter haben dabei folgende Bedeutung:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$param&amp;lt;/code&amp;gt;&#039;&#039;&#039; || Der Parameter-Hash, mit allen Argumenten die beim Aufruf der Funktion übergeben worden sind.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich, dass der Parameter-Hash nach erfolgter Abfrage zusätzliche oder veränderte Elemente enthält:&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{redirects}&amp;lt;/code&amp;gt;&#039;&#039;&#039; - Die Anzahl an Umleitungen die erfolgte, bis die Anfrage beantwortet wurde.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{url}&amp;lt;/code&amp;gt;&#039;&#039;&#039; - Die URL, die nach erfolgter Umleitung die Anfrage beantwortet hat.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{protocol}&amp;lt;/code&amp;gt;&#039;&#039;&#039; - Das verwendete Protokoll, welches zur Abfrage verwendet wurde (&amp;quot;http&amp;quot; oder &amp;quot;https&amp;quot;).&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{path}&amp;lt;/code&amp;gt;&#039;&#039;&#039; - Der Pfad, welcher auf dem HTTP-Server angefragt wurde.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{host}&amp;lt;/code&amp;gt;&#039;&#039;&#039; - Der Name oder die IP-Adresse des HTTP-Servers.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{httpheader}&amp;lt;/code&amp;gt;&#039;&#039;&#039; - Der gesamte HTTP Header, welcher der Server bei der letzten Antwort zurücklieferte.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{code}&amp;lt;/code&amp;gt;&#039;&#039;&#039; - Der HTTP-Statuscode, mit dem die Anfrage vom Server beantwortet wurde.&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{addr}&amp;lt;/code&amp;gt;&#039;&#039;&#039; - Die HTTP-URL ohne Pfad und evtl. Authentifizerungsinformationen des HTTP-Servers (z.B. &amp;quot;&amp;lt;nowiki&amp;gt;http://myserver.com:8080&amp;lt;/nowiki&amp;gt;&amp;quot;).&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;$param-&amp;gt;{auth}&amp;lt;/code&amp;gt;&#039;&#039;&#039; - Der Authentifizierungs-String, welcher verwendet wurde um sich gegenüber dem HTTP-Server zu authentifizieren (nur wenn Authentifizierung benutzt wurde).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$err&amp;lt;/code&amp;gt;&#039;&#039;&#039;|| Falls beim Aufruf der URL ein Fehler aufgetreten ist (z.B. Server nicht erreichbar oder Verbindungstimeout), dann ist dieser Wert mit einer Fehlermeldung gefüllt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn kein Fehler aufgetreten ist, ist dieser Wert mit einem Leerstring gefüllt (&amp;lt;code&amp;gt;$err = &amp;quot;&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align:top&amp;quot; | &#039;&#039;&#039;&amp;lt;code&amp;gt;$data&amp;lt;/code&amp;gt;&#039;&#039;&#039;|| Die Ergebnisdaten, welche der HTTP-Server zurückgeliefert hat. Die Daten werden als Klartext in Form eines gesamten Strings zurückgegeben. Es handelt sich hierbei ausschließlich um den HTTP-Body. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls ein Fehler aufgetreten ist, ist dieser Wert mit einem Leersting gefüllt (&amp;lt;code&amp;gt;$data = &amp;quot;&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Callback-Funktion kann nun die Daten aus der HTTP-Antwort verarbeiten oder bei Fehler entsprechende Log-Meldungen ausgeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Beispiel für HttpUtils_NonblockingGet() für Modulprogrammierer ====&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel soll eine Hilfestellung für eigene Anwendungen geben&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;use HttpUtils;&lt;br /&gt;
sub X_GetHttpResponse($)&lt;br /&gt;
{&lt;br /&gt;
    my ($hash, $def) = @_;&lt;br /&gt;
    my $name = $hash-&amp;gt;{NAME};&lt;br /&gt;
    my $param = {&lt;br /&gt;
                    url        =&amp;gt; &amp;quot;http://www.foo.de&amp;quot;,&lt;br /&gt;
                    timeout    =&amp;gt; 5,&lt;br /&gt;
                    hash       =&amp;gt; $hash,                                                                                  # Muss gesetzt werden, damit die Callback funktion wieder $hash hat&lt;br /&gt;
                    method     =&amp;gt; &amp;quot;GET&amp;quot;,                                                                                  # Lesen von Inhalten&lt;br /&gt;
                    header     =&amp;gt; &amp;quot;agent: TeleHeater/2.2.3\r\nUser-Agent: TeleHeater/2.2.3\r\nAccept: application/json&amp;quot;,  # Den Header gemäss abzufragender Daten ändern&lt;br /&gt;
                    callback   =&amp;gt;  \&amp;amp;X_ParseHttpResponse                                                                  # Diese Funktion soll das Ergebnis dieser HTTP Anfrage bearbeiten&lt;br /&gt;
                };&lt;br /&gt;
                          &lt;br /&gt;
    HttpUtils_NonblockingGet($param);                                                                                     # Starten der HTTP Abfrage. Es gibt keinen Return-Code. &lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sub X_ParseHttpResponse($)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    my ($param, $err, $data) = @_;&lt;br /&gt;
    my $hash = $param-&amp;gt;{hash};&lt;br /&gt;
    my $name = $hash-&amp;gt;{NAME};&lt;br /&gt;
&lt;br /&gt;
    if($err ne &amp;quot;&amp;quot;)                                                                                                         # wenn ein Fehler bei der HTTP Abfrage aufgetreten ist&lt;br /&gt;
    {&lt;br /&gt;
        Log3 $name, 3, &amp;quot;error while requesting &amp;quot;.$param-&amp;gt;{url}.&amp;quot; - $err&amp;quot;;                                                  # Eintrag fürs Log&lt;br /&gt;
        readingsSingleUpdate($hash, &amp;quot;fullResponse&amp;quot;, &amp;quot;ERROR&amp;quot;);                                                              # Readings erzeugen&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    elsif($data ne &amp;quot;&amp;quot;)                                                                                                     # wenn die Abfrage erfolgreich war ($data enthält die Ergebnisdaten des HTTP Aufrufes)&lt;br /&gt;
    {&lt;br /&gt;
        Log3 $name, 3, &amp;quot;url &amp;quot;.$param-&amp;gt;{url}.&amp;quot; returned: $data&amp;quot;;                                                            # Eintrag fürs Log&lt;br /&gt;
&lt;br /&gt;
        # An dieser Stelle die Antwort parsen / verarbeiten mit $data&lt;br /&gt;
&lt;br /&gt;
        readingsSingleUpdate($hash, &amp;quot;fullResponse&amp;quot;, $data);                                                                # Readings erzeugen&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    # Damit ist die Abfrage zuende.&lt;br /&gt;
    # Evtl. einen InternalTimer neu schedulen&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Development]]&lt;/div&gt;</summary>
		<author><name>Rapster</name></author>
	</entry>
</feed>