<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>
  <title>FHEM Referenz</title>
  <script type="text/javascript" src="fhemdoc.js"></script>
  <noscript>
    <link rel="stylesheet" type="text/css" href="../www/pgm2/style.css" />
  </noscript>
  <meta http-equiv="Content-type" content="text/html; charset=UTF-8">
  <link rel="shortcut icon" href="/fhem/icons/favicon.ico"/>
</head>


<body style="word-wrap: break-word;">
  <div id="menuScrollArea">
    <div id="logo"></div>
    <div id="menu">
      <h3>fhem.pl Referenz</h3>
      Version: <a href="commandref.html">EN</a>&nbsp;<b>DE</b>
    </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&auml;te-Spezifikation</a><br>
  <a href="#attributes">Attribute</a><br>

  <br>
  <b>FHEM-Befehle</b>
  <ul>
      <a href="#attr">attr</a> &nbsp;
      <a href="#backup">backup</a> &nbsp;
      <a href="#CULflash">CULflash</a> &nbsp;
      <a href="#cmdalias">cmdalias</a> &nbsp;
      <a href="#configdb">configdb</a> &nbsp;
      <a href="#copy">copy</a> &nbsp;
      <a href="#createlog">createlog</a> &nbsp;
      <a href="#CustomReadings">CustomReadings</a> &nbsp;
      <a href="#define">define</a> &nbsp;
      <a href="#delete">delete</a> &nbsp;
      <a href="#deleteattr">deleteattr</a> &nbsp;
      <a href="#deletereading">deletereading</a> &nbsp;
      <a href="#fheminfo">fheminfo</a> &nbsp;
      <a href="#get">get</a> &nbsp;
      <a href="#getstate">getstate</a> &nbsp;
      <a href="#help">?,help</a> &nbsp;
      <a href="#IF">IF</a> &nbsp;
      <a href="#include">include</a> &nbsp;
      <a href="#inform">inform</a> &nbsp;
      <a href="#JsonList">JsonList</a> &nbsp;
      <a href="#JsonList2">JsonList2</a> &nbsp;
      <a href="#list">list</a> &nbsp;
      <a href="#modify">modify</a> &nbsp;
      <a href="#notice">notice</a> &nbsp;
      <a href="#quit">quit</a> &nbsp;
      <a href="#reload">reload</a> &nbsp;
      <a href="#rename">rename</a> &nbsp;
      <a href="#rereadcfg">rereadcfg</a> &nbsp;
      <a href="#restore">restore</a> &nbsp;
      <a href="#save">save</a> &nbsp;
      <a href="#set">set</a> &nbsp;
      <a href="#setdefaultattr">setdefaultattr</a> &nbsp;
      <a href="#setreading">setreading</a> &nbsp;
      <a href="#setstate">setstate</a> &nbsp;
      <a href="#shutdown">shutdown</a> &nbsp;
      <a href="#sleep">sleep</a> &nbsp;
      <a href="#trigger">trigger</a> &nbsp;
      <a href="#update">update</a> &nbsp;
      <a href="#usb">usb</a> &nbsp;
      <a href="#version">version</a> &nbsp;
      <a href="#xmllist">xmllist</a> &nbsp;

  </ul>

  <br>
  <b>Ger&auml;te</b>
  <ul>
      <a href="#global">global</a><br>

  </ul>

  <br>
  <b>Hilfs (Erweiterungs-) Module</b>
  <ul>
    <a href="#apptime">apptime</a> &nbsp;
    <a href="#at">at</a> &nbsp;
    <a href="#autocreate">autocreate</a> &nbsp;
    <a href="#average">average</a> &nbsp;
    <a href="#Calendar">Calendar</a> &nbsp;
    <a href="#configDB">configDB</a> &nbsp;
    <a href="#DOIF">DOIF</a> &nbsp;
    <a href="#Dashboard">Dashboard</a> &nbsp;
    <a href="#DbLog">DbLog</a> &nbsp;
    <a href="#dewpoint">dewpoint</a> &nbsp;
    <a href="#dummy">dummy</a> &nbsp;
    <a href="#eventTypes">eventTypes</a> &nbsp;
    <a href="#FHEM2FHEM">FHEM2FHEM</a> &nbsp;
    <a href="#FHEMWEB">FHEMWEB</a> &nbsp;
    <a href="#FB_CALLMONITOR">FB_CALLMONITOR</a> &nbsp;
    <a href="#FileLog">FileLog</a> &nbsp;
    <a href="#FLOORPLAN">FLOORPLAN</a> &nbsp;
    <a href="#GEOFANCY">GEOFANCY</a> &nbsp;
    <a href="#GUEST">GUEST</a> &nbsp;
    <a href="#HCS">HCS</a> &nbsp;
    <a href="#Heating_Control">Heating_Control</a> &nbsp;
    <a href="#HMinfo">HMinfo</a> &nbsp;
    <a href="#holiday">holiday</a> &nbsp;
    <a href="#InfoPanel">InfoPanel</a> &nbsp;    
    <a href="#LightScene">LightScene</a> &nbsp;
    <a href="#logProxy">logProxy</a> &nbsp;
    <a href="#mailcheck">mailcheck</a> &nbsp;
    <a href="#notify">notify</a> &nbsp;
    <a href="#PID">PID</a> &nbsp;
    <a href="#PRESENCE">PRESENCE</a> &nbsp;
    <a href="#PachLog">PachLog</a> &nbsp;
    <a href="#RSS">RSS</a> &nbsp;
    <a href="#RandomTimer">RandomTimer</a> &nbsp;
    <a href="#rain">rain</a> &nbsp;
    <a href="#readingsGroup">readingsGroup</a> &nbsp;
    <a href="#readingsHistory">readingsHistory</a> &nbsp;
    <a href="#readingsProxy">readingsProxy</a> &nbsp;
    <a href="#remotecontrol">remotecontrol</a> &nbsp;
    <a href="#RESIDENTS">RESIDENTS</a> &nbsp;
    <a href="#ROOMMATE">ROOMMATE</a> &nbsp;
    <a href="#SUNRISE_EL">SUNRISE_EL</a> &nbsp;
    <a href="#SYSSTAT">SYSSTAT</a> &nbsp;
    <a href="#sequence">sequence</a> &nbsp;
    <a href="#speedtest">speedtest</a> &nbsp;
    <a href="#statistics">statistics</a> &nbsp;
    <a href="#structure">structure</a> &nbsp;
    <a href="#SVG">SVG</a> &nbsp;
    <a href="#telnet">telnet</a> &nbsp;
    <a href="#Twilight">Twilight</a> &nbsp;
    <a href="#THRESHOLD">THRESHOLD</a> &nbsp;
    <a href="#WeekdayTimer">WeekdayTimer</a> &nbsp;
    <a href="#watchdog">watchdog</a> &nbsp;
    <a href="#weblink">weblink</a> &nbsp;
    <a href="#weco">weco</a> &nbsp;
    <a href="#WOL">WOL</a> &nbsp;
    <a href="#XmlList">XmlList</a> &nbsp;
  </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&auml;chlich zur Heimautomatisierung benutzt, 
