<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>FHEM Referenz</title> <link rel="stylesheet" type="text/css" href="../www/pgm2/style.css" /> <meta http-equiv="Content-type" content="text/html; charset=UTF-8"> <meta name="viewport" content="initial-scale=1.0,user-scalable=1"> <link rel="shortcut icon" href="/fhem/icons/favicon.ico"/> </head> <body style="word-wrap: break-word;" class="commandref"> <div id="menuScrollArea"> <div id="logo"></div> <div id="menu"> <h3>fhem.pl Referenz</h3> <br><br> <a href="#">Zum Anfang</a> <br><br> <a style="display:none" href="#" name="loadAll">Alles laden</a> <br><br> <a id="otherLang" style="display:none" href="#" name="otherLang"> <span style="display:none" lang="DE">Deutsche</span> <span style="display:none" lang="EN">Englische</span> Doku für <span class="mod"></span> laden </a> </div> </div> <div id="right"> <h3>Inhalt</h3> <ul> <a href="#intro">Einleitung</a><br> <a href="#command">FHEM Befehls-Typen</a><br> <a href="#devspec">Geräte-Spezifikation</a><br> <a href="#attributes">Attribute</a><br> <br> <b>FHEM-Befehle</b> <ul> <!-- header:command --> <a href="#apptime">apptime</a> <!-- liefert Daten über Ausführungszeiten --> <a href="#attr">attr</a> <!-- setzt ein Attribut für ein FHEM Gerät --> <a href="#cancel">cancel</a> <!-- bricht ein sleep ab --> <a href="#createlog">createlog</a> <!-- fügt ein FileLog und ein SVG an einem existierenden FHEM Gerät --> <a href="#define">define</a> <!-- definiert ein FHEM Gerät --> <a href="#defmod">defmod</a> <!-- definiert oder modifiziert ein FHEM Gerät --> <a href="#delete">delete</a> <!-- entfernt ein FHEM Gerät --> <a href="#deleteattr">deleteattr</a> <!-- entfernt ein Attribut --> <a href="#deletereading">deletereading</a> <!-- entfernt ein Reading --> <a href="#displayattr">displayattr</a> <!-- zeigt Attribute eines FHEM Gerätes --> <a href="#get">get</a> <!-- holt ein Wert von einem FHEM Gerät --> <a href="#IF">IF</a> <!-- bedingte Ausführung von FHEM Befehlen --> <a href="#include">include</a> <!-- liest eine Datei mit FHEM Befehlen ein --> <a href="#inform">inform</a> <!-- zeigt Events in einer telnet Verbindung --> <a href="#list">list</a> <!-- zeigt Definition,Readings und Attribute eines FHEM Gerätes --> <a href="#modify">modify</a> <!-- ändert die Definition eines FHEM Gerätes --> <a href="#notice">notice</a> <!-- zeigt und bestätigt Systemmeldungen --> <a href="#quit">quit</a> <!-- endet eine telnet Verbindung zu FHEM --> <a href="#reload">reload</a> <!-- lädt ein FHEM Modul (Programmdefinition) --> <a href="#rename">rename</a> <!-- benennt ein FHEM Gerät um --> <a href="#rereadcfg">rereadcfg</a> <!-- lädt die FHEM Konfiguration neu --> <a href="#save">save</a> <!-- speichert die FHEM Konfiguration --> <a href="#set">set</a> <!-- setzt ein Wert in einem FHEM Gerät --> <a href="#setdefaultattr">setdefaultattr</a> <!-- definiert ein "default" Attribut --> <a href="#setreading">setreading</a> <!-- setzt ein Reading für ein FHEM Gerät --> <a href="#setstate">setstate</a> <!-- setzt den Status eines FHEM Geräes --> <a href="#setuuid">setuuid</a> <!-- setzt den internen FUUID Wert --> <a href="#show">show</a> <!-- zeigt tempor&aunl;ren Raum. nur in FHEMWB --> <a href="#shutdown">shutdown</a> <!-- beendet FHEM --> <a href="#sleep">sleep</a> <!-- verzögerte Ausführung --> <a href="#trigger">trigger</a> <!-- generiert ein FHEM Event --> <a href="#usb">usb</a> <!-- sucht nach USB Geräten --> </ul> <br> <b>Gerätemodule</b> <ul> <a href="#global">global</a><br> <!-- header:device --> </ul> <br> <b>Hilfs (Erweiterungs-) Module</b> <ul> <!-- header:helper --> </ul> <br> <a href="#perl">PERL Besonderheiten</a><br> <a href="#gnuplot-syntax">gnuplot file Syntax</a><br> </ul> <a name="intro"></a> <h3>Einleitung</h3> <ul> <p>FHEM wird hauptsächlich zur Heimautomatisierung benutzt, ist aber ebenso für andere Aufgaben einsetzbar wo Benachrichtigungen, Zeitschaltungen und Datensammlungen eine wichtige Rolle spielen.</p> <p>FHEM unterstützt verschiedene Hardwaregeräte die eine Verbindung mittels unterschiedlicher Protokolle (z.B. FHZ1000 mit Interfaces vom Typ FS20 und HMS, CM11 um mit X10 zu arbeiten) sowie logischer Geräte wie FS20 oder FHT die einen Nachrichtenaustausch mit verschiedensten Geräten die diese Protokolle verwenden ermöglichen.</p> <p> FHEM ist modular. Abhängig von den unterschiedlichen Geräten werden in den Modulen verschiedene Funktionen (z.B. define, get, set) realisiert. FHEM enthält weitere Funktionen wie Trigger (<a href="#notify">notify</a>), Zeitabhängige Funktionen (<a href="#at">at</a>) die die Funktionalität erweitern.</p> <p> FHEM wird entweder über einfache ASCII-Kommandozeilen gesteuert die in Dateien wie z.B. der Konfigurationsdatei fhem.cfg gespeichert sind oder über eine TCP/IP Verbindung, entweder direkt in einer "telnet"-Sitzung, oder per fhem.pl im Client-Modus oder über eines der Webfrontends.<br> </p> <p class="MsoNormal">Wenn Sie den FHEM-Server starten, müssen Sie eine Konfigurationsdatei auswählen:</p> <ul> <code>perl fhem.pl fhem.cfg</code> </ul> <p>Nachstehend eine Minimal-Konfiguration Datei: </p><pre> attr global <a href="#logfile">logfile</a> log/fhem.log attr global <a href="#modpath">modpath</a> . attr global <a href="#statefile">statefile</a> log/fhem.save attr global <a href="#verbose">verbose</a> 3 define telnetPort <a href="#telnet">telnet</a> 7072 global define WEB <a href="#FHEMWEB">FHEMWEB</a> 8083 global</pre> Die letzten zwei Zeilen definieren einen telnet und einen WEB Zugang, beide können aber bei Bedarf auch abgeschaltet werden.<br><br> Die WEB Schnittstelle kann über <ul> http://<fhemhost>:8083 </ul> erreicht werden. <br><br> Die Kommunikation mit FHEM kann entweder in einer "session" (über telnet) oder über einzelne Klient-Kommandos (über fhem.pl) erfolgen. Beispiel: <ul> <code>telnet <fhemhost> 7072<br> <NL> </code>(Die Betätigung der "Enter"-Taste schaltet in den "prompt" Modus)<code><br> <command>...<br> quit</code><br> </ul> oder <ul> <code>fhem.pl <fhemhost>:7072 "<command>..."</code> </ul> <br> Falls FHEM als root gestartet wurde, und ein OS-Benutzer fhem existiert, dann wechselt FHEM nach dem start zu diesem Benutzer (via setuid). <br><br> Falls FHEM mit der -d Koommandozeilenoption gestartet wurde (perl fhem.pl -d fhem.cfg), dann wird verbose auf 5 gesetzt und die Logs werden auf STDOUT geschrieben. <br><br> Die Umgebungsvariable FHEM_GLOBALATTR wird ausgewertet: sie enthält Leerzeichengetrennte Name=Wert Paare, wobei Name ein global Attribut ist. So gesetzte Werte überschreiben die Werte aus der Konfigurationsdatei. </ul> <br> <!-- intro end - diese Zeile nicht entfernen! --> <a name="command"></a> <h3>FHEM Befehlstypen</h3> <ul> <p>Es gibt drei Arten von Befehlen: "FHEM" Befehle (werden in diesem Dokument beschrieben), Shell-Befehle (diese müssen von doppelten Anführungszeichen "" eingeschlossen werden) und perl-Ausdrücken (von geschwungenen Klammern {} eingeschlossen). Shell-Befehle oder perl-Ausdrücke werden für komplexe <a href="#at">at</a> oder <a href="#notify">notify</a> Ausdrücke benötigt, können aber auch als "normale" Befehle angewendet werden.</p> <p>Die folgenden drei Befehle bewirken z.B. dasselbe Ergebnis, wenn sie am telnet-Prompt eingegeben werden:</p> <ul> set lamp off<br> "fhem.pl 7072 "set lamp off""<br> {fhem("set lamp off")}<br> </ul> <p>Shell-Kommandos werden im Hintergrund ausgeführt, perl-Ausdrücke und FHEM-Kommandos werden im Haupt-"thread" ausgeführt. Um perl-Ausdrücke leichter eingeben zu können, sind einige Spezialfunktionen und Variablen verfügbar. Lesen Sie sich bitte die Abschnitte <a href="#perl"> Perl special</a> zum besseren Verständnis durch.</p> <p>Um FHEM-Befehle in einen Shell-Script zu triggern (dies ist eine "andere" Möglichkeit), benutzen Sie bitte die oben beschriebene Client-Form der fhem.pl.</p> <p>Mehrere FHEM-Kommandos hintereinander werden mittels Semikolon (;) getrennt. Weil Semikola auch in perl-Code oder Shell-Programmen benutzt werden, müssen sie mittels doppelten Semikola geschützt werden. Lesen Sie sich bitte die <b>Bemerkungen </b>des <a href="#notify">notify</a>-Abschnittes zu Kommandoparametern und Regeln durch.</p> <p>Z.B. schaltet die erste der folgenden Befehlszeilen die Lampe 1 nur/erst zur Uhrzeit 07:00 Uhr aus, die Lampe 2 aber sofort und die zweite Befehlszeile schaltet Lampe 1 und 2 um 7:00 Uhr gleichzeitig aus.</p> <ul> define lampoff at 07:00 set Lamp1 off; set Lamp2 off<br> define lampoff at 07:00 set Lamp1 off;; set Lamp2 off<br> </ul> <p>Für jede weitere Indirektion muss man die Strichpunkte verdoppeln. Um also die beiden Lampen um 7:00 für 10 Minuten einzuschalten schreibt man:</p> <ul> define onAt at 07:00 set Lamp1 on;;set Lamp2 on;; define offAt at +00:10 set Lamp1 off;;;;set Lamp2 off </ul> <p>Keine Angst, das Vorherige kann in FHEM auch deutlich einfacher formuliert werden als:</p> <ul> define onAt at 07:00 set Lamp1,Lamp2 on-for-timer 600 </ul> <p>Befehle können entweder direkt eingegeben oder aus einer Datei (z.B. am Start von FHEM aus der Konfugurationsdatei) eingelesen werden. Die Befehle werden entweder direkt ausgeführt oder später wenn sie als Argumente eines <a href="#at">at</a> oder <a href="#notify">notify</a>-Befehles verwendet werden.</p> <p>Eine mit einem \ abgeschlossene Zeile wird mit der nachfolgenden Zeile verbunden. Somit können lange Befehlszeilen (die z.B. aus mehreren perl-Befehlen bestehen) auf mehrere Zeilen aufgteilt werden. Einige Web-Frontends (z.B. webpgm2) erleichtern die Eingabe von sich über mehrere Zeilen erstreckende Befehle, indem man keine \ am Zeilenende eingeben muss.</p> <p>Achtung: unterschiedlicher Befehlsarten (FHEM/Shell/perl) in einer Kommandozeile sind nicht unterstützt, auch wenn es in manchen Fällen funktioniert.</p> </ul> <!-- command end - diese Zeile nicht entfernen! --> <a name="devspec"></a> <h3>Geräte-Spezifikation (devspec)</h3> <ul> Die Befehle <a href="#attr">attr</a>, <a href="#set">set</a>, <a href="#get">get</a>, usw. <a href="#attr">attr</a>, <a href="#deleteattr">deleteattr</a>, <a href="#displayattr">displayattr</a>, <a href="#delete">delete</a>, <a href="#get">get</a>, <a href="#list">list</a>, <a href="#set">set</a>, <a href="#setreading">setreading</a>, <a href="#setstate">setstate</a>, <a href="#trigger">trigger</a> können eine komplexere Gerätespezifikation als Argumente enthalten, die auch eine Anzahl von Geräten betreffen kann. Eine Gerätespezifikation kann folgendes sein: <ul> <li>ein einzelner Gerätename. Dies ist der Normalfall</li> <li>eine durch Komma(,) getrennte Liste von Gerätenamen</li> <li>ein regulärer Ausdruck</li> <li>ein NAME=WERT Ausdruck, wo NAME ein "Internal" Wert wie TYPE ist, ein Reading-Name oder ein Attribut. WERT ist ein regulärer Ausdruck. Um die Bedingung zu negieren, muss NAME!=WERT verwendet werden. Um die Suche einzugrenzen, kann man als Praefix i: für internal Werte, r: für Reading-Namen und a: für Attribute verwenden, siehe das Beispiel unten. Groß-/Kleinschreibung wird durch die Verwendung von ~ oder !~ ignoriert. </li> <li>Falls die Spezifikation von :FILTER=NAME=WERT gefolgt wird, dann wird die zuvor gefundene Liste durch diesen neuen Ausdruck gefiltert. </ul> Beispiele: <ul> <code>set lamp1 on</code><br> <code>set lamp1,lamp2,lamp3 on</code><br> <code>set lamp.* on</code><br> <code>set room=kitchen off</code><br> <code>set room=kitchen:FILTER=STATE=on off</code><br> <code>set room=kitchen:FILTER=STATE!=off off</code><br> <code>list disabled=</code><br> <code>list room~office</code><br> <code>list TYPE=FS20 STATE</code><br> <code>list i:TYPE=FS20 STATE</code><br> </ul> Bemerkungen: <ul> <li>die Spezifikation kann keine Leerzeichen enthalten.</li> <li>falls ein Gerätename exakt dem Spezifikation entspricht, dann werden keine reguläre Ausdrücke oder Filter ausgewertet. <li>zuerst wird die durch Komma getrennte Spezifikation abgearbeitet, dann folgen die regulären Ausdrücke und die Filter</li> <li>die Befehlszeile kann die selbe Gerätebezeichnung mehrfach enthalten z.B.: "set lamp3,lamp3 on". Lamp3 wird hier zwei Mal eingeschalten.</li> <li>um Strukturen mit komplexeren Anforderungen zu realisieren lesen Sie bitte den Abschnitt zu <a href="#structure"> structure</a>. </ul> </ul> <!-- devspec end - diese Zeile nicht entfernen! --> <a name="attributes"></a> <h3>Attribute</h3> Alle Geräte haben Attribute. Diese werden mittels des Befehls <a href="#attr">attr</a> gesetzt, angezeigt mit dem Befehl <a href="#displayattr">displayattr</a>, und mit dem Kommando <a href="#deleteattr">deleteattr</a> entfernt.<p> Es gibt globale Attribute, die von allen Geräten genutzt werden, und lokale Attribute, die nur auf individuelle Geräteklassen zutreffen.<p> Manche Geräte (wie <a href="#FHEMWEB">FHEMWEB</a>) definieren automatisch neue globale Attribute bei der ersten Definition eines Gerätes dieses Typs.<p> Sie können den Befehl<p><code>attr global userattr <attributelist></code><p> für das Gerät <a href="#global">global</a> verwenden, um neue globale Attribute zu deklarieren, und <p><code>attr <devicespec> userattr <attributelist></code>,<p>um neue lokale Attribute für bestimmte individuelle Geräte gemäß <a href="#devspec">devspec</a> zu deklarieren. <code><attributelist></code> ist eine durch Leerzeichen getrennte Liste, die die Namen der zusätzlichen Attribute enthält. In der Dokumentation zum Befehl <a href="#attr">attr</a> sind Beispiele.<p> Seien Sie vorsichtig und überschreiben Sie keine zusätzlichen globale Attribute, die bereits zuvor durch Sie selbst oder ein Gerät definiert wurden. <code>attr global userattr <attributelist></code> sollte so früh wie möglich in der Konfiguration erscheinen. <h4>Gerätespezifische Attribute</h4> Gerätespezifische Attribute sind in dem jeweiligen Abschnitt zum Gerät dokumentiert. <h4>Globale Attribute für alle Geräte</h4> <ul> <a name="alias"></a> <li>alias<br> Wird in FHEMWEB benutzt, um ein en anderen Namen für ein Gerät anzuzeigen z.B. wenn Sonderzeichen/Leerzeichen nicht in der Gerätedefinition verwendet werden können. </li><br> <a name="comment"></a> <li>comment<br> Fügt einen beliebigen Kommentar hinzu. </li><br> <a name="eventMap"></a> <li>eventMap<br> Ersetze Event Namen und setze Argumente. Der Wert dieses Attributes besteht aus einer Liste von durch Leerzeichen getrennte Werten. Jeder Wert ist ein durch Doppelpunkt getrenntes Paar. Der erste Teil stellt den "alten" Wert, der zweite Teil den "neuen" Wert dar. Wenn der erste Wert ein Slash (/) oder ein Komma (,) ist, dann wird nicht durch Leerzeichen sondern durch das vorgestellte Zeichen getrennt. Optional kann man auch ein widgetOverride angeben (angehängt nach einem Doppelpunkt (z.Bsp. on-for-timer:OnFor:texField). Die Voreinstellung ist :noArg, um das Input Feld bei cmdList zu vermeiden. Beispiele: <ul><code> attr store eventMap on:open off:closed<br> attr store eventMap /on-for-timer 10:open/off:closed/<br> set store open </code></ul> Die explizite Variante dieses Attributes hat folgenden Syntax: <ul><code> attr store eventMap { dev=>{'on'=>'open'}, usr=>{'open'=>'on'} }<br> attr store eventMap { dev=>{'^on(-for-timer)?(.*)'=>'open$2'}, usr=>{'^open(.*)'=>'on$1'}, fw=>{'^open(.*)'=>'open'} } </code></ul> Diese Variante muss dann verwendet werden, falls das Mapping nicht symmetrisch ist. Der erste Teil (dev) spezifiziert dabei die Richtung Gerät zu Benutzer, d.h. falls das Gerät on 100 oder on-for-timer 100 meldet, dann wird der Benutzer open 100 zu sehen bekommen. Der zweite Teil (usr) spezifiziert die Richtung Benutzer zu Gerät, d.h. wenn man "set XX open 100" eingibt, dann wird das Kommando "on 100" an das Gerät gesendet. In beiden Fällen wird der Schlüssel zuerst direkt, und dann als Regexp mit dem Wert verglichen. Falls man Regexps mit Wildcards im usr Teil verwendet, dann muss man den fw Teil mit dem exakt gleichen Schlüsseln ausfüllen, damit FHEMWEB in der Detail-Ansicht den set-Auswahl richtig anzeigen kann. </li><br> <a name="genericDisplayType"></a> <li>genericDisplayType<br> Wird von bestimmten Frontends (aber nicht FHEMWEB) verwendet, um für das Gerät passende Voreinstellungen (Bild/Befehle/etc) anzubieten. Z.Zt werden folgende Werte unterstützt: switch,outlet,light,blind,speaker,thermostat </li><br> <a name="group"></a> <li>group<br> Gerätegruppen. FHEMWEB zeigt Geräte die in die gleiche Gruppe gehören auch in einer gemeinsamen Box an. Ein Gerät kann zu mehr als einer Gruppe gehören. In diesem Fall müssen die entsprechenden Gruppen durch Kommata getrennt eingetragen werden. Wenn dieses Attribut nicht gesetzt ist, wird der in der Gerätegruppe gesetzte Gerätetyp verwendet. </li><br> <a name="overrideNotifydev"></a> <li>overrideNotifydev<br> falls gesetzt (das Argument ist ein devspec), dann verwendet die Optimierung der Benachrichtigungen diesen Wert, statt das vom Modul gesetzte Internal NOTIFYDEV. Man sollte es nur dann setzen, falls man es besser weiss, als der Modul Maintainer. Damit es setzbar ist, muss vorher das global oder Geräte spezifische userattr Attribut ergänzt werden. </li><br> <a name="room"></a> <li>room<br> Filtert/gruppiert Geräte. Ein Gerät kann zu mehr als einem Raum zugeordnet werden. In diesem Fall müssen die Raumzuordnungen durch Kommata getrennt angegeben werden.<br> Geräte, die dem Raum mit der Bezeichnung "hidden" zugeordnet werden, erscheinen nicht auf der Webseite. Mit -> werden Räume strukturiert, z.Bsp. OG->Schlafzimmer </li><br> <a name="showtime"></a> <li>showtime<br> Wird im FHEMWEB verwendet, um die Zeit der letzten Aktivität anstelle des Status in der Gesamtansicht anzuzeigen. Nützlich z.B. für FS20 PIRI Geräte. </li></br> <a name="suppressReading"></a> <li>suppressReading<br> Wird verwendet, um nicht gewollte Readings zu entfernen. Der Wert ist ein Regular Expression, ergänzt mit ^ und $. Wird nur in Ausnahmefällen benötigt. </li><br> <a name="verbose"></a> <li>verbose<br> Setzt den Schwellwert für die Logfile-Meldungen. Mögliche Werte sind: <ul> <li>0 - Server start/stop</li> <li>1 - Fehlermeldungen oder unbekannte Pakete</li> <li>2 - bedeutende Ereigbisse/Alarme.</li> <li>3 - ausgesendete Kommandos werden gelogged.</li> <li>4 - von den einzelnen Geräten empfangene Daten.</li> <li>5 - Fehlersuche.</li> </ul> Der für die <a href="#global">global</a> Instanz gesetzte Wert gilt als Voreinstellung für die Instanzen, die dieses Attribut nicht gesetzt haben. </li><br> </ul> <a name="readingFnAttributes"></a> <h4>readingFnAttribute</h4> Die folgenden Attribute werden bei Modulen verwendet, die standardisierte Readings Aktualisierung der fhem.pl benutzen. Informieren Sie sich in der Liste der Modulattribute wenn Sie wissen möchten ob dies unterstützt wird.<br><br> <ul> <a name="stateFormat"></a> <li>stateFormat<br> Ändert den Gerätestatus, dies ist z.Bsp. in der Ausgabe des list Kommandos zu sehen, oder in der Raumübersicht von FHEMWEB. Falls nicht gesetzt, dann wird das state Reading übernommen. Sonst werden alle Wörter im Wert des Attributes durch das entsprechende Reading des Gerätes ersetzt (soweit vorhanden). Falls der Wert in {} eingeschlossen ist, dann wird es als Perl Ausdruck ausgewertet. Die Auswertung passiert bei jeder Änderung eines Readings.<br> Die <a href="#set">hier</a> beschriebene "set magic" wird auch angewendet.<br> Hinweis: Manche Module aktualisieren STATE ganz oder teilweise direkt. In diesen Fällen kann es zu abweichenden Anzeigen kommen. </li> <a name="event-on-update-reading"></a> <li>event-on-update-reading<br> Wenn nicht gesetzt, erzeugt jede Veränderung eines Readings ein Ereignis, welches z.B. von <a href="#notify">notify</a> oder<a href="FileLog"> FileLog</a> berücksichtigt wird. Wenn gesetzt erzeugen nur Aktualisierungen der eingetragenen Readings ein Ereignis. </li> <a name="event-on-change-reading"></a> <li>event-on-change-reading<br> Dieses Attribut enthält eine durch Kommata getrennte Liste von Readings. Statt Reading kann auch ein regulärer Ausdruck verwendet werden. Wenn gesetzt, erzeugen nur Veränderungen der gelisteten Readings ein Ereignis. Wenn die aktualiserten Werte der gelisteten Readings identisch sind, wird kein Ereignis generiert.<br> Wenn hinter dem Namen eines Readings eine :Schwelle angegeben ist, wird das Event nur getriggert wenn die Änderung grösser als diese Schwelle ist. </li> Die unterschiedlichen Bedeutungen von event-on-update-reading und event-on-change-reading sind folgende: <ol> <li>Wenn beide Attribute nicht gesetzt sind erzeugt jede Aktualisierung eines jeden Readings eines Gerätes ein Ereignis.</li> <li>Wenn eines der Attribute gesetzt ist, erzeugen nur Updates oder änderungen von Readings die in einem der Attribute gesetzt sind ein Ereignis.</li> <li>Wenn ein Reading in event-on-update-reading aufgeführt ist, erzeugt eine Aktualisierung ein Ereignis unabhängig ob das Reading auch in event-on-change-reading aufgelistet ist.</li> </ol> <a name="timestamp-on-change-reading"></a> <li>timestamp-on-change-reading<br> Dieses Attribut enthält eine durch Kommata getrennte Liste von Readings. Wenn gesetzt, werden die gelisteten Readings nicht aktualisiert (oder angelegt) wenn durch ein ebenfalls gesetztes event-on-change-reading für dieses Reading kein Ereignis erzeugen würde. </li> <p> <a name="event-aggregator"></a> <li>event-aggregator The primary uses of this attribute are to calculate (time-weighted) averages of readings over time periods and to throttle the update rate of readings and thus the amount of data written to the logs.<p> This attribute takes a comma-separated list of <code>reading:interval:method:function:holdTime</code> quintuples. You may use regular expressions for <code>reading</code>. If set, updates for the listed readings are ignored and associated events are suppressed for a black-out period of at least <code>interval</code> seconds (downsampling). After the black-out period has expired, the reading is updated with a value that is calculated from the values and timestamps of the previously ignored updates within the black-out period as follows: <table> <tr><th>function</th><th>description</th></tr> <tr><td>v</td><td>the last value encountered</td></tr> <tr><td>v0</td><td>the first value encountered</td></tr> <tr><td>min</td><td>the smallest value encountered</td></tr> <tr><td>max</td><td>the largest value encountered</td></tr> <tr><td>mean</td><td>the arithmetic mean of all values</td></tr> <tr><td>sd</td><td>the standard deviation from the mean</td></tr> <tr><td>median</td><td>the median of all values (requires holdTime and function none)</td></tr> <tr><td>integral</td><td>the arithmetic sum (if not time-weighted) or integral area (if time-weighted) of all values</td></tr> <tr><td>n</td><td>number of samples</td></tr> <tr><td>t</td><td>timestamp of the last value</td></tr> <tr><td>t0</td><td>timestamp of the first value</td></tr> </table> <p> If <code>method</code> is <code>none</code>, then that's all there is. If <code>method</code> is <code>const</code> or <code>linear</code>, the time-weighted series of values is taken into account instead. The weight is the timespan between two subsequent updates. With the <code>const</code> method, the value is the value of the reading at the beginning of the timespan; with the <code>linear</code> method, the value is the arithmetic average of the values at the beginning and the end of the timespan. Rollovers of black-out periods are handled as one would expect it.<p> One would typically use the <code>linear</code> method with the <code>mean</code> function for quantities continuously varying over time like electric power consumption, temperature or speed. For cumulative quantities like energy consumed, rain fallen or distance covered, the <code>none</code> method with the <code>v</code> function is used. The <code>constant</code> method is for discrete quantities that stay constant until the corresponding reading is updated, e.g. counters, switches and the like.<p> If the <code>holdTime</code> in seconds is defined, the samples will be kept in memory allowing the calculation of floating statistics instead of blocked statistics. With <code>holdTime</code> defined the <code>interval</code> can be kept undefined so that the readings update rate is unchanged or it can be set to a value less then <code>holdTime</code> for downsampling as described above with a full history of the readings in memory. Note that the historic samples are not persistent and will be lost when restarting FHEM.<p> The event aggregator only takes into consideration those updates that remain after preprocessing according to the <code>event-on-update-reading</code> and <code>event-on-change-reading</code> directives. Besides which, any update of a reading that occurs within a timespan from the preceding update that is smaller than the resolution of FHEM's time granularity is ditched.<p> When more than one function should be calculated for the same reading, the original reading must be multiplied (e.g. by using a notify) before applying the event-aggregator to the derived readings.<p> Examples:<br> <code>attr myPowerMeter event-aggregator EP_POWER_METER:300:linear:mean,EP_ENERGY_METER:300:none:v</code><br> <code>attr myBadSensor event-aggregator TEMP::none:median:300</code><br> <code>attr mySunMeter event-aggregator SUN_INTENSITY_24H::const:integral:86400</code> </li> <a name="event-min-interval"></a> <li>event-min-interval<br> Dieses Attribut enthält eine durch Kommata getrennte Liste von "readings:minInterval" Paare. readings kann ein regexp sein. Ein Event wird nur dann generiert, falls seit dem letzten Auftreten des gleichen Events mindestens minInterval Sekunden vergangen sind. Falls event-on-change-reading auch spezifiziert ist, dann werden sie mit ODER kombiniert, d.h. wenn einer der beiden Bedingungen wahr ist. </li> <a name="oldreadings"></a> <li>oldreadings<br> Dieses Attribut enthält eine durch Kommata getrennte Liste von Readings. regex sind erlaubt. Für jedes Reading aus der Liste speichert FHEM intern den vorherigen Wert wenn sich das Reading ändert. Zum Zugriff auf die Werte gibt es die OldReadings.* Routinen. Falls der vorherige Wert immer, d.h. auch wenn es sich nicht ändert, gespeichert werden soll, dann muss der letzte Werte der Komma getrennten Liste oldreadingsAlways sein. </li> <a name="userReadings"></a> <li>userReadings<br> Komma getrennte Liste von benutzerdefinierten Readings. Jede Definition hat folgendes Format: <ul><code> <reading>[:<trigger>] [<modifier>] { <perl code> } </code></ul> Diese benutzerdefinierte Readings werden bei jeder Aktualisierung der Gerätereadings gesetzt, indem das spezifizierte <a href="#perl">perl code</a> <code>{ <perl code> }</code> ausgeführt wird, und dessen Wert dem Reading zugewiesen wird. Falls <trigger> spezifiziert ist, dann findet diese Ausführung nur dann statt, falls einer der aktualisierten Readings dem regexp <trigger> entspricht (matched). <br> Beispiele: <ul><code> attr myEnergyMeter userReadings energy { ReadingsVal("myEnergyMeter","counters.A",0)/1250.0;; }<br> attr myMultiMeter userReadings energy1:counters.A.* {ReadingsVal("myMultiMeter","counters.A",0)/1250.0}, energy2:counters.B.* {ReadingsVal("myMultiMeter","counters.B",0)/1250.0} </code></ul> <code><modifier></code> kann die folgenden Werte haben: <ul> <li>none: als ob man es gar nicht spezifiziert hätte.</li> <li>difference: das Reading wird auf die Differenz zw. dem aktuellen und dem vorherigen Wert gesetzt.</li> <li>differential: das Reading wird auf die Differenz zw. dem aktuellen und dem vorherigen Wert, geteilt durch die Sekunden zw. der aktuellen Zeit und der letzten Auswertung, sekundengenau. Kein Wert wird berechnet, falls der Unterschied unter eine Sekunde liegt.</li> <li>integral: das Gegenteil von differential. Das Ergebnis wird um das Produkt aus der Zeit-Differenz und der Durschnittswert der letzten zwei Readings erhöht.<br> result += (time - timeold) * (oldval + value) / 2 </li> <li>offset: wenn der aktuellen Wert kleiner als der vorherige Wert ist wird der vorherige Wert zum Reading addiert. Das Reading kann dann als offset verwendet werden um einen Zähler der durch Sromverlust zurückgesetzt wird zu korrigieren.</li> <li>monotonic: wenn die Differenz zw. dem aktuellen und dem vorherigen Wert positiv ist wird diese Differenz zum Reading addiert. Damit lässt sich von einem Zähler der bei Stromverlust zurückgesetzt wird ein monoton wachsender Zähler ableiten.</li> </ul> Beispiel: <ul><code> attr myPowerMeter userReadings power differential { ReadingsVal("myPowerMeter","counters.A",0)/1250.0} </code></ul> Achtung:<ul> <li>Falls difference oder differential spezifiziert ist, dann werden für die Berechnung ältere Werte benötigt, d.h. der Wert wird frühestens beim zweiten Änderung gesetzt.</li> <li>der Name der definierten Readings besteht aus alphanumerischen Zeichen, Unterstrich (_) und Minus-Zeichen (-).</li> </ul> </li><br> </ul> <h4>Allgemeine Attribute</h4> Die folgenden lokalen Attribute werden von mehreren Geräten verwendet: <ul> <a name="IODev"></a> <li>IODev<br> Setzt das IO oder das physische Device, welches zum Senden der Signale an dieses logische Device verwendet werden soll (Beispielsweise FHZ oder CUL). Hinweis: Beim Start weist FHEM jedem logischen Device das letzte physische Device zu, das Daten von diesem Typ empfangen kann. Das Attribut IODev muss nur gesetzt werden, wenn mehr als ein physisches Device fähig ist, Signale von diesem logischen Device zu empfangen. </li><br> <a name="disable"></a> <li>disable<br> Deaktiviert das entsprechende Gerät.<br> Kann mit folgendem Befehl einfach umgeschaltet werden:<br> <code>attr <device> disable toggle</code> </li><br> <a name="disabledForIntervals"></a> <li>disabledForIntervals HH:MM-HH:MM HH:MM-HH:MM ...<br> Das Argument ist eine Leerzeichengetrennte Liste von Minuszeichen- getrennten HH:MM oder D@HH:MM Paaren. Falls die aktuelle Uhrzeit zwischen diesen Werten fällt, dann wird die Ausführung, wie beim disable, ausgesetzt. Statt HH:MM kann man auch HH oder HH:MM:SS angeben. D ist der Tag der Woche, mit 0 als Sonntag and 3 als Mittwoch. Die Angabe des Wochentags für den "von" Wert impliziert _nicht_ den gleichen Tag für den "bis" Wert, z.Bsp. deaktiviert 1@00-24 die Asführung von Montag bis Ende der Woche, aber nicht Sonntag (da alle Zeitangaben am Montag vor 1@00 liegen). Um einen Intervall um Mitternacht zu spezifizieren, muss man zwei einzelne angeben, z.Bsp.: <ul> 23:00-24:00 00:00-01:00 </ul> Falls Teile des Wertes in {} eingeschlossen sind, dann werden sie als ein Perl Ausdruck ausgewertet: <ul> {sunset_abs()}-24 {sunrise_abs()}-08 </ul> </li><br> </ul> <!-- attributes end - diese Zeile nicht entfernen! --> <br><br> <a name="attr"></a> <h3>attr</h3> <ul> <code>attr [-a|-r|-silent] <devspec> <attrname> [<value>]</code> <br> <br> Dieser Befehl setzt ein Attribut für ein Gerät welches mit <a href="#define">define</a> definiert wurde. value ist optional, und ist 1 falls nicht spezifiziert. Sie können auch Ihre eigenen Attribute definieren, um sie in anderen Applikationen anzuwenden. Geben Sie "<attr <name> ?" ein, um eine Liste verfügbarer Attribute anzuzeigen. Siehe den Abschnitt über <a href="#devspec">Geräte-Spezifikation</a> für Details der <devspec>.<br> Gerätespezifische Attribute sind in der Beschreibung zum jeweiligen Gerät aufgeführt. Nach der Durchführung das globale Ereignis "ATTR" wird generiert. <br> Falls die Option -a spezifiziert ist, dann wird value zum aktuellen Wert hinzugefügt. Achtung: falls value nicht mit einem Komma (,) anfängt, dann wird es mit einem Leerzeichen angehängt. <br> Mit der -r Option kann man Teile eines Attributes wieder entfernen.<br> Mit der silent Option wird der Befehl nicht in die "save -?" Liste eingetragen.<br> <br> Beispiele: <ul><code> attr global verbose 3<br> attr lamp room kitchen<br> attr lamp group lights<br> attr lamp loglevel 6<br> attr weatherstation event-on-update-reading wind,temperature,humidity<br> attr weatherstation event-on-change-reading israining<br> attr weatherstation event-on-change-reading israining,state<br> attr heating stateFormat Temp:measured-temp, Valve:actuator<br> attr -a TYPE=SVG room ,SvgRoom</br> attr -r TYPE=SVG room ,SvgRoom</br> </code></ul> <br> Bemerkungen:<br> <ul> <li>Lesen Sie unter <a href="#deleteattr">deleteattr</a> nach um Attribute zu löschen.</li> </ul> </ul> <!-- attr end --> <a name="cancel"></a> <h3>cancel</h3> <ul> <code>cancel [<id> [quiet]]</code> <br><br> Listet benannte sleeps oder entfernt ein benanntes <a href="#sleep">sleep</a>. </ul> <!-- cancel end --> <a name="define"></a> <h3>define</h3> <ul> <code>define [option] <name> <type> <type-specific></code> <br> <br> Definiert ein Gerät. Sie müssen Geräte einrichten um sie zu beeinflussen (z.B. das Kommando set on/off auszuführen). Gleichfalls ist das Logfile besser lesbar wenn es z.B. "lamp off" anstatt "Device 5673, Button 00, Code 00 (off)" als Text enthält. <br> Nach der Durchführung wird das globale Ereignis "DEFINED" generiert. <br><br> Je nach Typ benötigt man unterscheidliche Argumente, lesen Sie sich bitte die zu dem jeweiligen Gerät gehörenden Abschnitte durch. <br><br> Optionen:<br> <ul> <li>-temporary<br> Setzt den TEMPORARY Marker, was das Abspeichern dieser Definition in fhem.cfg verhindert. </li><br> <li>-ignoreErr<br> Reduziert die Anzahl der Fehlermeldungen, falls ein FHEM-Modul nicht geladen werden kann. Wird in fhem.cfg.demo verwendet, da das RSS Beispiel etliche, normalerweise nicht installierte perl-Module benötigt. </li><br> <li>-silent<br> Der Befehl wird nicht in die "save -?" Liste eingetragen. </li><br> </ul> </ul> <!-- define end --> <a name="defmod"></a> <h3>defmod</h3> <ul> <code>defmod [option] <name> <type> <type-specific></code> <br><br> Definiert ein Gerät, oder ändert es, falls es exisitiert. Um z.Bsp. eine Lampe 10 Minuten nach der letzten Meldung eines Bewegungsmelders abzuschalten, könnte man folgendes definieren: <ul><code> define mdNtfy notify motionDetector defmod mdOff at +00:10 set lamp off </code></ul> Falls man statt defmod ein define verwenden würde, dann würde eine Meldung innerhalb von 10 Minuten nach der letzten Meldung zu einem Fehler führen, da mdOff noch existiert.<br> Für die Optionen siehe die define Dokumentation. <br> </ul> <!-- defmod end --> <a name="delete"></a> <h3>delete</h3> <ul> <code>delete <devspec></code> <br> <br> Löscht etwas was mit dem <a href="#define">define</a> Befehl erstellt worden ist.<br> Siehe den Abschnitt über <a href="#devspec">Geräte-Spezifikation</a> für Details der <devspec>.<br> Nach dem löschen, wird das globale Ereignis "DELETED" erzeugt.<br> Beispiel: <ul> <code>delete lamp</code><br> </ul> <br> </ul> <!-- delete end --> <a name="deleteattr"></a> <h3>deleteattr</h3> <ul> <code>deleteattr [-silent] <devspec> [<attrname>]</code> <br> <br> Löscht entweder ein einzelnes Attribut (siehe Abschnitt <a href="#attr">attr</a> ) oder alle Attribute eines Gerätes (falls kein <attrname> angegeben wird).<br> Siehe den Abschnitt über <a href="#devspec">Geräte-Spezifikation</a> für Details der <devspec>.<br> <attrname> ist ein Regexp, ergänzt mit ^ und $, damit eine Menge von Attributen mit einem Befehl gelöscht werden kann.<br> Nach der Durchführung das globale Ereignis "DELETEATTR" wird generiert. <br> Beispiele: <ul> <code>deleteattr lamp follow-on-for-timer</code><br> <code>deleteattr lamp</code><br> </ul> <br> </ul> <!-- deleteattr end --> <a name="deletereading"></a> <h3>deletereading</h3> <ul> <code>deletereading <devspec> <readingname> [<older-than-seconds>]</code> <br> <br> Entfernt das Reading <readingname> für das spezifizierte Gerät. <readingname> ist ein perl Regular-Expression, was den vollständigen Namen des Readings erfassen muss. Falls <older-than-seconds> spezifiziert ist, werden nur readings entfernt, die aelter als dieser Zahl (in Sekunden) sind.<br> Mit größter Sorgfalt verwenden! FHEM kann abstürzen, falls man lebenswichtige Readings entfernt.<br> Siehe den Abschnitt über <a href="#devspec">Geräte-Spezifikation</a> für Details der <devspec>.<br> <br> Beispiele: <ul> <code>deletereading mySensor temp1</code><br> <code>deletereading mySensor temp\d+</code><br> </ul> <br> </ul> <!-- deletereading end --> <a name="displayattr"></a> <h3>displayattr</h3> <ul> <code>displayattr <devspec> [<attrname>]</code> <br> <br> Zeigt entweder den Wert eines Attributes an (falls <attrname> spezifiziert wurde) oder alle Attribute eines Gerätes. Siehe den Abschnitt über <a href="#devspec">Geräte-Spezifikation</a> für Details der <devspec>.<br> Falls mehrere Geräte spezifiziert wurden, dann enthält die Ausgabe den Namen der Geräte. <br> Beispiele: <ul> <code> fhem> di WEB<br> menuEntries AlarmOn,/fhem?cmd=set%20alarm%20on<br> room Misc.<br> fhem> di WEB room<br> Misc.<br> </code> </ul> <br> </ul> <!-- displayattr end --> <a name="get"></a> <h3>get</h3> <ul> <code>get <devspec> <type-specific></code> <br><br> Fragt einen Wert direkt (aktuell) vom Gerät ab und wartet auf eine Antwort. Eine allgemeine Liste möglicher Paramter erhalten Sie mit<ul> <code>get <device> ?</code> </ul> Siehe den Abschnitt über <a href="#devspec">Geräte-Spezifikation</a> für Details der <devspec>.<br> Jedes Gerät hat unterschiedliche "get"-Parameter. Lesen Sie Details bitte im zugehörigen Abschnitt nach.<br> <br> </ul> <!-- get end --> <a name="getstate"></a> <h3>getstate</h3> <ul> <code>getstate <devspec></code> <br><br> Gibt einen kurzen, durch Leerzeichen getrennte Statusliste für <devspec> aus . Dies ist nützlich, um das Gerät in z.B. Cacti zu beobachten.<br> Beispiel: <ul><code> getstate lamp<br> state:1<br> <br> getstate fl<br> ack:0 actuator:2 day-temp:21.5 desired-temp:22.5 [...] measured-temp:22.9 [...] </code></ul> Bemerkung: Um diesen Befehl nutzen zu können, kopieren Sie bitte die Datei 99_getstate.pm aus dem Verzeichnis contrib/getstate/ in Ihr FHEM Verzeichnis. <br> </ul> <!-- getstate end --> <a name="include"></a> <h3>include</h3> <ul> <code>include <filename></code> <br> <br> Liest (z.B. als Befehlszeile in der fhem.cfg) die in <filename> angegebene Datei in FHEM ein und interpretiert jede Dateizeile als FHEM Befehl. Dieses Befehl sollte nur von Experten verwendet werden. <br> </ul> <!-- include end --> <a name="inform"></a> <h3>inform</h3> <ul> <code>inform {on|off|timer|raw} [regexp]</code> <br> <br> Ermöglicht Event-Verfolgung über das telnet Interface. Es ist das telnet Equivalent des FHEMWEB Event-Monitors, es kann aber auch von weiteren Programmen zur Benachrichtigung verwendet werden. Optionen:<br> <ul> <li>on<br> aktiviert die Benachrichtigung.</li> <li>onWithState<br> zeigt auch das zusätzliche state Event</li> <li>off<br> deaktiviert die Benachrichtigung (sowohl Events wie auch Logs, s.u.)</li> <li>raw<br> zeigt (nur) die raw Events der physikalischen Module</li> <li>timer<br> stellt der Daten ein Zeitstempel vor</li> <li>log<br> zeigt die vom FHEM Log Interface protokollierten Daten</li> <li>status<br> zeigt den aktuellen Status</li> </ul> <br> </ul> <!-- inform --> <a name="list"></a> <h3>list</h3> <ul> <code>list [devspec] [value ...]</code><br> oder<br> <code>list {-r|-R} devspec</code><br> <br><br> Auflistung aller "definitions", "notify" und "at"-Definitionen. Dies ist eines der wenigen Befehle, die im Normalfall eine Zeichenkette ausgeben.<br> Siehe den Abschnitt über <a href="#devspec">Geräte-Spezifikation</a> für Details der <devspec>.<br><br> Wenn <value> angegeben ist, dann wird dieses Wert (Internal, Reading oder Attribut) ausgegeben, soweit es vorhanden ist. Die Werte können mit einem Präfix eingeschränkt werden: i: für Internals, r: für Readings und a: für Attribute. <br><br> Beispiel: <pre><code>fhem> list Type list <name> for detailed info. Internal: global (Internal) FHZ: FHZ (fhtbuf: 23) FS20: Btn4 (on-old-for-timer) Roll1 (on) Stehlampe (off) FHT: fl (measured-temp: 21.1 (Celsius)) KS300: out1 (T: 2.9 H: 74 W: 2.2 R: 8.2 IR: no) at: at_rollup (Next: 07:00:00) notify: ntfy_btn4 (active) FileLog: avglog (active) </name></code></pre> Wenn Sie für <code>name</code> einen Gerätenamen eingeben, dann erhalten Sie einen genauen Status für das in<code> name</code> angegebene Gerät angezeigt, z.B.: <pre><code> fhem> list fl Internals: CODE 5102 DEF 5102 NAME fl NR 15 STATE measured-temp: 21.1 (Celsius) TYPE FHT IODev FHZ Attributes: room Heizung Readings: 2006-11-02 09:45:56 actuator 19% [...] </code></pre> Mit der -r (raw) Option werden die Daten in einem für fhem.cfg bzw. fhem.state passenden Format generiert. -R liefert diese Daten auch für alle von diesem Gerät vermutlich benögten Geräte. Achtung: die Bestimmung dieser Liste ist ungenau. </ul> <!-- list end --> <a name="modify"></a> <h3>modify</h3> <ul> <code>modify [-silent] <name> <type-dependent-options></code> <br><br> Dieser Befehl wird benutzt, um Definitionen zu verändern. Er ist nützlich, um <a href="#at">at</a> oder <a href="#notify">notify</a> Definitionen zu verändern. Wenn Sie einen Wert einer an Definition verändern, dann wird nur der für die Zeit zuständige Teil geändert. Im Falle der Veränderung einer Definition vom Typ "notify" wird nur der regex Teil geändert. Alle anderen Werte (Stati, Attribute, etc) bleiben erhalten.<br> Nach modify wird das global MODIFIED Event erzeugt.<br> Nach der Durchführung das globale Ereignis "MODIFIED" wird generiert.<br> Mit der silent Option wird der Befehl nicht in die "save -?" Liste eingetragen.<br> <br> Beispiel: <ul> <code>define lampon at 19:00 set lamp on</code><br> <code>modify lampon *19:00</code><br> <code>modify lampon 19:00 set lamp on-for-timer 16</code><br> </ul> </ul> <!-- modify end --> <a name="quit"></a> <h3>quit</h3> <ul> <code>quit</code> <br><br> Dieser Befehl wird in einer TCP/IP Session benutzt um die Client-Sitzung zu beenden.<br> Wird dieser Befehl in einem Skript benutzt, wird das abarbeiten des Skriptes beendet. <br><br> Beispiel: <ul> <code>quit</code> </ul> </ul> <!-- quit end --> <a name="reload"></a> <h3>reload</h3> <ul> <code>reload <module></code> <br><br> Reload the given module from the module directory. It is a convenient way to test modules whithout restarting the program. <br><br> Example: <ul> <code>reload 99_PRIV</code> </ul> </ul> <!-- reload end --> <a name="rename"></a> <h3>rename</h3> <ul> <code>rename <oldname> <newname></code> <br><br> Benennt ein Gerät von <oldname> in <newname>, einschliesslich der Attribute, um. Das globale Ereignis "RENAMED" wird erstellt, Lesen Sie bitte den Abschnitt "notify" durch um Details zu erfahren. <br><br> Beispiel: <ul> <code>rename FHT_1234 fht.kitchen</code> </ul> </ul> <!-- rename end --> <a name="rereadcfg"></a> <h3>rereadcfg</h3> <ul> <code>rereadcfg [fhem-config-file]</code> <br><br> Liest entweder die aktuelle Konfigurationsdatei oder die angegebene Datei ein.<br> Der Ablauf ist dabei wie folgt: Zuerst wird das <a href="#statefile">statefile</a> gesichert. Dann werden alle Geräte gelöscht. Dann wird die aktuelle Konfigurationsdatei (oder die angegebene Datei) eingelesen zuletzt wird das statefile neu eingelesen.<br> Wenn dieser Ablauf abgeschlossen ist, wird das globale REREADCFG Ereignis ausgelöst. Alle existierenden Verbindungenwerden bis zum "rereadcfg" Ereignis getrennt. <br><br> Beipiel: <ul> <code>rereadcfg</code> </ul> </ul> <!-- rereadcfg end --> <a name="save"></a> <h3>save</h3> <ul> <code>save [<configfile>]</code> <br><br> Sichert zuerst das <a href="#statefile">statefile</a> und dann das <a href="#configfile">configfile</a>. Wenn ein Parameter angegeben wird dieser anstelle der allgemeinen Konfigurationsdatei benutzt.<br><br> Hinweise: <ul> <li>Der Befehl speichert nur "definitions" und "attributes" aber keine (set/get) Befehle die vorher Teil der Konfigurationsdatei waren. Wenn Sie solche Befehle nach der Initialisierung (z.B. <a href="#FHZset">FHTcode</a>) benötigen,dann müssen Sie sie mit <a href="#notify">notify</a> triggern wenn das INITIALIZED Ereignis eintritt.</li> <li>Der Befehl "save" versucht Kommentarzeilen (Zeilen die mit # beginnen) und "include"-Zeilen zu erhalten, aber arbeitet nicht korrekt wenn FHEM für diese Dateien keine Schreibrechte besitzt.</li> <li>Vor dem Überschreiben der Dateien wird die alte Version gesichert, siehe <a href="#restoreDirs">restoreDirs</a> für Einzelheiten.</li> </ul> </ul> <!-- save end --> <a name="set"></a> <h3>set</h3> <ul> <code>set <devspec> <type-specific></code> <br><br> Der Befehl setzt Geräteparameter/sendet Signale an ein Gerät. Sie erhalten eine Liste verfügbarer Parameter wenn Sie folgendes eingeben: <ul> <code>set <name> ?</code> </ul> Siehe den Abschnitt über <a href="#devspec">Geräte-Spezifikation</a> für Details der <devspec>.<br> Der "set"-Befehl gibt nur bei Fehler einen Wert zurück. <br><br> Jedes Gerät hat verschiedene Parameter die mit "set" gesetzt werden können. Lesen Sie bitte den entsprechenden Abschnitt für das Gerät für Details durch. <br><br> Ab featurelevel 5.7 ersetzt der set und setreading Befehl <ul> <li>[device:name] mit dem Wert des Readings, Internals oder Attributes für device, falls sowohl device, als auch Reading, Internal oder Attribut existiert, und nicht leer ist. <ul> <li>Man kann einen der Präfixe r:, i: oder a: verwenden, um die Suche einzuschränken, genau wie im devspec.</li> <li>Das Suffix :d extrahiert die erste Zahl.</li> <li>Das Suffix :i extrahiert die erste Zahl als Ganzzahl.</li> <li>Das Suffix :r<n> extrahiert die erste Zahl, und rundet sie auf <n> Dezimalstellen. Falls <n> fehlt, dann wird auf eine Dezimalstelle gerundet.</li> <li>Das Suffix :t liefert den Zeitstempel des Readings</li> <li>Das Suffix :sec liefert Anzahl der Sekunden seit Änderung des Readings.</li> </ul> Beispiel: <ul> set Lamp blink [blinkDummy:number] [r:blinkDummy:duration:d] </ul> </lu> <li>{(perlExpression)} mit dem Ergebnis der perlExpression. $DEV wird dabei mit dem Namen des vom set betroffenen Gerätes ersetzt. </li> </ul> Diese Ersetzungen sind unter dem Namen "set magic" bekannt. <br><br> <a name="setExtensions"></a> Manche Module unterstützen die sog. <b>set extensions</b>, und in der entsprechenden Dokumentation ist ein Link auf diesem Text zu finden. Falls im Modul selber einer der unten aufgeführten Befehle implementiert ist, dann wird die Modul-Implementation verwendet. <ul> <li>on-for-timer <sekunden><br> Das Gerät wird per "on" eingeschaltet, und ein interner Zeitgeber wird erstellt, um nach <sekunden> ein "off" Kommando auszuführen. Um diesen Zeitgeber zu entfernen sollte man das Kommando mit dem Argument 0 erneut aufrufen. Achtung: dieser Zeitgeber wird bei einem restart nicht gespeichert.</li> <li>off-for-timer <sekunden><br> siehe on-for-timer.</li> <li>on-till <timedet><br> Das Gerät wird per "on" eingeschaltet, und ein at Instanz wird definiert, um es um <timedet> (Format: HH:MM[:SS]) per off auszuschalten. Diese at Instanz ist sichtbar unter dem Namen geräteName+"_till". Um das Ausschalten zu deaktivieren löscht man diese at Definition. Achtung: das Ein/Ausschalten wird nicht durchgeführt, falls die aktuelle Uhrzeit nach der spezifizierten Zeit ist, um folgende Szenarien zu vereinfachen: <ul><code> define morningLight at *06:00 set Lamp on-till {sunrise()} </code></ul> </li> <li>on-till-overnight <timedet><br> Wie on-till, aber die aktuelle Uhrzeit wird nicht mit der Spezifizierten verglichen, damit folgendes funktioniert: <ul><code> define nightLight at *{sunset()} set Lamp on-till-overnight 01:00 </code></ul> </li> <li>off-till <timedet><br> siehe on-till.</li> <li>off-till-overnight <timedet><br> siehe on-till-overnight.</li> <li>blink <anzahl> <blink-periode><br> Das Gerät wird mit "on" für die <blink-periode> eingeschaltet, und das wird nach <blink-periode> wiederholt. Um das Blinken vorzeitig zu stoppen spezifiziert man "0 0" als Argument.</li> <li>intervals <from1>-<till1> <from2>-<till2>... </br> Das Gerät wird für die spezifizierten Intervalle eingeschaltet. Die einzelnen Intervalle sind Leerzeichen getrennt, und ein Intervall besteht aus zwei Zeitspezifikationen, die mit einem "-" getrennt sind. </li> <li>toggle<br> Das Gerät wird mit "on" eingeschaltet, falls STATE "off" ist (oder dim 0), sonst wird es mit "off" ausgeschaltet. </ul> Beispiele: <ul> <code> set switch on-for-timer 12.5<br> set switch on-till {sunset()}<br> set switch blink 3 1<br> set switch intervals 08:00-12:00 13:00-18:00<br> </code> </ul> <br><br> <a name="attrTemplate"></a> attrTemplate<br> mit diesem Befehl kann man eine Menge an vordefinierten Attributen setzen. Die Einträge befinden sich in Dateien im FHEM/lib/AttrTemplate Verzeichnis. Einträge können modul-spezifisch sein, und möglicherweise erfordern weitere Parameter. </ul> <!-- set end --> <a name="setdefaultattr"></a> <h3>setdefaultattr</h3> <ul> <code>setdefaultattr [<attrname> [<value>]] </code><br> <br> Fügt Sie ein Standardattribut hinzu. Jedem nach dieser Zuweisung definierte Gerät wird dieses Attribut zugewiesen. Wenn kein "attrname" angegeben wird, dann wird die Liste der Standardattribute gelöscht. <br><br> Beispiel, um das Attribut "room kitchen" und "loglevel 4" allen Lampen zuzuweisen: <ul> <code>setdefaultattr room kitchen</code><br> <code>setdefaultattr loglevel 4</code><br> <code>define lamp1 FS20 1234 11</code><br> <code>define lamp2 FS20 1234 12</code><br> <code>define lamp3 FS20 1234 13</code><br> <code>setdefaultattr</code><br> </ul> <br> Anmerkungen:<br> <ul> <li>es gibt keine Möglichkeit, ein einzelnes Standardattribut aus der Liste tu löschen.</li> </ul> </ul> <!-- setdefaultattr end --> <a name="setreading"></a> <h3>setreading</h3> <ul> <code>setreading <devspec> [YYYY-MM-DD HH:MM:SS] <reading> <value></code> <br><br> Der Befehl setzt das Reading <reading> auf den Wert <value> ohne Signale an das betroffene Gerät zu senden, generiert aber Ereignisse und die übliche eventMap und stateFormat Umwandlung wird auch durchgeführt.<br> Falls keine Zeit spezifiziert wurde, wird die aktuelle Uhrzeit verwendet. <br> Siehe den Abschnitt über <a href="#devspec">Geräte-Spezifikation</a> für Details der <devspec> und die Beschreibung des set Befehls für Ersetzung.<br> <br> Beispiel: <ul> setreading lampe state on </ul> Achtung: setreading generiert kein Event für ein Gerät X, falls es aus einem notify für Gerät X aufgerufen wurde. In so einem Fall könnte man auf "sleep 0.1; setreading X Y Z" ausweichen. </ul> <!-- setreading end --> <a name="setstate"></a> <h3>setstate</h3> <ul> <code>setstate <devspec> <value></code> <br><br> Der Befehl setzt den STATE Eintrag des Gerätes direkt, ohne Ereignisse zu generieren oder ein Signal an das Gerät zu senden. Dieser Eintrag ist maßgebend für die Status-Anzeige in diversen Frontends. Dieser Befehl wird auch im <a href="#statefile">statefile</a> benutzt.<br> Siehe den Abschnitt über <a href="#devspec">Geräte-Spezifikation</a> für Details der <devspec>.<br> <br> Beispiel: <ul> setstate lampe An </ul> Achtung: setstate wird verwendet, um Readings im statefile zu speichern, in diesem Fall wird vor dem Wert ein Zeitstempel geschrieben. Als Seiteneffekt ist es nicht möglich, ein Status, was mit einem Zeitstempel der Form YYYY-MM-DD HH:MM:SS beginnt, korrekt zu speichern. </ul> <!-- setstate end --> <a name="setuuid"></a> <h3>setuuid</h3> <ul> <code>setuuid <device> <uuid></code> <br><br> Systembefehl, um den FUUID internen Wert zu setzen. Ist nicht vom Benutzer zu verwenden. </ul> <!-- setstate end --> <a name="show"></a> <h3>show</h3> <ul> <code>show <devspec></code> <br><br> Zeigt einen temporären Raum mit Geräten aus <devspec>, verfügbar nur über FHEMWEB.<br> Siehe den Abschnitt über <a href="#devspec">Geräte-Spezifikation</a> für Details der <devspec>.<br> <br><br> Example: <ul> <code>show TYPE=CUL_HM</code><br> </ul> </ul> <!-- show end --> <a name="shutdown"></a> <h3>shutdown</h3> <ul> <p> <code>shutdown [<var>restart</var>] [<var>exitValue</var>]</code> </p> <p> Der Befehl fährt <abbr>FHEM</abbr> herunter (nach dem Sichern aller <a href="#statefile">Gerätestatus</a>). Er triggert den <code>global:SHUTDOWN</code>-<span lang="en">Event</span>. Mit dem optionalen Parameter <var lang="en">restart</var> startet <abbr>FHEM</abbr> danach neu. Der <var lang="en">exitValue</var> ist möglicherweise bei bestimmten Start-Skripten zur korrekten Funktion vonnöten <abbr>bzw.</abbr> wichtig. </p> Beispiel: <ul> <code>shutdown</code><br> <code>shutdown restart</code><br> <code>shutdown 1</code> </ul> </ul> <!-- shutdown end --> <a name="sleep"></a> <h3>sleep</h3> <ul> <code>sleep <sec|timespec|suchmuster> [<id>] [quiet]</code> <br><br> sleep gefolgt von weiteren Befehlen ist vergleichbar mit einem namenlosen <a href="#at">at</a> oder <a href="#notify">notify</a> Kommando, es führt die nachfolgenden Befehle aus, nachdem es die spezifizierte Zeitspanne gewartet hat bzw. ein Event welches dem <suchmuster> entspricht aufgetreten ist. Die verzögerung kann<ul> <li>in Sekunden (Millisekunden genau, da man Nachkommastellen spezifizieren kann)</li> <li> als timespec (HH:MM or HH:MM:SS oder {perlfunc})</li> <li>oder als suchmuster (Gerätename oder Gerätename:Event)</li> </ul> angegeben werden.<br> Ein sleep mit einer <id> ersetzt ein sleep mit der gleichen <id> and can mit <a href="#cancel">cancel</a> entfernt werden. Falls sleep in at/notify/etc aufgerufen wurde, und die nachfolgenden Kommandos einen nicht leeren Text zurückgeliefert haben, dann wird dieser Text mit loglevel 2 protokolliert.<br> quiet vermeidet diese Protokollierung. <br><br> Beispiele: <ul> <code>sleep 0.5</code><br> <code>define n3 notify btn3.* set lamp toggle;;sleep 0.5;;set lamp toggle</code><br> <code>define a3 at +*00:05 set Windsensor 1w_measure;; sleep 2 quiet;; get Windsensor 1w_temp</code> </ul> <br> Bemerkung: falls sleep von keinem Befehl gefolgt wird, dann wird FHEM blockiert. Das ist unerwünscht, und im FHEM-Log wird eine Warnung protokolliert. </ul> <!-- sleep end --> <a name="trigger"></a> <h3>trigger</h3> <ul> <code>trigger <devspec> <event></code> <br><br> Generiert das Ereignis <event>, was z.Bsp. ein <a href="#notify">notify</a> anstoßen kann, oder den FileLog zum protokollieren dieser Zeile bewegen kann.<br> Siehe den Abschnitt über <a href="#devspec">Geräte-Spezifikation</a> für Details der <devspec>.<br> <br> Beispiel: <ul> <code>trigger btn3 on</code> </ul> </ul> <!-- trigger end --> <!-- commands end - diese Zeile nicht entfernen! --> <a name="global"></a> <h3>global</h3> <ul> Das "global" Gerät wird benutzt, um allgemeingültige Attribute zu setzen. Es wird automatisch erstellt und kann nicht gelöscht oder umbenannt werden. Es hat keine "set" oder "get" Parameter.<br> <br> <b>Define</b><ul>N/A</ul><br> <b>Set </b><ul>N/A</ul><br> <b>Get</b><ul>N/A</ul><br> <b>Internals</b> <ul> <a name="init_errors"></a> <li>init_errors<br> Konfigurations Fehlermeldungen beim FHEM Start und Security Meldungen werden hier gesammelt. </li><br> </ul><br> <b>Attributes</b> <ul> <a name="altitude"></a> <li>altitude<br> Höhe in Metern über dem Meeresspiegel, Voreinstellung ist 0. </li><br> <li><a href="#archivedir">archivedir</a></li> <li><a href="#archivecmd">archivecmd</a></li> <li><a href="#nrarchive">nrarchive</a></li> <a name="archivesort"></a> <li>archivesort<br> archivesort kann auf dem (voreingestellten) Wert alphanum oder timestamp gesetzt werden, und bestimmt die Methode für die Reihenfolgenberechnung der Dateien für nrarchive.<br> </li><br> <a name="autoload_undefined_devices"></a> <li>autoload_undefined_devices<br> wenn dieses Attribut gesetzt ist, werden die zu einer neu empfangenen Nachricht zugehörigen Module automatisch geladen. Dies erfolgt vom <a href="#autocreate"> autocreate</a> Gerät, um so automatisch ein FHEM-Gerät bei erreichen einer entsprechenden Nachricht zu erstellen. </li><br> <a name="autosave"></a> <li>autosave<br> Der Standardwert 1 aktiviert einige Module nach einer Konfigurationsänderung automatisch zu speichern z.B. wenn ein neues Gerät erstellt wurde. Treten beim FHEM Start Konfigurationsfehler auf wird diese Funktion automatisch deaktiviert (0). </li><br> <a name="backupcmd"></a> <li>backupcmd<br> Sie können das Update durch Ihre eigenen Befehle/Skripts durchführen indem Sie dieses Attribut setzen. Wenn dieses Attribut gesetzt ist, dann startet es als ein SHELL-Befehl und erstellt eine durch Leerzeichen getrennte Liste von Dateien/Verzeichnissen als <strong>ein</strong> Argument zum Befehl, z.B.: <br> <ul> <code>"/etc/fhem.cfg /var/log/fhem/fhem.save /usr/share/fhem/contrib /usr/share/fhem/FHEM /usr/share/fhem/foo /usr/share/fhem/foobar /usr/share/fhem/www"</code> </ul> Bemerkung: Ihr Befehl/Skript muss die Zeichenkette "backup done" zurückgeben oder eine entsprechende Zeichenkette um Fehlermeldungen auszugeben, damit die Zusammenarbeit mit update funktioniert!<br> Dieses Attribut wird vom <a href="#backup">backup</a> Befehl benutzt.<br> Beispiel:<br> <ul> attr global backupcmd /usr/local/bin/myBackupScript.sh </ul> </li><br> <a name="backupdir"></a> <li>backupdir<br> Ein Ordner um die komprimierten Sicherheitsdateien zu speichern. Dieses Attribut wird vom <a href="#backup">backup</a> Befehl benutzt.<br> Beispiel:<br> <ul> attr global backupdir /Volumes/BigHD </ul> </li><br> <a name="backupsymlink"></a> <li>backupsymlink<br> Wenn dieses Attribut auf etwas anderes als "no", dann unterstützt der Archviierungsbefehl "tar" symbolische Links in Ihrem Backup. Andererseits, wenn dieses Attribut auf "no" gesetzt ist werden symbolische Links vom Befehl "tar" ignoriert. Dieses Attribut wird vom <a href="#backup">backup</a> Befehl benutzt.<br> Beispiel:<br> <ul> attr global backupsymlink yes </ul> </li><br> <a name="blockingCallMax"></a> <li>blockingCallMax<br> Begrenzt die Anzahl der parallel laufenden Prozesse, die von der BlockingCall FHEM Hilfsroutine gestartet wurden. Sinnvoll auf weniger leistungsfaehigen Hardware, die Voreinstellung ist 32. Nach erreichen dieser Grenze werden weitere Aufrufe verzögert. </li><br> <a name="configfile"></a> <li>configfile<br> Enthält den Namen der FHEM Konfigurationsdatei. Wenn <a href="#save">save</a> ohne Argumente aufgerufen wird dann wird die Ausgabedatei unter diesem Dateinamen gespeichert. </li><br> <a name="commandref"></a> <li>commandref<br> Falls der Wert "full" ist, dann wird nach jedem update ein komplettes commandref.html generiert. Falls der Wert "modular" ist (voreingestellt seit FHEM 6.1), dann wird die Moduldokumentation erst nach Bedarf waehrend der Laufzeit per JavaScript geladen. </li><br> <a name="dnsHostsFile"></a> <li>dnsHostsFile<br> Falls dnsServer gesetzt ist, wird die angegebene Datei nach dem Hostnamen durchsucht. Um die vom System verwendete Datei zu benutzen, ist es unter Linux/Unix/OSX auf /etc/hosts und unter Windows auf C:\windows\system32\drivers\etc\hosts zu setzen. Achtung: es wird nur IPv4 unterstützt. </li><br> <a name="globaldisableFeatures"></a> <li>disableFeatures <values><br> Komma separierte Liste von Werten. Z.Zt. werden Folgende erkannt: <ul> <li>attrTemplate: um das Laden der AttrTemplates zu vermeiden. </li> <li>securityCheck: um bei fehlenden Benutzer/Passwort bei den aktivierten Netzwerk-Server keine Warnmeldung zu generieren. </li><br> </ul> </li> <a name="dnsServer"></a> <li>dnsServer<br> Enthält die IP Adresse des DNS Servers. Die von bestimmten Modulen (oder eigenen Code) aufgerufene HttpUtils_NonblockingGet wird auch bei der DNS Auflösung nicht mehr blockieren, falls dieses Attribut gesetzt ist, da es in diesem Fall FHEM eigene Routinen aufgerufen werden. Sonst werden die OS-eigenen, blockierenden Routinen inet_aton bzw gethostbyname aufgerufen. </li><br> <a name="encoding"></a> <li>encoding<br> Wählt das perl-interne Format, mit dem Strings kodiert sind. Mögliche Werte sind: bytestream (Voreinstellung) und unicode.<br> Achtung: <ul> <li>der Wert unicode ist experimentell, da nicht alle FHEM-Module mit dieser Variante geprüft wurden.</li> <li>ändern des Wertes bewirkt ein save und ein shutdown restart.</li> </ul> </li><br> <a name="featurelevel"></a> <li>featurelevel<br> Aktiviere bzw. deaktiviere bestimmte alte oder neue Funktionen, basierend auf die FHEM Version. Z.Bsp. das $value hash für notify wird nur bis featurelevel 5.6 befüllt, da es unerwünscht ist. Stattdessen sollte man die Value() Funktion verwenden. </li><br> <a name="holiday2we"></a> <li>holiday2we<br> Wenn dieses Attribut gesetzt wurde, dann wird die <a href="#perl">$we</a> Variable als "true" betrachtet, wenn heute entweder Samstag/Sonntag ist, oder der Wert der <a href="#holiday">holiday</a> Variable zu diesem Attribut nicht "none" ist.<br> Falls es eine Komma getrennte Liste ist, dann ist es wahr, falls einer der referenzierten Instanzen nicht "none" ist.<br> Beispiel:<br> <ul> attr global holiday2we hessen </ul> Falls sich einer der Elemente dieser Liste weekEnd nennt, dann wird nicht auf Samstag/Sonntag geprüft. Falls einer der Elemente noWeekEnd ist, und nicht "none" zurückliefert, dann ist $we 0.<br> </li><br> <a name="httpcompress"></a> <li>httpcompress<br> das HttpUtils Modul wird von etlichen FHEM modulen verwendet und aktiviert Komprimierung in der Voreinstellung. Falls man httpcompress auf 0 setzt, wird die Komprimierung deaktiviert. </li><br> <a name="ignoreRegexp"></a> <li>ignoreRegexp<br> Texte, wo dieses Regexp matcht, werden nicht geloggt. ^ und $ wird zum Regexp hinzugefügt, wie bei notify und FileLog. </li><br> <a name="keyFileName"></a> <li>keyFileName<br> FHEM Module speichern Passwörter und IDs in der Datei FHEM/FhemUtils/uniqueID. Um mehrere FHEM-Instanzen im gleichen Verzeichnis starten zu können, kann man dieses Attribut setzen, dessen Wert an FHEM/FhemUtils/ angehängt wird. </li><br> <a name="latitude"></a> <li>latitude<br> Geographische Breite in Dezimalgrad, Voreinstellung ist 50.112, Frankfurt am Main. </li><br> <a name="longitude"></a> <li>longitude<br> Geographische Länge in Dezimalgrad, Voreinstellung ist 8.686, Frankfurt am Main. </li><br> <a name="logdir"></a> <li>logdir<br> Falls gesetzt, wird %L in dem logfile Attribut (oder in der Dateinamen Spezifikation des FileLog Moduls) durch den Wert des Attributes ersetzt. Achtung: ändern des Wertes bewirkt nicht das Verschieben bereits erstellter Dateien, und kann zu diversen Problemen führen. </li><br> <a name="logfile"></a> <li>logfile<br> Gibt das Logfile an, in welches gespeichert werden soll. Sie können "-" für die Ausgabe in das stdout-Gerät. In diesem Fall stellt sich der Server nicht selbst in den Hintergrund.<br> Der Name der Logdatei kann auch "wildcards" enthalten, um eine einfachere Abfolge für die Dateien zu erreichen. Lesen Sie bitte den Abschnitt <a href="#FileLog">FileLog</a>. Fügen Sie die Attribute <code>archivecmd / archivedir / nrarchive</code> zum <code>global</code> Gerät hinzu wie Sie es auch bei einem FileLog device tun könnten.<br> Sie können den Namen der Logdatei mit <code>{ $currlogfile }festlegen</code>. </li><br> <a name="maxChangeLog"></a> <li>maxChangeLog<br> FHEM speichert Strukturänderungen, diese Daten kann man mit "save ?" oder mittels Klick auf das rote Fragezeichen in FHEMWEB anzeigen. Per Voreinstellung ist diese Liste auf 10 Einträge begrenzt, mit diesem Attribut kann man diesen Wert ändern. </li><br> <a name="maxShutdownDelay"></a> <li>maxShutdownDelay<br> Einige Module benötigen Zeit zum Aufräumen beim shutdown, aber FHEM begrenzt diese Zeit auf 10 Sekunden. Mit diesem Attribut kann man sie anpassen. </li><br> <a name="modpath"></a> <li>modpath<br> Mit modpath geben Sie den Pfad zu dem Verzeichnis der <code>FHEM</code> Module an. Der Pfad enthält <b>nicht</b> das Verzeichnis FHEM. Durch das setzen der Attribute, wird das Verzeichnis nach Dateinamen in der Form NN_<NAME>.pm durchsucht, und sie werden für die Definition von Geräten unter dem Namen <NAME> verfügbar gemacht. Wenn das erste Gerät des Typs <NAME> definiert wird, werden die entsprechenden Module geladen und in dem Modul die entsprechende Funktion mit dem Namen <NAME>_Initialize wird aufgerufen. Eine Ausnahme bilden Module die mit der Nummer 99 im Dateinamen beginnen. Diese enthalten PERL-Hilfsfunktionen und werden zur Startzeit geladen. </li><br> <a name="motd"></a> <li>motd<br> Nachricht des Tages. Wird im Begrüßungsbildschirm von FHEM angezeigt, oder direkt beim Start einer "telnet" Sitzung, bevor der fhem> Prompt erscheint. Zusätzlich wird der Inhalt des Internals init_errors angezeigt. Die Anzeige der gesamten Meldung wird durch attr global motd none abgeschaltet. </li><br> <a name="mseclog"></a> <li>mseclog<br> Wenn dieses Attribut gesetzt ist, enthalten Datums/Zeiteinträge (timestamp) in der Logdatei einen Millisekunden-Eintrag. </li><br> <a name="nofork"></a> <li>nofork<br> Wenn dieses Attribut oder "attr global logfile -" gesetzt ist, dann wird FHEM nicht im Hintergrund abgearbeitet. Dieses Attribut ist bei einigen FHEM Installationen auf FRITZ!-Boxen notwendig, und wid fuer Windows automatisch gesetzt. </li><br> <a id="perlSyntaxCheck"></a> <li>perlSyntaxCheck<br> nach setzen des <b>global</b> Attributes perlSyntaxCheck wird eine Syntax-Prüfung der Anweisung durchgeführt bei jeder Änderung (define oder modify), falls die Anweisung Perl ist, und FHEM bereits gestartet ist.</li><br> <a name="pidfilename="></a> <li>pidfilename<br> Schreibt die PERL Prozess-ID in die angegebene Datei. Der Server läuft als Daemon und einige Distributionen wollen anhand der PID testen, ob der FHEM Prozess läuft. Die Datei wird bei Ausführung des "shutdown"-Kommandos gelöscht. </li><br> <a name="proxy"></a> <li>proxy<br> IP:PORT des proxy Servers, wird von HttpUtils benutzt. </li><br> <a name="proxyAuth"></a> <li>proxyAuth<br> Base64 kodiertes Benutzername:Passwort </li><br> <a name="proxyExclude"></a> <li>proxyExclude<br> Regexp, um bestimmte Hosts nicht via proxy zu kontaktieren. </li><br> <a name="restoreDirs"></a> <li><a name="restoreDirs">restoreDirs</a><br> update sichert jede Datei vor dem Überschreiben mit der neuen Version aus dem Web. Für diesen Zweck wird zuerst ein restoreDir/update Verzeichnis in der global modpath Verzeichnis angelegt, und danach ein Unterverzeichnis mit dem aktuellen Datum. In diesem Verzeichnis werden vor dem Überschreiben die alten Versionen der Dateien gerettet. Die Voreinstellung ist 3, d.h. die letzten 3 Datums-Verzeichnisse werden aufgehoben, und die älteren entfernt. <br> Auch fhem.cfg und fhem.state wird auf diese Weise vor dem ausfüren von save gesichert, diesmal in das restoreDir/save Verzeichnis. Zum restaurieren der alten Dateien kann man das restore Befehl verwenden.<br> Falls man den Wert auf 0 setzt, dann ist dieses Feature deaktiviert. </li><br> <li><a href="#fheminfo">sendStatistics</a><br> <a name="statefile"></a> <li>statefile<br> Dieses Attribut legt den Namen der Datei fest, in die Statusinformationen aller Geräte gespeichert werden bevor der Server heruntergefahren wird. Falls diese Datei nicht angegeben wird, so werden keinerlei Informationen gesichert. </li><br> <li><a href="#title">title</a><br> <a name="useInet6"></a> <li>useInet6<br> Die HttpUtils Routinen verwenden IPv6 für die Kommunikation, falls der Server eine IPv6 Adresse hat. Achtung: das Perl-Modul IO::Socket::INET6 wird benötigt. </li><br> <a name="userattr"></a> <li>userattr<br> Enthält eine durch Leerzeichen getrennte Liste in welcher die Namen zusätzlicher Attribute aufgeführt sind. Diese müssen zuerst in dieser Liste definiert werden, bevor sie (bei allen Geräten) angewendet werden können.<br> userattr kann auch für einzelne Geräte spezifiziert werden, um weitere Attribute für diese Geräte zu definieren. </li><br> <a name="dupTimeout"></a> <li>dupTimeout<br> Definert die Wartezeit, nach der 2 identische Ereignisse zweier Empfänger als Duplikat angesehen werden. Voreingestellt sind 0,5 Sekunden. </li><br> <a name="showInternalValues"></a> <li>showInternalValues<br> Attribute/Geräte-Eintraege/Readings die mit Punkt (.) anfangen werden nicht angezeigt, es sei denn das globale Attribut showInternalValues ist gesetzt. Diese Variable wird bei dem list und xmllist Befehl, und bei der FHEMWEB Raumansicht geprüft. </li><br> <a name="sslVersion"></a> <li>sslVersion<br> Setzt die akzeptierten Crypto-Algorithmen im TcpServices Hilfsmodul. Die Voreinstellung TLSv12:!SSLv3 wird als sicherer erachtet als die vorherige SSLv23:!SSLv3:!SSLv2, aber sie kann Probleme mit nicht ausreichend aktualisierten Netzwerk-Diensten verursachen. </li><br> <a name="stacktrace"></a> <li>stacktrace<br> Falls gesetzt (auf 1), schreibt ins FHEM-Log zusätzlich zu jedem "PERL WARNING" den stacktrace. </li><br> <a name="restartDelay"></a> <li>restartDelay<br> Setzt die Verzögerung beim Neustart mit shutdown restart, die Voreinstellung ist 2 (Sekunden). </li><br> </ul> <br><br> <b>Events</b> <ul> <li>INITIALIZED<br>sobald die Initialization vollständig ist.</li> <li>REREADCFG<br>nachdem die Konfiguration erneut eingelesen wurde.</li> <li>SAVE<br>bevor die Konfiguration gespeichert wird.</li> <li>SHUTDOWN<br>bevor FHEM heruntergefahren wird.</li> <li>DEFINED <devname><br>nach dem Definieren eines Gerätes.</li> <li>DELETED <devname><br>nach dem Löschen eines Gerätes.</li> <li>RENAMED <old> <new><br>nach dem Umbenennen eines Gerätes.</li> <li>UNDEFINED <defspec><br>beim Auftreten einer Nachricht für ein undefiniertes Gerät.</li> <li>MODIFIED <defspec><br>nach Änderung einer Gerätedefinition.</li> <li>UPDATE<br>nach Abschluss eines Updates.</li> <li>CANNOT_FORK<br>falls in BlockingCall dieses Problem auftritt.</li> </ul> </ul> <!-- global end - diese Zeile nicht entfernen! --> <a name="perl"></a> <h3>Perl specials</h3> Wenn Sie einige Aufgaben automatisieren wollen, dann sollten Sie die Befehle <a href="#at">at</a> oder <a href="#notify">notify</a> nutzen. Für komplexere Aufgaben sollten Sie lieber ein SHELL-Skript oder einen PERL "oneliner" als das at/notify argument anwenden. Dieser Abschnitt gibt Ihnen einige Tipps zur Anwendung der PERL-oneliner.<br><br> <li>Um PERL-"oneliner" zu testen, geben Sie diese am "telnet" Prompt (oder in der FHEMWEB Text-Eingabezeile) eingeschlossen von geschweiften Klammern {} in einer Zeile ein. Die letzte Beispielzeile schreibt nur etwas in die Logdatei, während das Ergebnis der anderen Zeilen direkt auf der Webseite sichtbar ist.<ul> Beispiele:<p>{ "Hello" }<br> { 1+3*4 }<br> { `ls /etc` }<br> { Log 1, "Hello" }<br> </p> </ul> <br> </li> <li> PERL Ausdrücke werden durch ein Semikolon (;) getrennt. In FHEM "oneliners" müssen sie durch ein weiteres Semikolon (;;) "escaped" (maskiert) werden<br> Beispiel:<ul> { my $a = 1+1;; Log 1, "Hello $a" } </ul> </li><br> <li>Um FHEM-Kommandos in den PERL-Ausdrücken zu verwenden, benutzen Sie bitte die Funktion <var>fhem()</var>, mit einem Textargument. Dieser Text wird als FHEM-Kommando interpretiert.<br> <p> Beispiel<ul> { fhem "set light on" }<br> define n1 notify piri:on { fhem "set light on" } <p> </p> </ul> Bemerkung: Wenn diese Funktion einen wert zurück liefert, wird dieser in der allgemeinen Logdatei gespeichert.. Benutzen sie "1" als zweites Argument um dieses speichern zu verhindern. Sinnvoll ist dieses Argument bei der Abfrage von Werten mittels "get...". </li><br> <li>Notify kann auch dazu verwendet werden, um Macros manuell auszuführen. Verwenden Sie den <a href="#trigger">trigger</a>-Befehl um das Makro zu starten:<br> <ul> define MyMacro notify MyMacro { Log 1, "Hello"}<br> trigger MyMacro<br> define MacroWithArg notify MyMacro { Log 1, "Hello %"}<br> trigger MyMacro MyArg<br> </ul> <br> </li> <li>Um die Verwendung von Datum und Zeitangaben zu vereinfachen, wurden die Variablen <var>$sec</var>, <var>$min</var>, <var>$hour</var>, <var>$mday</var>, <var>$month</var>, <var>$year</var>, <var>$wday</var>, <var>$yday</var>, <var>$isdst</var> und <var>$hms</var> für die Verwendung in PERL-"oneliners" eingeführt (s. unter <var>perldoc -f localtime</var>). Ausnahmen: <var>$month</var> hat einen Wertebereich von 1 bis 12 und <var>$year</var> ist korrigiert von 1900. Weiterhin enthält <var>$hms</var> die Zeit in dem HH:MM:SS Format und <var>$today</var> das aktuellen Datum in YYYY-MM-DD Format. <br> Die Variabe <var>$we</var> hat den Wert 1 wenn der abgefragte Tag auf ein Wochenende fällt (Z.B. <var>$wday</var> == 0 [Sonntag] oder <var>$wday</var> == 6 [Samstag]), und 0 für die anderen Wochentage. Wenn man das global <a href="#holiday2we">holiday2we</a> Attribut setzt, dann ist <var>$we</var> ebenfalls 1 bei Urlaubstagen.<br> <ul> define n2 notify piri:on { if($hour > 18 || $hour < 5) { fhem "set light on" } }<br> define roll_en *07:45:00 { fhem "trigger SwitchAllRoll on" if(!$we) }<br> define roll_en *08:30:00 { fhem "trigger SwitchAllRoll on" if($we) }<br> </ul> $we wird mit IsWe() gesetzt, diese Funktion nimmt optional die Argumente "today", "yesterday", "tomorrow", MM-DD oder YYYY-MM-DD. Achtung: bei anderen Werten wird das state Reading ausgewertet, ohne eine Fehlermeldung zu generieren.<br> </li><br> <li> Hilfsfunktionen sind in <a href="#Utils">99_Utils.pm</a> beschrieben.<br> </li><br> <li> Um auf die Gerätestatus/Attribute zuzugreifen benutzen Sie bitte die folgenden Funktionen: <br> <ul> <li>Value(<devicename>)<br> liefert das Internal STATE zurück. Achtung: STATE wird in erster Linie für die Anzeige verwendet, und kann vom Benutzer mit dem stateFormat Attribut geändert werden. Für Berechnungen sollte man stattdessen ReadingsVal(<devicename>, 'state', '') verwenden (s.u.). </li><br> <li>OldValue(<devicename>)</li> <li>OldTimestamp(<devicename>)<br> gibt den vorherigen Wert/Zeitstempel des Gerätes zurück. </li><br> <li> ReadingsVal(<devicename>,<reading>,<defaultvalue>)<br> Gibt den Inhalt der "readings" zurück (den Inhalt der in dem "Readings"-Abschnitt von "list device" angezeigt wird) </li><br> <li> ReadingsNum(<devicename>,<reading>, <defaultvalue>,<round>)<br> Gibt die erste Zahl aus dem Readingswert zurück. Falls <round> spezifiziert ist, wird sie auf diese Anzahl von Dezimalstellen gerundet und ggf. mit 0 aufgefüllt, wenn <round> größer ist als die Anzahl der Dezimalstellen. </li><br> <li>ReadingsTimestamp(<devicename>, <reading>,<defaultvalue>)<br> gibt den Zeitstempel des Readings zurück. </li><br> <li>ReadingsAge(<devicename>,<reading>,<defaultvalue>) <br> gibt das Alter des Readings in Sekunden zurück. </li><br> <li> OldReadingsVal(<devicename>,<reading> ,<defaultvalue>)<br> OldReadingsNum(<devicename>,<reading>, <defaultvalue>,<round>)<br> OldReadingsTimestamp(<devicename>,<reading> ,<defaultvalue>)<br> OldReadingsAge(<devicename>,<reading>,< defaultvalue>)<br> analog zu den Routinen oben, aber zum Zugriff auf die vorherigen Werte. siehe: <a href="#oldreadings">oldreadings</a><br> </li><br> <li> AttrVal(<devicename>,<attribute>,<defaultvalue>)<br> Gibt das entsprechende Attribut des Gerätes zurück <br><br> { Value("wz") }<br> { OldValue("wz") }<br> { time_str2num(OldTimestamp("wz")) }<br> { ReadingsVal("wz", "measured-temp", "20")+0 }<br> { ReadingsTimestamp("wz", "measured-temp", 0)}<br> { AttrVal("wz", "room", "none") }<br> </li><br> <li> AttrNum(<devicename>,<attribute>, <defaultvalue>,<round>)<br> Gibt die erste Zahl aus dem Attributwert zurück. Falls <round> spezifiziert ist, wird sie auf diese Anzahl von Dezimalstellen gerundet und ggf. mit 0 aufgefüllt, wenn <round> größer ist als die Anzahl der Dezimalstellen. </li><br> <li> InternalVal(<devicename>,<internal>, <defaultvalue>)<br> Gibt den Inhalt der "internal" zurück (den Inhalt der in dem "Internals"-Abschnitt von "list device" angezeigt wird) </li><br> <li> InternalNum(<devicename>,<internal>, <defaultvalue>,<round>)<br> Gibt die erste Zahl aus dem "internal" zurück. Falls <round> spezifiziert ist, wird sie auf diese Anzahl von Dezimalstellen gerundet. </li><br> </ul> </li><li> Wenn Sie das 99_SUNRISE_EL.pm Modul benutzen, haben Sie zugriff auf folgende Funktionen: <br> <ul> sunset($offset, $min, $max)<br> sunrise($offset, $min, $max)<br> isday()<br> </ul> Der Wert von "offset" wird in Sekunden angegeben und das Format für min/max ist "HH:MM" oderr "HH:MM:SS". isday gibt 1 zurück, wenn die Sonne sichtbar ist und ansonsten den Wert 0. </li> <br> <br> <!-- perl end - diese Zeile nicht entfernen! --> <a name="regexp"></a> <h3>Regexp</h3> FHEM verwendet an vielen Stellen Regexps, womit Reguläre Ausdrücke gemeint sind. Weitere Bezeichner sind regex oder re.<br> Mit einem Regexp kann man prüfen, ob eine Zeichenkette eine Andere enthält, oder man kann Teile einer Zeichenkette extrahieren.<br> Regexp ist nicht mit dem aus dem Shell bekannten Globbing zu verwechseln: zBsp. ist .* die Regexp äquivalente von *, was man in dem Dateisystem verwendet.</br> Einige Beispiele:<ul> <table> <tr><th>Regexp</th><th>Erklärung</th></tr> <tr><td>.</td> <td>Trifft für ein beliebiges Zeichen/Buchstabe zu.</td></tr> <tr><td>x</td> <td>Trifft für eine Zeichenkette zu, die x enthält: x, xy, aber nicht abc</td></tr> <tr><td>^x</td> <td>Trifft für eine Zeichenkette zu, die mit x anfängt: x, xy, aber nicht yx</td></tr> <tr><td>x$</td> <td>Trifft für eine Zeichenkette zu, die mit x endet: x, yx, aber nicht xy</td></tr> <tr><td>^x?$</td> <td>Trifft für eine Zeichenkette zu, die leer ist, oder nur ein x enthält</td></tr> <tr><td>^x*$</td> <td>Trifft für eine Zeichenkette zu, die leer ist oder nur x enhtält: "", x, xxxx, aber nicht xy oder yx</td></tr> <tr><td>^x+$</td> <td>Trifft für eine Zeichenkette zu, die x mindestens einmal enthaelt: x, xxxx, aber nicht ""</td></tr> <tr><td>^(xy|yx)$</td> <td>Trifft für xy or yx zu.</td></tr> <tr><td>*</td><td>Das ist kein Regexp! Das ist ein Glob.</td></tr> </table> </ul> Das ist nicht mal die Spitze des Eisbergs, wenn man mehr wissen will, kann man z.Bsp. die in der perl Installation vorhandene Dokumentation verwenden: die Shell Befehle "perldoc perlretut" oder "perldoc perlre" (in dieser Reihenfolge) liefern Seitenweise mehr Info.<br> Falls man unsicher ist, sollte man die Regexps testen, z.Bsp. in einen der online Tester wie <a target="_blank" href="https://regex101.com">regex101.com</a>, <a target="_blank" href="https://regexr.com">regexr.com</a> or <a target="_blank" href="https://regextester.com">regextester.com</a> .<br> Man kann ein Regexp auch offline in FHEM testen, z.Bsp. wenn man es in der Kommandozeile so eingibt:<br> <ul> { "StringToTest" =~ m/^Str/ }<br> { "StringToTest" =~ m/^str$/ }<br> { "StringToTest" =~ m/(To|From)/ }<br> </ul> <br> <a name="gnuplot-syntax"></a> <h3>gnuplot file syntax</h3> Die .gplot Dateien werden ebenso von den <a href="#FHEMWEB">FHEMWEB</a>/SVG Modulen falls das <a href="#plotmode">plotmode</a>-Attribut auf SVG gesetzt ist. In diesem Fall wird nur eine geringere Anzahl der .gnuplot Attribute benutzt, und einige Linien haben eine besondere Bedeutung: Die Unterschiede werden in diesem Kapitel erklärt. Lesen Sie bitte auch <a href="http://wiki.fhem.de/wiki/Creating_Plots"> diesen</a> FHEM Wiki Eintrag zur Erstellung von Logdateien.<br> Im folgenden ist eine minimale .gplot Definition (gültig nur bei Plotmode SVG):<br> <pre> set terminal size <SIZE> #FileLog 4::: plot title 'Temperature' with lines </pre> Die .gnuplot Datei besteht aus 3 Teilen: <ul> <li>set Befehle<br> Folgende "sets" werden erkannt: <ul> <li>terminal, nur die Größenparameter.<br> Dieser ist in der Regel auf <SIZE> gesetzt, welcher ersetzt wird durch das <a href="#plotsize">plotsize</a> Attribut von FHEMWEB oder einer Weblink-Instanz.</li> <li>title<br> Normalerweise gesetzt auf <TL> welcher durch das Weblink <a href="#title">title</a>-Attribut, oder durch <Lx>, welches wiederum vom Weblink <a href="#label">label</a> Attribut ersetzt wird.</li> <li>ylabel,y2label<br> Linke und rechte vertikale Achsenbeschriftungen. Are also subject to label replacement.</li> <li>yrange,y2range<br> Legen den Wertebereich der linken und rechten y-Achse fest. Beispiele:<br> <ul> set yrange [-0.1:1.1]<br> set y2range [0:]<br> </ul> </li> <li>ytics,y2tics<br> Beschriftung für die Werte der rechten/linken y-Achse. Beispiele:<br> <ul> set ytics ("on" 0, "off" 1)<br> set y2tics<br> </ul> </li> </ul> </li> <br> <li>#FileLog Einträge<br> Jede Line des Plots muss eine dazugehörige #FileLog Zeile haben. Zur Syntax lesen Sie bitte den Abschnitt "column_spec paragraph" von der <a href="#FileLogget">Filelog get</a> Beschreibung. Beachten sie bitte, das bei SVG-Plots die erste Spalte der Datei unbedingt im FHEM-Zeitstempelformat (YYYY-MM-DD_HH:MM:SS) formatiert sein muss </li> <br> <li>Plot Einträge<br> bestehen immer aus einem Plotbefehl und aus durch Kommata getrenne Argumentblöcke. Jeder Argumentblock repräsentiert eine darzustellende Linie und hat seine eigenen Paramter. Folgende Parameter werden are anerkannt: <ul> <li>axes x1y1 / x1y2<br> weist das Programm an die aktuelle Zeile einer der beiden Achsen (links oder rechts) zuzuweisen. </li> <li>title<br> Beschriftung der Linie. Wenn man auf diesen Titel klickt, dann ändert ein kleines Javascript-Programm den Titel auf die min/max und last-Werte des Plots, Weiterhin erlaubt das Programm diese Linie zu kopieren oder eine bereits kopierte Linie einzufügen (die existierende Skalierung des Plots wird dabei nicht verändert, nur die eingefügte Linie wird skaliert/angepasst. Andere Linien des Plots werden zeitweise nicht angezeigt.</li> <li>with <linetype><br> spezifiziert die Art der Linie. Folgende Linienarten können verwendet werden: points, steps, fsteps, histeps and lines. Nicht bekannte Linienarten werden als Typ "lines" dargestellt. SVG Spezial: cubic und quadratic werden zu den SVG path Typen C und Q gewandelt. </li> <li>ls <linestyle><br> Der Linienstil stellt die erste Linie als l0 dar, die zweite Linie als l1 und so weiter. Definiert ist dies in der svg_style.css Datei. Darin sind zwei Sets definiert: l0-l8 and l0fill-l6fill. Das zweite Set muss aber explizit angegeben werden. Wenn der Name des Linienstils das Wort "fill" enthält, dann haben Plots des Linientyps "lines" ein zusätzliches Start- und Endsegment für eine korrekte Darstellung.<br> Bitte lesen sie die SVG Spezifikationen, um Details über diese css-Datei zu erfahren. Notiz: Wenn Sie dieses Attribut einsetzen möchten, müssen Sie es für alle Linien (Attributblocks) im Plotbefehl spezifizieren. </li> <li>lw <linewidth><br> Setzt die Linienbreite der Linie. Dieses Attribut ist veraltet. Das entprechende Feature der css-Datei/(Attribut ls) muss verwendet werden. </li> </ul> </li></ul> </div> <!-- right --> </body> </html>