<?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=OliWee</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=OliWee"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/OliWee"/>
	<updated>2026-04-17T15:37:50Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/Tools_und_Fehlersuche&amp;diff=16603</id>
		<title>DOIF/Tools und Fehlersuche</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/Tools_und_Fehlersuche&amp;diff=16603"/>
		<updated>2016-10-12T09:05:24Z</updated>

		<summary type="html">&lt;p&gt;OliWee: Vorlage &amp;quot;Link2Forum verwendet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Hilfsmodul]]&lt;br /&gt;
&#039;&#039;&#039;Anmerkung:&#039;&#039;&#039; Dieser Artikel wurde {{Link2Forum|Topic=58237|Message=496560|LinkText=aus dem Forum}} übernommen.&lt;br /&gt;
&lt;br /&gt;
Dies ist der Versuch einige Hilfen aufzuzeigen, damit ein fehlerhaftes DOIF selbst korrigiert werden kann und wenn dies nicht zum Ziel führt, notwendige Angaben für eine Anfrage im Forum zusammenzustellen.&lt;br /&gt;
&lt;br /&gt;
== Eine verlässliche Basis zur Fehlereingrenzung schaffen. ==&lt;br /&gt;
=== Standardisierte Geräteerstellung und Bearbeitung ===&lt;br /&gt;
Im Folgenden wird davon ausgegangen, dass zum Erstellen des DOIF und zur Befehlseingabe die Eingabezeile des Web-Frontends benutzt wird und mit dem DEF-Editor (auf DEF klicken) in der sich öffnenden Geräteübersicht (DeviceOverview) bearbeitet wird, ohne eine cfg-Datei zu editieren.&lt;br /&gt;
&lt;br /&gt;
Nutzung des integrierten DEF-Editors mit Codemirror-Erweiterung, [[Konfiguration#Syntaxhervorhebung | Codemirror einrichten und bedienen]], siehe ergänzend DOIF: Tips leichtere Bedienung Syntaxhervorhebung Klammerprüfung Suchen&amp;amp;Ersetzen&lt;br /&gt;
&lt;br /&gt;
=== Strukturierung der Definition ===&lt;br /&gt;
Eine einzeilige Definition, die über mehrere Seiten verschoben werden muss oder über mehrere Zeilen umgebrochen wird ist unübersichtlich. Der DEF-Editor bietet die Möglichkeit zur Strukturierung der Definition. Man könnte wie folgt strukturieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
## 1&lt;br /&gt;
(&amp;lt;Bedingung&amp;gt;)&lt;br /&gt;
   (&amp;lt;Befehle&amp;gt;)&lt;br /&gt;
## 2&lt;br /&gt;
DOELSEIF (&amp;lt;Bedingung&amp;gt;)&lt;br /&gt;
   (&amp;lt;Befehle&amp;gt;)&lt;br /&gt;
## 3&lt;br /&gt;
DOELSEIF (&amp;lt;Bedingung&amp;gt;)&lt;br /&gt;
   (&amp;lt;Befehle&amp;gt;)&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FHEM aktuell halten ===&lt;br /&gt;
Die [http://fhem.de/commandref_DE.html#DOIF Befehlsreferenz] im Netz beschreibt die Eigenschaften des aktuellen Moduls. Möchte man die neusten Eigenschaften nutzen, ist eine Aktualisierung durchzuführen. Wird nur das Modul aktualisiert, kann das zu unerwartetem Verhalten des DOIF führen.&lt;br /&gt;
&lt;br /&gt;
Prüfen ob ein Update für DOIF vorliegt mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
update check&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FHEM aktualisieren mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach einem &amp;quot;update&amp;quot; immer ein&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
shutdown restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
durchführen.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;shutdown restart&amp;quot; kann man per notify automatisieren mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define shutdown_restart notify global:UPDATE shutdown restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Befehl&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
liefert die &amp;quot;Latest Revision:&amp;quot; und die aktuell geladenen Modulversionen.&lt;br /&gt;
&lt;br /&gt;
== Fehlersuche ==&lt;br /&gt;
=== Fehler in der Syntax der Definition ===&lt;br /&gt;
Diese Fehler werden durch die Benutzung des DEF-Editors mit Codemirror-Erweiterung reduziert.&lt;br /&gt;
&lt;br /&gt;
Der Editor unterstützt:&lt;br /&gt;
* farbliche Hervorhebung bekannter Befehle&lt;br /&gt;
* Vervollständigung bekannter Begriffe&lt;br /&gt;
* eine Prüfung auf unvollständige Klammerpaare&lt;br /&gt;
* ggf. Fehlermeldung beim Erstellen einer Definition&lt;br /&gt;
* Suchen&amp;amp;Ersetzen&lt;br /&gt;
*uvm.&lt;br /&gt;
&lt;br /&gt;
Einige Syntaxfehler werden im Frontend bei der Erstellung des Gerätes oder im globalen Logfile angezeigt. Das globale Logfile ist über den Menüpunkt &amp;quot;Logfile&amp;quot; im Hauptmenü des Frontends zu erreichen.&lt;br /&gt;
Fehler oder Warnungen, die erst zur Laufzeit offensichtlich werden, stehen in der Geräteübersicht oder im globalen Logfile.&lt;br /&gt;
&lt;br /&gt;
=== Logische Fehler ===&lt;br /&gt;
Diese Fehler werden erst zur Laufzeit sichtbar und das DOIF verhält sich nicht wie erwartet.&lt;br /&gt;
&lt;br /&gt;
Die Fehler entstehen z.B. durch:&lt;br /&gt;
&lt;br /&gt;
* Angabe einer falsche Rangfolge von Operatoren in der Bedingung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[A] and [B] or [C]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
geschrieben, aber&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[A] and ([B] or [C])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
gemeint.&lt;br /&gt;
* Nichtbeachtung des unterschiedlichen Verhalten von auslösenden und nicht auslösenden Readings.&lt;br /&gt;
* Ein unerwartetes Auslösen von DOELSE.&lt;br /&gt;
* Unerwartete Ereignisse eines Gerätes, die in einer Bedingung nicht abgefangen werden.&lt;br /&gt;
* Falsche Angabe der Events eines beteiligten Gerätes.&lt;br /&gt;
&lt;br /&gt;
=== Fehler eingrenzen ===&lt;br /&gt;
Wenn der Hinweis in der Fehlermeldung nicht ausreicht, um den Fehler zu beseitigen, empfiehlt es sich die Definition des DOIF Schritt für Schritt neu aufzubauen und die Fehlermeldung zu beobachten, um den Fehlerort einzugrenzen. Der letzte Schritt, der zur Fehlermeldung geführt hat, muss dann genauer untersucht werden.&lt;br /&gt;
&lt;br /&gt;
=== DOIF zum Testen ===&lt;br /&gt;
Eine weitere Möglichkeit wäre ein DOIF zum Testen anzulegen. Darin können Befehle, Bedingungen oder Bedingungsteile, verschiedene Schreibweisen oder alternative Operanden verwendet und ausprobiert werden, bis der eine Lösung gefunden wurde.&lt;br /&gt;
&lt;br /&gt;
== Hilfsmittel zu Fehleranalyse ==&lt;br /&gt;
=== Befehlsreferenz ===&lt;br /&gt;
Die [http://fhem.de/commandref_DE.html#DOIF Befehlsreferenz zum DOIF] immer wieder problembezogen lesen.&lt;br /&gt;
&lt;br /&gt;
=== Stacktrace ===&lt;br /&gt;
Zur Ursachenermittlung von Perl-Warnungen kann das globale Attribut stacktrace auf 1 gesetzt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr global stacktrace 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Verboselevel ===&lt;br /&gt;
In manchen Fällen bekommt man hilfreiche Informationen, wenn der Verboselevel von betroffenen Geräten erhöht wird.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr &amp;lt;gerätename&amp;gt; verbose 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eventmonitor ===&lt;br /&gt;
Der Eventmonitor ist über den Menüpunkt &amp;quot;Event monitor&amp;quot; im Hauptmenü des Frontends zu erreichen. Er enthält einen Filter, um die Anzeige der Events zu beschränken, um z.B. nur die Events eines Gerätes anzuzeigen, etwa des DOIF.&lt;br /&gt;
&lt;br /&gt;
=== Detailansicht des DOIF ===&lt;br /&gt;
Das Schaltverhalten des DOIF kann in der Detailansicht (DeviceOverview) des DOIF und/oder im Eventmonitor beobachtet werden.&lt;br /&gt;
&lt;br /&gt;
Bei der Detailansicht ist zu beachten, dass nicht alle sich ändernden Readings aktualisiert werden. Um diese geänderten Readings anzuzeigen, muss die  Ansicht im Browser aktualisiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Gerätedefinition ausgeben ===&lt;br /&gt;
Eine Gerätedefinition einschliesslich der Attribute kann man sich mit dem Befehl &amp;quot;exportdevice&amp;quot; anzeigen lassen und zum Posten verwenden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
exportdevice &amp;lt;DOIFname&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Listing des DOIF ===&lt;br /&gt;
Eine Momentaufnahme vom Status des DOIF im Fehlerfall kann man sich mit dem Befehl &amp;quot;list&amp;quot; anzeigen lassen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
list &amp;lt;DOIFname&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Verhaltensanalyse des DOIF ===&lt;br /&gt;
Das komplette Verhalten des DOIF kann über ein extra Logfile protokolliert werden. Dazu können alle Geräte einbezogen werden, die im DOIF enthalten sind; z.B. als tägliches Logfile.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define DOIF_Log FileLog ./log/DOIF_Log-%j.log &amp;lt;DOIFname&amp;gt;:.*|&amp;lt;Gerät 1&amp;gt;:.*|&amp;lt;Gerät 2&amp;gt;:.* ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem Attribut mseclog lässt sich ein genauerer Zeitstempel einstellen, damit können zusammengehörende Events erkannt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr DOIF_Log mseclog 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In dem Logfile kann das Verhalten des DOIF und der dazugehörenden Operanden genau nachvollzogen werden. Wenn Abweichungen zum erwarteten Verhalten erkannt werden, hat man einen Anhaltspunkt für weitere Untersuchungen oder sogar den Auslöser gefunden.&lt;br /&gt;
&lt;br /&gt;
Die Protokollierung mit FileLog hat den Vorteil, dass die Definition recht einfach in der Geräteübersicht zusammengestellt werden kann. Die Definition muss nach Gebrauch nicht gelöscht werden, sondern kann mit dem Attribut &amp;quot;disable&amp;quot; abgeschaltet werden. Später kann das Gerät wieder aktiviert werden, etwa um ein anderes DOIF zu loggen.&lt;br /&gt;
&lt;br /&gt;
== Qualifizierte Angaben zur Anfrage im Forum ==&lt;br /&gt;
Dem Helfenden sollten alle zum Problem gehörenden Informationen gegeben werden, die dem Fragenden auch zur Verfügung stehen.&lt;br /&gt;
&lt;br /&gt;
Nicht immer sind alle Angaben notwendig, bei komplexen Problemen schon eher.&lt;br /&gt;
* Hinweis, wenn FHEM und DOIF nicht aktuell sind.&lt;br /&gt;
* Hinweis, wenn die cfg-Dateien direkt bearbeitet werden.&lt;br /&gt;
* genaue Beschreibung des erwarteten Verhalten&lt;br /&gt;
* genaue Beschreibung des beobachteten Verhalten&lt;br /&gt;
* Alle relevanten Fehlermeldungen&lt;br /&gt;
* Darstellen, was man selbst schon versucht hat und mit welchem Ergebnis, dann wird es nicht noch einmal vorgeschlagen.&lt;br /&gt;
* Angabe der vollständigen Definition des DOIF (Name, Definition, Attribute) in Code-Tags (das Raute-Zeichen # im Forum-Editor)&lt;br /&gt;
* Das Listing des DOIF als Alternative&lt;br /&gt;
* Die relevanten Stellen aus dem aufgezeichnete Filelog mit Kommentar und Markierung der Probleme in Quote-Tags (das Zeichen rechts neben der Raute). In Quote-Tags kann die Zeichenformatierung zum Markieren genutzt werden, in Code-Tags nicht.&lt;br /&gt;
* Auszug aus dem Eventmonitor mit Kommentar und Markierung der Probleme&lt;/div&gt;</summary>
		<author><name>OliWee</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF&amp;diff=16602</id>
		<title>DOIF</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF&amp;diff=16602"/>
		<updated>2016-10-12T09:03:12Z</updated>

		<summary type="html">&lt;p&gt;OliWee: Link zur Unterseite hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Do ... if ... &lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=98_DOIF.pm&lt;br /&gt;
|ModOwner=Damian}}&lt;br /&gt;
&lt;br /&gt;
[[DOIF]] ist ein universelles Modul, welches sowohl ereignis- als auch zeitgesteuert arbeitet. Es vereinigt die Funktionalität eines [[notify]]-, [[at]]-, [[watchdog]]-Befehls in Kombination mit logischen Abfragen unter einem Dach. Damit können insb. komplexere Problemstellungen innerhalb eines DOIF-Moduls gelöst werden, die sonst nur mit Hilfe einzelner Module an mehreren Stellen in FHEM vorgenommen werden müssten. Es ermöglicht, Aktionen (&amp;quot;do&amp;quot;) unter bestimmten Bedingungen (&amp;quot;if&amp;quot;) auszuführen. Bedingungen umfasst auch Konstrukte wie &amp;quot;wenn Zustand x für y Minuten... (Zeitsteuerung)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
keine &lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
Siehe Commandref.&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
Siehe Commandref.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
Der Modulautor hat im  deutschen Teil der [http://fhem.de/commandref_DE.html#DOIF Commandref]  eine Vielzahl von einfachen und auch komplexeren Beispielen zur Nutzung von DOIF aufgenommen. Darum wird hier auf weitere Beispiele zu DOIF verzichtet. Ausführliche Code-Beispiele zu DOIF bitte gegebenenfalls als eigene Wiki-Seite unter [[:Kategorie:Code Snippets|Code Snippets]] aufnehmen.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=45373|LinkText=Hinweise zur leichteren Erstellung/Bearbeitung (nicht nur) von DOIF}}&lt;br /&gt;
* {{Link2Forum|Topic=23833|LinkText=Forenthread}} zur Entstehung dieses Moduls&lt;br /&gt;
* [[DOIF/Tools und Fehlersuche]]&lt;br /&gt;
* [[DOIF/Tipps zur leichteren Bedienung]]&lt;br /&gt;
&amp;lt;!-- (Modulkategorie wird automatisch gesetzt) --&amp;gt;&lt;/div&gt;</summary>
		<author><name>OliWee</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/Tipps_zur_leichteren_Bedienung&amp;diff=16601</id>
		<title>DOIF/Tipps zur leichteren Bedienung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/Tipps_zur_leichteren_Bedienung&amp;diff=16601"/>
		<updated>2016-10-12T08:59:39Z</updated>

		<summary type="html">&lt;p&gt;OliWee: Die Seite wurde neu angelegt: „Kategorie:Hilfsmodul &amp;#039;&amp;#039;&amp;#039;Anmerkung:&amp;#039;&amp;#039;&amp;#039; Dieser Artikel wurde {{Link2Forum|Topic=45373|Message=371668|LinkText=aus dem Forum}} übernommen.  Ich habe ein paar…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Hilfsmodul]]&lt;br /&gt;
&#039;&#039;&#039;Anmerkung:&#039;&#039;&#039; Dieser Artikel wurde {{Link2Forum|Topic=45373|Message=371668|LinkText=aus dem Forum}} übernommen.&lt;br /&gt;
&lt;br /&gt;
Ich habe ein paar Hinweise gesammelt, die den Umgang mit dem DOIF erleichtern können. Nichts Neues, aber vielleicht hilft es dem Einen oder Anderen.&lt;br /&gt;
Es gibt bestimmt noch Ergänzungen, die pflege ich hier im 1. Beitrag ein.&lt;br /&gt;
&lt;br /&gt;
== Verwenden des DEF-Editors zum Erstellen und Bearbeiten des DOIF ==&lt;br /&gt;
Zuerst eine minimale Definition in der Eingabezeile der WEB-Oberfläche erstellen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;DOIF Name&amp;gt; DOIF ([&amp;lt;Name eines triggernden Gerätes&amp;gt;])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
danach die Eingabetaste drücken, dann öffnet sich die Geräteübersicht (DeviceOverview), dort den DEF-Editor öffnen (auf DEF klicken) und die Definition weiter bearbeiten und strukturieren.&lt;br /&gt;
&lt;br /&gt;
== Einschalten von Syntaxhervorhebung, Zeilenumbruch, Suchen und Ersetzen, Klammerprüfung uvm. ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr WEB JavaScripts codemirror/fhem_codemirror.js&lt;br /&gt;
attr WEB codemirrorParam { &amp;quot;lineWrapping&amp;quot;:true }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Länge der Eingabezeile (Befehlszeile) ändern ==&lt;br /&gt;
Per Attribut die Länge der Eingabezeile ändern.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr WEB mainInputLength 80&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Eingabefeld für bestimmte Attribute vergrößern, z.B. für das Attribut &amp;quot;state&amp;quot;, um bequem Berechnungen zu erstellen. ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr &amp;lt;DOIF Name&amp;gt; widgetOverride state:textField-long&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Größe des Editorfensters ändern ==&lt;br /&gt;
Wem das Editorfenster zu zu groß oder zu klein ist, kann die Höhe optimieren mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr WEB codemirrorParam { ..., &amp;quot;height&amp;quot;:&amp;quot;auto&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere einstellbare Parameter für codemirror siehe auch:&lt;br /&gt;
[[Konfiguration#Syntaxhervorhebung|Codemirror Bedienung und Einstellungen]]&lt;br /&gt;
&lt;br /&gt;
== Umschaltung auf deutsche Befehlsreferenz ==&lt;br /&gt;
Direkter Aufruf der deutschsprachigen Hilfe in der &amp;quot;Device specific help&amp;quot; und direkter Zugriff auf die deutschsprachige Befehlsreferenz im Hauptmenü.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr global language DE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
[[DOIF/Tools und Fehlersuche|Tools und Fehlersuche]]&lt;/div&gt;</summary>
		<author><name>OliWee</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF&amp;diff=16600</id>
		<title>DOIF</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF&amp;diff=16600"/>
		<updated>2016-10-12T07:38:40Z</updated>

		<summary type="html">&lt;p&gt;OliWee: /* Links */ Link zu Unterseite hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Do ... if ... &lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=98_DOIF.pm&lt;br /&gt;
|ModOwner=Damian}}&lt;br /&gt;
&lt;br /&gt;
[[DOIF]] ist ein universelles Modul, welches sowohl ereignis- als auch zeitgesteuert arbeitet. Es vereinigt die Funktionalität eines [[notify]]-, [[at]]-, [[watchdog]]-Befehls in Kombination mit logischen Abfragen unter einem Dach. Damit können insb. komplexere Problemstellungen innerhalb eines DOIF-Moduls gelöst werden, die sonst nur mit Hilfe einzelner Module an mehreren Stellen in FHEM vorgenommen werden müssten. Es ermöglicht, Aktionen (&amp;quot;do&amp;quot;) unter bestimmten Bedingungen (&amp;quot;if&amp;quot;) auszuführen. Bedingungen umfasst auch Konstrukte wie &amp;quot;wenn Zustand x für y Minuten... (Zeitsteuerung)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
keine &lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
Siehe Commandref.&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
Siehe Commandref.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
Der Modulautor hat im  deutschen Teil der [http://fhem.de/commandref_DE.html#DOIF Commandref]  eine Vielzahl von einfachen und auch komplexeren Beispielen zur Nutzung von DOIF aufgenommen. Darum wird hier auf weitere Beispiele zu DOIF verzichtet. Ausführliche Code-Beispiele zu DOIF bitte gegebenenfalls als eigene Wiki-Seite unter [[:Kategorie:Code Snippets|Code Snippets]] aufnehmen.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=45373|LinkText=Hinweise zur leichteren Erstellung/Bearbeitung (nicht nur) von DOIF}}&lt;br /&gt;
* {{Link2Forum|Topic=23833|LinkText=Forenthread}} zur Entstehung dieses Moduls&lt;br /&gt;
* [[DOIF/Tools und Fehlersuche]]&lt;br /&gt;
&amp;lt;!-- (Modulkategorie wird automatisch gesetzt) --&amp;gt;&lt;/div&gt;</summary>
		<author><name>OliWee</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/Tools_und_Fehlersuche&amp;diff=16599</id>
		<title>DOIF/Tools und Fehlersuche</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/Tools_und_Fehlersuche&amp;diff=16599"/>
		<updated>2016-10-12T07:37:19Z</updated>

		<summary type="html">&lt;p&gt;OliWee: Die Seite wurde neu angelegt: „Kategorie:Hilfsmodul &amp;#039;&amp;#039;&amp;#039;Anmerkung:&amp;#039;&amp;#039;&amp;#039; Dieser Artikel wurde [https://forum.fhem.de/index.php/topic,58237.msg496560.html#msg496560 aus dem Forum] übernommen…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Hilfsmodul]]&lt;br /&gt;
&#039;&#039;&#039;Anmerkung:&#039;&#039;&#039; Dieser Artikel wurde [https://forum.fhem.de/index.php/topic,58237.msg496560.html#msg496560 aus dem Forum] übernommen.&lt;br /&gt;
&lt;br /&gt;
Dies ist der Versuch einige Hilfen aufzuzeigen, damit ein fehlerhaftes DOIF selbst korrigiert werden kann und wenn dies nicht zum Ziel führt, notwendige Angaben für eine Anfrage im Forum zusammenzustellen.&lt;br /&gt;
&lt;br /&gt;
== Eine verlässliche Basis zur Fehlereingrenzung schaffen. ==&lt;br /&gt;
=== Standardisierte Geräteerstellung und Bearbeitung ===&lt;br /&gt;
Im Folgenden wird davon ausgegangen, dass zum Erstellen des DOIF und zur Befehlseingabe die Eingabezeile des Web-Frontends benutzt wird und mit dem DEF-Editor (auf DEF klicken) in der sich öffnenden Geräteübersicht (DeviceOverview) bearbeitet wird, ohne eine cfg-Datei zu editieren.&lt;br /&gt;
&lt;br /&gt;
Nutzung des integrierten DEF-Editors mit Codemirror-Erweiterung, [[Konfiguration#Syntaxhervorhebung | Codemirror einrichten und bedienen]], siehe ergänzend DOIF: Tips leichtere Bedienung Syntaxhervorhebung Klammerprüfung Suchen&amp;amp;Ersetzen&lt;br /&gt;
&lt;br /&gt;
=== Strukturierung der Definition ===&lt;br /&gt;
Eine einzeilige Definition, die über mehrere Seiten verschoben werden muss oder über mehrere Zeilen umgebrochen wird ist unübersichtlich. Der DEF-Editor bietet die Möglichkeit zur Strukturierung der Definition. Man könnte wie folgt strukturieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
## 1&lt;br /&gt;
(&amp;lt;Bedingung&amp;gt;)&lt;br /&gt;
   (&amp;lt;Befehle&amp;gt;)&lt;br /&gt;
## 2&lt;br /&gt;
DOELSEIF (&amp;lt;Bedingung&amp;gt;)&lt;br /&gt;
   (&amp;lt;Befehle&amp;gt;)&lt;br /&gt;
## 3&lt;br /&gt;
DOELSEIF (&amp;lt;Bedingung&amp;gt;)&lt;br /&gt;
   (&amp;lt;Befehle&amp;gt;)&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FHEM aktuell halten ===&lt;br /&gt;
Die [http://fhem.de/commandref_DE.html#DOIF Befehlsreferenz] im Netz beschreibt die Eigenschaften des aktuellen Moduls. Möchte man die neusten Eigenschaften nutzen, ist eine Aktualisierung durchzuführen. Wird nur das Modul aktualisiert, kann das zu unerwartetem Verhalten des DOIF führen.&lt;br /&gt;
&lt;br /&gt;
Prüfen ob ein Update für DOIF vorliegt mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
update check&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FHEM aktualisieren mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach einem &amp;quot;update&amp;quot; immer ein&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
shutdown restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
durchführen.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;shutdown restart&amp;quot; kann man per notify automatisieren mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define shutdown_restart notify global:UPDATE shutdown restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Befehl&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
liefert die &amp;quot;Latest Revision:&amp;quot; und die aktuell geladenen Modulversionen.&lt;br /&gt;
&lt;br /&gt;
== Fehlersuche ==&lt;br /&gt;
=== Fehler in der Syntax der Definition ===&lt;br /&gt;
Diese Fehler werden durch die Benutzung des DEF-Editors mit Codemirror-Erweiterung reduziert.&lt;br /&gt;
&lt;br /&gt;
Der Editor unterstützt:&lt;br /&gt;
* farbliche Hervorhebung bekannter Befehle&lt;br /&gt;
* Vervollständigung bekannter Begriffe&lt;br /&gt;
* eine Prüfung auf unvollständige Klammerpaare&lt;br /&gt;
* ggf. Fehlermeldung beim Erstellen einer Definition&lt;br /&gt;
* Suchen&amp;amp;Ersetzen&lt;br /&gt;
*uvm.&lt;br /&gt;
&lt;br /&gt;
Einige Syntaxfehler werden im Frontend bei der Erstellung des Gerätes oder im globalen Logfile angezeigt. Das globale Logfile ist über den Menüpunkt &amp;quot;Logfile&amp;quot; im Hauptmenü des Frontends zu erreichen.&lt;br /&gt;
Fehler oder Warnungen, die erst zur Laufzeit offensichtlich werden, stehen in der Geräteübersicht oder im globalen Logfile.&lt;br /&gt;
&lt;br /&gt;
=== Logische Fehler ===&lt;br /&gt;
Diese Fehler werden erst zur Laufzeit sichtbar und das DOIF verhält sich nicht wie erwartet.&lt;br /&gt;
&lt;br /&gt;
Die Fehler entstehen z.B. durch:&lt;br /&gt;
&lt;br /&gt;
* Angabe einer falsche Rangfolge von Operatoren in der Bedingung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[A] and [B] or [C]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
geschrieben, aber&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[A] and ([B] or [C])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
gemeint.&lt;br /&gt;
* Nichtbeachtung des unterschiedlichen Verhalten von auslösenden und nicht auslösenden Readings.&lt;br /&gt;
* Ein unerwartetes Auslösen von DOELSE.&lt;br /&gt;
* Unerwartete Ereignisse eines Gerätes, die in einer Bedingung nicht abgefangen werden.&lt;br /&gt;
* Falsche Angabe der Events eines beteiligten Gerätes.&lt;br /&gt;
&lt;br /&gt;
=== Fehler eingrenzen ===&lt;br /&gt;
Wenn der Hinweis in der Fehlermeldung nicht ausreicht, um den Fehler zu beseitigen, empfiehlt es sich die Definition des DOIF Schritt für Schritt neu aufzubauen und die Fehlermeldung zu beobachten, um den Fehlerort einzugrenzen. Der letzte Schritt, der zur Fehlermeldung geführt hat, muss dann genauer untersucht werden.&lt;br /&gt;
&lt;br /&gt;
=== DOIF zum Testen ===&lt;br /&gt;
Eine weitere Möglichkeit wäre ein DOIF zum Testen anzulegen. Darin können Befehle, Bedingungen oder Bedingungsteile, verschiedene Schreibweisen oder alternative Operanden verwendet und ausprobiert werden, bis der eine Lösung gefunden wurde.&lt;br /&gt;
&lt;br /&gt;
== Hilfsmittel zu Fehleranalyse ==&lt;br /&gt;
=== Befehlsreferenz ===&lt;br /&gt;
Die [http://fhem.de/commandref_DE.html#DOIF Befehlsreferenz zum DOIF] immer wieder problembezogen lesen.&lt;br /&gt;
&lt;br /&gt;
=== Stacktrace ===&lt;br /&gt;
Zur Ursachenermittlung von Perl-Warnungen kann das globale Attribut stacktrace auf 1 gesetzt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr global stacktrace 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Verboselevel ===&lt;br /&gt;
In manchen Fällen bekommt man hilfreiche Informationen, wenn der Verboselevel von betroffenen Geräten erhöht wird.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr &amp;lt;gerätename&amp;gt; verbose 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eventmonitor ===&lt;br /&gt;
Der Eventmonitor ist über den Menüpunkt &amp;quot;Event monitor&amp;quot; im Hauptmenü des Frontends zu erreichen. Er enthält einen Filter, um die Anzeige der Events zu beschränken, um z.B. nur die Events eines Gerätes anzuzeigen, etwa des DOIF.&lt;br /&gt;
&lt;br /&gt;
=== Detailansicht des DOIF ===&lt;br /&gt;
Das Schaltverhalten des DOIF kann in der Detailansicht (DeviceOverview) des DOIF und/oder im Eventmonitor beobachtet werden.&lt;br /&gt;
&lt;br /&gt;
Bei der Detailansicht ist zu beachten, dass nicht alle sich ändernden Readings aktualisiert werden. Um diese geänderten Readings anzuzeigen, muss die  Ansicht im Browser aktualisiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Gerätedefinition ausgeben ===&lt;br /&gt;
Eine Gerätedefinition einschliesslich der Attribute kann man sich mit dem Befehl &amp;quot;exportdevice&amp;quot; anzeigen lassen und zum Posten verwenden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
exportdevice &amp;lt;DOIFname&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Listing des DOIF ===&lt;br /&gt;
Eine Momentaufnahme vom Status des DOIF im Fehlerfall kann man sich mit dem Befehl &amp;quot;list&amp;quot; anzeigen lassen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
list &amp;lt;DOIFname&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Verhaltensanalyse des DOIF ===&lt;br /&gt;
Das komplette Verhalten des DOIF kann über ein extra Logfile protokolliert werden. Dazu können alle Geräte einbezogen werden, die im DOIF enthalten sind; z.B. als tägliches Logfile.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define DOIF_Log FileLog ./log/DOIF_Log-%j.log &amp;lt;DOIFname&amp;gt;:.*|&amp;lt;Gerät 1&amp;gt;:.*|&amp;lt;Gerät 2&amp;gt;:.* ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem Attribut mseclog lässt sich ein genauerer Zeitstempel einstellen, damit können zusammengehörende Events erkannt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr DOIF_Log mseclog 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In dem Logfile kann das Verhalten des DOIF und der dazugehörenden Operanden genau nachvollzogen werden. Wenn Abweichungen zum erwarteten Verhalten erkannt werden, hat man einen Anhaltspunkt für weitere Untersuchungen oder sogar den Auslöser gefunden.&lt;br /&gt;
&lt;br /&gt;
Die Protokollierung mit FileLog hat den Vorteil, dass die Definition recht einfach in der Geräteübersicht zusammengestellt werden kann. Die Definition muss nach Gebrauch nicht gelöscht werden, sondern kann mit dem Attribut &amp;quot;disable&amp;quot; abgeschaltet werden. Später kann das Gerät wieder aktiviert werden, etwa um ein anderes DOIF zu loggen.&lt;br /&gt;
&lt;br /&gt;
== Qualifizierte Angaben zur Anfrage im Forum ==&lt;br /&gt;
Dem Helfenden sollten alle zum Problem gehörenden Informationen gegeben werden, die dem Fragenden auch zur Verfügung stehen.&lt;br /&gt;
&lt;br /&gt;
Nicht immer sind alle Angaben notwendig, bei komplexen Problemen schon eher.&lt;br /&gt;
* Hinweis, wenn FHEM und DOIF nicht aktuell sind.&lt;br /&gt;
* Hinweis, wenn die cfg-Dateien direkt bearbeitet werden.&lt;br /&gt;
* genaue Beschreibung des erwarteten Verhalten&lt;br /&gt;
* genaue Beschreibung des beobachteten Verhalten&lt;br /&gt;
* Alle relevanten Fehlermeldungen&lt;br /&gt;
* Darstellen, was man selbst schon versucht hat und mit welchem Ergebnis, dann wird es nicht noch einmal vorgeschlagen.&lt;br /&gt;
* Angabe der vollständigen Definition des DOIF (Name, Definition, Attribute) in Code-Tags (das Raute-Zeichen # im Forum-Editor)&lt;br /&gt;
* Das Listing des DOIF als Alternative&lt;br /&gt;
* Die relevanten Stellen aus dem aufgezeichnete Filelog mit Kommentar und Markierung der Probleme in Quote-Tags (das Zeichen rechts neben der Raute). In Quote-Tags kann die Zeichenformatierung zum Markieren genutzt werden, in Code-Tags nicht.&lt;br /&gt;
* Auszug aus dem Eventmonitor mit Kommentar und Markierung der Probleme&lt;/div&gt;</summary>
		<author><name>OliWee</name></author>
	</entry>
</feed>