ist aber ebenso f&uuml;r andere Aufgaben einsetzbar wo Benachrichtigungen, 
Zeitschaltungen und Datensammlungen eine wichtige Rolle spielen.</p>
<p>FHEM unterst&uuml;tzt verschiedene Hardwareger&auml;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&auml;te wie FS20 
oder FHT die einen Nachrichtenaustausch mit verschiedensten Ger&auml;ten die diese 
Protokolle verwenden erm&ouml;glichen.</p>
<p>
FHEM ist modular. Abh&auml;ngig von den unterschiedlichen Ger&auml;ten werden in den 
Modulen verschiedene Funktionen (z.B. define, get, set) realisiert. FHEM enth&auml;lt 
weitere Funktionen wie Trigger (<a href="#notify">notify</a>), 
Zeitabh&auml;ngige Funktionen (<a href="#at">at</a>) 
die die Funktionalit&auml;t erweitern.</p>
<p>
FHEM wird entweder &uuml;ber einfache ASCII-Kommandozeilen gesteuert die in Dateien 
wie z.B. der Konfigurationsdatei fhem.cfg gespeichert sind oder &uuml;ber eine TCP/IP 
Verbindung, entweder direkt in einer "telnet"-Sitzung, oder per fhem.pl im 
Client-Modus oder &uuml;ber eines der Webfrontends.<br> &nbsp;</p>
<p class="MsoNormal">Wenn Sie den FHEM-Server starten, m&uuml;ssen Sie eine 
Konfigurationsdatei ausw&auml;hlen:</p>
<ul>
  <code>perl fhem.pl fhem.cfg</code>
</ul>
&nbsp;<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&ouml;nnen aber
bei Bedarf auch abgeschaltet werden.<br><br>

Die WEB Schnittstelle kann &uuml;ber
<ul>
  http://&lt;fhemhost&gt;:8083
</ul>
erreicht werden.
<br><br>

Die Kommunikation mit FHEM kann entweder in einer "session" (&uuml;ber telnet) oder 
&uuml;ber einzelne Klient-Kommandos (&uuml;ber fhem.pl) erfolgen. Beispiel:
<ul>
    <code>telnet &lt;fhemhost&gt; 7072<br>
    &lt;NL&gt; </code>(Die Bet&auml;tigung der &quot;Enter&quot;-Taste schaltet in den&nbsp; "prompt" 
    Modus)<code><br>
    &lt;command&gt;...<br>
    quit</code><br>
</ul>
    oder
<ul>
    <code>fhem.pl &lt;fhemhost&gt;:7072 "&lt;command&gt;..."</code>
</ul>
</ul>
<br>
<!-- intro end - diese Zeile nicht entfernen! -->


<a name="command"></a>
<h3>FHEM Befehlstypen</h3>
<ul>
Es gibt drei Arten von Befehlen: "fhem" Befehle (werden in diesem Dokument
beschrieben), SHELL-Befehle (diese m&uuml;ssen von doppelten
Anf&uuml;hrungszeichen "" eingeschlossen werden) und PERL-Ausdr&uuml;cken (von
geschwungenen Klammern {} eingeschlossen). SHELL-Befehle oder
PERL-Ausdr&uuml;cke werden f&uuml;r komplexe <a href="#at">at</a> oder <a
href="#notify">notify</a> Ausdr&uuml;cke ben&ouml;tigt, k&ouml;nnen aber auch
als "normale" Befehle angewendet werden.
<br>
<br>

Die folgenden drei Befehle bewirken z.B. dasselbe Ergebnis, wenn sie am
telnet-Prompt eingegeben werden:
  <ul>
  set lamp off<br>
  "fhem.pl 7072 "set lamp off""<br>
  {fhem("set lamp off")}<br>
  </ul>
SHELL-Kommandos werden im Hintergrund ausgef&uuml;hrt, 
PERL-Ausdr&uuml;cke und FHEM-Kommandos werden im Haupt-"thread" ausgef&uuml;hrt. Um 
PERL-Ausdr&uuml;cke leichter eingeben zu k&ouml;nnen, sind einige Spezialfunktionen und 
Variablen verf&uuml;gbar. Lesen Sie sich bitte die Abschnitte <a href="#perl">
Perl special</a> zum besseren Verst&auml;ndnis durch.</p>
<p>Um FHEM-Befehle in einen SHELL-Script zu triggern (dies ist 
eine "andere" M&ouml;glichkeit), benutzen Sie bitte die oben beschriebene Client-Form 
der fhem.pl.
<br>

Mehrere FHEM-Kommandos hintereinander werden mittels 
Semikolon (;) getrennt. Weil Semikola auch in PERL-Code oder SHELL-Programmen 
benutzt werden, m&uuml;ssen sie mittels doppelten Semikola gesch&uuml;tzt werden. Lesen 
Sie sich bitte die <b>Bermerkungen </b>des <a href="#notify">notify</a>-Abschnittes zu Kommandoparametern und Regeln durch.
<br>

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.
  <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>
  <br>
F&uuml;r jede weitere Indirektion muss man die Strichpunkte verdoppeln. Um also die beiden Lampen um 7:00 f&uuml;r 10 Minuten einzuschalten schreibt man:
  <ul>
  define onAt at 07:00 set Lamp1 on;;set Lamp2 on;; define offAt at +00:10 set Lamp1 off;;;;set Lamp2 off
  </ul>
Keine Angst, das Vorherige kann in FHEM auch deutlich einfacher formuliert werden als:
  <ul>
  define onAt at 07:00 set Lamp1,Lamp2 on-for-timer 600
  </ul>
  <br>

Befehle k&ouml;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&uuml;hrt oder sp&auml;ter wenn sie als Argumente
eines <a href="#at">at</a> oder <a href="#notify">notify</a>-Befehles verwendet
werden.

<p>Eine mit einem \ abgeschlossene Zeile wird mit der 
nachfolgenden Zeile verbunden. Somit k&ouml;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 &uuml;ber mehrere 
Zeilen erstreckende Befehle, indem man keine \ am Zeilenende eingeben muss.</p>
<p>&nbsp;</p>
</ul>
<!-- command end - diese Zeile nicht entfernen! -->


<a name="devspec"></a>
<h3>Ger&auml;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&ouml;nnen eine komplexere Ger&auml;tespezifikation als Argumente enthalten,
  die auch eine Anzahl von Ger&auml;ten betreffen kann. Eine
  Ger&auml;tespezifikation kann folgendes sein:
  <ul>
  <li>ein einzelner Ger&auml;tename. Dies ist der Normalfall</li>
  <li>eine durch Komma(,) getrennte Liste von Ger&auml;tenamen</li>
  <li>ein regul&auml;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&auml;rer Ausdruck.
      Um die Bedingung zu negieren, sollte NAME!=WERT verwendet werden.
      </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 TYPE=FS20 STATE</code><br>
  </ul>
  Bemerkungen:
  <ul>
  <li>die Spezifikation kann keine Leerzeichen enthalten.</li>
  <li>falls ein Ger&auml;tename exakt dem Spezifikation entspricht, dann werden
      keine regul&auml;re Ausdr&uuml;cke oder Filter ausgewertet.
  <li>zuerst wird die durch Komma getrennte Spezifikation abgearbeitet, dann
      folgen die regul&auml;ren Ausdr&uuml;cke und die Filter</li>
  <li>die Befehlszeile kann die selbe Ger&auml;tebezeichnung mehrfach enthalten
      z.B.: &quot;set lamp3,lamp3 on&quot;. 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&auml;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&auml;ten genutzt werden, und lokale
Attribute, die nur auf individuelle Ger&auml;teklassen zutreffen.<p>

Manche Ger&auml;te (wie <a href="#FHEMWEB">FHEMWEB</a>) definieren automatisch
neue globale Attribute bei der ersten Definition eines Ger&auml;tes dieses
Typs.<p>

Sie k&ouml;nnen den Befehl<p><code>attr global userattr
&lt;attributelist&gt;</code><p> f&uuml;r das Ger&auml;t <a
href="#global">global</a> verwenden, um neue globale Attribute zu deklarieren,
und <p><code>attr &lt;devicespec&gt; userattr
&lt;attributelist&gt;</code>,<p>um neue lokale Attribute f&uuml;r bestimmte
individuelle Ger&auml;te gem&auml;&szlig <a href="#devspec">devspec</a> zu
deklarieren.

<code>&lt;attributelist&gt;</code> ist eine durch Leerzeichen getrennte Liste,
die die Namen der zus&auml;tzlichen Attribute enth&auml;lt. In der
Dokumentation zum Befehl <a href="#attr">attr</a> sind Beispiele.<p>

Seien Sie vorsichtig und &uuml;berschreiben Sie keine zus&auml;tzlichen
globale Attribute, die bereits zuvor durch Sie selbst oder ein Ger&auml;t
definiert wurden.  <code>attr global userattr &lt;attributelist&gt;</code>
sollte so fr&uuml;h wie m&ouml;glich in der Konfiguration erscheinen.

<h4>Ger&auml;tespezifische Attribute</h4>

Ger&auml;tespezifische Attribute sind in dem jeweiligen Abschnitt zum
Ger&auml;t dokumentiert.


<h4>Globale Attribute f&uuml;r alle Ger&auml;te</h4>
 
<ul>
    <a name="verbose"></a>
    <li>verbose<br>
      Setzt den Schwellwert f&uuml;r die Logfile-Meldungen.
      M&ouml;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&auml;ten empfangene Daten.
        </li><li>5 - Fehlersuche.</li>
      </ul>
      Der f&uuml;r die <a href="#global">global</a> Instanz gesetzte Wert gilt
      als Voreinstellung f&uuml;r die Instanzen, die dieses Attribut nicht
      gesetzt haben.
    </li>

    <a name="comment"></a>
    <li>comment<br>
        F&uuml;gt einen beliebigen Kommentar hinzu.

    <a name="alias"></a>
    </li><li>alias<br>
       Wird in FHEMWEB benutzt, um ein en anderen Namen f&uuml;r ein Ger&auml;t
       anzuzeigen z.B. wenn Sonderzeichen/Leerzeichen nicht in der
       Ger&auml;tedefinition verwendet werden k&ouml;nnen.

    <a name="room"></a>
    </li><li>room<br>
       Filtert/gruppiert Ger&auml;te.
       Ein Ger&auml;t kann zu mehr als einem Raum zugeordnet werden. In diesem
       Fall m&uuml;ssen die Raumzuordnungen durch Kommata getrennt
       angegeben werden.<br>
       Ger&auml;te, die dem Raum mit der Bezeichnung "hidden" zugeordnet
       werden, erscheinen nicht auf der Webseite.

    <a name="group"></a>
    <li>group<br>
       Ger&auml;tegruppen. FHEMWEB zeigt Ger&auml;te die in die gleiche Gruppe
       geh&ouml;ren auch in einer gemeinsamen Box an.  Ein Ger&auml;t kann zu
       mehr als einer Gruppe geh&ouml;ren. In diesem Fall m&uuml;ssen die
       entsprechenden Gruppen durch Kommata getrennt eingetragen werden. Wenn
       dieses Attribut nicht gesetzt ist, wird der in der Ger&auml;tegruppe
       gesetzte Ger&auml;tetyp verwendet.
      </li>

    <a name="showtime"></a>
    <li>showtime<br>
      Wird im FHEMWEB verwendet, um die Zeit der letzten Aktivit&auml;t
      anstelle des Status in der Gesamtansicht anzuzeigen.  N&uuml;tzlich z.B.
      f&uuml;r FS20 PIRI Ger&auml;te.
    </li>

    <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.
      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>
      </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&ouml;chten ob dies
    unterst&uuml;tzt wird.<br><br>

<ul>    
    <a name="stateFormat"></a>
    <li>stateFormat<br>
    &Auml;ndert den Ger&auml;testatus, dies ist z.Bsp. in der Ausgabe des list
    Kommandos zu sehen, oder in der Raum&uumlbersicht von FHEMWEB.  Falls
    nicht gesetzt, dann wird das state Reading &uuml;bernommen. Sonst werden
    alle W&ouml;rter im Wert des Attributes durch das entsprechende Reading des
    Ger&auml;tes ersetzt (soweit vorhanden). Falls der Wert in {}
    eingeschlossen ist, dann wird es als Perl Ausdruck ausgewertet. Die
    Auswertung passiert bei jeder &Auml;nderung eines Readings.
    </li>

    <a name="event-on-update-reading"></a>
    <li>event-on-update-reading<br>
    Wenn nicht gesetzt, erzeugt jede Ver&auml;nderung eines "readings" ein
    Ereignis, welches z.B. von <a href="#notify">notify</a> oder<a
    href="FileLog"> FileLog</a> ber&uuml;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&auml;lt eine durch Kommata getrennte Liste von
    "readings".  Wenn gesetzt, erzeugen nur Ver&auml;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 &Auml;nderung gr&ouml;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&auml;tes ein Ereignis.</li>
    <li>Wenn eines der Attribute gesetzt ist, erzeugen nur Updates oder
        &auml;nderungen von "readings" die nicht in einem der Attribute gesetzt
        sind ein Ereignis.</li>
    <li>Wenn ein "reading" in event-on-update-reading aufgef&uuml;hrt ist,
        erzeugt eine Aktualisierung ein Ereignis unabh&auml;ngig ob das
        "reading" auch in event-on-change-reading aufgelistet ist.</li>
    </ol>

    <a name="event-aggregator"></a>
    <li>event-aggregator</li>
    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</code>
    quadruples. 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.  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>
    </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>

    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>

    Example:<br>
    <code>attr myPowerMeter event-aggregator EP_POWER_METER:300:linear:mean,EP_ENERGY_METER:300:none:v</code>
    </li>
    
    <a name="event-min-interval"></a>
    <li>event-min-interval<br>
    Dieses Attribut enth&auml;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.
    </li>

    <a name="userReadings"></a>
    <li>userReadings<br>
    Komma getrennte Liste von benutzerdefinierten Readings. Jede Definition hat
    folgendes Format:
    <ul><code>
    &lt;reading&gt;[:&lt;trigger&gt;] [&lt;modifier&gt;] { &lt;perl code&gt; }
    </code></ul>
    Diese benutzerdefinierte Readings werden bei jeder Aktualisierung der
    Ger&auml;tereadings gesetzt, indem das spezifizierte <a href="#perl">perl
    code</a> <code>{ &lt;perl code&gt; }</code> ausgef&uuml;hrt wird, und
    dessen Wert dem Reading zugewiesen wird.

    Falls &lt;trigger&gt; spezifiziert ist, dann findet diese Ausf&uuml;hrung
    nur dann statt, falls einer der aktualisierten Readings dem regexp
    &lt;trigger&gt; 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>&lt;modifier&gt;</code> kann die folgenden Werte haben:
    <ul>
      <li>none: als ob man es gar nicht spezifiziert h&auml;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&ouml;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&auml;hler der durch Sromverlust
        zur&uuml;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&auml;sst sich von einem Z&auml;hler der bei Stromverlust
        zur&uuml;ckgesetzt wird ein monoton wachsender Z&auml;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&uuml;r die Berechnung &auml;ltere Werte ben&ouml;tigt, d.h. der Wert
        wird fr&uuml;hestens beim zweiten &Auml;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&auml;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&auml;hig ist, Signale von diesem logischen Device zu empfangen.
      </li><br>

    <li>Attribut "disable" umschalten<br/>
      Das Attribut "disable" kann, sofern vom Ger&auml;temodul bereitgestellt,<br/>
      mit folgendem Befehl einfach umgeschaltet werden:</br>
      <br/>
      <code>attr &lt;device&gt; disable toggle</code><br/>
    </li>
</ul>
<!-- attributes end - diese Zeile nicht entfernen! -->
<br><br>

<a name="attr"></a>
<h3>attr</h3>
<ul>
  <code>attr &lt;devspec&gt; &lt;attrname&gt; [&lt;value&gt;] </code><br>

  <br>
   Dieser Befehl setzt ein Attribut f&uuml;r ein Ger&auml;t welches mit <a
   href="#define">define</a> definiert wurde. Sie k&ouml;nnen auch Ihre eigenen
   Attribute definieren, um sie in anderen Applikationen anzuwenden.  Geben Sie
   "&lt;attr &lt;name&gt; ?" ein, um eine Liste verf&uuml;gbarer Attribute
   anzuzeigen. 

  Siehe den Abschnitt &uuml;ber <a href="#devspec">Ger&auml;te-Spezifikation</a>
  f&uuml;r Details der &lt;devspec&gt;.<br>

  Ger&auml;tespezifische Attribute sind in der Beschreibung zum jeweiligen
  Ger&auml;t aufgef&uuml;hrt.
  Nach der Durchf&uuml;hrung das globale Ereignis "ATTR" wird generiert.
  <br>

  Beispiele:
  <ul>
    <code>attr global verbose 3</code><br>
    <code>attr lamp room kitchen</code><br>
    <code>attr lamp group lights</code><br>
    <code>attr lamp loglevel 6</code><br>
    <code>attr weatherstation event-on-update-reading wind,temperature,humidity</code><br>
    <code>attr weatherstation event-on-change-reading israining</code><br>
    <code>attr weatherstation event-on-change-reading israining,state</code><br>
    <code>attr heating stateFormat Temp:measured-temp, Valve:actuator</code><br>
  </ul>
  <br>

  Bemerkungen:<br>
  <ul>
    <li>Lesen Sie unter <a href="#deleteattr">deleteattr</a> nach um Attribute 
    zu l&ouml;schen.</li>
  </ul>
</ul>

<a name="setdefaultattr"></a>
<h3>setdefaultattr</h3>
<ul>
  <code>setdefaultattr [&lt;attrname&gt; [&lt;value&gt;]] </code><br>

  <br>
  F&uuml;gt Sie ein Standardattribut hinzu. Jedem nach dieser Zuweisung definierte 
  Ger&auml;t wird dieses Attribut zugewiesen. Wenn kein "attrname" angegeben wird, 
  dann wird die Liste der Standardattribute gel&ouml;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&ouml;glichkeit, ein einzelnes Standardattribut aus der Liste 
    tu l&ouml;schen.</li>
  </ul>
</ul>


<a name="define"></a>
<h3>define</h3>
<ul>
  <code>define &lt;name&gt; &lt;type&gt; &lt;type-specific&gt;</code><br>
  <br>

  Definiert ein Ger&auml;t. Sie m&uuml;ssen Ger&auml;te einrichten um sie zu
  beeinflussen (z.B. das Kommando set on/off auszuf&uuml;hren). Gleichfalls
  ist das Logfile besser lesbar wenn es z.B.  "lamp off" anstatt "Device 5673,
  Button 00, Code 00 (off)" als Text enth&auml;lt. <br>

  Nach der Durchf&uuml;hrung wird das globale Ereignis "DEFINED" generiert.
  <br><br>

  Je nach Typ ben&ouml;tigt man unterscheidliche Argumente, lesen Sie sich
  bitte die zu dem jeweiligen Ger&auml;t geh&ouml;renden Abschnitte durch.
  <br>
</ul>

<a name="defmod"></a>
<h3>defmod</h3>
<ul>
  <code>defmod &lt;name&gt; &lt;type&gt; &lt;type-specific&gt;</code><br>
  <br>
  Definiert ein Ger&auml;t, oder &auml;ndert es, falls es exisitiert. Um
  z.Bsp. eine Lampe 10 Minuten nach der letzten Meldung eines Bewegungsmelders
  abzuschalten, k&ouml;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&uuml;rde, dann w&uuml;rde eine
  Meldung innerhalb von 10 Minuten nach der letzten Meldung zu einem Fehler
  f&uuml;hren, da mdOff noch existiert.
  <br>
</ul>


<a name="delete"></a>
<h3>delete</h3>
<ul>
  <code>delete &lt;devspec&gt;</code> <br>
  <br>
  L&ouml;scht etwas was mit dem <a href="#define">define</a> Befehl erstellt
  worden ist.<br>

  Siehe den Abschnitt &uuml;ber <a href="#devspec">Ger&auml;te-Spezifikation</a>
  f&uuml;r Details der &lt;devspec&gt;.<br>

  Nach dem l&ouml;schen, wird das globale Ereignis "DELETED" erzeugt.<br>

  Beispiel:
  <ul>
    <code>delete lamp</code><br>
  </ul>
  <br>
</ul>

<a name="deleteattr"></a>
<h3>deleteattr</h3>
<ul>
  <code>deleteattr &lt;devspec&gt; [&lt;attrname&gt;]</code> <br>
  <br>
  L&ouml;scht entweder ein einzelnes Attribut (siehe Abschnitt <a
  href="#attr">attr</a> ) oder alle Attribute eines Ger&auml;tes (falls
  kein &lt;attrname&gt; angegeben wird).<br>
  Siehe den Abschnitt &uuml;ber <a href="#devspec">Ger&auml;te-Spezifikation</a>
  f&uuml;r Details der &lt;devspec&gt;.<br>
  Nach der Durchf&uuml;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>

<a name="deletereading"></a>
<h3>deletereading</h3>
<ul>
  <code>deletereading &lt;devspec&gt; &lt;readingname&gt;</code> <br>
  <br>
  Entfernt das Reading &lt;readingname&gt; f&uuml;r das spezifizierte
  Ger&auml;t.  &lt;readingname&gt; ist ein perl Regular-Expression, was den
  vollst&auml;ndigen Namen des Readings erfassen muss.

  Mit gr&ouml;&szlig;ter Sorgfalt verwenden! FHEM kann abst&uuml;rzen, falls
  man lebenswichtige Readings entfernt.<br>

  Siehe den Abschnitt &uuml;ber <a href="#devspec">Ger&auml;te-Spezifikation</a>
  f&uuml;r Details der &lt;devspec&gt;.<br>
  <br>

  Beispiele:
  <ul>
    <code>deletereading mySensor temp1</code><br>
    <code>deletereading mySensor temp\d+</code><br>
  </ul>
  <br>
</ul>

<a name="displayattr"></a>
<h3>displayattr</h3>
<ul>
  <code>displayattr &lt;devspec&gt; [&lt;attrname&gt;]</code> <br>
  <br>
  Zeigt entweder den Wert eines Attributes an (falls &lt;attrname&gt;
  spezifiziert wurde) oder alle Attribute eines Ger&auml;tes.

  Siehe den Abschnitt &uuml;ber <a href="#devspec">Ger&auml;te-Spezifikation</a>
  f&uuml;r Details der &lt;devspec&gt;.<br>

  Falls mehrere Ger&auml;te spezifiziert wurden, dann enth&auml;lt die Ausgabe
  den Namen der Ger&auml;te.
  <br>

  Beispiele:
  <ul>
    <code>
    fhem&gt; di WEB<br>
    menuEntries AlarmOn,/fhem?cmd=set%20alarm%20on<br>
    room Misc.<br>
    fhem&gt di WEB room<br>
    Misc.<br>
    </code>
  </ul>
  <br>
</ul>

<a name="get"></a>
<h3>get</h3>
<ul>
  <code>get &lt;devspec&gt; &lt;type-specific&gt;</code>
  <br><br>
  Fragt einen Wert direkt&nbsp; (aktuell) vom Ger&auml;t ab und wartet auf eine 
  Antwort. Eine allgemeine Liste m&ouml;glicher Paramter erhalten Sie mit<ul>
    <code>get &lt;device&gt; ?</code>
  </ul>
  Siehe den Abschnitt &uuml;ber <a href="#devspec">Ger&auml;te-Spezifikation</a>
  f&uuml;r Details der &lt;devspec&gt;.<br>
  Jedes Ger&auml;t hat unterschiedliche &quot;get&quot;-Parameter. Lesen Sie Details bitte im 
  zugeh&ouml;rigen Abschnitt nach.<br>
  <br>

</ul>


<a name="getstate"></a>
<h3>getstate</h3>
<ul>
  <code>getstate &lt;devspec&gt;</code>
  <br><br>
  Gibt einen kurzen, durch Leerzeichen getrennte Statusliste f&uuml;r &lt;devspec&gt; 
  aus . Dies ist n&uuml;tzlich, um das Ger&auml;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&ouml;nnen, kopieren Sie bitte&nbsp; die 
  Datei 99_getstate.pm aus dem Verzeichnis contrib/getstate/ in Ihr FHEM 
  Verzeichnis.
  <br>

</ul>


<a name="include"></a>
<h3>include</h3>
<ul>
  <code>include &lt;filename&gt;</code> <br>
  <br>
  Liest (z.B. als Befehlszeile in der fhem.cfg) die in &lt;filename&gt; angegebene 
  Datei in FHEM ein und interpretiert jede Dateizeile als FHEM Befehl. Mit 
  dieser Hilfe werden Konfigurationsdateien modularer und erlaubt es sie z.B. 
  nach R&auml;umen geordnet auftzuteilen.
  <br>
</ul>

<a name="inform"></a>
<h3>inform</h3>
<ul>
  <code>inform {on|off|timer|raw} [regexp]</code> <br>
  <br>
  Wenn auf &quot;on&quot; gesetzt und der Status eines Ger&auml;tes &auml;ndert
  sich, dann wird eine Nachricht an den Client gesendet. Dieser Befehl kann von
  anderen Programmen/Modulen dazu benutzt werden, eine Hinweisnachricht zu
  erhalten. <br> Die Option &quot;timer&quot; f&uuml;gt&nbsp; der Nachricht
  einen Zeitstempel hinzu. Hinweis: Dieser Befehl erleichtert Ihnen die bessere
  Kontrolle in <a href="#notify">notify</a> oder <a href="#FileLog">FileLog</a>
  , wann welche Ereignisse erzeugt wurden.

  <br>
</ul>

<a name="list"></a>
<h3>list</h3>
<ul>
  <code>list [devspec] [value]</code>
  <br><br>
  Auflistung aller &quot;definitions&quot;, &quot;notify&quot; und
  &quot;at&quot;-Definitionen. Dies ist eines der wenigen Befehle, die im
  Normalfall eine Zeichenkette ausgeben.<br> Siehe den Abschnitt &uuml;ber <a
  href="#devspec">Ger&auml;te-Spezifikation</a> f&uuml;r Details der
  &lt;devspec&gt;.<br>
  
  <br> Wenn value angegeben ist, der von ( DEF, TYPE, usw) oder reading
  (actuator, measured-temp) f&uuml;r alle Ger&auml;te die in devspec angegeben
  sind.  <br><br> Beispiel:
  <pre><code>fhem&gt; 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&uuml;r <code>name</code> einen Ger&auml;tenamen eingeben, dann
  erhalten Sie einen genauen Status f&uuml;r das in<code> name</code>
  angegebene Ger&auml;t angezeigt, z.B.:
  <pre><code>  fhem&gt; 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>
</ul>


<a name="modify"></a>
<h3>modify</h3>
<ul>
  <code>modify &lt;name&gt; &lt;type-dependent-options&gt;</code>
  <br><br>

  Dieser Befehl wird benutzt, um Definitionen zu ver&auml;ndern. Er ist
  n&uuml;tzlich, um <a href="#at">at</a> oder <a href="#notify">notify</a>
  Definitionen zu ver&auml;ndern.  Wenn Sie einen Wert einer an Definition
  ver&auml;ndern, dann wird nur der f&uuml;r die Zeit zust&auml;ndige Teil
  ge&auml;ndert. Im Falle der Ver&auml;nderung einer Definition vom Typ
  &quot;notify&quot; wird nur der&nbsp; regex Teil ge&auml;ndert. Alle anderen
  Werte (Stati, Attribute,&nbsp; etc) bleiben erhalten.
  After modify, the global event "MODIFIED" will be generated.
  Nach der Durchf&uuml;hrung das globale Ereignis "MODIFIED" wird generiert.
  <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>

<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>


<a name="reload"></a>
<h3>reload</h3>
<ul>
  <code>reload &lt;module&gt;</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>

<a name="rename"></a>
<h3>rename</h3>
<ul>
  <code>rename &lt;oldname&gt; &lt;newname&gt;</code>
  <br><br>
  Benennt ein Ger&auml;t von &lt;oldname&gt; in &lt;newname&gt;,
  einschliesslich der Attribute, um. Das globale Ereignis &quot;RENAMED&quot;
  wird erstellt, Lesen Sie bitte den Abschnitt &quot;notify&quot; durch um
  Details zu erfahren.
  <br><br>
  Beispiel:
  <ul>
    <code>rename FHT_1234 fht.kitchen</code>
  </ul>
</ul>


<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:&nbsp; Zuerst wird das <a
  href="#statefile">statefile</a> gesichert. Dann werden alle Ger&auml;te
  gel&ouml;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&ouml;st.  Alle existierenden Verbindungenwerden bis zum
  &quot;rereadcfg&quot; Ereignis getrennt.

  <br><br>
  Beipiel:
  <ul>
    <code>rereadcfg</code>
  </ul>
</ul>

<a name="save"></a>
<h3>save</h3>
<ul>
  <code>save [&lt;configfile&gt;]</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 &quot;definitions&quot; und
      &quot;attributes&quot; 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&ouml;tigen,dann m&uuml;ssen Sie sie mit <a href="#notify">notify</a>
      triggern wenn das INITIALIZED Ereignis eintritt.</li>

    <li>Der Befehl &quot;save&quot; versucht Kommentarzeilen&nbsp; (Zeilen die
      mit # beginnen) und &quot;include&quot;-Zeilen zu erhalten, aber arbeitet
      nicht korrekt wenn FHEM f&uuml;r diese Dateien keine Schreibrechte
      besitzt.</li>

  </ul>
</ul>


<a name="set"></a>
<h3>set</h3>
<ul>
  <code>set &lt;devspec&gt; &lt;type-specific&gt;</code>
  <br><br>
  Der Befehl setzt Ger&auml;teparameter/sendet Signale an ein Ger&auml;t. Sie
  erhalten eine Liste verf&uuml;gbarer Parameter wenn Sie folgendes eingeben:
  <ul>
    <code>set &lt;name&gt; ?</code>
  </ul>
  Siehe den Abschnitt &uuml;ber <a href="#devspec">Ger&auml;te-Spezifikation</a>
  f&uuml;r Details der &lt;devspec&gt;.<br>

  Der &quot;set&quot;-Befehl gibt nur bei Fehler einen Wert zur&uuml;ck.
  <br><br>
  Jedes Ger&auml;t hat verschiedene Parameter die mit &quot;set&quot; gesetzt
  werden k&ouml;nnen.  Lesen Sie bitte den entsprechenden Abschnitt f&uuml;r
  das Ger&auml;t f&uuml;r Details durch.
  <br>

  <br>
  <a name="setExtensions"></a>
  Manche Module unterst&uuml;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&uuml;hrten Befehle implementiert ist, dann
  wird die Modul-Implementation verwendet.
  <ul>
    <li>on-for-timer &lt;sekunden&gt<br>
        Das Ger&auml;t wird per "on" eingeschaltet, und ein interner Zeitgeber
        wird erstellt, um nach &lt;sekunden&gt; ein "off" Kommando
        auszuf&uuml;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 &lt;sekunden&gt<br>
        siehe on-for-timer.</li>
    <li>on-till &lt;timedet&gt<br>
        Das Ger&auml;t wird per "on" eingeschaltet, und ein at Instanz wird
        definiert, um es um &lt;timedet&gt; (Format: HH:MM[:SS]) per off
        auszuschalten.  Diese at Instanz ist sichtbar unter dem Namen
        ger&auml;teName+"_till".  Um das Ausschalten zu deaktivieren
        l&ouml;scht man diese at Definition.  </li>
    <li>off-till &lt;timedet&gt<br>
        siehe on-till.</li>
    <li>blink &lt;anzahl&gt; &lt;blink-periode&gt;<br>
        Das Ger&auml;t wird mit "on" f&uuml;r die &lt;blink-periode&gt;
        eingeschaltet, und das wird nach &lt;blink-periode&gt; wiederholt. Um
        das Blinken vorzeitig zu stoppen spezifiziert man "0 0" als
        Argument.</li>
    <li>intervals &lt;from1&gt;-&lt;till1&gt; &lt;from2&gt;-&lt;till2&gt;...
        </br>
        Das Ger&auml;t wird f&uuml;r die spezifizierten Intervalle
        eingeschaltet. Die einzelnen Intervalle sind Leerzeichen getrennt, und
        ein Intervall besteht aus zwei Zeitspezifikationen, die mit einem "-"
        getrennt sind.
        </li>
    </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>
  </ul>
</ul>


<a name="setreading"></a>
<h3>setreading</h3>
<ul>
  <code>setreading &lt;devspec&gt; &lt;reading&gt; &lt;value&gt;</code>
  <br><br>
  Der Befehl setzt das Reading &lt;reading&gt; auf den Wert &lt;value&gt; ohne
  Signale an das betroffene Ger&auml;t zu senden, generiert aber Ereignisse und
  die &uuml;bliche eventMap und stateFormat Umwandlung wird auch
  durchgef&uuml;hrt.
  <br>
  Siehe den Abschnitt &uuml;ber <a href="#devspec">Ger&auml;te-Spezifikation</a>
  f&uuml;r Details der &lt;devspec&gt;.<br>
  <br>
  Beispiel:
  <ul>
    setreading lampe state on
  </ul>
  Achtung: setreading generiert kein Event f&uuml;r ein Ger&auml;t X, falls es
  aus einem notify f&uuml;r Ger&auml;t X aufgerufen wurde. In so einem Fall
  k&ouml;nnte man auf "sleep 0.1; setreading X Y Z" ausweichen.
</ul>

<a name="setstate"></a>
<h3>setstate</h3>
<ul>
  <code>setstate &lt;devspec&gt; &lt;value&gt;</code>
  <br><br>
  Der Befehl setzt den STATE Eintrag des Ger&aauml;tes direkt, ohne Ereignisse
  zu generieren oder ein Signal an das Ger&auml;t zu senden. Dieser Eintrag ist
  ma&szlig;gebend f&uuml;r die Status-Anzeige in diversen Frontends.  Dieser
  Befehl wird auch im <a href="#statefile">statefile</a> benutzt.<br> Siehe den
  Abschnitt &uuml;ber <a href="#devspec">Ger&auml;te-Spezifikation</a> f&uuml;r
  Details der &lt;devspec&gt;.<br> <br>
  Beispiel:
  <ul>
    setstate lampe An
  </ul>
</ul>


<a name="shutdown"></a>
<h3>shutdown</h3>
<ul>
  <code>shutdown [restart]</code>
  <br><br>
  Der Befehl f&auml;hrt den Server herunter (nach dem sichern aller <a
  href="#statefile">Ger&auml;testati</a>). Er triggert das global:SHUTDOWN
  Ereignis.  Mit der optionalen Parameter restart startet FHEM danach neu.
  <br><br>
  Beispiel:
  <ul>
    <code>shutdown</code><br>
    <code>shutdown restart</code>
  </ul>
</ul>


<a name="trigger"></a>
<h3>trigger</h3>
<ul>
  <code>trigger &lt;devspec&gt; &lt;event&gt;</code>
  <br><br>
  Generiert das Ereignis &lt;event&gt;, was z.Bsp. ein <a
  href="#notify">notify</a> ansto&szlig;en kann, oder den FileLog zum
  protokollieren dieser Zeile bewegen kann.<br>
  Siehe den Abschnitt &uuml;ber <a href="#devspec">Ger&auml;te-Spezifikation</a>
  f&uuml;r Details der &lt;devspec&gt;.<br>
  <br>
  Beispiel:
  <ul>
    <code>trigger btn3 on</code>
  </ul>
</ul>

<a name="sleep"></a>
<h3>sleep</h3>
<ul>
  <code>sleep &lt;sec&gt; [quiet]</code>
  <br><br>
  Wartet f&uuml;r die angegebene Anzahl von Millisekunden.<br>
  Falls sleep in at/notify/etc aufgerufen wurde, und die nachfolgenden
  Kommandos einen nicht leeren Text zur&uuml;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: sleep gefolgt von weiteren Befehlen und aufgerufen in
  at/notify/etc blockiert die Abarbeitung von FHEM nicht.<br>
</ul>

<a name="version"></a>
<h3>version</h3>
<ul>
  <code>version [filter]</code>
  <br><br>
  Gibt die Versionsinformation von fhem.pl und aller geladenen Module aus. Mit
  der optionalen Parameter kann man die Ausgabe filtern.

  <br><br>
  Beispiel der Ausgabe:
  <ul>
    <code>
    # $Id: fhem.pl 3405 2013-07-11 19:46:39Z rudolfkoenig $<br>
    # $Id: 00_CUL.pm 3237 2013-06-01 17:15:59Z rudolfkoenig $<br>
    # $Id: 10_CUL_HM.pm 3378 2013-07-02 16:57:27Z martinp876 $<br>
    </code>
  </ul>
</ul>
<!-- commands end - diese Zeile nicht entfernen! -->


<a name="global"></a>
<h3>global</h3>
<ul>
  Das &quot;global&quot; Ger&auml;t wird benutzt, um allgemeing&uuml;ltige
  Attribute zu setzen. Es wird automatisch erstellt und kann nicht
  gel&ouml;scht oder umbenannt werden. Es hat keine &quot;set&quot; oder
  &quot;get&quot; 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>Attributes</b>
  <ul>
    <li><a href="#archivedir">archivedir</a></li>
    <li><a href="#archivecmd">archivecmd</a></li>
    <li><a href="#nrarchive">nrarchive</a></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&ouml;rigen Module automatisch geladen.&nbsp; Dies
        erfolgt vom <a href="#autocreate"> autocreate</a> Ger&auml;t, um so
        automatisch ein FHEM-Ger&auml;t bei erreichen einer entsprechenden
        Nachricht zu erstellen.
    </li><br>

    <a name="backupcmd"></a>
    <li>backupcmd<br>
        Sie k&ouml;nnen das Update durch Ihre eigenen Befehle/Skripts
        durchf&uuml;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&uuml;ckgeben oder eine entsprechende Zeichenkette um
        Fehlermeldungen auszugeben, damit die Zusammenarbeit mit updatefhem
        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&uuml;tzt
        der Archviierungsbefehl &quot;tar&quot; symbolische Links in Ihrem
        Backup. Andererseits, wenn dieses Attribut auf "no" gesetzt ist werden
        symbolische Links vom Befehl &quot;tar&quot; 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="configfile"></a>
    <li>configfile<br>
        Enth&auml;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="holiday2we"></a>
    <li>holiday2we<br>
        Wenn dieses Attribut gesetzt wurde, dann wird die <a href="#perl">$we</a> 
    Variable
        als &quot;true&quot; betrachtet, wenn der Wert der <a href="#holiday">holiday</a> 
    Variable zu diesem Attribut nicht &quot;none&quot; ist.<br>
        Beispiel:<br>
        <ul>
          attr global holiday2we hessen
        </ul>
    </li><br>

    <a name="lastinclude"></a>
    <li>lastinclude<br>
        Wurde dieses Attribut gesetzt, dann wird der letzte Befehl der generierten 
    Konfigurationsdatei (siehe <a href="#save">save</a> Befehl) ber&uuml;cksichtigt &lt;lastinclude-value&gt;<br>
        Dieses Attribut ist DEPRECATED, bitte benutzen Sie <a href="#notify">notify</a>, 
    mit dem&nbsp; INITIALIZED Ereignis um Befehle nach der Intialisierung 
    auszuf&uuml;hren.
    </li><br>

    <a name="logfile"></a>
    <li>logfile<br>
        Gibt das Logfile an, in welches gespeichert werden soll.&nbsp; Sie 
    k&ouml;nnen "-" f&uuml;r die Ausgabe in das stdout-Ger&auml;t. In diesem Fall stellt sich der Server nicht selbst in den Hintergrund.<br>
        Der Name der Logdatei kann auch &quot;wildcards&quot; enthalten, um eine 
    einfachere Abfolge f&uuml;r die Dateien zu erreichen. Lesen Sie bitte den 
    Abschnitt <a href="#FileLog">FileLog</a>. F&uuml;gen Sie die Attribute
        <code>archivecmd / archivedir / nrarchive</code> zum
        <code>global</code> Ger&auml;t hinzu wie Sie es auch bei einem FileLog device 
    tun k&ouml;nnten.<br>
        Sie k&ouml;nnen den Namen der Logdatei mit&nbsp;
        <code>{ $currlogfile }festlegen</code>.
    </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 enh&auml;lt <b>nicht</b> das Verzeichnis FHEM.
        Durch das setzen der Attribute, wird das Verzeichnis nach Dateinamen in
        der Form NN_&lt;NAME&gt;.pm, und sie werden f&uuml;r die Definition von
        Ger&auml;ten unter dem Namen &lt;NAME&gt; verf&uuml;gbar gemacht. Wenn
        das erste Ger&auml;t&nbsp; des Typs &lt;NAME&gt; definiert wird, werden
        die entsprechenden Module geladen und in dem Modul die entsprechende
        Function mit dem Namen &lt;NAME&gt;_Initialize wird aufgerufen. Eine
        Ausnahme bilden Module die mit der Nummer 99 im Dateinamen beginnen.
        Diese sind&nbsp; enhalten PERL-Hilfsfunktionen. Die Module werden zur
        Startzeit geladen (i.e.  modpath attribute definition time).  </li><br>

    <a name="motd"></a>
    <li>motd<br>
        Nachricht des Tages. Wird im Begr&uuml;&szligungsbildschirm von FHEM
        angezeigt, oder direkt beim Start einer &quot;telnet&quot; Sitzung,
        bevor der fhem&gt; Prompt erscheint. Der SecurityCheck setzt motd wenn
        es bisher nicht gesetzt ist. Um das zu verhindern, k&ouml;nnen sie den
        Wert von motd auf &quot;none&quot; setzen.
        motd wird auch verwendet, um Fehlermeldungen w&auml;hrend des
        fhem-Starts zu sammeln und anzuzeigen.
    </li><br>

    <a name="mseclog"></a>
    <li>mseclog<br>
        Wenn dieses Attribut gesetzt ist, enthalten Datums/Zeiteintr&auml;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 name="pidfilename="></a>
    <li>pidfilename<br>
        Schreibt die PERL Prozess-ID in die angegebene Datei. Der Server l&auml;uft 
    als Daemon und einige Distributionen wollen anhand der PID testen, ob der 
    FHEM Prozess l&auml;uft. Die Datei wird bei Ausf&uuml;hrung des &quot;shutdown&quot;-Kommandos 
    gel&ouml;scht.
    </li><br>

    <li><a href="#fheminfo">sendStatistics</a>

    <a name="statefile"></a>
    <li>statefile<br>
    Dieses Attribut legt den Namen der Datei fest, in die 
    Statusinformationen aller Ger&auml;te gespeichert werden&nbsp; bevor der
    Server heruntergefahren wird. Falls diese Datei nicht angegeben wird, so
    werden keinerlei Informationen gesichert.
    </li><br>

    <a name="title"></a>
    <li>title<br>
        Das Attribut &quot;title&quot; wird unter dem Frontend fhemweb.pl (webpgm2) zur 
    Festlegung des Seitentitels benutzt..
    </li><br>

    <li><a href="#fheminfo">uniqueID</a>

    <a name="userattr"></a>
    <li>userattr<br>
        Enth&auml;lt eine durch Leerzeichen getrennte Liste in welcher die
        Namen zus&auml;tzlicher Attribute aufgef&uuml;hrt sind. Diese
        m&uuml;ssen zuerst in dieser Liste definiert werden, bevor sie
        (bei allen Ger&auml;ten) angewendet werden k&ouml;nnen.<br>
        userattr kann auch f&uuml;r einzelne Ger&auml;te spezifiziert werden,
        um weitere Attribute f&uuml;r diese Ger&auml;te zu definieren.
    </li><br>

    <a name="dupTimeout"></a>
    <li>dupTimeout<br>
      Definert die Wartezeit, nach der 2 identische Ereignisse zweier
      Empf&auml;nger als Duplikat angesehen werden. Voreingestellt sind 0,5
      Sekunden.&nbsp;
    </li><br>

    <a name="showInternalValues"></a>
    <li>showInternalValues<br>
      Attribute/Ger&auml;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&uuml;ft.
    </li><br>

    <a name="stacktrace"></a>
    <li>stacktrace<br>
        Falls gesetzt (auf 1), schreibt ins FHEM-Log zus&auml;tzlich zu jedem
        "PERL WARNING" den stacktrace.
    </li><br>

    <a name="restartDelay"></a>
    <li>restartDelay<br>
        setzt die Verz&ouml;gerung beim Neustart mit shutdown restart, die
        Voreinstellung ist 2 (Sekunden).
    </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&uuml;r
  komplexere Aufgaben sollten Sie lieber ein SHELLl-Skiipt 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-&quot;oneliner&quot; zu testen, geben Sie diese am
    &quot;telnet&quot; 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&auml;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&uuml;cke werden durch ein Semikolon (;) getrennt. In FHEM
    &quot;oneliners&quot; m&uuml;ssen sie durch ein weiteres Semikolon (;;)
    &quot;escaped&quot; (maskiert) werden<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Beispiel:<ul>
      { my $a = 1+1;; Log 1, "Hello $a" }
    </ul>
    </li><br>

  <li>Um FHEM-Kommandos in den PERL-Ausdr&uuml;cken zu verwenden, benutzen
    Sie bitte die Funktion fhem(), mit einem Textargument. Dieser Text wird als
    FHEM-Kommando interpretiert.<br>
    <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Beispiel<ul>

      { fhem "set light on" }<br>
      define n1 notify piri:on { fhem "set light on" }
      <p>&nbsp;</p>
    </ul>
    Bemerkung: Wenn diese Funktion einen wert zur&uuml;ck liefert, wird dieser
    in der allgemeinen Logdatei gespeichert.. Benutzen sie &quot;1&quot; 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&uuml;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 $sec, $min, $hour, $mday, $month, $year, $wday, $yday, $isdst
    f&uuml;r die Verwendung in PERL-&quot;oneliners&quot; eingef&uuml;hrt (s.
    unter perldoc -f localtime). Ausnahmen: $month hat einen Wertebereich von 1
    to 12 und $year ist korrigiert von 1900.
    Weiterhin enth&auml;t $hms die Zeit in dem HH:MM:SS Format.
    <br>

    Die Variabe $we hat den Wert 1 wenn der abgefragte Tag auf ein Wochenende
    f&auml;llt (Z.B. $wday == 0 [Sonntag] oder $wday == 6 [Samstag]), und 0
    f&uuml;r die anderen Wochentage. Wenn man das global <a
    href="#holiday2we">holida2we</a> Attribut setzt, dann ist $we ebenfalls 1
    bei Urlaubstagen.<br>

    <ul>
      define n2 notify piri:on { if($hour &gt; 18 || $hour &lt; 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>
    <br>

  </li><li>
    Die follgendenHilsfunktionen sind in der Datei 99_Util.pm definiert (wird 
    wie jede mit 99 beginnende Datei automatisch geladen):
    <ul>
      <li>min(a,b), max(a,b)</li>
      <li>time_str2num("YYYY-MM-DD HH:MM:SS") gibt einen numerischen Wert
        zur&uuml;ck, der die Berechnung von Zeitdifferenzen vereinfacht</li>
      <li>abstime2rel("HH:MM:SS") wandelt absolute in relative Zeitangaben um
        </li>
    </ul>
    </li>

  <li>
    Um auf die Ger&auml;testati/Attribute zuzugreifen benutzen Sie bitte die 
    folgenden Funktionen:
    <br>
    <ul>
      <li>Value(&lt;devicename&gt;)<br>
        gibt den Status eines Ger&auml;tes zur&uuml;ck (entsprechend dem
        Ausdruck in Klammern, den Sie beim List-Befehl sehen).
        </li><br>

      <li>OldValue(&lt;devicename&gt;)</li>
      <li>OldTimestamp(&lt;devicename&gt;)<br>
        gibt den vorherigen Wert/Zeitstempel des Ger&auml;tes zur&uuml;ck.
        </li><br>

      <li>
        ReadingsVal(&lt;devicename&gt;,&lt;reading&gt;,&lt;defaultvalue&gt;)<br>
        Gibt den Inhalt der &quot;readings&quot; zur&uuml;ck (den Inhalt der in
        dem &quot;Readings&quot;-Abschnitt von "list device" angezeigt wird)
        </li><br>
      <li>
        ReadingsNum(&lt;devicename&gt;,&lt;reading&gt;,&lt;defaultvalue&gt;)<br>
        Wie ReadingsVal, l&ouml;scht aber alles, was kein Zahl ist, um den Wert
        bei Berechnungen verwenden zu k&ouml;nnen.
        </li><br>
      <li>
        AttrVal(&lt;devicename&gt;,&lt;attribute&gt;,&lt;defaultvalue&gt;)<br>
        Gibt die gesetzteb Attribute des Ger&auml;tes zur&uuml;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>
        InternalVal(&lt;devicename&gt;,&lt;reading&gt;,&lt;defaultvalue&gt;)<br>
        Gibt den Inhalt der &quot;internal&quot; zur&uuml;ck (den Inhalt der in
        dem &quot;Internals&quot;-Abschnitt von "list device" angezeigt wird)
        </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 &quot;offset&quot; wird in Sekunden angegeben und das Format
    f&uuml;r min/max ist "HH:MM" oderr "HH:MM:SS".  isday gibt 1 zur&uuml;ck,
    wenn die Sonne sichtbar ist und ansonsten den Wert 0.  </li>

  <br>
  <br>
<!-- perl end - diese Zeile nicht entfernen! -->

<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&auml;rt. Lesen Sie bitte auch <a
    href="http://fhemwiki.de/wiki/Creating_Plots"> diesen</a> fhemwiki Eintrag
    zur Erstellung von Logdateien.<br> Im folgenden ist eine minimale .gplot
    Definition (g&uuml;ltig nur bei Plotmode SVG):<br>

<pre>  set terminal size &lt;SIZE&gt;
  #FileLog 4:::
  plot title 'Temperature' with lines
</pre>
    Die .gnuplot Datei besteht aus 3 Teilen:
<ul>
  <li>set Befehle<br>
    Folgende &quot;sets&quot; werden erkannt:
    <ul>
    <li>terminal, nur die Gr&ouml;&szligenparameter.<br>
        Dieser ist in der Regel auf &lt;SIZE&gt; 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 &lt;TL&gt; welcher durch das Weblink <a
        href="#title">title</a>-Attribut, oder durch &lt;Lx&gt;, 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&uuml;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&auml;ge<br>
      Jede Line des Plots muss eine dazugeh&ouml;rige #FileLog
      Zeile haben. Zur Syntax lesen Sie bitte den Abschnitt &quot;column_spec
      paragraph&quot; 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&auml;ge<br>
      bestehen immer aus einem Plotbefehl und aus durch Kommata getrenne
      Argumentbl&ouml;cke. Jeder Argumentblock repr&auml;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.&nbsp; 
        </li>

      <li>title<br>
        Beschriftung der Linie. Wenn man auf diesen Titel klickt, dann
        &auml;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&uuml;gen (die
        existierende Skalierung des Plots wird dabei nicht ver&auml;ndert, nur
        die eingef&uuml;gte Linie wird skaliert/angepasst.  Andere Linien des
        Plots werden zeitweise nicht angezeigt.</li>
      <li>with &lt;linetype&gt;<br>
        spezifiziert die Art der Linie. Folgende Linienarten k&ouml;nnen
        verwendet werden: points, steps, fsteps, histeps and lines. Nicht
        bekannte Linienarten werden als Typ &quot;lines&quot; dargestellt.
        SVG Spezial: cubic und quadratic werden zu den SVG path Typen C und Q
        gewandelt.
        </li>

      <li>ls &lt;linestyle&gt;<br>
        Der Linienstil stellt die erste Linie als l0 dar,&nbsp; 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 &quot;fill&quot; enth&auml;lt, dann haben Plots
        des Linientyps "lines" ein zus&auml;tzliches Start- und Endsegment
        f&uuml;r eine korrekte Darstellung.<br> Bitte lesen sie die SVG
        Spezifikationen, um Details &uuml;ber diese css-Datei zu erfahren.
        Notiz: Wenn Sie dieses Attribut einsetzen m&ouml;chten, m&uuml;ssen Sie
        es f&uuml;r alle Linien (Attributblocks) im Plotbefehl spezifizieren.
        </li>

      <li>lw &lt;linewidth&gt;<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></body></html>