2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-08 13:24:56 +00:00
fhem-mirror/fhem/docs/commandref_DE.html
c-herrmann 65b5b47562 UNIRoll added
git-svn-id: https://svn.fhem.de/fhem/trunk@5375 2b470e98-0d58-463d-a4d8-8e2adae1ed80
2014-03-30 13:43:31 +00:00

11873 lines
502 KiB
HTML
Raw Blame History

<!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>
<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 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>
<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="#createlog">createlog</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="#include">include</a> &nbsp;
<a href="#inform">inform</a> &nbsp;
<a href="#JsonList">JsonList</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="#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>
<a href='#ALL3076'>ALL3076</a> &nbsp;
<a href='#ALL4000T'>ALL4000T</a> &nbsp;
<a href='#ALL4027'>ALL4027</a> &nbsp;
<a href='#BBB_BMP180'>BBB_BMP180</a> &nbsp;
<a href='#BS'>BS</a> &nbsp;
<a href='#CM11'>CM11</a> &nbsp;
<a href='#CO20'>CO20</a> &nbsp;
<a href='#CUL'>CUL</a> &nbsp;
<a href='#CUL_EM'>CUL_EM</a> &nbsp;
<a href='#CUL_FHTTK'>CUL_FHTTK</a> &nbsp;
<a href='#CUL_HM'>CUL_HM</a> &nbsp;
<a href='#CUL_HOERMANN'>CUL_HOERMANN</a> &nbsp;
<a href='#CUL_IR'>CUL_IR</a> &nbsp;
<a href='#CUL_MAX'>CUL_MAX</a> &nbsp;
<a href='#CUL_RFR'>CUL_RFR</a> &nbsp;
<a href='#CUL_TX'>CUL_TX</a> &nbsp;
<a href='#CUL_WS'>CUL_WS</a> &nbsp;
<a href='#ECMD'>ECMD</a> &nbsp;
<a href='#ECMDDevice'>ECMDDevice</a> &nbsp;
<a href='#EGPM'>EGPM</a> &nbsp;
<a href='#EGPM2LAN'>EGPM2LAN</a> &nbsp;
<a href='#EIB'>EIB</a> &nbsp;
<a href='#EM'>EM</a> &nbsp;
<a href='#EMEM'>EMEM</a> &nbsp;
<a href='#EMGZ'>EMGZ</a> &nbsp;
<a href='#EMWZ'>EMWZ</a> &nbsp;
<a href='#ENECSYSGW'>ENECSYSGW</a> &nbsp;
<a href='#ENECSYSINV'>ENECSYSINV</a> &nbsp;
<a href='#ENIGMA2'>ENIGMA2</a> &nbsp;
<a href='#ESA2000'>ESA2000</a> &nbsp;
<a href='#EnOcean'>EnOcean</a> &nbsp;
<a href='#FBAHA'>FBAHA</a> &nbsp;
<a href='#FBDECT'>FBDECT</a> &nbsp;
<a href='#FHT'>FHT</a> &nbsp;
<a href='#FHT8V'>FHT8V</a> &nbsp;
<a href='#FHZ'>FHZ</a> &nbsp;
<a href='#FRM'>FRM</a> &nbsp;
<a href='#FRM_AD'>FRM_AD</a> &nbsp;
<a href='#FRM_I2C'>FRM_I2C</a> &nbsp;
<a href='#FRM_IN'>FRM_IN</a> &nbsp;
<a href='#FRM_LCD'>FRM_LCD</a> &nbsp;
<a href='#FRM_OUT'>FRM_OUT</a> &nbsp;
<a href='#FRM_PWM'>FRM_PWM</a> &nbsp;
<a href='#FRM_RGB'>FRM_RGB</a> &nbsp;
<a href='#FRM_ROTENC'>FRM_ROTENC</a> &nbsp;
<a href='#FRM_SERVO'>FRM_SERVO</a> &nbsp;
<a href='#FRM_STEPPER'>FRM_STEPPER</a> &nbsp;
<a href='#FS20'>FS20</a> &nbsp;
<a href='#GDS'>GDS</a> &nbsp;
<a href='#GEOFANCY'>GEOFANCY</a> &nbsp;
<a href='#GUEST'>GUEST</a> &nbsp;
<a href='#HMLAN'>HMLAN</a> &nbsp;
<a href='#HMS'>HMS</a> &nbsp;
<a href='#HTTPMOD'>HTTPMOD</a> &nbsp;
<a href='#HTTPSRV'>HTTPSRV</a> &nbsp;
<a href='#HUEBridge'>HUEBridge</a> &nbsp;
<a href='#HUEDevice'>HUEDevice</a> &nbsp;
<a href='#I2C_BMP180'>I2C_BMP180</a> &nbsp;
<a href='#I2C_DS1307'>I2C_DS1307</a> &nbsp;
<a href='#I2C_LCD'>I2C_LCD</a> &nbsp;
<a href='#I2C_PCA9532'>I2C_PCA9532</a> &nbsp;
<a href='#I2C_PCF8574'>I2C_PCF8574</a> &nbsp;
<a href='#I2C_SHT21'>I2C_SHT21</a> &nbsp;
<a href='#IF'>IF</a> &nbsp;
<a href='#IPCAM'>IPCAM</a> &nbsp;
<a href='#IPWE'>IPWE</a> &nbsp;
<a href='#IT'>IT</a> &nbsp;
<a href='#Itach_Relay'>Itach_Relay</a> &nbsp;
<a href='#JSONMETER'>JSONMETER</a> &nbsp;
<a href='#JeeLink'>JeeLink</a> &nbsp;
<a href='#JsonList2'>JsonList2</a> &nbsp;
<a href='#KM271'>KM271</a> &nbsp;
<a href='#KS300'>KS300</a> &nbsp;
<a href='#LGTV'>LGTV</a> &nbsp;
<a href='#LINDY_HDMI_SWITCH'>LINDY_HDMI_SWITCH</a> &nbsp;
<a href='#LIRC'>LIRC</a> &nbsp;
<a href='#LISTENLIVE'>LISTENLIVE</a> &nbsp;
<a href='#LUXTRONIK2'>LUXTRONIK2</a> &nbsp;
<a href='#LaCrosse'>LaCrosse</a> &nbsp;
<a href='#M232'>M232</a> &nbsp;
<a href='#M232Counter'>M232Counter</a> &nbsp;
<a href='#M232Voltage'>M232Voltage</a> &nbsp;
<a href='#MAX'>MAX</a> &nbsp;
<a href='#MAXLAN'>MAXLAN</a> &nbsp;
<a href='#MPD'>MPD</a> &nbsp;
<a href='#MSG'>MSG</a> &nbsp;
<a href='#MSGFile'>MSGFile</a> &nbsp;
<a href='#MSGMail'>MSGMail</a> &nbsp;
<a href='#NetIO230B'>NetIO230B</a> &nbsp;
<a href='#ONKYO_AVR'>ONKYO_AVR</a> &nbsp;
<a href='#OREGON'>OREGON</a> &nbsp;
<a href='#OWAD'>OWAD</a> &nbsp;
<a href='#OWCOUNT'>OWCOUNT</a> &nbsp;
<a href='#OWDevice'>OWDevice</a> &nbsp;
<a href='#OWFS'>OWFS</a> &nbsp;
<a href='#OWID'>OWID</a> &nbsp;
<a href='#OWLCD'>OWLCD</a> &nbsp;
<a href='#OWMULTI'>OWMULTI</a> &nbsp;
<a href='#OWSWITCH'>OWSWITCH</a> &nbsp;
<a href='#OWServer'>OWServer</a> &nbsp;
<a href='#OWTEMP'>OWTEMP</a> &nbsp;
<a href='#OWTHERM'>OWTHERM</a> &nbsp;
<a href='#OWX'>OWX</a> &nbsp;
<a href='#PCA301'>PCA301</a> &nbsp;
<a href='#PHTV'>PHTV</a> &nbsp;
<a href='#PID20'>PID20</a> &nbsp;
<a href='#PIFACE'>PIFACE</a> &nbsp;
<a href='#POKEYS'>POKEYS</a> &nbsp;
<a href='#Pushover'>Pushover</a> &nbsp;
<a href='#RESIDENTS'>RESIDENTS</a> &nbsp;
<a href='#RFXCOM'>RFXCOM</a> &nbsp;
<a href='#RFXMETER'>RFXMETER</a> &nbsp;
<a href='#RFXX10REC'>RFXX10REC</a> &nbsp;
<a href='#ROOMMATE'>ROOMMATE</a> &nbsp;
<a href='#RPII2C'>RPII2C</a> &nbsp;
<a href='#RPI_GPIO'>RPI_GPIO</a> &nbsp;
<a href='#Revolt'>Revolt</a> &nbsp;
<a href='#SCIVT'>SCIVT</a> &nbsp;
<a href='#SISPM'>SISPM</a> &nbsp;
<a href='#SIS_PMS'>SIS_PMS</a> &nbsp;
<a href='#SML'>SML</a> &nbsp;
<a href='#STACKABLE_CC'>STACKABLE_CC</a> &nbsp;
<a href='#STV'>STV</a> &nbsp;
<a href='#SWAP'>SWAP</a> &nbsp;
<a href='#SWAP_0000002200000003'>SWAP_0000002200000003</a> &nbsp;
<a href='#SYSMON'>SYSMON</a> &nbsp;
<a href='#TCM'>TCM</a> &nbsp;
<a href='#THZ'>THZ</a> &nbsp;
<a href='#TRX'>TRX</a> &nbsp;
<a href='#TRX_ELSE'>TRX_ELSE</a> &nbsp;
<a href='#TRX_LIGHT'>TRX_LIGHT</a> &nbsp;
<a href='#TRX_SECURITY'>TRX_SECURITY</a> &nbsp;
<a href='#TRX_WEATHER'>TRX_WEATHER</a> &nbsp;
<a href='#TUL'>TUL</a> &nbsp;
<a href='#TellStick'>TellStick</a> &nbsp;
<a href='#Text2Speech'>Text2Speech</a> &nbsp;
<a href='#UNIRoll'>UNIRoll</a> &nbsp;
<a href='#USBWX'>USBWX</a> &nbsp;
<a href='#USF1000'>USF1000</a> &nbsp;
<a href='#Utils'>Utils</a> &nbsp;
<a href='#VIERA'>VIERA</a> &nbsp;
<a href='#VantagePro2'>VantagePro2</a> &nbsp;
<a href='#WEBCOUNT'>WEBCOUNT</a> &nbsp;
<a href='#WEBIO'>WEBIO</a> &nbsp;
<a href='#WEBIO_12DIGITAL'>WEBIO_12DIGITAL</a> &nbsp;
<a href='#WEBTHERM'>WEBTHERM</a> &nbsp;
<a href='#WS2000'>WS2000</a> &nbsp;
<a href='#WS300'>WS300</a> &nbsp;
<a href='#WS3600'>WS3600</a> &nbsp;
<a href='#WWO'>WWO</a> &nbsp;
<a href='#Weather'>Weather</a> &nbsp;
<a href='#X10'>X10</a> &nbsp;
<a href='#XBMC'>XBMC</a> &nbsp;
<a href='#YAMAHA_AVR'>YAMAHA_AVR</a> &nbsp;
<a href='#YAMAHA_BD'>YAMAHA_BD</a> &nbsp;
<a href='#ZWDongle'>ZWDongle</a> &nbsp;
<a href='#ZWave'>ZWave</a> &nbsp;
<a href='#cloneDummy'>cloneDummy</a> &nbsp;
<a href='#configdb'>configdb</a> &nbsp;
<a href='#geodata'>geodata</a> &nbsp;
<a href='#netatmo'>netatmo</a> &nbsp;
<a href='#openweathermap'>openweathermap</a> &nbsp;
<a href='#panStamp'>panStamp</a> &nbsp;
<a href='#pilight'>pilight</a> &nbsp;
<a href='#withings'>withings</a> &nbsp;
<a href='#xxLG7000'>xxLG7000</a> &nbsp;
</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="#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="#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="#LightScene">LightScene</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="#readingsProxy">readingsProxy</a> &nbsp;
<a href="#remotecontrol">remotecontrol</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="#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="#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>
<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>
<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>
<a name="help"></a>
<h3>?, help</h3>
<ul>
<code>?</code><br>
<code>help</code><br>
<br>
Sie erhalten eine Liste aller Befehle mit einer Kurzbeschreibung jedes
Befehls.
</ul>
<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>
<p>Attribute, die f&uuml;r
alle Ger&auml;te anwendbar sind: </p>
<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="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>
<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.</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-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>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: 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><br>
</ul>
<br>
Ger&auml;tespezifische Attribute sind in der Beschreibung zum jeweiligen
Ger&auml;t aufgef&uuml;hrt.
<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>
Geben Sie an der Befehlszeile "define &lt;name&gt; ?" ein, um eine Liste der
verf&uuml;gbaren &quot;types&quot; zu erhalten.<br>
Nach der Definition, wird das globale Ereignis "DEFINED" genriert. Genauere
Beschreibung erhalten Sie im Abschnitt &quot;notify&quot;.<br>
<br><br>
Jedes Ger&auml;t besitzt unterschiedliche hinzuf&uuml;gbare Argumente per Definition,
lesen Sie sich bitte die zu dem jeweiligen Ger&auml;t geh&ouml;renden Abschnitte durch.<br>
<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>
<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.
<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="http://fhem.de/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>
</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>
<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="updateInBackground"></a>
<li>updateInBackground<br>
wenn dieses Attribut gesetzt ist, wird das update Befehl in einem
separaten Prozess ausgef&uuml;hrt, und alle Meldungen werden per Event
&uuml;bermittelt. In der telnet Sitzung wird inform, in FHEMWEB wird
das Event Monitor aktiviert.
</li><br>
<a name="backup_before_update"></a>
<li>backup_before_update<br>
Wenn dieses Attribut auf &quot;0&quot; gesetzt wurde, erstellt FHEM keine
Sicherheitskopie Ihrer Installation bei Verwendung des Befehls <a href="#backup">backup</a>.
Die Standardeinstellung ist die Erstellung einer Sicherheitskopie vor einem
Update.<br>
Hinweis: Setzen Sie dieses Attribut nur wenn Sie sich sicher sind!<br>
Das Attribut wird vom <a href="#update">update</a> Befehl benutzt.<br>
Beispiel:<br>
<ul>
attr global backup_before_update 0
</ul>
</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 backupsymlinks 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="exclude_from_update"></a>
<li>exclude_from_update<br>
Enth&auml;lt eine Liste durch Leerzeichen getrennter Dateien welche nicht im
Update ber&uuml;cksichtigt werden. Dieses Attribut wird vom <a href="#update">update</a>
Befehl benutzt.<br>
Beispiel:<br>
<ul>
attr global exclude_from_update 21_OWTEMP.pm temp4hum4.gplot FS20.on.png FS20.off.png
</ul>
</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 the server won't background itself.<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;ßungsbildschirm 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
</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="updatebranch"></a>
<li>updatebranch<br>
Dieses Attribut wird mittels der Datei FhemUtils/release.pm gesetzt die
im &quot;modpath&quot;-Verzeichnis enthalten ist. Z.B, wenn eine stabile Version von
FHEM (ab Version 5.3 aufw&auml;rts) &uuml;ber eine direkte Download-Verbindung vom
Archiv der FHEM-Webseite installiert wurde, then wird automatisch der Zweig
der Aktualisierung auf "stable"eingestellt.
In dieser Form der Aktualisierung werden nur behobene Fehler, relevante
Sicherheitsl&uuml;cken oder neue stabile Versionen aktualisiert.<br>
Mittels dem Befehl "update development &lt;filename&gt;" benutzen,
k&ouml;nnen Dateien oder Pakete jederzei direkt aus dem Entwicklungszweig
(z.B. mittels "update development &lt;package&gt;") installiert werden.<br>
Wenn Sie anstelle von Entwicklungsversionen eine stabile Version
installieren wollen, so k&ouml;nnen Sie dies durch Angabe des Attributes "updatebranch DEVELOPMENT"
erzwingen.
Bei der Installation von FHEM sollten Sie generell die
Entwicklungsversion installieren. Dieses Attribut muss nicht gesetzt werden.
Benutzen Sie dagegen "update development force"
um alle Dateien, einschliesslich der Datei release.pm (enth&auml;lt die
aktuellen Informationen)
zu aktualisieren.
</li><br>
<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 angewendet werden k&ouml;nnen.
</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>
</ul>
</ul>
<a name="ALL3076"></a>
<h3>ALL3076</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#ALL3076'>ALL3076</a><br/>
</ul>
<a name="ALL4000T"></a>
<h3>ALL4000T</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#ALL4000T'>ALL4000T</a><br/>
</ul>
<a name="ALL4027"></a>
<h3>ALL4027</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#ALL4027'>ALL4027</a><br/>
</ul>
<a name="BBB_BMP180"></a>
<h3>BBB_BMP180</h3>
<ul>
Sorry, keine deutsche Dokumentation vorhanden.<br/><br/>
Die englische Doku gibt es hier: <a href='http://fhem.de/commandref.html#BBB_BMP180'>BBB_BMP180</a><br/>
</ul>
<a name="BS"></a>
<h3>BS</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#BS'>BS</a><br/>
</ul>
<a name="CM11"></a>
<h3>CM11</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#CM11'>CM11</a><br/>
</ul>
<a name="CO20"></a>
<h3>CO20</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#CO20'>CO20</a><br/>
</ul>
<a name="CUL"></a>
<h3>CUL</h3>
<ul>
<table>
<tr><td>
Der CUL/CUN(O) ist eine Familie von Funkempf&auml;ngern, die von der Firma
<a href="http://www.busware.de">Busware</a> verkauft wird.
Mit der OpenSource Firmware
<a href="http://culfw.de/culfw.html">culfw</a> k&ouml;nnen sie verschiedene
868 MHz Funkprotokolle empfangen bzw. senden (FS20/FHT/S300/EM/HMS/MAX!).
Man kann diese Ger&auml;te auch zur Reichweitenverl&auml;ngerung, siehe
<a href="#CUL_RFR">CUL_RFR</a> einsetzen.
<br> <br>
Einige Protokolle (FS20, FHT und KS300) werden von diesem Modul in das FHZ
Format konvertiert, daher kann dasselbe logische Ger&auml;t verwendet werden,
egal ob das Funktelegramm von einem CUL oder einem FHZ Ger&auml;t empfangen
wird.<br>
Andere Protokolle (S300/EM) ben&ouml;tigen ihre eigenen Module. S300
Ger&auml;te werden vom Modul CUL_WS verarbeitet, wenn das Signal von einem
CUL empfangen wurde, &auml;hnliches gilt f&uuml;r EMWZ/EMGZ/EMEM: diese
werden vom CUL_EM Modul verarbeitet.<br><br>
Es ist m&ouml;glich mehr als ein Ger&auml;t zu verwenden, um einen besseren
Empfang zu erhalten, FHEM filtert doppelte Funktelegramme aus.<br><br>
Bemerkung: Dieses Modul ben&ouml;tigt unter Umst&auml;nden das
<code>Device::SerialPort</code> bzw. <code>Win32::SerialPort</code> Modul,
wenn Sie das Ger&auml;t &uuml;ber USB anschlie&szlig;en und das
Betriebssystem un&uuml;bliche Parameter f&uuml;r serielle Schnittstellen
setzt.<br><br>
</td><td>
<img src="ccc.jpg"/>
</td></tr>
</table>
<a name="CULdefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; CUL &lt;device&gt; &lt;FHTID&gt;</code> <br>
<br>
Ger&auml;te, die an USB angeschlossen sind (CUL/CUN):<br>
<ul>
&lt;device&gt; gibt die serielle Schnittstelle an, mit der der CUL
kommuniziert. Der Name der seriellen Schnittstelle h&auml;ngt von der
gew&auml;hlten Distribution und USB-Treiber ab, unter Linux ist dies das
Kernel Modul cdc_acm und &uuml;blicherweise wird die Schnittstelle
/dev/ttyACM0 genannt. Wenn die Linux Distribution &uuml;ber kein Kernel
Modul cdc_acm verf&uuml;gt, dann kann die Schnittstelle &uuml;ber
usbserial mit dem folgenden Befehl erzeugt werden:
<ul><code>
modprobe usbserial vendor=0x03eb product=0x204b
</code></ul>
In diesem Fall ist diese Schnittstelle dann wahrscheinlich
/dev/ttyUSB0.<br><br>
Wenn der Name der Schnittstelle ein @ enth&auml;lt, kann nachfolgend die
verwendete Baudrate angegeben werden, z.B.: /dev/ttyACM0@38400.<br><br>
Wenn die Baudrate mit "directio" angegeben wird (z.B.:
/dev/ttyACM0@directio), wird das Perl Modul
<code>Device::SerialPort</code> nicht ben&ouml;tigt und FHEM &ouml;ffnet
die Schnittstelle mit einfachem Dateizugriff. Dies sollte dann
funktionieren, wenn das Betriebssystem vern&uuml;nftige Standardwerte
f&uuml;r die serielle Schnittstelle verwendet, wie z.B. einige Linux
Distributionen oder OSX.<br><br>
</ul>
Ger&auml;te, die mit dem Netzwerk verbunden sind (CUN(O)):<br>
<ul>
&lt;device&gt; gibt die Hostadresse:Port des Ger&auml;tes an, z.B.
192.168.0.244:2323
</ul>
<br>
Wenn das Ger&auml;t mit none bezeichnet wird, wird keine Schnittstelle
ge&ouml;ffnet und man kann ohne angeschlossene Hardware
experimentieren.<br>
Die FHTID ist eine 4-stellige hexadezimale Zahl und wird verwendet, wenn
der CUL FHT Telegramme sendet bzw. Daten anfragt. Diese sollte als 0000
gew&auml;hlt werden, wenn man FHT80b Anfragen durch den CUL vermeiden will.
</ul>
<br>
<a name="CULset"></a>
<b>Set </b>
<ul>
<li>raw<br>
Sendet einen CUL Firmware Befehl. Siehe auch
<a href="http://culfw.de/commandref.html">hier</a> f&uuml;r
n&auml;here Erl&auml;uterungen der CUL Befehle.
</li><br>
<li>freq / bWidth / rAmpl / sens<br>
Nur in der Betriebsart <a href="#rfmode">SlowRF</a>.<br> Bestimmt die
CUL Frequenz / Bandbreite / Empf&auml;nger Amplitude /
Empfindlichkeit<br>
Bitte mit Vorsicht verwenden, da es die verwendete Hardware
zerst&ouml;ren kann bzw. es zu illegalen Funkzust&auml;nden kommen
kann. <br> Bemerkung: Die Parameter f&uuml;r die RFR &Uuml;bermittlung
werden hierdurch nicht beeinflu&szlig;t.<br>
<ul>
<li>freq bestimmt sowohl die Empfangs- als auch die Sendefrequenz.<br>
Bemerkung: Auch wenn der CC1101 zwischen den Frequenzen 315 und 915
MHz eingestellt werden kann, ist die Antennenanbindung bzw. die Antenne
des CUL exakt auf eine Frequenz eingestellt.
Standard ist 868.3 MHz (bzw. 433 MHz).</li>
<li>bWidth kann zwischen 58 kHz und 812 kHz variiert werden.
Gro&szlig;e Werte sind empfindlicher gegen Interferencen, aber
machen es m&ouml;glich, nicht genau kalbrierte Signale zu
empfangen. Die Einstellung beeinflusst ebenso die &Uuml;bertragung.
Standardwert ist 325 kHz.</li>
<li>rAmpl ist die Verst&auml;rkung des Empf&auml;ngers mit Werten
zwischen 24 and 42 dB. Gr&ouml;&szlig;ere Werte erlauben den
Empfang von schwachen Signalen. Standardwert ist 42.</li>
<li>sens ist die Entscheidungsgrenze zwischen "on" und "off"
Zust&auml;nden und kann 4, 8, 12 oder 16 dB sein. Kleinere Werte
erlauben den Empfang von undeutlicheren Signalen. Standard ist 4
dB.</li>
</ul>
</li><br>
<a name="hmPairForSec"></a>
<li>hmPairForSec<br>
Nur in der Betriebsart <a href="#rfmode">HomeMatic</a>.<br> Versetzt den
CUL f&uuml;r die angegebene Zeit in Sekunden in den Anlern-Modus. Jedes
HM Ger&auml;t, das sich im Anlern-Modus befindet, wird an FHEM
angelernt. </li><br>
<a name="hmPairSerial"></a>
<li>hmPairSerial<br>
Nur in der Betriebsart <a href="#rfmode">HomeMatic</a>.<br>
Versucht, das angegebene Ger&auml;t anzulernen (zu "pairen"). Der
Parameter ist eine 10-stellige Zeichenfolge, die normalerweise mit
Buchstaben beginnt und mit Ziffern endet; diese sind auf der
R&uuml;ckseite der Ger&auml;te aufgedruckt. Wenn das Ger&auml;t ein
Empf&auml;nger ist, ist es nicht notwendig, das angegebene Ger&auml;t in
den Anlern-Modus zu versetzen. </li><br>
<a name="hmPairForSec"></a>
<li>led<br>
Schaltet die LED des CUL: aus (00), an (01) oder blinkend (02).
</li><br>
</ul>
<a name="CULget"></a>
<b>Get</b>
<ul>
<li>version<br>
gibt die Version der CUL Firmware zur&uuml;ck
</li><br>
<li>uptime<br>
gibt die Betriebszeit des CULs zur&uuml;ck (Zeit seit dem letzten Reset
des CULs) </li><br>
<li>raw<br>
Sendet einen CUL Firmware Befehl und wartet auf eine R&uuml;ckgabe des
CULs. Siehe auch README der Firmware f&uuml;r n&auml;here
Erl&auml;uterungen zu den CUL Befehlen. </li><br>
<li>fhtbuf<br>
Der CUL hat einen Puffer f&uuml;r Nachrichten f&uuml;r FHT. Wenn der
Puffer voll ist, werden neu empfangene Telegramme ignoriert und eine
"EOB" Meldung wird in die FHEM Logdatei geschrieben.
<code>fhtbuf</code> gibt den freien Speicher dieses Puffers (in hex)
zur&uuml;ck, ein leerer Puffer im CUL V2 hat 74 Byte, im CUL V3/CUN(O)
hat 200 Byte. Eine Telegramm ben&ouml;tigt 3 + 2x(Anzahl der FHT
Befehle) Byte, dies ist ein Grund, warum man mehrere FHT Befehle mit
einem <a href="#set">set</a> senden sollte. Ein weiterer Grund ist,
dass diese FHT Befehle in einem "Paket" zum FHT Ger&auml;t gesendet werden.
</li> <br>
<li>ccconf<br>
Liest einige CUL Register des CC1101 (Sende- und Empf&auml;ngerchips)
aus (Frequenz, Bandbreite, etc.) und stellt diese in lesbarer Form dar.
</li><br>
<li>cmds<br>
In abh&auml;gigkeit der installierten Firmware hat der CUL/CUN(O)
unterschiedliche Befehlss&auml;tze. N&auml;here Informationen &uuml;ber
die Befehle bzw. deren Interpretation siehe README Datei der
verwendeten CUL Firmware. Siehe auch Anmerkungen beim raw Befehl.
</li><br>
<li>credit10ms<br>
Der Funkraum darf f&uuml;r eine Dauer von credit10ms*10 ms belegt
werden, bevor die gesetzliche 1% Grenze erreicht ist und eine
LOVF Meldung ausgegeben wird. </li><br> </ul>
<a name="CULattr"></a>
<b>Attribute</b>
<ul>
<li><a href="#do_not_notify">do_not_notify</a></li>
<li><a href="#attrdummy">dummy</a></li>
<li><a href="#showtime">showtime</a></li>
<li><a href="#model">model</a> (CUL,CUN)</li>
<li><a name="sendpool">sendpool</a><br>
Wenn mehr als ein CUL verwendet wird, um einen gr&ouml;&szlig;eren
Bereich abzudecken, k&ouml;nnen diese sich gegenseitig
beeinflussen. Dieses Ph&auml;nomen wird auch Palm-Beach-Resort Effekt
genannt. Wenn man diese zu einen gemeinsamen Sende"pool"
zusammenschlie&szlig;t, wird das Senden der einzelnen Telegramme
seriell (d.h. hintereinander) durchgef&uuml;hrt.
Wenn z.B. drei CUN's zur
Verf&uuml;gung stehen, werden folgende Attribute gesetzt:<br>
<code>attr CUN1 sendpool CUN1,CUN2,CUN3<br>
attr CUN2 sendpool CUN1,CUN2,CUN3<br>
attr CUN3 sendpool CUN1,CUN2,CUN3</code><br>
</li><br>
<li><a name="addvaltrigger">addvaltrigger</a><br>
Generiert Trigger f&uuml;r zus&auml;tzliche Werte. Momentan sind dies
RSSI und RAWMSG f&uuml;r die CUL Familie und RAWMSG f&uuml;r FHZ.
</li><br>
<li><a name="rfmode">rfmode</a><br>
Konfiguriert den RF Transceiver des CULs (CC1101). Verf&uuml;gbare
Argumente sind:
<ul>
<li>SlowRF<br>
F&uuml;r die Kommunikation mit FS20/FHT/HMS/EM1010/S300/Hoermann
Ger&auml;ten @1 kHz Datenrate (Standardeinstellung).</li>
<li>HomeMatic<br>
F&uuml;r die Kommunikation mit HomeMatic Ger&auml;ten @10 kHz
Datenrate.</li>
<li>MAX<br>
F&uuml;r die Kommunikation mit MAX! Ger&auml;ten @10 kHz
Datenrate.</li>
</ul>
</li><br>
<li><a name="hmId">hmId</a><br>
Setzt die HomeMatic ID des Ger&auml;tes. Wenn dieses Attribut fehlt,
wird die ID zu F1&lt;FHTID&gt; gesetzt. Bemerkung 1: Nach dem Setzen
bzw. Ver&auml;ndern dieses Attributes m&uuml;ssen alle HomeMatic
Ger&auml;te neu angelernt werden. Bemerkung 2: Der Wert <b>muss</b>
eine 6-stellige Hexadezimalzahl sein, 000000 ist ung&uuml;ltig. FHEM
&uuml;berpr&uuml;ft nicht, ob die ID korrekt ist, im Zweifelsfall
funktioniert die Kommunikation nicht. </li><br>
<li><a name="hmProtocolEvents">hmProtocolEvents</a><br>
Generiert Ereignisse f&uuml;r HomeMatic Telegramme. Diese werden
normalerweise f&uuml;r die Fehlersuche verwendet, z.B. durch Aktivieren
von <code>inform timer</code> in einer telnet Sitzung bzw. im
<code>Event Monitor</code> Fenster im FHEMWEB Frontend.<br>
Beispiel:
<ul>
<code>
2012-05-17 09:44:22.515 CUL CULHM RCV L:0B N:81 CMD:A258 SRC:...... DST:...... 0000 (TYPE=88,WAKEMEUP,BIDI,RPTEN)
</code>
</ul>
</li><br>
</ul>
<br>
</ul>
<a name="CUL_EM"></a>
<h3>CUL_EM</h3>
<ul>
Das Modul CUL_EM wertet von einem CUL empfange Botschaften des Typs EM aus,
dies sind aktuell Botschaften von EMEM, EMWZ bzw. EMGZ Ger&auml;ten.
<br><br>
<a name="CUL_EMdefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; CUL_EM &lt;code&gt; [corr1 corr2
CostPerUnit BasicFeePerMonth]</code> <br>
<br>
&lt;code&gt; ist der Code, der am EM Ger&auml;t eingestellt wird. G&uuml;tige Werte sind
1 bis 12. 1-4 gilt f&uuml;r EMWZ, 5-8 f&uuml;r EMEM und 9-12 f&uuml;r EMGZ Ger&auml;te.<br><br>
<b>corr1</b> ist der Kalibrierfaktor f&uuml;r den Momentanverbrauch, <b>corr2</b>
f&uuml;r den Gesamtverbrauch.
<ul>
<li>f&uuml;r EMWZ Ger&auml;te wird die Umdrehungsgeschwindigkeit (U/kW)
des verwendeten Stromz&auml;hlers (z.B. 150) f&uuml;r corr1 und 12 mal
diesen Wert f&uuml;r corr2 verwendet</li>
<li>f&uuml;r EMEM devices ist corr1 mit 0.01 und corr2 mit 0.001 anzugeben</li>
</ul>
<br>
<b>CostPerUnit</b> und <b>BasicFeePerMonth</b> werden dazu verwendet, die
t&auml;gliche bzw. monatliche Kosten zu berechnen. Die Kosten werden in der
Logdatei einmal t&auml;glich (ohne Fixkosten) bzw. monatlich (mit Fixkosten)
generiert und angezeigt.
Die Definition sollte in etwa so aussehen:
<ul><code>
define emwz 1 75 900 0.15 12.50<br>
</code></ul>
und in der Logdatei sollten diese Zeilen erscheinen:
<ul><code>
CUM_DAY: 6.849 CUM: 60123.4 COST: 1.02<br>
CUM_MONTH: 212.319 CUM: 60123.4 COST: 44.34<br>
</code></ul>
Tipp: Das EMWZ Ger&auml;t kann so konfiguriert werden, dass es in der CUM Spalte
des STATE Wertes den aktuellen Wert des Stromz&auml;hlers anzeigt.
Hierf&uuml;r muss der aktuell am Stromz&auml;hler abgelesene Wert mit corr1 (U/kW)
multipliziert werden und der CUM Rohwert aus der aktuellen fhem Messung ('reading')
davon abgezogen werden. Dann muss dieser Wert als Basiswert des EMWZ Ger&auml;tes
(im Beispiel emwz) gesetzt werden.<br>
</ul>
<br>
<a name="CUL_EMset"></a>
<b>Set</b> <ul>N/A</ul><br>
<a name="CUL_EMget"></a>
<b>Get</b> <ul>N/A</ul><br>
<a name="CUL_EMattr"></a>
<b>Attributes</b>
<ul>
<li><a href="#ignore">ignore</a></li><br>
<li><a href="#do_not_notify">do_not_notify</a></li><br>
<li><a href="#showtime">showtime</a></li><br>
<li><a href="#model">model</a> (EMEM,EMWZ,EMGZ)</li><br>
<li><a href="#IODev">IODev</a></li><br>
<li><a href="#eventMap">eventMap</a></li><br>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
</ul>
<br>
</ul>
<a name="CUL_FHTTK"></a>
<h3>CUL_FHTTK</h3>
<ul>
Dieses Modul hantiert die empfangen Daten von FHT80 TF "Fenster-T&uuml;r-Kontakt" Sensoren, welche
normalerweise nur mit den <a href="#FHT">FHT80B</a> Geräten kommunizieren. Mit diesen Modul k&ouml;nnen
FHT80 TFs in eingeschr&auml;nkter Weise &auml;hnlich wie HMS TFK Sensoren benutzt werden (weitere
Informationen sind unter <a href="http://fhz4linux.info/tiki-index.php?page=FHT+protocol">Wiki</a> zu lesen).
Der name des FHEM Moduls wurde so gewählt, weil a) nur der CUL die Daten empfangen kann und b) "TF" normalerweise
Temperatur- und Feuchtigkeitssensoren suggeriert. (Keine Ahnung, warum ELV diesen Sensor nicht TFK genannt hat,
wie die Sensoren von FS20 und HMS).
<br><br>
<a href="#CUL">CUL</a> device muss vorhr definiert sein.<br><br>
<a name="CUL_FHTTKdefine"></a>
<b>D</b>
<ul>
<code>define &lt;name&gt; CUL_FHTTK &lt;devicecode&gt;</code>
<br><br>
<code>&lt;devicecode&gt;</code> Ist eine sechstellige Hexadezimalzahl, welche zum Zeitpunkt der Produktion
des FHT80 TF gegeben wurde. Somit ist diese auch nicht mehr änderbar und bleibt auch nach einem Batteriewechsel
erhalten.<br>
Examples:
<ul>
<code>define TK_TEST CUL_FHTTK 965AB0</code>
</ul>
</ul>
<br>
<a name="CUL_FHTTKset"></a>
<b>Set </b>
<ul> N/A </ul>
<br>
<b>Get</b>
<ul> N/A </ul>
<br>
<a name="CUL_FHTTKattr"></a>
<b>Attributes</b>
<ul>
<li><a href="#do_not_notify">do_not_notify</a></li><br>
<li><a href="#verbose">verbose</a></li><br>
<li><a href="#model">model</a> (FHT80TF, FHT80TF-2)</li><br>
<li><a href="#showtime">showtime</a></li><br>
<li><a href="#IODev">IODev</a></li><br>
<li><a href="#ignore">ignore</a></li><br>
<li><a href="#eventMap">eventMap</a></li><br>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
</ul>
<br>
</ul>
<a name="CUL_HM"></a>
<h3>CUL_HM</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#CUL_HM'>CUL_HM</a><br/>
</ul>
<a name="CUL_HOERMANN"></a>
<h3>CUL_HOERMANN</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#CUL_HOERMANN'>CUL_HOERMANN</a><br/>
</ul>
<a name="CUL_IR"></a>
<h3>CUL_IR</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#CUL_IR'>CUL_IR</a><br/>
</ul>
<a name="CUL_MAX"></a>
<h3>CUL_MAX</h3>
<ul>
Das Modul CUL_MAX wertet von einem CUL empfangene MAX! Botschaften aus.
Es wird mit Hilfe von autocreate automatisch generiert, es muss nur sichergestellt
werden, dass der richtige rfmode gesetzt wird, z.B. <code>attr CUL0 rfmode MAX</code>.<br>
<br>
<a name="CUL_MAXdefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; CUL_MAX &lt;addr&gt;</code>
<br><br>
Definiert ein CUL_MAX Ger&auml;t des Typs &lt;type&gt; und der Adresse &lt;addr&gt.
Die Adresse darf nicht schon von einem anderen MAX! Ger&auml;t verwendet werden.
</ul>
<br>
<a name="CUL_MAXset"></a>
<b>Set</b>
<ul>
<li>pairmode<br>
Versetzt den CUL_MAX f&uuml;r 60 Sekunden in den Pairing Modus, w&auml;hrend dieser Zeit
kann das Ger&auml;t mit anderen Ger&auml;ten gepaart werden (Heizk&ouml;rperthermostate,
Eco-Taster, etc.). Auch das zu paarende Ger&auml;t muss manuell in den Pairing Modus
versetzt werden (z.B. beim Heizk&ouml;rperthermostat durch Dr&uuml;cken der "Boost"
Taste f&uuml;r 3 Sekunden).</li>
<li>fakeSC &lt;device&gt; &lt;open&gt;<br>
Sendet eine fingierte <i>ShutterContactState</i> Meldung &lt;open&gt;, dies muss 0 bzw. 1 f&uuml;r
"Fenster geschlossen" bzw. "Fenster offen" sein. Wenn das &lt;device&gt; eine Gruppen-ID
ungleich Null hat, beeinflusst diese fingierte <i>ShutterContactState</i> Meldung alle Ger&auml;te
mit dieser Gruppen-ID. Es muss sichergestellt werden, dass vorher alle Zielger&auml;te
mit <i>fakeShutterContact</i> verbunden werden.</li>
<li>fakeWT &lt;device&gt; &lt;desiredTemperature&gt; &lt;measuredTemperature&gt;<br>
Sendet eine fingierte <i>WallThermostatControl</i> Meldung (beide Parameter k&ouml;nnen
eine Nachkommastelle haben, f&uuml;r <i>desiredTemperature</i> darf die Nachkommastelle nur 0 bzw. 5 sein).
Wenn das &lt;device&gt; eine Gruppen-ID ungleich Null hat, beeinflusst diese fingierte
<i>WallThermostatControl</i> Meldung alle Ger&auml;te mit dieser Gruppen-ID.
Es muss sichergestellt werden, dass vorher alle Zielger&auml;te
mit <i>fakeWallThermostat</i> verbunden werden.</li>
</ul>
<br>
<a name="CUL_MAXget"></a>
<b>Get</b> <ul>N/A</ul><br>
<a name="CUL_MAXattr"></a>
<b>Attributes</b>
<ul>
<li><a href="#ignore">ignore</a></li><br>
<li><a href="#do_not_notify">do_not_notify</a></li><br>
<li><a href="#showtime">showtime</a></li><br>
<li><a href="#loglevel">loglevel</a></li><br>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
</ul>
<br>
<a name="CUL_MAXevents"></a>
<b>Events</b>
<ul>N/A</ul>
<br>
</ul>
<a name="CUL_RFR"></a>
<h3>CUL_RFR</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#CUL_RFR'>CUL_RFR</a><br/>
</ul>
<a name="CUL_TX"></a>
<h3>CUL_TX</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#CUL_TX'>CUL_TX</a><br/>
</ul>
<a name="CUL_WS"></a>
<h3>CUL_WS</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#CUL_WS'>CUL_WS</a><br/>
</ul>
<a name="CULflash"></a>
<h3>CULflash</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#CULflash'>CULflash</a><br/>
</ul>
<a name="Calendar"></a>
<h3>Calendar</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#Calendar'>Calendar</a><br/>
</ul>
<a name="Dashboard"></a>
<h3>Dashboard</h3>
<ul>
Erstellt eine Übersicht in der Gruppen angeordnet werden können. Dabei können die Gruppen mit Drag'n Drop frei positioniert<br>
und in mehreren Spalten angeordnet werden. Auch kann die Breite und Höhe einer Gruppe über die Mindestgröße hinaus gezogen werden. <br>
<br>
<a name="Dashboarddefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; Dashboard</code>
<br><br>
Beispiel:<br>
<ul>
<code>define anyViews Dashboard</code>
</ul><br>
<b>Bestpractice Anfängerkonfiguration</b>
<br><br>
<code>
define anyViews Dashboard<br>
attr anyViews dashboard_colcount 2<br>
attr anyViews dashboard_rowcentercolwidth 30,70<br>
attr anyViews dashboard_tab1groups &lt;Group1&gt;,&lt;Group2&gt;,&lt;Group3&gt;<br>
attr anyViews dashboard_lockstate unlock<br>
attr anyViews dashboard_showhelper 1<br>
</code>
</ul>
<br>
<a name="Dashboardset"></a>
<b>Set</b>
<ul>
N/A
</ul>
<br>
<a name="Dashboardget"></a>
<h4>Get</h4> <ul>N/A</ul><br>
<a name="Dashboardattr"></a>
<h4>Attributes</h4>
<a name="dashboard_tabcount"></a>
<li>dashboard_tabcount<br>
Gibt die Anzahl der angezeigten Tabs an.
Standard: 1
</li><br>
<a name="dashboard_activetab"></a>
<li>dashboard_activetab<br>
Gibt an welches Tab aktiviert ist. Kann manuell gesetzt werden, wird aber auch durch den Schalter "Set" auf das gerade aktive Tab gesetzt.
Standard: 1
</li><br>
<a name="dashboard_tab1name"></a>
<li>dashboard_tab1name<br>
Titel des 1. Tab.
Standard: Dashboard-Tab 1
</li><br>
<a name="dashboard_tab2name"></a>
<li>dashboard_tab2name<br>
Titel des 2. Tab.
Standard: Dashboard-Tab 2
</li><br>
<a name="dashboard_tab3name"></a>
<li>dashboard_tab3name<br>
Titel des 3. Tab.
Standard: Dashboard-Tab 3
</li><br>
<a name="dashboard_tab4name"></a>
<li>dashboard_tab4name<br>
Titel des 4. Tab.
Standard: Dashboard-Tab 4
</li><br>
<a name="dashboard_tab5name"></a>
<li>dashboard_tab5name<br>
Titel des 5. Tab.
Standard: Dashboard-Tab 5
</li><br>
<a name="dashboard_tab6name"></a>
<li>dashboard_tab6name<br>
Titel des 6. Tab.
Standard: Dashboard-Tab 6
</li><br>
<a name="dashboard_tab7name"></a>
<li>dashboard_tab7name<br>
Titel des 7. Tab.
Standard: Dashboard-Tab 7
</li><br>
<a name="dashboard_webfrontendfilter"></a>
<li>dashboard_webfrontendfilter<br>
Ist dieses Attribut nicht gesetzt, oder hat den Wert * wird das Dashboard auf allen konfigurierten FHEMWEB Instanzen angezeigt. <br>
Wird dem Attribut der Name einer FHEMWEB Instanz (z.B. WEB) zugewiesen so wird das Dashboard nur in dieser Instanz angezeigt. <br>
Es können auch mehrere Instanzen durch Komma getrennt angegeben werden, z.B. WEB,WEBtablet. Dadurch ist es möglich ein <br>
zusätzliches Dashboard zu definieren und dieses nur z.B. auf Tablet anzeigen zulassen (die natürlich eine eigenen FHEMWEB Instanz verwenden).<br>
Standard: *<br>
<br>
Es dürfen NIE zwei Dashboards in einer FHEMWEB instanz aktiv sein!
</li><br>
<a name="dashboard_tab1sorting"></a>
<li>dashboard_tab1sorting<br>
Enthält die Poistionierung jeder Gruppe im Tab 1. Der Wert wird mit der Schaltfläche "Set" geschrieben. Es wird nicht empfohlen dieses Attribut manuelle zu ändern
</li><br>
<a name="dashboard_tab2sorting"></a>
<li>dashboard_tab2sorting<br>
Enthält die Poistionierung jeder Gruppe im Tab 2. Der Wert wird mit der Schaltfläche "Set" geschrieben. Es wird nicht empfohlen dieses Attribut manuelle zu ändern
</li><br>
<a name="dashboard_tab3sorting"></a>
<li>dashboard_tab3sorting<br>
Enthält die Poistionierung jeder Gruppe im Tab 3. Der Wert wird mit der Schaltfläche "Set" geschrieben. Es wird nicht empfohlen dieses Attribut manuelle zu ändern
</li><br>
<a name="dashboard_tab4sorting"></a>
<li>dashboard_tab4sorting<br>
Enthält die Poistionierung jeder Gruppe im Tab 4. Der Wert wird mit der Schaltfläche "Set" geschrieben. Es wird nicht empfohlen dieses Attribut manuelle zu ändern
</li><br>
<a name="dashboard_tab5sorting"></a>
<li>dashboard_tab5sorting<br>
Enthält die Poistionierung jeder Gruppe im Tab 5. Der Wert wird mit der Schaltfläche "Set" geschrieben. Es wird nicht empfohlen dieses Attribut manuelle zu ändern
</li><br>
<a name="dashboard_tab65sorting"></a>
<li>dashboard_tab6sorting<br>
Enthält die Poistionierung jeder Gruppe im Tab 6. Der Wert wird mit der Schaltfläche "Set" geschrieben. Es wird nicht empfohlen dieses Attribut manuelle zu ändern
</li><br>
<a name="dashboard_tab7sorting"></a>
<li>dashboard_tab7sorting<br>
Enthält die Poistionierung jeder Gruppe im Tab 7. Der Wert wird mit der Schaltfläche "Set" geschrieben. Es wird nicht empfohlen dieses Attribut manuelle zu ändern
</li><br>
<a name="dashboard_row"></a>
<li>dashboard_row<br>
Auswahl welche Zeilen angezeigt werden sollen. top (nur Oben), center (nur Mitte), bottom (nur Unten) und den Kombinationen daraus.<br>
Standard: center
</li><br>
<a name="dashboard_width"></a>
<li>dashboard_width<br>
Zum bestimmen der Dashboardbreite. Der Wert kann in % (z.B. 80%) angegeben werden oder als absolute Breite (z.B. 1200) in Pixel.<br>
Standard: 100%
</li><br>
<a name="dashboard_rowcenterheight"></a>
<li>dashboard_rowcenterheight<br>
Höhe der mittleren Zeile, in der die Gruppen angeordnet werden. <br>
Standard: 400
</li><br>
<a name="dashboard_rowcentercolwidth"></a>
<li>dashboard_rowcentercolwidth<br>
Über dieses Attribut wird die Breite der einzelnen Spalten der mittleren Dashboardreihe festgelegt. Dabei kann je Spalte ein separater Wert hinterlegt werden.
Die Werte sind durch ein Komma (ohne Leerzeichen) zu trennen. Jeder Wert bestimmt die Spaltenbreite in %! Der erste Wert gibt die Breite der ersten Spalte an,
der zweite Wert die Breite der zweiten Spalte usw. Ist die Summe der Breite größer als 100 werden die Spaltenbreiten reduziert.
Sind mehr Spalten als Breiten definiert werden die fehlenden Breiten um die Differenz zu 100 festgelegt. Sind hingegen weniger Spalten als Werte definiert werden
die überschüssigen Werte ignoriert.<br>
Standard: 100
</li><br>
<a name="dashboard_rowtopheight"></a>
<li>dashboard_rowtopheight<br>
Höhe der oberen Zeile, in der die Gruppen angeordnet werden. <br>
Standard: 250
</li><br>
<a name="dashboard_rowbottomheight"></a>
<li>"dashboard_rowbottomheight<br>
Höhe der unteren Zeile, in der die Gruppen angeordnet werden.<br>
Standard: 250
</li><br>
<a name="dashboard_tab1groups"></a>
<li>dashboard_tab1groups<br>
Durch Komma getrennte Liste mit den Namen der Gruppen, die im Tab 1 angezeigt werden. Falsche Gruppennamen werden hervorgehoben.<br>
Jede Gruppe kann zusätzlich ein Icon anzeigen, dazu muss der Gruppen name um ":&lt;icon&gt;@&lt;farbe&gt;"ergänzt werden<br>
Beispiel: Light:Icon_Fisch@blue,AVIcon_Fisch@red,Single Lights:Icon_Fisch@yellow
</li><br>
<a name="dashboard_tab2groups"></a>
<li>dashboard_tab2groups<br>
Durch Komma getrennte Liste mit den Namen der Gruppen, die im Tab 2 angezeigt werden. Falsche Gruppennamen werden hervorgehoben.<br>
Jede Gruppe kann zusätzlich ein Icon anzeigen, dazu muss der Gruppen name um ":&lt;icon&gt;@&lt;farbe&gt;"ergänzt werden<br>
Beispiel: Light:Icon_Fisch@blue,AVIcon_Fisch@red,Single Lights:Icon_Fisch@yellow
</li><br>
<a name="dashboard_tab3groups"></a>
<li>dashboard_tab3groups<br>
Durch Komma getrennte Liste mit den Namen der Gruppen, die im Tab 3 angezeigt werden. Falsche Gruppennamen werden hervorgehoben.<br>
Jede Gruppe kann zusätzlich ein Icon anzeigen, dazu muss der Gruppen name um ":&lt;icon&gt;@&lt;farbe&gt;"ergänzt werden<br>
Beispiel: Light:Icon_Fisch@blue,AVIcon_Fisch@red,Single Lights:Icon_Fisch@yellow
</li><br>
<a name="dashboard_tab4groups"></a>
<li>dashboard_tab4groups<br>
Durch Komma getrennte Liste mit den Namen der Gruppen, die im Tab 4 angezeigt werden. Falsche Gruppennamen werden hervorgehoben.<br>
Jede Gruppe kann zusätzlich ein Icon anzeigen, dazu muss der Gruppen name um ":&lt;icon&gt;@&lt;farbe&gt;"ergänzt werden<br>
Beispiel: Light:Icon_Fisch@blue,AVIcon_Fisch@red,Single Lights:Icon_Fisch@yellow
</li><br>
<a name="dashboard_tab5groups"></a>
<li>dashboard_tab5groups<br>
Durch Komma getrennte Liste mit den Namen der Gruppen, die im Tab 5 angezeigt werden. Falsche Gruppennamen werden hervorgehoben.<br>
Jede Gruppe kann zusätzlich ein Icon anzeigen, dazu muss der Gruppen name um ":&lt;icon&gt;@&lt;farbe&gt;"ergänzt werden<br>
Beispiel: Light:Icon_Fisch@blue,AVIcon_Fisch@red,Single Lights:Icon_Fisch@yellow
</li><br>
<a name="dashboard_tab6groups"></a>
<li>dashboard_tab6groups<br>
Durch Komma getrennte Liste mit den Namen der Gruppen, die im Tab 6 angezeigt werden. Falsche Gruppennamen werden hervorgehoben.<br>
Jede Gruppe kann zusätzlich ein Icon anzeigen, dazu muss der Gruppen name um ":&lt;icon&gt;@&lt;farbe&gt;"ergänzt werden<br>
Beispiel: Light:Icon_Fisch@blue,AVIcon_Fisch@red,Single Lights:Icon_Fisch@yellow
</li><br>
<a name="dashboard_tab7groups"></a>
<li>dashboard_tab7groups<br>
Durch Komma getrennte Liste mit den Namen der Gruppen, die im Tab 7 angezeigt werden. Falsche Gruppennamen werden hervorgehoben.<br>
Jede Gruppe kann zusätzlich ein Icon anzeigen, dazu muss der Gruppen name um ":&lt;icon&gt;@&lt;farbe&gt;"ergänzt werden<br>
Beispiel: Light:Icon_Fisch@blue,AVIcon_Fisch@red,Single Lights:Icon_Fisch@yellow
</li><br>
<a name="dashboard_tab1icon"></a>
<li>dashboard_tab1icon<br>
Zeigt am Tab ein Icon an. Es muss sich dabei um ein exisitereindes Icon mit modpath Verzeichnis handeln. Handelt es sich um ein SVG Icon kann der Suffix @colorname für die Farbe des Icons angegeben werden.
</li><br>
<a name="dashboard_tab2icon"></a>
<li>dashboard_tab2icon<br>
Zeigt am Tab ein Icon an. Es muss sich dabei um ein exisitereindes Icon mit modpath Verzeichnis handeln. Handelt es sich um ein SVG Icon kann der Suffix @colorname für die Farbe des Icons angegeben werden.
</li><br>
<a name="dashboard_tab3icon"></a>
<li>dashboard_tab3icon<br>
Zeigt am Tab ein Icon an. Es muss sich dabei um ein exisitereindes Icon mit modpath Verzeichnis handeln. Handelt es sich um ein SVG Icon kann der Suffix @colorname für die Farbe des Icons angegeben werden.
</li><br>
<a name="dashboard_tab4icon"></a>
<li>dashboard_tab4icon<br>
Zeigt am Tab ein Icon an. Es muss sich dabei um ein exisitereindes Icon mit modpath Verzeichnis handeln. Handelt es sich um ein SVG Icon kann der Suffix @colorname für die Farbe des Icons angegeben werden.
</li><br>
<a name="dashboard_tab5icon"></a>
<li>dashboard_tab5icon<br>
Zeigt am Tab ein Icon an. Es muss sich dabei um ein exisitereindes Icon mit modpath Verzeichnis handeln. Handelt es sich um ein SVG Icon kann der Suffix @colorname für die Farbe des Icons angegeben werden.
</li><br>
<a name="dashboard_tab6icon"></a>
<li>dashboard_tab6icon<br>
Zeigt am Tab ein Icon an. Es muss sich dabei um ein exisitereindes Icon mit modpath Verzeichnis handeln. Handelt es sich um ein SVG Icon kann der Suffix @colorname für die Farbe des Icons angegeben werden.
</li><br>
<a name="dashboard_tab7icon"></a>
<li>dashboard_tab7icon<br>
Zeigt am Tab ein Icon an. Es muss sich dabei um ein exisitereindes Icon mit modpath Verzeichnis handeln. Handelt es sich um ein SVG Icon kann der Suffix @colorname für die Farbe des Icons angegeben werden.
</li><br>
<a name="dashboard_lockstate"></a>
<li>dashboard_lockstate<br>
Bei Dashboard Einstellung "unlock" kann dieses bearbeitet werden. Bei der Einstellung "lock" können keine Änderung vorgenommen werden. <br>
Wenn die Leiste ausgeblendet ist (dashboard_showtabs) ist das Dashboard gespert. Die Bearbeitung ist daher nur mit sichtbarer Buttonbar möglich ist.<br>
Standard: unlock
</li><br>
<a name="dashboard_colcount"></a>
<li>dashboard_colcount<br>
Die Anzahl der Spalten in der Gruppen dargestellt werden können. Dennoch ist es möglich, mehrere Gruppen <br>
in einer Spalte nebeneinander zu positionieren. Dies ist abhängig von der Breite der Spalten und Gruppen. <br>
Gilt nur für die mittlere Spalte! <br>
Standard: 1
</li><br>
<a name="dashboard_showfullsize"></a>
<li>dashboard_showfullsize<br>
Blendet die FHEMWEB Raumliste (kompleter linker Bereich der Seite) und den oberen Bereich von FHEMWEB aus wenn der Wert auf 1 gesetzt ist.<br>
Default: 0
</li><br>
<a name="dashboard_showtabs"></a>
<li>dashboard_showtabs<br>
Zeigt die Tabs des Dashboards oben oder unten an, oder blendet diese aus. Dies gilt auch für die Schalterleiste. Wenn die Schalterleiste ausgeblendet wird ist das Dashboard gespert.<br>
Standard: tabs-and-buttonbar-at-the-top
</li><br>
<a name="dashboard_showhelper"></a>
<li>dashboard_showhelper<br>
Blendet Ränder ein, die eine Positionierung der Gruppen erleichtern. <br>
Standard: 1
</li><br>
<a name="dashboard_showtooglebuttons"></a>
<li>dashboard_showtooglebuttons<br>
Zeigt eine Schaltfläche in jeder Gruppe mit der man diese auf- und zuklappen kann.<br>
Standard: 1
</li><br>
<a name="dashboard_debug"></a>
<li>dashboard_debug<br>
Zeigt Debug-Felder an. Sollte nicht gesetzt werden!<br>
Standard: 0
</li><br>
</ul>
<a name="DbLog"></a>
<h3>DbLog</h3>
<ul>
<br>
<a name="DbLogdefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; DbLog &lt;configfilename&gt; &lt;regexp&gt;</code>
<br><br>
Speichert Events in eine Datenbank. Die Datenbankverbindungsparameter werden
definiert in <code>&lt;configfilename&gt;</code>. (Vergleiche
Beipspielkonfigurationsdatei in <code>contrib/dblog/db.conf</code>).<br>
Die Konfiguration ist in einer sparaten Datei abgelegt um das Datenbankpasswort
nicht in Klartext in der FHEM-Haupt-Konfigurationsdatei speichern zu m&ouml;ssen.
Ansonsten w&auml;re es mittels des <a href="../docs/commandref.html#list">list</a>
Befehls einfach auslesbar.
<br><br>
Die Perl-Module <code>DBI</code> and <code>DBD::&lt;dbtype&gt;</code>
m&ouml;ssen installiert werden (use <code>cpan -i &lt;module&gt;</code>
falls die eigene Distribution diese nicht schon mitbringt).
<br><br>
<code>&lt;regexp&gt;</code> ist identisch wie <a href="../docs/commandref.html#FileLog">FileLog</a>.
<br><br>
Ein Beispielcode zum Erstellen einer MySQL/PostGreSQL Datenbak ist in
<code>contrib/dblog/&lt;DBType&gt;_create.sql</code> zu finden.
Die Datenbank beinhaltet 2 Tabellen: <code>current</code> und
<code>history</code>. Die Tabelle <code>current</code> enth&auml;lt den letzten Stand
pro Device und Reading. In der Tabelle <code>history</code> sind alle
Events historisch gespeichert.
Die Tabellenspalten haben folgende Bedeutung:
<ol>
<li>TIMESTAMP: Zeitpunkt des Events, z.B. <code>2007-12-30 21:45:22</code></li>
<li>DEVICE: name des Devices, z.B. <code>Wetterstation</code></li>
<li>TYPE: Type des Devices, z.B. <code>KS300</code></li>
<li>EVENT: das auftretende Event als volle Zeichenkette
z.B. <code>humidity: 71 (%)</code></li>
<li>READING: Name des Readings, ermittelt aus dem Event,
z.B. <code>humidity</code></li>
<li>VALUE: aktueller Wert des Readings, ermittelt aus dem Event,
z.B. <code>71</code></li>
<li>UNIT: Einheit, ermittelt aus dem Event, z.B. <code>%</code></li>
</ol>
Der Wert des Rreadings ist optimiert f&ouml;r eine automatisierte Nachverarbeitung
z.B. <code>yes</code> ist transformiert nach <code>1</code>
<br><br>
Die gespeicherten Werte k&ouml;nnen mittels GET Funktion angezeigt werden:
<ul>
<code>get myDbLog - - 2012-11-10 2012-11-10 KS300:temperature</code>
</ul>
<br><br>
<b>Beispiel:</b>
<ul>
<code>Speichert alles in der Datenbank</code><br>
<code>define myDbLog DbLog /etc/fhem/db.conf .*:.*</code>
</ul>
</ul>
<a name="DbLogset"></a>
<b>Set</b>
<ul>
<code>set &lt;name&gt; reopen </code><br/><br/>
<ul>Schlie&szlig;t die Datenbank und &ouml;ffnet sie danach sofort wieder. Dabei wird die Journaldatei geleert und neu angelegt.<br/>
Verbessert den Datendurchsatz und vermeidet Speicherplatzprobleme.</ul><br/>
<code>set &lt;name&gt; count </code><br/><br/>
<ul>Z&auml;hlt die Datens&auml;tze in den Tabellen current und history und schreibt die Ergebnisse in die Readings countCurrent und countHistory.</ul><br/>
<code>set &lt;name&gt; deleteOldDays &lt;n&gt;</code><br/><br/>
<ul>L&ouml;scht Datens&auml;tze, die &auml;lter sind als &lt;n&gt; Tage. Die Anzahl der gel&ouml;schten Datens&auml;tze wird in das Reading lastRowsDeleted geschrieben.</ul><br/>
<code>set &lt;name&gt; userCommand &lt;validSqlStatement&gt;</code><br/><br/>
<ul><b>BENUTZE DIESE FUNKTION NUR, WENN DU WIRKLICH (WIRKLICH!) WEISST, WAS DU TUST!!!</b><br/><br/>
F&uuml;hrt einen beliebigen (!!!) sql Befehl in der Datenbank aus. Der Befehl und ein zur&uuml;ckgeliefertes Ergebnis werden in entsprechende Readings geschrieben.<br/>
</ul><br/>
</ul><br>
<a name="DbLogget"></a>
<b>Get</b>
<ul>
<code>get &lt;name&gt; ReadingsVal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;device&gt; &lt;reading&gt; &lt;default&gt;</code><br/>
<code>get &lt;name&gt; ReadingsTimestamp &lt;device&gt; &lt;reading&gt; &lt;default&gt;</code><br/>
<br/>
Liest einen einzelnen Wert aus der Datenbank, Benutzung und Syntax sind weitgehend identisch zu ReadingsVal() und ReadingsTimestamp().<br/>
</ul>
<br/>
<br/>
<ul>
<code>get &lt;name&gt; &lt;infile&gt; &lt;outfile&gt; &lt;from&gt;
&lt;to&gt; &lt;column_spec&gt; </code>
<br><br>
Liesst Daten aus der Datenbank. Wird durch die Frontends benutzt um Plots
zu generieren ohne selbst auf die Datenank zugreifen zu m&ouml;ssen.
<br>
<ul>
<li>&lt;in&gt;<br>
Ein Parameter um eine Kompatibilit&auml;t zum Filelog herzustellen.
Dieser Parameter ist per default immer auf <code>-</code> zu setzen.<br>
Folgende Auspr&auml;gungen sind zugelassen:<br>
<ul>
<li>current: die aktuellen Werte aus der Tabelle "current" werden gelesen.</li>
<li>history: die historischen Werte aus der Tabelle "history" werden gelesen.</li>
<li>-: identisch wie "history"</li>
</ul>
</li>
<li>&lt;out&gt;<br>
Ein Parameter um eine Kompatibilit&auml;t zum Filelog herzustellen.
Dieser Parameter ist per default immer auf <code>-</code> zu setzen um die
Ermittlung der Daten aus der Datenbank f&ouml;r die Plotgenerierung zu pr&ouml;fen.<br>
Folgende Auspr&auml;gungen sind zugelassen:<br>
<ul>
<li>ALL: Es werden alle Spalten der Datenbank ausgegeben. Inclusive einer &Uuml;berschrift.</li>
<li>Array: Es werden alle Spalten der Datenbank als Hash ausgegeben. Alle Datens&auml;tze als Array zusammengefasst.</li>
<li>INT: intern zur Plotgenerierung verwendet</li>
<li>-: default</li>
</ul>
</li>
<li>&lt;from&gt; / &lt;to&gt;<br>
Wird benutzt um den Zeitraum der Daten einzugrenzen. Es ist das folgende
Zeitformat oder ein Teilstring davon zu benutzen:<br>
<ul><code>YYYY-MM-DD_HH24:MI:SS</code></ul></li>
<li>&lt;column_spec&gt;<br>
F&ouml;r jede column_spec Gruppe wird ein Datenset zur&ouml;ckgegeben welches
durch einen Kommentar getrennt wird. Dieser Kommentar repr&auml;sentiert
die column_spec.<br>
Syntax: &lt;device&gt;:&lt;reading&gt;:&lt;default&gt;:&lt;fn&gt;:&lt;regexp&gt;<br>
<ul>
<li>&lt;device&gt;<br>
Der Name des Devices. Achtung: Gross/Kleinschreibung beachten!<br>
Es kann ein % als Jokerzeichen angegeben werden.</li>
<li>&lt;reading&gt;<br>
Das Reading des angegebenen Devices zur Datenselektion.<br>
Es kann ein % als Jokerzeichen angegeben werden.<br>
Achtung: Gross/Kleinschreibung beachten!
</li>
<li>&lt;default&gt;<br>
Zur Zeit noch nicht implementiert.
</li>
<li>&lt;fn&gt;
Angabe einer speziellen Funktion:
<ul>
<li>int<br>
Ermittelt den Zahlenwert ab dem Anfang der Zeichenkette aus der
Spalte "VALUE". Benutzt z.B. f&ouml;r Auspr&auml;gungen wie 10%.
</li>
<li>int&lt;digit&gt;<br>
Ermittelt den Zahlenwert ab dem Anfang der Zeichenkette aus der
Spalte "VALUE", inclusive negativen Vorzeichen und Dezimaltrenner.
Benutzt z.B. f&ouml;r Auspr&auml;gungen wie -5.7&deg;C.
</li>
<li>delta-h / delta-d<br>
Ermittelt die relative Ver&auml;nderung eines Zahlenwertes pro Stunde
oder pro Tag. Wird benutzt z.B. f&ouml;r Spalten die einen
hochlaufenden Z&auml;hler enthalten wie im Falle f&ouml;r ein KS300 Regenz&auml;hler
oder dem 1-wire Modul OWCOUNT.
</li>
<li>delta-ts<br>
Ermittelt die vergangene Zeit zwischen dem letzten und dem aktuellen Logeintrag
in Sekunden und ersetzt damit den originalen Wert.
</li>
</ul></li>
<li>&lt;regexp&gt;<br>
Diese Zeichenkette wird als Perl Befehl ausgewertet. Die regexp wird vor dem angegebenen &lt;fn&gt; Parameter ausgef&ouml;hrt.
<br>
Bitte zur Beachtung: Diese Zeichenkette darf keine Leerzeichen
enthalten da diese sonst als &lt;column_spec&gt; Trennung
interpretiert werden und alles nach dem Leerzeichen als neue
&lt;column_spec&gt; gesehen wird.<br>
<b>Schl&ouml;sselw&ouml;rter</b>
<li>$val ist der aktuelle Wert die die Datenbank f&ouml;r ein Device/Reading ausgibt.</li>
<li>$ts ist der aktuelle Timestamp des Logeintrages.</li>
<li>Wird als $val das Schl&ouml;sselwort "hide" zur&ouml;ckgegeben, so wird dieser Logeintrag nicht
ausgegeben, trotzdem aber f&ouml;r die Zeitraumberechnung verwendet.</li>
<li>Wird als $val das Schl&ouml;sselwort "ignore" zur&ouml;ckgegeben, so wird dieser Logeintrag
nicht f&ouml;r eine Folgeberechnung verwendet.</li>
</li>
</ul></li>
</ul>
<br><br>
<b>Beispiele:</b>
<ul>
<li><code>get myDbLog - - 2012-11-10 2012-11-20 KS300:temperature</code></li>
<li><code>get myDbLog current ALL - - %:temperature</code></li><br>
Damit erh<72>lt man alle aktuellen Readings "temperature" von allen in der DB geloggten Devices.
Achtung: bei Nutzung von Jokerzeichen auf die historyTabelle kann man sein FHEM aufgrund langer Laufzeit lahmlegen!
<li><code>get myDbLog - - 2012-11-10_10 2012-11-10_20 KS300:temperature::int1</code><br>
gibt Daten aus von 10Uhr bis 20Uhr am 10.11.2012</li>
<li><code>get myDbLog - all 2012-11-10 2012-11-20 KS300:temperature</code></li>
<li><code>get myDbLog - - 2012-11-10 2012-11-20 KS300:temperature KS300:rain::delta-h KS300:rain::delta-d</code></li>
<li><code>get myDbLog - - 2012-11-10 2012-11-20 MyFS20:data:::$val=~s/(on|off).*/$1eq"on"?1:0/eg</code><br>
gibt 1 zur&ouml;ck f&ouml;r alle Auspr&auml;gungen von on* (on|on-for-timer etc) und 0 f&ouml;r alle off*</li>
<li><code>get myDbLog - - 2012-11-10 2012-11-20 Bodenfeuchte:data:::$val=~s/.*B:\s([-\.\d]+).*/$1/eg</code><br>
Beispiel von OWAD: Ein Wert wie z.B.: <code>"A: 49.527 % B: 66.647 % C: 9.797 % D: 0.097 V"</code><br>
und die Ausgabe ist f&ouml;r das Reading B folgende: <code>2012-11-20_10:23:54 66.647</code></li>
<li><code>get DbLog - - 2013-05-26 2013-05-28 Pumpe:data::delta-ts:$val=~s/on/hide/</code><br>
Realisierung eines Betriebsstundenz&auml;hlers.Durch delta-ts wird die Zeit in Sek zwischen den Log-
eintr&auml;gen ermittelt. Die Zeiten werden bei den on-Meldungen nicht ausgegeben welche einer Abschaltzeit
entsprechen w&ouml;rden.</li>
</ul>
<br><br>
</ul>
<b>Get</b> f&ouml;r die Nutzung von webcharts
<ul>
<code>get &lt;name&gt; &lt;infile&gt; &lt;outfile&gt; &lt;from&gt;
&lt;to&gt; &lt;device&gt; &lt;querytype&gt; &lt;xaxis&gt; &lt;yaxis&gt; &lt;savename&gt; </code>
<br><br>
Liest Daten aus der Datenbank aus und gibt diese in JSON formatiert aus. Wird f&ouml;r das Charting Frontend genutzt
<br>
<ul>
<li>&lt;name&gt;<br>
Der Name des definierten DbLogs, so wie er in der fhem.cfg angegeben wurde.</li>
<li>&lt;in&gt;<br>
Ein Dummy Parameter um eine Kompatibilit&auml;t zum Filelog herzustellen.
Dieser Parameter ist immer auf <code>-</code> zu setzen.</li>
<li>&lt;out&gt;<br>
Ein Dummy Parameter um eine Kompatibilit&auml;t zum Filelog herzustellen.
Dieser Parameter ist auf <code>webchart</code> zu setzen um die Charting Get Funktion zu nutzen.
</li>
<li>&lt;from&gt; / &lt;to&gt;<br>
Wird benutzt um den Zeitraum der Daten einzugrenzen. Es ist das folgende
Zeitformat zu benutzen:<br>
<ul><code>YYYY-MM-DD_HH24:MI:SS</code></ul></li>
<li>&lt;device&gt;<br>
Ein String, der das abzufragende Device darstellt.</li>
<li>&lt;querytype&gt;<br>
Ein String, der die zu verwendende Abfragemethode darstellt. Zur Zeit unterst&ouml;tzte Werte sind: <br>
<code>getreadings</code> um f&ouml;r ein bestimmtes device alle Readings zu erhalten<br>
<code>getdevices</code> um alle verf&ouml;gbaren devices zu erhalten<br>
<code>timerange</code> um Chart-Daten abzufragen. Es werden die Parameter 'xaxis', 'yaxis', 'device', 'to' und 'from' ben&ouml;tigt<br>
<code>savechart</code> um einen Chart unter Angabe eines 'savename' und seiner zugeh&ouml;rigen Konfiguration abzuspeichern<br>
<code>deletechart</code> um einen zuvor gespeicherten Chart unter Angabe einer id zu l&ouml;schen<br>
<code>getcharts</code> um eine Liste aller gespeicherten Charts zu bekommen.<br>
<code>getTableData</code> um Daten aus der Datenbank abzufragen und in einer Tabelle darzustellen. Ben&ouml;tigt paging Parameter wie start und limit.<br>
<code>hourstats</code> um Statistiken f&ouml;r einen Wert (yaxis) f&ouml;r eine Stunde abzufragen.<br>
<code>daystats</code> um Statistiken f&ouml;r einen Wert (yaxis) f&ouml;r einen Tag abzufragen.<br>
<code>weekstats</code> um Statistiken f&ouml;r einen Wert (yaxis) f&ouml;r eine Woche abzufragen.<br>
<code>monthstats</code> um Statistiken f&ouml;r einen Wert (yaxis) f&ouml;r einen Monat abzufragen.<br>
<code>yearstats</code> um Statistiken f&ouml;r einen Wert (yaxis) f&ouml;r ein Jahr abzufragen.<br>
</li>
<li>&lt;xaxis&gt;<br>
Ein String, der die X-Achse repr&auml;sentiert</li>
<li>&lt;yaxis&gt;<br>
Ein String, der die Y-Achse repr&auml;sentiert</li>
<li>&lt;savename&gt;<br>
Ein String, unter dem ein Chart in der Datenbank gespeichert werden soll</li>
<li>&lt;chartconfig&gt;<br>
Ein jsonstring der den zu speichernden Chart repr&auml;sentiert</li>
<li>&lt;pagingstart&gt;<br>
Ein Integer um den Startwert f&ouml;r die Abfrage 'getTableData' festzulegen</li>
<li>&lt;paginglimit&gt;<br>
Ein Integer um den Limitwert f&ouml;r die Abfrage 'getTableData' festzulegen</li>
</ul>
<br><br>
Beispiele:
<ul>
<li><code>get logdb - webchart "" "" "" getcharts</code><br>
Liefert alle gespeicherten Charts aus der Datenbank</li>
<li><code>get logdb - webchart "" "" "" getdevices</code><br>
Liefert alle verf&ouml;gbaren Devices aus der Datenbank</li>
<li><code>get logdb - webchart "" "" ESA2000_LED_011e getreadings</code><br>
Liefert alle verf&ouml;gbaren Readings aus der Datenbank unter Angabe eines Ger&auml;tes</li>
<li><code>get logdb - webchart 2013-02-11_00:00:00 2013-02-12_00:00:00 ESA2000_LED_011e timerange TIMESTAMP day_kwh</code><br>
Liefert Chart-Daten, die auf folgenden Parametern basieren: 'xaxis', 'yaxis', 'device', 'to' und 'from'<br>
Die Ausgabe erfolgt als JSON, z.B.: <code>[{'TIMESTAMP':'2013-02-11 00:10:10','VALUE':'0.22431388090756'},{'TIMESTAMP'.....}]</code></li>
<li><code>get logdb - webchart 2013-02-11_00:00:00 2013-02-12_00:00:00 ESA2000_LED_011e savechart TIMESTAMP day_kwh tageskwh</code><br>
Speichert einen Chart unter Angabe eines 'savename' und seiner zugeh&ouml;rigen Konfiguration</li>
<li><code>get logdb - webchart "" "" "" deletechart "" "" 7</code><br>
L&ouml;scht einen zuvor gespeicherten Chart unter Angabe einer id</li>
</ul>
<br><br>
</ul>
<a name="DbLogattr"></a>
<b>Attribute</b>
<ul><b>shutdownWait</b>
<ul><code>attr &lt;device&gt; shutdownWait <n></code><br/>
fhem wartet waehrend des shutdowns fuer n Sekunden, um die Datenbank korrekt zu beenden<br/>
</ul>
</ul><br/>
<ul><b>DbLogExclude</b>
<ul>
<code>
set &lt;device&gt; DbLogExclude regex:MinInterval [regex:MinInterval] ...
</code>
</ul>
<br>
Wenn DbLog genutzt wird, wird in alle Devices das Attribut <i>DbLogExclude</i>
propagiert. Der Wert des Attributes wird als Regexp ausgewertet und schliesst die
damit matchenden Readings von einem Logging aus. Einzelne Regexp werden durch
Kommata getrennt. Ist MinIntervall angegeben, so wird der Logeintrag nur
dann nicht geloggt, wenn das Intervall noch nicht erreicht und der Wert des
Readings sich nicht ver&auml;ndert hat.
<br>
<b>Beispiele</b>
<ul>
<code>attr MyDevice1 DbLogExclude .*</code>
<code>attr MyDevice2 DbLogExclude state,(floorplantext|MyUserReading):300,battery:3600</code>
</ul>
</ul><br>
</ul>
<a name="ECMD"></a>
<h3>ECMD</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#ECMD'>ECMD</a><br/>
</ul>
<a name="ECMDDevice"></a>
<h3>ECMDDevice</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#ECMDDevice'>ECMDDevice</a><br/>
</ul>
<a name="EGPM"></a>
<h3>EGPM Steckdose</h3>
<ul>
Definiert eine einzelne Netzwerk-Steckdose vom EGPM2LAN. Diese Definition wird beim Einrichten eines EGPM2LAN automatisch erstellt,
wenn das globale FHEM-Attribut AUTOCREATE aktiviert wurde. F&uuml;r weitere Informationen, siehe Beschreibung von <a href="#EGPM2LAN">EGPM2LAN</a>.
<br><br>
<a name="EGPMdefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; EGPM &lt;device&gt; &lt;socket-nr&gt;</code>
<br>
</ul>
<br>
<a name="EGPMset"></a>
<b>Set</b>
<ul><code>set &lt;name&gt; &lt;[on|off|toggle]&gt;</code><br>
Schaltet die Steckdose ein oder aus.
</ul>
<ul><code>set &lt;name&gt; &lt;[on-for-timer|off-for-timer|on-till|off-till|blink|intervals]&gt;</code><br>
Schaltet die Steckdose f&uuml; einen bestimmten Zeitraum oder mehrfach hintereinander. Weitere Infos hierzu unter <a href="#setExtensions">set extensions</a>.
</ul><br>
Beispiel:
<ul>
<code>define lampe1 EGPM steckdose 1</code><br>
<code>set lampe1 on</code><br>
</ul>
<br>
<a name="EGPMget"></a>
<b>Get</b> <ul>N/A</ul>
<br>
<a name="EGPMattr"></a>
<b>Attributes</b>
<ul>
<li><a href="#loglevel">loglevel</a></li>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
</ul>
<br>
<a name="EGPM2LANevents"></a>
<b>Generated events</b>
<ul>
<li>EGPM &lt;name&gt; &lt;[on|off]&gt</li>
</ul>
</ul>
<a name="EGPM2LAN"></a>
<h3>EGPM2LAN</h3>
<ul>
<br>
<a name="EGPM2LANdefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; EGPM2LAN &lt;IP-Address&gt; [&lt;Password&gt;]</code><br>
<br>
Das Modul erstellt eine Verbindung zu einer Gembird &reg; <a href="http://energenie.com/item.aspx?id=7557" >Energenie EG-PM2-LAN</a> Steckdosenleiste und steuert 4 angeschlossene Ger&auml;te..
Falls mehrere Steckdosenleisten &uuml;ber das Netzwerk gesteuert werden, ist es ratsam, diese zuerst &uuml;ber die Web-Oberfl&auml;che zu konfigurieren und die einzelnen Steckdosen zu benennen. Die Namen werden dann automatisch in die
Oberfl&auml;che von FHEM &uuml;bernommen. Bitte darauf achten, die Weboberfl&auml;che mit <i>Logoff</i> wieder zu verlassen, da der Zugriff sonst blockiert wird.
</ul><br>
<a name="EGPM2LANset"></a>
<b>Set</b>
<ul>
<code>set &lt;name&gt; &lt;[on|off|toggle]&gt &lt;socketnr.&gt;</code><br>
Schaltet die gew&auml;hlte Steckdose ein oder aus.<br>
<br>
<code>set &lt;name&gt; &lt;[on|off]&gt &lt;all&gt;</code><br>
Schaltet alle Steckdosen gleichzeitig ein oder aus.<br>
<br>
<code>set &lt;name&gt; &lt;staterequest&gt;</code><br>
Aktualisiert die Statusinformation der Steckdosenleiste.<br>
Wenn das globale Attribut <a href="#autocreate">autocreate</a> aktiviert ist, wird f&uuml;r jede Steckdose ein <a href="#EGPM">EGPM</a>-Eintrag erstellt.<br>
<br>
<code>set &lt;name&gt; &lt;clearreadings&gt;</code><br>
L&ouml;scht alle ung&uuml;ltigen Eintr&auml;ge im Abschnitt &lt;readings&gt;.
</ul>
<br>
<a name="EGPM2LANget"></a>
<b>Get</b> <ul>N/A</ul><br>
<a name="EGPM2LANattr"></a>
<b>Attribute</b>
<ul>
<li>stateDisplay</li>
Default: <b>socketNumer</b> wechselt zwischen <b>socketNumer</b> and <b>socketName</b> f&uuml;r jeden Statuseintrag. Verwende <b>set statusrequest</b>, um die Anzeige zu aktualisieren.
<li>autocreate</li>
Default: <b>on</b> <a href="#EGPM">EGPM</a>-Eintr&auml;ge werden automatisch mit dem <b>set</b>-command erstellt.
<li><a href="#loglevel">loglevel</a></li>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
</ul>
<br>
<br>
<br>
Beispiel:
<ul>
<code>define sleiste EGPM2LAN 10.192.192.20 SecretGarden</code><br>
<code>set sleiste on 1</code><br>
</ul>
</ul>
<a name="EIB"></a>
<h3>EIB</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#EIB'>EIB</a><br/>
</ul>
<a name="EM"></a>
<h3>EM</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#EM'>EM</a><br/>
</ul>
<a name="EMEM"></a>
<h3>EMEM</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#EMEM'>EMEM</a><br/>
</ul>
<a name="EMGZ"></a>
<h3>EMGZ</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#EMGZ'>EMGZ</a><br/>
</ul>
<a name="EMWZ"></a>
<h3>EMWZ</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#EMWZ'>EMWZ</a><br/>
</ul>
<a name="ENECSYSGW"></a>
<h3>ENECSYSGW</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#ENECSYSGW'>ENECSYSGW</a><br/>
</ul>
<a name="ENECSYSINV"></a>
<h3>ENECSYSINV</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#ENECSYSINV'>ENECSYSINV</a><br/>
</ul>
<p>
<a name="ENIGMA2" id="ENIGMA2"></a>
</p>
<h3>
ENIGMA2
</h3>
<div style="margin-left: 2em">
Eine deutsche Version der Dokumentation ist derzeit nicht vorhanden. Die englische Version ist hier zu finden:
</div>
<div style="margin-left: 2em">
<a href='http://fhem.de/commandref.html#ENIGMA2'>ENIGMA2</a>
</div>
<a name="ESA2000"></a>
<h3>ESA2000</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#ESA2000'>ESA2000</a><br/>
</ul>
<a name="EnOcean"></a>
<h3>EnOcean</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#EnOcean'>EnOcean</a><br/>
</ul>
<a name="FBAHA"></a>
<h3>FBAHA</h3>
<ul>
Dieses Modul verbindet sich mit dem AHA (AVM Home Automation) Server auf
einem FRITZ!Box. Es dient als "physikalisches" Gegenst&uuml;ck zum <a
href="#FBDECT">FBDECT</a> Modul. Achtung: als erstes muss der Zugang zu
diesen Daten in der FRITZ!Box Web-Oberfl&auml;che aktiviert werden.
<br><br>
<a name="FBAHAdefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; FBAHA &lt;device&gt;</code>
<br>
<br>
&lt;host&gt; ist normalerweise die Adresse der FRITZ!Box, wo das AHA Server
l&auml;uft (fritz.box oder localhost), &lt;port&gt; ist 2002.
&lt;device&gt; is entweder a eine Kombianation aus &lt;host&gt;:&lt;port&gt;,
wobei &lt;host&gt; die Adresse der FRITZ!Box ist (localhost AUF dem
FRITZ.BOX) und &lt;port&gt; 2002 ist, oder
UNIX:SEQPACKET:/var/tmp/me_avm_home_external.ctl, wobei das nur fuer
FHEM@FRITZ!BOX zur Verf&uuml;gung steht. Mit FRITZ!OS 5.50 steht auch der
Netzwerkport zur Verf&uuml;gung, auf manchen Laborvarianten nur das UNIX socket.
<br>
Beispiel:
<ul>
<code>define fb1 FBAHA fritz.box:2002</code><br>
<code>define fb1 FBAHA UNIX:SEQPACKET:/var/tmp/me_avm_home_external.ctl</code><br>
</ul>
</ul>
<br>
<a name="FBAHAset"></a>
<b>Set</b>
<ul>
<li>createDevs<br>
legt FHEM Ger&auml;te an f&uuml;r jedes auf dem AHA-Server gefundenen DECT
Eintrag, siehe auch "get devList".
</li>
<li>reopen<br>
Schlie&szlig;t und &oulm;ffnet die Verbindung zum AHA Server. Nur f&uuml;r
debugging.
</li>
<li>reregister<br>
Gibt den AHA handle frei, und registriert sich erneut beim AHA Server. Nur
f&uuml;r debugging.
</li>
</ul>
<br>
<a name="FBAHAget"></a>
<b>Get</b>
<ul>
<li>devList<br>
liefert die Liste aller DECT-Eintr&auml;ge der AHA Server zur&uuml;ck, mit
einem kurzen Info.
</li>
</ul>
<br>
<a name="FBAHAattr"></a>
<b>Attributes</b>
<ul>
<li><a href="#dummy">dummy</a></li>
</ul>
<br>
<a name="FBAHAevents"></a>
<b>Generierte Events:</b>
<ul>
<li>UNDEFINED FBDECT_$ahaName_${NR} FBDECT $id"
</li>
</ul>
</ul>
<a name="FBDECT"></a>
<h3>FBDECT</h3>
<ul>
Dieses Modul wird verwendet, um AVM FRITZ!DECT Ger&auml;te via FHEM zu
steuern, siehe auch das <a href="#FBAHA">FBAHA</a> Modul f&uumlr die
Anbindung an das FRITZ!Box.
<br><br>
<a name="FBDECTdefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; FBDECT &lt;homeId&gt; &lt;id&gt; [classes]</code>
<br>
<br>
&lt;id&gt; ist das Ger&auml;te-ID, das Argument wird z.Zt ignoriert.
<br>
Beispiel:
<ul>
<code>define lampe FBDECT 16 switch,powerMeter</code><br>
</ul>
<b>Achtung:</b>FBDECT Eintr&auml;ge werden noralerweise per
<a href="#autocreate">autocreate</a> angelegt.
</ul>
<br>
<br
<a name="FBDECTset"></a>
<b>Set</b>
<ul>
<li>on/off<br>
Ger&auml;t einschalten bzw. ausschalten.</li>
<li>
Die <a href="#setExtensions">set extensions</a> werden
unterst&uuml;tzt.</li>
<li>msgInterval &lt;sec&gt;<br>
Anzahl der Sekunden zwischen den Sensornachrichten.
</li>
</ul>
<br>
<a name="FBDECTget"></a>
<b>Get</b>
<ul>
<li>devInfo<br>
meldet Ger&auml;te-Informationen.</li>
</ul>
<br>
<a name="FBDECTattr"></a>
<b>Attribute</b>
<ul>
<li><a href="#IODev">IODev</a></li>
<li><a href="#do_not_notify">do_not_notify</a></li>
<li><a href="#ignore">ignore</a></li>
<li><a href="#dummy">dummy</a></li>
<li><a href="#showtime">showtime</a></li>
<li><a href="#model">model</a></li>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
</ul>
<br>
<a name="FBDECTevents"></a>
<b>Generierte events:</b>
<ul>
<li>on</li>
<li>off</li>
<li>set_on</li>
<li>set_off</li>
<li>current: $v A</li>
<li>voltage: $v V</li>
<li>power: $v W</li>
<li>energy: $v Wh</li>
<li>powerFactor: $v"</li>
<li>temperature: $v C</li>
<li>options: uninitialized</li>
<li>options: powerOnState:[on|off|last],lock:[none,webUi,remoteFb,button]</li>
<li>control: disabled</li>
<li>control: on power < $v delay:$d sec do:state [on|off]</li>
<li>relaytimes: disabled</li>
<li>relaytimes: HEX</li>
</ul>
</ul>
<a name="FB_CALLMONITOR"></a>
<h3>FB_CALLMONITOR</h3>
<ul>
<tr><td>
Das Modul FB_CALLMONITOR verbindet sich zu einer AVM FritzBox Fon und verarbeitet
Telefonie-<a href="#FB_CALLMONITORevents">Ereignisse</a>.(eingehende & ausgehende Telefonate)
<br><br>
Um dieses Modul nutzen zu k&ouml;nnen, muss der CallMonitor via Kurzwahl mit einem Telefon aktiviert werden.
.<br><br>
<ul>
<code>#96*5* - CallMonitor aktivieren<br>#96*4* - CallMonitor deaktivieren</code>
</ul>
<br>
Einfach die entsprechende Kurzwahl auf irgend einem Telefon eingeben, welches an die Fritz!Box angeschlossen ist.
Nach ca. 3 Sekunden kann man einfach wieder auflegen. Nun ist der CallMonitor aktiviert.
<br>
Sobald der CallMonitor auf der Fritz!Box aktiviert wurde erzeugt das Modul entsprechende Events (s.u.)
<br><br>
Dieses Modul funktioniert mit allen Fritz!Box Modellen, welche Telefonie unterst&uuml;tzen (Namenszusatz: Fon).
<br><br>
<a name="FB_CALLMONITORdefine"></a>
<b>Definition</b>
<ul>
<code>define &lt;name&gt; FB_CALLMONITOR &lt;IP-Addresse&gt;[:Port]</code><br>
<br>
Port 1012 ist der Standardport und muss daher nicht explizit angegeben werden.
<br>
</ul>
<br>
<a name="FB_CALLMONITORset"></a>
<b>Set-Kommandos</b>
<ul>
<li><b>rereadPhonebook</b> - Liest das Telefonbuch der FritzBox neu ein (per Datei oder direkt lokal)</li>
</ul>
<br>
<a name="FB_CALLMONITORget"></a>
<b>Get-Kommandos</b>
<ul>
<li><b>search &lt;Rufnummer&gt;</b> - gibt den Namen der Telefonnummer zur&uuml;ck (aus Cache, Telefonbuch oder R&uuml;ckw&auml;rtssuche)</li>
</ul>
<br>
<a name="FB_CALLMONITORattr"></a>
<b>Attribute</b><br><br>
<ul>
<li><a href="#do_not_notify">do_not_notify</a></li>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li><br>
<li><a name="disable">disable</a></li>
Optionales Attribut zur Deaktivierung des Callmonitors. Es k&ouml;nnen dann keine Anruf-Events mehr erkannt und erzeugt werden.
<br><br>
M&ouml;gliche Werte: 0 => Callmonitor ist aktiv, 1 => Callmonitor ist deaktiviert.<br>
Standardwert ist 0 (aktiv)<br><br>
<li><a name="reverse-search">reverse-search</a> (all|internal|klicktel.de|dasoertliche.de|search.ch|dasschnelle.at|none)</li>
Aktiviert die R&uuml;ckw&auml;rtssuche der externen Rufnummer der Gegenstelle (bei eingehenden/abgehenden Anrufen).
Es ist m&ouml;glich einen bestimmten Suchanbieter zu verwenden, welcher f&uuml;r die R&uuml;ckw&auml;rtssuche verwendet werden soll.
Falls FHEM auf einer FritzBox Fon l&auml;uft, kann mit dem Wert "internal" ausschlie&szlig;lich das interne Telefonbuch verwendet werden.
Wenn dieses Attribut auf dem Wert "all" steht, wird (sofern FHEM auf einer FritzBox Fon l&auml;uft) das interne Telefonbuch verwendet,
sowie alle verf&uuml;gbaren Suchanbieter (ausser search.ch und dasschnelle.at)
f&uuml;r die R&uuml;ckw&auml;rtssuche herangezogen, solange bis irgend ein Anbieter ein valides Ergebniss liefert.
Wenn der Wert "none" ist, wird keine R&uuml;ckw&auml;rtssuche durchgef&uuml;hrt.<br><br>Standardwert ist "none" (keine R&uuml;ckw&auml;rtssuche).<br><br>
<li><a name="reverse-search-cache">reverse-search-cache</a></li>
Wenn dieses Attribut gesetzt ist, werden alle Ergebisse der R&uuml;ckw&auml;rtssuche in einem modul-internen gespeichert
und von da an nur noch aus dem Cache genutzt anstatt eine erneute R&uuml;ckw&auml;rtssuche durchzuf&uuml;hren.<br><br>
M&ouml;gliche Werte: 0 => deaktiviert , 1 => aktiviert<br>
Standardwert ist 0 (deaktiviert)<br><br>
<li><a name="reverse-search-cache-file">reverse-search-cache-file</a> &lt;Dateipfad&gt;</li>
Da der Cache nur im Arbeitsspeicher existiert, ist er nicht persisten und geht beim stoppen von FHEM verloren.
Mit diesem Parameter werden alle Cache-Ergebnisse in eine Textdatei geschrieben (z.B. /usr/share/fhem/telefonbuch.txt)
und beim n&auml;chsten Start von FHEM direkt wieder in den Cache geladen und genutzt.
<br><br>
<li><a name="reverse-search-phonebook-file">reverse-search-phonebook-file</a> &lt;Dateipfad&gt</li>
Mit diesem Attribut kann man optional den Pfad zu einer Datei angeben, welche ein Telefonbuch im FritzBox-Format (XML-Struktur) enth&auml;lt.
Dadurch ist es m&ouml;glich ein FritzBox-Telefonbuch zu verwenden, ohne das FHEM auf einer FritzBox laufen muss.
Sofern FHEM auf einer FritzBox l&auml;uft (und nichts abweichendes angegeben wurde), wird das interne File /var/flash/phonebook verwendet. Alternativ kann man das Telefonbuch in der FritzBox-Weboberfläche exportieren und dieses verwenden<br><br>
Standartwert ist /var/flash/phonebook (entspricht dem Pfad auf einer FritzBox)<br><br>
<li><a name="remove-leading-zero">remove-leading-zero</a></li>
Wenn dieses Attribut aktiviert ist, wird die f&uuml;hrende Null aus der externen Rufnummer (bei eingehenden & abgehenden Anrufen) entfernt. Dies ist z.B. notwendig bei Telefonanlagen.<br><br>
M&ouml;gliche Werte: 0 => deaktiviert , 1 => aktiviert<br>
Standardwert ist 0 (deaktiviert)<br><br>
<li><a name="unique-call-ids">unique-call-ids</a></li>
Wenn dieses Attribut aktiviert ist, wird f&uuml;r jedes Gespr&auml;ch eine eineindeutige Identifizierungsnummer verwendet. Dadurch lassen sich auch bereits beendete Gespr&auml;che voneinander unterscheiden. Dies ist zum Beispiel notwendig bei der Verarbeitung der Events durch eine Datenbank.<br><br>
M&ouml;gliche Werte: 0 => deaktiviert , 1 => aktiviert<br>
Standardwert ist 0 (deaktiviert)<br><br>
<li><a name="local-area-code">local-area-code</a></li>
Verwendet die gesetze Vorwahlnummer bei R&uuml;ckw&auml;rtssuchen bei Ortsgespr&auml;chen (z.B. 0228 f&uuml;r Bonn)<br><br>
</ul>
<br>
<a name="FB_CALLMONITORevents"></a>
<b>Generierte Events:</b><br><br>
<ul>
<li><b>event</b>: (call|ring|connect|disconnect) - Welches Event wurde genau ausgel&ouml;st.</li>
<li><b>external_number</b>: - Die Rufnummer des Gegen&uuml;bers, welcher anruft (event: ring) oder angerufen wird (event: call)</li>
<li><b>external_name</b>: - Das Ergebniss der R&uuml;ckw&auml;rtssuche (sofern aktiviert). Im Fehlerfall kann diese Reading auch den Inhalt "unknown" (keinen Eintrag gefunden) und "timeout" (Zeit&uuml;berschreitung bei der Abfrage) enthalten. Im Falle einer Zeit&uuml;berschreitung und aktiviertem Caching, wird die Rufnummer beim n&auml;chsten Mal erneut gesucht.</li>
<li><b>internal_number</b>: - Die interne Rufnummer (Festnetz, VoIP-Nummer, ...) auf welcher man angerufen wird (event: ring) oder die man gerade nutzt um jemanden anzurufen (event: call)</li>
<li><b>internal_connection</b>: - Der interne Anschluss an der Fritz!Box welcher genutzt wird um das Gespr&auml;ch durchzuf&uuml;hren (FON1, FON2, ISDN, DECT, ...)</li>
<li><b>external_connection</b>: - Der externe Anschluss welcher genutzt wird um das Gespr&auml;ch durchzuf&uuml;hren (Festnetz, VoIP Nummer, ...)</li>
<li><b>call_duration</b>: - Die Gespr&auml;chsdauer in Sekunden. Dieser Wert wird nur bei einem disconnect-Event erzeugt. Ist der Wert 0, so wurde das Gespr&auml;ch von niemandem angenommen.</li>
<li><b>call_id</b>: - Die Identifizierungsnummer eines einzelnen Gespr&auml;chs. Dient der Zuordnung bei 2 oder mehr parallelen Gespr&auml;chen, damit alle Events eindeutig einem Gespr&auml;ch zugeordnet werden k&ouml;nnen</li>
<li><b>missed_call</b>: - Dieses Event wird nur generiert, wenn ein eingehender Anruf nicht beantwortet wird. Sofern der Name dazu bekannt ist, wird dieser ebenfalls mit angezeigt.</li>
</ul>
</ul>
<a name="FHEM2FHEM"></a>
<h3>FHEM2FHEM</h3>
<ul>
FHEM2FHEM ist ein Hilfsmodul, um mehrere FHEM-Installationen zu verbinden.
<br><br>
<a name="FHEM2FHEMdefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; FHEM2FHEM &lt;host&gt;[:&lt;portnr&gt;][:SSL] [LOG:regexp|RAW:devicename] {portpassword}
</code>
<br>
<br>
Zum <i>remote (entfernten)</i> FHEM auf Rechner &lt;host&gt; verbinden.
&lt;portnr&gt; ist der telnetPort des remote FHEM, Standardport ist 7072.
Der Zusatz :SSL wird ben&ouml;tigt, wenn das remote FHEM
SSL-Verschl&uuml;sselung voraussetzt. Auch auf dem lokalen Host muss dann
das Perl-Modul IO::Socket::SSL installiert sein.<br>
Anmerkung: Wenn das remote FHEM auf einem eigenen Host l&auml;uft, muss
"telnetPort" des remote FHEM als global festgelegt sein. <br>
Der n&auml;chste Parameter spezifiziert den Verbindungs-Typ:
<ul>
<li>LOG<br>
Bei Verwendung dieses Verbindungstyps werden alle Ereignisse (Events) der
remote FHEM-Installation empfangen. Die Ereignisse sehen aus wie die, die
nach <a href="#inform">inform on</a> Befehl erzeugt werden. Sie k&ouml;nnen
wie lokale Ereignisse durch <a href="#FileLog">FileLog </a> oder <a
href="#notify">notify</a> genutzt werden und mit einem regul&auml;ren
Ausdruck gefiltert werden. Die Syntax daf&uuml;r ist unter der
notify-Definition beschrieben.<br>
Einschr&auml;nkungen: die Ger&auml;te der remote Installation werden nicht
lokal angelegt und k&ouml;nnen weder mit list angezeigt noch lokal
angesprochen werden. Auf beiden FHEM-Installationen k&ouml;nnen
Ger&auml;te gleichen Namens angelegt werden, aber wenn beide dasselbe
Ereignis empfangen (z.B. wenn an beiden Installationen CULs angeschlossen
sind), werden alle FileLogs und notifys doppelt ausgel&ouml;st. </li>
<li>RAW<br>
Bei diesem Verbindungstyp werden unaufbereitete Ereignisse (raw messages)
des remote FHEM-Ger&auml;ts <i>devicename</i> genau so empfangen, als
w&auml;re das Ger&auml;t lokal verbunden.<br>
Einschr&auml;nkungen: nur Ger&auml;te, welche die "Dispatch-Funktion"
unterst&uuml;tzen (CUL, FHZ, CM11, SISPM, RFXCOM, TCM, TRX, TUL) erzeugen
raw messages, und f&uuml;r jedes entfernte Ger&auml;t muss ein eigenes
FHEM2FHEM Objekt erzeugt werden.<br>
<i>devicename</i> muss mit demselben Namen und Typ wie das Remote Devive
angelegt sein, aber als Dummy, d.h. als device-node "none".
Zus&auml;tzlich m&uuml;ssen alle notwendigen Attribute lokal gesetzt sein
(z.B. <a href="#rfmode">rfmode</a>, wenn die remote CUL im HomeMatic-Modus
l&auml;uft). Die Verwendung bereits bestehender lokaler Ger&auml;te ist zu
vermeiden, weil sonst die Duplikatsfilterung nicht richtig funktioniert
(siehe dupTimeout). </li>
</ul>
Der letzte Parameter enth&auml;lt das Passwort des Remote-Servers, wenn dort
eines aktiviert ist <a href="#portpassword">portpassword</a>.
<br>
Beispiele:
<ul>
<code>define ds1 FHEM2FHEM 192.168.178.22:7072 LOG:.*</code><br>
<br>
<code>define RpiCUL CUL none 0000</code><br>
<code>define ds2 FHEM2FHEM 192.168.178.22:7072 RAW:RpiCUL</code><br> und auf dem RPi (192.168.178.22):<br>
<code>rename CUL_0 RpiCUL</code><br>
</ul>
</ul>
<br>
<a name="FHEM2FHEMset"></a>
<b>Set</b> <ul>N/A</ul><br>
<a name="FHEM2FHEMget"></a>
<b>Get</b> <ul>N/A</ul><br>
<a name="FHEM2FHEMattr"></a>
<b>Attributes</b>
<ul>
<li><a href="#dummy">dummy</a></li>
</ul>
</ul>
<a name="FHEMWEB"></a>
<h3>FHEMWEB</h3>
<ul>
FHEMWEB ist das default WEB-Frontend, es implementiert auch einen einfachen
Webserver (optional mit Basic-Auth und HTTPS).
<br> <br>
<a name="FHEMWEBdefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; FHEMWEB &lt;tcp-portnr&gt; [global]</code>
<br><br>
Aktiviert das Webfrontend auf dem Port &lt;tcp-portnr&gt;. Mit dem
Parameter global werden Anfragen von allen Netzwerkschnittstellen
akzeptiert (nicht nur vom localhost / 127.0.0.1) . <br>
Informationen f&uuml;r den Betrieb mit IPv6 finden Sie <a
href="#telnet">hier</a>.<br>
</ul>
<br>
<a name="FHEMWEBset"></a>
<b>Set</b>
<ul>
<li>rereadicons<br>
Damit wird die Liste der Icons neu eingelesen, f&uuml;r den Fall, dass
Sie Icons l&ouml;schen oder hinzuf&uuml;gen.
</li>
<li>clearSvgCache<br>
Im Verzeichnis www/SVGcache werden SVG Daten zwischengespeichert, wenn
das Attribut SVGcache gesetzt ist. Mit diesem Befehl leeren Sie diesen
Zwischenspeicher.
</li>
</ul>
<br>
<a name="FHEMWEBget"></a>
<b>Get</b>
<ul>
<li>icon &lt;logical icon&gt;<br>
Liefert den absoluten Pfad des (logischen) Icons zur&uuml;ck. Beispiel:
<ul>
<code>get myFHEMWEB icon FS20.on<br>
/data/Homeautomation/fhem/FHEM/FS20.on.png
</code>
</ul></li>
<li>pathlist<br>
Zeigt diejenigen Verzeichnisse an, in welchen die verschiedenen Dateien
f&uuml;r FHEMWEB liegen.
</li>
<br><br>
</ul>
<a name="FHEMWEBattr"></a>
<b>Attributes</b>
<ul>
<a name="webname"></a>
<li>webname<br>
Der Pfad nach http://hostname:port/ . Standard ist fhem,
so ist die Standard HTTP Adresse http://localhost:8083/fhem
</li><br>
<a name="refresh"></a>
<li>refresh<br>
Damit erzeugen Sie auf den ausgegebenen Webseiten einen automatischen
Refresh, z.B. nach 5 Sekunden.
</li><br>
<a name="plotmode"></a>
<li>plotmode<br>
Spezifiziert, wie Plots erzeugt werden sollen:
<ul>
<li>SVG<br>
Die Plots werden mit Hilfe des <a href="#SVG">SVG</a> Moduls als SVG
Grafik gerendert. Das ist die Standardeinstellung.</li>
<li>gnuplot<br>
Die Plots werden mit Hilfe des gnuplot Programmes erzeugt. Diese
Option ist aus historischen Gr&uuml;nden vorhanden.
</li>
<li>gnuplot-scroll<br>
Wie gnuplot, der einfache Zugriff auf historische Daten ist aber
genauso m&ouml;glich wie mit dem SVG Modul.</li>
</ul>
</li><br>
<a name="plotsize"></a>
<li>plotsize<br>
gibt die Standardbildgr&ouml;&szlig;e aller erzeugten Plots an als
Breite,H&ouml;he an. Um einem individuellen Plot die Gr&ouml;&szlig;e zu
&auml;ndern muss dieses Attribut bei der entsprechenden SVG Instanz
gesetzt werden. Default sind 800,160 f&uuml;r Desktop und 480,160
f&uuml;r Smallscreen
</li><br>
<a name="nrAxis"></a>
<li>nrAxis<br>
(bei mehrfach-Y-Achsen im SVG-Plot) Die Darstellung der Y Achsen
ben&ouml;tigt Platz. Hierdurch geben Sie an wie viele Achsen Sie
links,rechts [useLeft,useRight] ben&ouml;tigen. Default ist 1,1 (also 1
Achse links, 1 Achse rechts).
</li><br>
<a name="SVGcache"></a>
<li>SVGcache<br>
Plots die sich nicht mehr &auml;ndern, werden im SVGCache Verzeichnis
(www/SVGcache) gespeichert, um die erneute, rechenintensive
Berechnung der Grafiken zu vermeiden. Default ist 0, d.h. aus.<br>
Siehe den clearSvgCache Befehl um diese Daten zu l&ouml;schen.
</li><br>
<a name="endPlotToday"></a>
<li>endPlotToday<br>
Wird dieses FHEMWEB Attribut gesetzt, so enden Wochen- bzw. Monatsplots
am aktuellen Tag, sonst wird die aktuelle Woche/Monat angezeigt.
</li><br>
<a name="endPlotNow"></a>
<li>endPlotNow<br>
Wenn Sie dieses FHEMWEB Attribut auf 1 setzen, werden Tages und
Stunden-Plots zur aktuellen Zeit beendet. (&Auml;hnlich wie
endPlotToday, nur eben min&uuml;tlich).
Ansonsten wird der gesamte Tag oder eine 6 Stunden Periode (0, 6, 12,
18 Stunde) gezeigt. Dieses Attribut wird nicht verwendet, wenn das SVG
Attribut startDate benutzt wird.<br>
</li><br>
<a name="ploteditor"></a>
<li>ploteditor<br>
Gibt an ob der <a href="#plotEditor">Plot Editor</a> in der SVG detail
ansicht angezeigt werden soll. Kann auf always, onClick oder never
gesetzt werden. Der Default ist always.
</li><br>
<a name="plotfork"></a>
<li>plotfork<br>
Normalerweise wird die Ploterstellung im Hauptprozess ausgef&uuml;hrt,
FHEM wird w&auml;rend dieser Zeit nicht auf andere Ereignisse
reagieren. Auf Rechnern mit sehr wenig Speicher (z.Bsp. FRITZ!Box 7170)
kann das zum automatischen Abschuss des FHEM Prozesses durch das OS
f&uuml;hren.
</li><br>
<a name="basicAuth"></a>
<li>basicAuth, basicAuthMsg<br>
Fragt username/password zur Autentifizierung ab. Es gibt mehrere
Varianten:
<ul>
<li>falls das Argument <b>nicht</b> in {} eingeschlossen ist, dann wird
es als base64 kodiertes benutzername:passwort interpretiert.
Um sowas zu erzeugen kann man entweder einen der zahlreichen
Webdienste verwenden, oder das base64 Programm. Beispiel:
<ul><code>
$ echo -n fhemuser:secret | base64<br>
ZmhlbXVzZXI6c2VjcmV0<br>
fhem.cfg:<br>
attr WEB basicAuth ZmhlbXVzZXI6c2VjcmV0
</code></ul>
</li>
<li>Werden die Argumente in {} angegeben, wird es als perl-Ausdruck
ausgewertet, die Variablen $user and $password werden auf die
eingegebenen Werte gesetzt. Falls der R&uuml;ckgabewert wahr ist,
wird die Anmeldung akzeptiert.
Beispiel:<br>
<code>
attr WEB basicAuth { "$user:$password" eq "admin:secret" }<br>
</code>
</li>
</ul>
</li><br>
<a name="HTTPS"></a>
<li>HTTPS<br>
Erm&ouml;glicht HTTPS Verbindungen. Es werden die Perl Module
IO::Socket::SSL ben&ouml;tigt, installierbar mit cpan -i
IO::Socket::SSL oder apt-get install libio-socket-ssl-perl; (OSX und
die FritzBox-7390 haben dieses Modul schon installiert.)<br>
Ein lokales Zertifikat muss im Verzeichis certs erzeugt werden.
Dieses Verzeichnis <b>muss</b> im <a href="#modpath">modpath</a>
angegeben werden, also auf der gleichen Ebene wie das FHEM Verzeichnis.
Beispiel:
<ul>
mkdir certs<br>
cd certs<br>
openssl req -new -x509 -nodes -out server-cert.pem -days 3650 -keyout server-key.pem
</ul>
<br>
</li>
<a name="allowedCommands"></a>
<li>allowedCommands<br>
Eine Komma getrennte Liste der erlaubten Befehle. Bei einer leeren
Liste (, dh. nur ein Komma) wird dieser FHEMWEB-Instanz "read-only".
<br> Falls es auf <code>get,set</code> gesetzt ist, dann sind in dieser
FHEMWEB Instanz keine Konfigurations&auml;nderungen m&ouml;glich, nur
"normale" Bedienung der Schalter/etc.<br>
Dieses Attribut sollte zusammen mit dem hiddenroom/hiddengroup
Attributen verwendet werden. <br>
<b>Achtung:</b> allowedCommands sollte wie hier beschrieben
funktionieren, allerdings k&ouml;nnen wir keine Garantie geben,
da&szlig; man sie nicht &uuml;berlisten, und Schaden anrichten kann.
</li><br>
<li><a href="#allowfrom">allowfrom</a>
</li><br>
<a name="stylesheetPrefix"></a>
<li>stylesheetPrefix<br>
Pr&auml;fix f&uuml;r die Dateien style.css, svg_style.css und
svg_defs.svg. Wenn die Datei mit dem Pr&auml;fix fehlt, wird die Default
Datei (ohne Pr&auml;fix) verwendet. Diese Dateien m&uuml;ssen im FHEM
Ordner liegen und k&ouml;nnen direkt mit "Select style" im FHEMWEB
Men&uuml;eintrag ausgew&auml;hlt werden. Beispiel:
<ul>
attr WEB stylesheetPrefix dark<br>
<br>
Referenzdateien:<br>
<ul>
darksvg_defs.svg<br>
darksvg_style.css<br>
darkstyle.css<br>
</ul>
<br>
</ul>
<b>Anmerkung:</b>Wenn der Parametername smallscreen oder touchpad
enth&auml;lt, wird FHEMWEB das Layout/den Zugriff f&uuml;r entsprechende
Ger&auml;te (Smartphones oder Touchpads) optimieren<br>
Standardm&auml;&szlig;ig werden 3 FHEMWEB Instanzen aktiviert: Port 8083
f&uuml;r Desktop Browser, Port 8084 f&uuml;r Smallscreen, und 8085
f&uuml;r Touchpad.<br>
Wenn touchpad oder smallscreen benutzt werden, wird WebApp support
aktiviert: Nachdem Sie eine Seite am iPhone oder iPad mit Safari
angesehen haben, k&ouml;nnen Sie einen Link auf den Homescreen anlegen um
die Seite im Fullscreen Modus zu sehen. Links werden in diesem Modus
anders gerendert, um ein "Zur&uuml;ckfallen" in den "normalen" Browser zu
verhindern.
</li><br>
<a name="iconPath"></a>
<li>iconPath<br>
Durch Doppelpunkt getrennte Aufz&auml;hlung der Verzeichnisse, in
welchen nach Icons gesucht wird. Die Verzeichnisse m&uuml;ssen unter
fhem/www/images angelegt sein. Standardeinstellung ist:
$styleSheetPrefix:default:fhemSVG:openautomation<br>
Setzen Sie den Wert auf fhemSVG:openautomation um nur SVG Bilder zu
benutzen.
</li><br>
<a name="hiddenroom"></a>
<li>hiddenroom<br>
Eine Komma getrennte Liste, um R&auml;ume zu verstecken, d.h. nicht
anzuzeigen. Besondere Werte sind input, detail und save. In diesem
Fall werden diverse Eingabefelder ausgeblendent. Durch direktes Aufrufen
der URL sind diese R&auml;ume weiterhin erreichbar!<br>
Ebenso k&ouml;nnen Eintr&auml;ge in den Logfile/Commandref/etc Block
versteckt werden. </li><br>
<a name="hiddengroup"></a>
<li>hiddengroup<br>
Wie hiddenroom (siehe oben), jedoch auf Ger&auml;tegruppen bezogen.
<br>
Beispiel: attr WEBtablet hiddengroup FileLog,dummy,at,notify
</li><br>
<a name="menuEntries"></a>
<li>menuEntries<br>
Komma getrennte Liste; diese Links werden im linken Men&uuml; angezeigt.
Beispiel:<br>
attr WEB menuEntries fhem.de,http://fhem.de,culfw.de,http://culfw.de<br>
attr WEB menuEntries AlarmOn,http://fhemhost:8083/fhem?cmd=set%20alarm%20on<br>
</li><br>
<a name="longpoll"></a>
<li>longpoll<br>
Dies betrifft die Aktualisierung der Ger&auml;testati in der
Weboberfl&auml;che. Ist longpoll aktiviert, werden
Status&auml;nderungen sofort im Browser dargestellt. ohne die Seite
manuell neu laden zu m&uuml;ssen. Standard ist aktiviert.
</li><br>
<a name="longpollSVG"></a>
<li>longpollSVG<br>
L&auml;dt SVG Instanzen erneut, falls ein Ereignis dessen Inhalt
&auml;ndert. Funktioniert nur, falls der dazugeh&ouml;rige #FileLog
Definition in der .gplot Datei folgenden Form hat: deviceName.Event
bzw. deviceName.*. Wenn man den <a href="#plotEditor">Plot
Editor</a> benutzt, ist das &uuml;brigens immer der Fall. Die SVG Datei
wird bei <b>jedem</b> ausl&ouml;senden Event dieses Ger&auml;tes neu
geladen. Standard ist aus.
</li><br>
<a name="redirectCmds"></a>
<li>redirectCmds<br>
Damit wird das URL Eingabefeld des Browser nach einem Befehl geleert.
Standard ist eingeschaltet (1), ausschalten kann man es durch
setzen des Attributs auf 0, z.Bsp. um den Syntax der Kommunikation mit
FHEMWEB zu untersuchen.
</li><br>
<a name="fwcompress"></a>
<li>fwcompress<br>
Aktiviert die HTML Datenkompression (Standard ist 1, also ja, 0 stellt
die Kompression aus).
</li><br>
<a name="reverseLogs"></a>
<li>reverseLogs<br>
Damit wird das Logfile umsortiert, die neuesten Eintr&auml;ge stehen
oben. Der Vorteil ist, dass man nicht runterscrollen muss um den
neuesten Eintrag zu sehen, der Nachteil dass FHEM damit deutlich mehr
Hauptspeicher ben&ouml;tigt, etwa 6 mal so viel, wie das Logfile auf
dem Datentr&auml;ger gro&szlig; ist. Das kann auf Systemen mit wenig
Speicher (FRITZ!Box) zum Terminieren des FHEM Prozesses durch das
Betriebssystem f&uuml;hren.
</li><br>
<a name="CORS"></a>
<li>CORS<br>
Wenn auf 1 gestellt, wird FHEMWEB einen "Cross origin resource sharing"
Header bereitstellen, n&auml;heres siehe Wikipedia.
</li><br>
<a name="icon"></a>
<li>icon<br>
Damit definiert man ein Icon f&uuml;r die einzelnen Ger&auml;te in der
Raum&uuml;bersicht. Es gibt einen passenden Link in der Detailansicht
um das zu vereinfachen. Um ein Bild f&uuml;r die R&auml;ume selbst zu
definieren muss ein Icon mit dem Namen ico&lt;Raumname&gt;.png im
iconPath existieren (oder man verwendet roomIcons, s.u.)
</li><br>
<a name="roomIcons"></a>
<li>roomIcons<br>
Leerzeichen getrennte Liste von room:icon Zuordnungen
Der erste Teil wird als regexp interpretiert, daher muss ein
Leerzeichen als Punkt geschrieben werden. Beispiel:<br>
attr WEB roomIcons Anlagen.EDV:icoEverything
</li><br>
<a name="sortRooms"></a>
<li>sortRooms<br>
Durch Leerzeichen getrennte Liste von R&auml;umen, um deren Reihenfolge
zu definieren. Beispiel:<br>
attr WEB sortRooms DG OG EG Keller
</li><br>
<a name="defaultRoom"></a>
<li>defaultRoom<br>
Zeigt den angegebenen Raum an falls kein Raum explizit ausgew&auml;hlt
wurde. Achtung: falls gesetzt, wird motd nicht mehr angezeigt.
Beispiel:<br>
attr WEB defaultRoom Zentrale
</li><br>
<a name="sortby"></a>
<li>sortby<br>
Der Wert dieses Attributs wird zum sortieren von Ger&auml;ten in
R&auml;umen verwendet, sonst w&auml;re es der Alias oder, wenn keiner
da ist, der Ger&auml;tename selbst.
</li><br>
<a name="devStateIcon"></a>
<li>devStateIcon<br>
Erste Variante:<br>
<ul>
Leerzeichen getrennte Auflistung von regexp:icon-name:cmd
Dreierp&auml;rchen, icon-name und cmd d&uuml;rfen leer sein.<br>
Wenn der Zustand des Ger&auml;tes mit der regexp &uuml;bereinstimmt,
wird als icon-name das entsprechende Status Icon angezeigt, und (falls
definiert), l&ouml;st ein Klick auf das Icon das entsprechende cmd aus.
Wenn fhem icon-name nicht finden kann, wird der Status als Text
angezeigt.
Beispiel:<br>
<ul>
attr lamp devStateIcon on:closed off:open<br>
attr lamp devStateIcon on::A0 off::AI<br>
attr lamp devStateIcon .*:noIcon<br>
</ul>
Anmerkung: Wenn das Icon ein SVG Bild ist, kann das @colorname Suffix
verwendet werden um das Icon einzuf&auml;rben. Z.B.:<br>
<ul>
attr Fax devStateIcon on:control_building_empty@red off:control_building_filled:278727
</ul>
</ul>
Zweite Variante:<br>
<ul>
Perl regexp eingeschlossen in {}. Wenn der Code undef
zur&uuml;ckliefert, wird das Standard Icon verwendet; wird ein String
in <> zur&uuml;ck geliefert, wird dieser als HTML String interpretiert.
Andernfalls wird der String als devStateIcon gem&auml;&szlig; der
ersten Variante interpretiert, siehe oben. Beispiel:<br>
{'&lt;div style="width:32px;height:32px;background-color:green"&gt;&lt;/div&gt;'}
</ul>
</li><br>
<a name="devStateStyle"></a>
<li>devStateStyle<br>
F&uuml;r ein best. Ger&auml;t einen best. HTML-Style benutzen.
Beispiel:<br>
<ul>
attr sensor devStateStyle style="text-align:left;;font-weight:bold;;"<br>
</ul>
</li><br>
<a name="webCmd"></a>
<li>webCmd<br>
Durch Doppelpunkte getrennte Auflistung von Befehlen, die f&uuml;r ein
bestimmtes Ger&auml;t gelten sollen. Funktioniert nicht mit
smallscreen, ein Ersatz daf&uuml;r ist der devStateIcon Befehl.<br>
Beispiel:
<ul>
attr lamp webCmd on:off:on-for-timer 10<br>
</ul>
<br>
Der erste angegebene Befehl wird in der "set device ?" list
nachgeschlagen (Siehe das <a href="#setList">setList</a> Attrib
f&uuml;r Dummy Ger&auml;te). Wenn <b>dort</b> bekannte Modifier sind,
wird ein anderes Widget angezeigt:
<ul>
<li>Ist der Modifier ":noArg", wird kein weiteres Eingabefeld
angezeigt.</li>
<li>Ist der Modifier ":time", wird ein in Javaskript geschreibenes
Zeitauswahlmen&uuml; angezeigt.</li>
<li>Ist der Modifier ":textField", wird ein Eingabefeld
angezeigt.</li>
<li>Ist der Modifier in der Form
":slider,&lt;min&gt;,&lt;step&gt;,&lt;max&gt;", so wird ein in
JavaScript programmierter Slider angezeigt</li>
<li>Ist der Modifier ":multiple,val1,val2,...", dann ein
Mehrfachauswahl ist m&ouml;glich, das Ergebnis ist Komma-separiert.</li>
<li>In allen anderen F&auml;llen erscheint ein Dropdown mit allen
Modifier Werten.</li>
</ul>
Wenn der Befehl state ist, wird der Wert als Kommando interpretiert.<br>
Beispiele f&uuml;r modifier:
<ul>
define d1 dummy<br>
attr d1 webCmd state<br>
attr d1 setList state:on,off<br>
define d2 dummy<br>
attr d2 webCmd state<br>
attr d2 setList state:slider,0,1,10<br>
define d3 dummy<br>
attr d3 webCmd state<br>
attr d3 setList state:time<br>
</ul>
Anmerkung: dies ist ein Attribut f&uuml;r das anzuzeigende Ger&auml;t,
nicht f&uuml;r die FHEMWEBInstanz.
</li><br>
<a name="column"></a>
<li>column<br>
Damit werden mehrere Spalten f&uuml;r einen Raum angezeigt, indem
sie verschiedene Gruppen Spalten zuordnen. Beispiel:<br>
<ul><code>
attr WEB column LivingRoom:FS20,notify|FHZ,notify DiningRoom:FS20|FHZ
</code></ul>
In diesem Beispiel werden im Raum LivingRoom die FS20 sowie die notify
Gruppe in der ersten Spalte, die FHZ und das notify in der zweiten
Spalte angezeigt.<br>
Anmerkung: einige Elemente, wie SVG Plots und readingsGroup k&ouml;nnen
nur Teil einer Spalte sein wenn sie in <a href="#group">group</a>
stehen.
</li><br>
<a name="closeConn"></a>
<li>closeConn<br>
Falls gesetzt, wird pro TCP Verbindung nur ein HTTP Request
durchgefuehrt. Fuer bestimmte Hardware-Kombinationen (langsamer FHEM
Server, iPad/iPhone als Client) scheint dieses Attribu Ladeprobleme zu
beheben.
</li><br>
</ul>
</ul>
<a name="FHT"></a>
<h3>FHT</h3>
<ul>
Fhem kann FHT Funktelegramme (868.35 MHz) entweder mit einem <a
href="#FHZ">FHZ</a> oder einem <a href="#CUL">CUL</a> empfangen, daher muss
dieses zuerst definiert sein.
<br><br>
<a name="FHTdefine"></a>
<b>Define</b>
<ul>
define &lt;name&gt; FHT &lt;fhtaddress&gt;
<br><br>
&lt;fhtaddress&gt; ist eine vierstellige HEX Zahl entsprechend der
Adresse des FHT80b Ger&auml;tes.
<br>
Beispiel:
<ul>
define wz FHT 3232<br>
</ul>
<br>
Mehr dazu im FHT Abschnitt <a href="#set">set</a>.
</ul>
<br>
<a name="FHTset"></a>
<b>Set </b>
<ul>
set &lt;name&gt; &lt;valuetype&gt; &lt;value&gt;
<br><br>
Wobei value eines von folgenden ist:<br>
<ul>
desired-temp<br>
day-temp night-temp<br>
report1 report2<br>
refreshvalues<br>
mode<br>
holiday1 holiday2 # siehe mode holiday_short oder holiday<br>
manu-temp # Keine Ahnung was das bewirkt<br>
year month day hour minute<br>
time date<br>
lowtemp-offset # Alarm-Temp.-Differenz<br>
windowopen-temp<br>
mon-from1 mon-to1 mon-from2 mon-to2<br>
tue-from1 tue-to1 tue-from2 tue-to2<br>
wed-from1 wed-to1 wed-from2 wed-to2<br>
thu-from1 thu-to1 thu-from2 thu-to2<br>
fri-from1 fri-to1 fri-from2 fri-to2<br>
sat-from1 sat-to1 sat-from2 sat-to2<br>
sun-from1 sun-to1 sun-from2 sun-to2<br>
</ul>
Beispiele:
<ul>
set wz desired-temp 22.5<br>
set fl desired-temp 20.5 day-temp 19.0 night-temp 16.0<br>
</ul>
<br>
Hinweise:
<ul>
<li>Folgende Events werden (mehr oder weniger regelm&auml;&szlig;ig) von
jedem FHT Device gemeldet:
<ul>
measured-temp actuator actuator1...actuator8 warnings<br>
</ul>
Diese Strings k&ouml;nnen f&uuml;r <a href="#notify">notify</a> oder
<a href="#FileLog">FileLog</a> Definitionen verwendet werden.
<ul>
<li>Warnings k&ouml;nnen folgende Strings enthalten:
none, Battery low,Temperature too low, Window open,
Fault on window sensor
</li>
<li>actuator (ohne Suffix) steht f&uuml;r alle Aktoren.</li>
<li>actuator or actuator1..8 kann folgende Werte verarbeiten:
<ul>
<li>&lt;value&gt;%<br>
Das ist der Normalfall. Der Aktor wird angewiesen auf diesen
Wert zu &ouml;ffnen.
</li>
<li>offset &lt;value&gt;%<br>
Der Aktor l&auml;uft mit diesem Offset.
</li>
<li>lime-protection<br>
Der Aktor wird angewiesen die lime-protection (Kalkschutz)
Prozedur auszuf&uuml;hren.
</li>
<li>synctime<br>
Wenn Sond/Sync beim FHT80B gew&auml;hlt wird, wird ein
Countdown gesetzt.
</li>
<li>test<br>
Der Aktor wird vom FHT80b angewiesen zu piepsen (beep).
</li>
<li>pair<br>
Das FHT80b sendet ein "you-belong-to-me"
(Du-geh&ouml;rst-zu-mir) an diesen Aktor.
</li>
</ul></li>
</ul></li>
<br>
<li>Das FHT ist sehr sparsam (oder faul). Es akzeptiert eine Nachricht
vom FHZ1x00 alle 115+x Sekunden, wobei x von der fhtaddress
abh&auml;ngt. Nicht &uuml;berrascht sein wenn ein Befehl erst 10
Minuten sp&auml;ter vom Ger&auml;t angenommen wird. Die FHT Befehle
werden im FHZ1x00/CUL gepuffert bis sie zum FHT geschickt werden.
Siehe den zugeh&ouml;rigen fhtbuf Eintrag im der <a
href="#get">get</a> Abschnitt. Es k&ouml;nnen bis zu 8 Befehle in
einer Nachricht an ein FHT geschickt werden wenn diese alle als
Argumente im gleichen set Befehl zusammengefasst werden. Siehe
nachfolgendes Beispiel. </li><br>
<li>time setzt Stunde und Minute auf lokale Zeit</li><br>
<li>date setzt Jahr, Monat und Tag auf lokale Zeit</li><br>
<li>refreshvalues ist ein Alias f&uumlr report1 255 report2 255</li><br>
<li>Alle *-temp Werte brauchen eine Temperatur als Argument welche auf
0.5&deg;C gerundet wird.<br> Temperatur Werte m&uuml;ssen zwischen
5.5&deg;C und 30.5&deg;C sein. Der Wert 5.5 setzt den Aktor auf OFF,
der Wert 30.5 setzt den Aktor auf ON</li><br>
<li>mode kann auto, manual, holiday or
holiday_short sein.<br>
Wenn der mode holiday ist, schaltet dieser zur&uuml;ck auf entweder
auto oder manual um 00:00 des Tages der wie folgt spezifiziert wird:
<ul>
<li>holiday1 setzt Endtag des Urlaubs</li>
<li>holiday2 setzt den Endmonat des Urlaubs</li>
</ul>
F&uuml;r holiday_short (Party Modus)
<ul>
<li> holiday1 setzt die absolute Stunde zu der von diesem Modus
zur&uuml;ck geschalten wird (in 10-Minuten Schritten, max.
144)</li>
<li> holiday2 setzt den Tag des Monats an dem von diesem Modus
zur&uuml;ck geschalten wird (kann nur heute oder morgen sein, da
holiday1 nur 24h akzeptiert.)</li>
Beispiel:
<ul>
<li>Aktuelles Datum ist der 29. Januar, Uhrzeit ist 18:05</li>
<li>Es soll bis morgen 1:00Uhr in den Party Modus geschalten
sein</li>
<li>set holiday1 to 6 (6 x 10min = Std) and holiday2 to
30</li>
</ul>
</ul>
Die Temperatur f&uuml;r den Urlaubszeitraum wird durch den
desired-temperature Parameter setzt. <br> Bitte beachten, dass der
Holiday Mode nicht fr&uuml;her als auf &Uuml;bermorgen eingestellt
werden kann. Alternativ muss hier holiday_short genutzt werden.<br>
Weiterhin bitte beachten das diese Kommandos nur in einem
"Sammelkommando" erfolgen k&ouml;nnen. Beispiel:
<br>
set FHT1 mode holiday holiday1 24 holiday2 12 desired-temp 14
</li><br>
<li>Die *-from1/*-from2/*-to1/*-to2 Wertetypen brauchen eine
Zeitspezifikation als Argument im Format HH:MM. Diese definieren den
Zeitraum in dem die day-temp g&uuml;ltig ist. Minuten (MM) werden
auf 10er gerundet, 24:00 bedeutet OFF. </li><br>
<li>Um die FHZ Zeit zu synchronisieren und um "stumme" Ger&auml;te
zu wecken, wird folgendes Kommando empfohlen:<br> define fht_sync at
+*3:30 set TYPE=FHT time </li><br>
<li>report1 mit dem Parameter 255 fordert das Senden aller Einstellungen
von Montag bis Sonntag an. Das Argument ist ein Bitfeld um einzelne
Werte wie folgt anzufordern:
<ul>
<li> 1: monday</li>
<li> 2: tuesday</li>
<li> 4: thursday</li>
<li> 8: wednesday</li>
<li>16: friday</li>
<li>32: saturday</li>
<li>64: sunday</li>
</ul>
measured-temp und actuator werden mitgesendet wenn vom FHT als
notwendig erachtet.
<br><br>
<b>Hinweis:</b> Dieser Befehl erzeugt sehr viel Funkverkehr was zu
weiteren Problemen f&uuml;hren kann, besonders wenn Empfang nicht gut
ist. </li><br>
<li>report2 mit dem Parameter 255 fordert die Ausgabe der nachfolgenden
Einstellungen an:<br> day-temp night-temp windowopen-temp
lowtemp-offset desired-temp measured-temp mode warnings.<br> Das
Argument ist ein Bitfeld, um einzelne Werte abzufragen folgendes
anh&auml;ngen:
<ul>
<li> 1: warnings</li>
<li> 2: mode</li>
<li> 4: day-temp, night-temp, windowopen-temp</li>
<li>64: lowtemp-offset</li>
</ul>
measured-temp und actuator werden mitgesendet wenn vom FHT als
notwendig erachtet. <br></li>
<li>lowtemp-offset braucht eine Temperatur als Argument. G&uuml;ltige
Werte m&uuml;ssen zwischen 1.0 und 5.0&deg;C liegen.<br> Wird eine
Warnung erzeugen wenn die desired-temp - measured-temp &gt;
lowtemp-offset, jedoch fr&uuml;hestens 1,5Stunden nach der letzten
&Auml;nderung der desired-temp. </li><br>
<li>FHEM hat optional einen internen Softwarepuffer f&uuml;r FHT
Devices. Dieser Puffer soll vor &Uuml;bertragungsfehlern
sch&uuml;tzen. Wenn nach einem bestimmten Zeitraum keine
Best&auml;tigung erhalten wurde wird FHEM den Befehl erneut senden.
Die Befehle in der Warteschlagen k&ouml;nnen mit <a
href="#list">list</a> &lt;fht-device&gt; angezeigt werden. Siehe die
Attribute <a href="#fhtsoftbuffer">fhtsoftbuffer</a>, <a
href="#retrycount">retrycount</a> und <a
href="#minfhtbuffer">minfhtbuffer</a> f&uuml;r weitere Details.
</li><br>
<li>Befehle im Softwarepuffer werden in folgender Reihenfolge
gesendet:<br>
desired-temp,mode,report1,report2,holiday1,holiday2,day-temp,night-temp,
[all other commands] </li><br>
</ul>
</ul>
<br>
<b>Get</b> <ul>N/A</ul><br>
<a name="FHTattr"></a>
<b>Attribute</b>
<ul>
<li><a href="#attrdummy">dummy</a><br>
<b>Hinweis:</b> Es macht Sinn ein FHT Device auch f&uuml;r ein FHT8b zu
definieren da sonst der Fehler "unknown FHT device, please define one"
f&uuml;r jedes FHT8b generiert wird, denn das CUL meldet die 8b
Nachrichten. Das dummy Attribut sollte bei diesen Devices gesetzt werden
da sonst der interne FHT Buffer des CUL mit 8b-Daten gef&uuml;llt wird
die niemals gebraucht werden. Wenn der Puffer dann voll ist werden "EOB"
Nachrichten vom CUL erzeugt, und Senden zu den 8b ist nicht mehr
m&ouml;glich.</li><br>
<a name="retrycount"></a>
<li>retrycount<br>
Wenn das <a href="#fhtsoftbuffer">fhtsoftbuffer</a> Attribut gesetzt ist,
dann werden die Befehle entsprechend dem retrycount n-mal erneut
versendet wenn nach 240 Sekunden keine Best&auml;tigungsmeldung vom
entsprechenden FHZ Device empfangen wurde.<br> Der Default-Wert ist
1.</li><br>
<a name="minfhtbuffer"></a>
<li>minfhtbuffer<br>
FHEM sendet keine Befehle mehr zum FHZ wenn der fhtbuffer-Wert diesen
Wert unterschritten hat. Default-Wert ist 0. Wenn dieser Wert zu niedrig
ist hat die Reihenfolge von fht-Befehlen weniger Einfluss da nur Befehle
im Softbuffer priorisiert werden k&ouml;nnen. (Siehe Hinweise in der FHT
Sektion <a href="#set">set</a>) Der Maximalwert sollte 7 unter dem
Hardware Maximum sein, siehe fhtbuf. </li><br>
<a name="lazy"></a>
<li>lazy<br>
Wenn das Attribut lazy (faul) gesetzt wurde sendet FHEM keine Befehle
wenn die aktuell gelesenen Werte und der zu setzende Wert identisch sind.
Das spart Funkzeit und hilft Konflikte mit der Regelung die besagt, dass
maximal 1% der Zeit als Funkzeit verwendet werden darf, zu vermeiden.
Nicht standardm&auml;&szlig;ig aktiviert. </li><br>
<a name="tmpcorr"></a>
<li>tmpcorr<br>
Korrigiert die Werte die vom FHZ gemeldet werden um den angegebenen Wert.
Hinweis: nur die measured-temp Werte die von FHEM gemeldet (f&uuml;r
Logging genutzt) werden angepasst. </li><br>
<li><a href="#ignore">ignore</a></li>
<li><a href="#do_not_notify">do_not_notify</a></li>
<li><a href="#model">model</a> (fht80b)</li>
<li><a href="#showtime">showtime</a></li>
<li><a href="#IODev">IODev</a></li>
<li><a href="#eventMap">eventMap</a></li>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
</ul>
<br>
<a name="FHTevents"></a>
<b>Erzeugte Events:</b>
<ul>
<li>actuator</li>
<li>actuator1 actuator2 actuator3 actuator4<br>
actuator5 actuator6 actuator7 actuator8<br>
(wird gesendet wenn ein Offset zum entsprechenden Ventil konfiguriert wurde)</li>
<li>mon-from1 mon-to1 mon-from2 mon-to2</li>
<li>tue-from1 tue-to1 tue-from2 tue-to2</li>
<li>wed-from1 wed-to1 wed-from2 wed-to2</li>
<li>thu-from1 thu-to1 thu-from2 thu-to2</li>
<li>fri-from1 fri-to1 fri-from2 fri-to2</li>
<li>sat-from1 sat-to1 sat-from2 sat-to2</li>
<li>sun-from1 sun-to1 sun-from2 sun-to2</li>
<li>mode</li>
<li>holiday1 holiday2</li>
<li>desired-temp</li>
<li>measured-temp measured-low measured-high</li>
<li>warnings</li>
<li>manu-temp</li>
<li>year month day hour minute</li>
<li>day-temp night-temp lowtemp-offset windowopen-temp</li>
<li>ack can-xmit can-rcv ack2 start-xmit end-xmit (Nur wenn das CUL
f&uuml;r die &Uuml;bertragung von FHT Protokoll Daten konfiguriert
ist)</li>
</ul>
<br>
</ul>
<a name="FHT8V"></a>
<h3>FHT8V</h3>
<ul>
Fhem kann die Ventile vom Typ FHT8V durch einen <a href="#CUL">CUL</a>
direkt, ohne zwischengeschalteten FHT, ansteuern. Dieser Abschnitt
beschreibt einen der Bausteine, der andere ist das <a href="#PID">PID</a> Device.
<br>
<br>
<a name="FHT8Vdefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; FHT8V &lt;Hauscode&gt; [IODev|FHTID]</code>
<br><br>
<code>&lt;Hauscode&gt;</code> ist eine vierstellige hexadezimale Zahl, die
folgende Beziehung zum zust&auml;ndigen CUL-Device aufweisen muss:
<ul>Bei gegebenem Hauscode des CUL als AABB muss dieser Hauscode die Form CCBB
haben, wobei CC gr&ouml;&szlig;er oder gleich AA, aber kleiner AA+8 sein muss.
</ul>
Diese Form wurde gew&auml;hlt, damit der CUL alle FHT8V-Ventilstellungen
innerhalb von zwei Minuten aktualisieren kann. <br><br>
<code>&lt;IODev&gt;</code> mu&szlig; angegeben werden, wenn der als letzter
definierte CUL nicht der zust&auml;ndige ist. Normalerweise wird dies mit
dem <a href="#IODev">IODev</a>-Attribut gesetzt, da die
&Uuml;berpr&uuml;fung der Adresse aber w&auml;hrend der Definition erfolgt,
brauchen wir hier eine Ausnahme. <br>
Als Alternative kann man die FHTID des zust&auml;ndigen IODev-Ger&auml;tes
(anstelle des IODev selbst) setzen. Diese Methode ist n&ouml;tig, wenn man
FHT8V &uuml;ber FHEM2FHEM betreibt. <br>
Beispiel:
<ul>
<code>define wz FHT8V 3232</code><br>
</ul>
</ul>
<br>
<a name="FHT8Vset"></a>
<b>Set </b>
<ul>
<li>set &lt;name&gt; valve &lt;Wert&gt;<br>
&Ouml;ffnet das Ventil auf den angegebenen Wert (in Prozent, von 0 bis 100).
</li>
<li>set &lt;name&gt; pair<br>
Verbindet das Ventil mit dem CUL.
</li>
<li>set &lt;name&gt; decalc<br>
Startet einen Entkalkungslauf des angegebenen Ventils.
</li>
</ul>
<br>
<a name="FHT8Vget"></a>
<b>Get </b>
<ul>
<li>get &lt;name&gt; valve<br>
Liest die Ventil&ouml;ffnung aus dem FHT-Puffer des CUL und wandelt sie
in Prozent (von 0 bis 100) um.
</li>
</ul>
<br>
<a name="FHT8Vattr"></a>
<b>Attributes</b>
<ul>
<li><a href="#IODev">IODev</a></li>
<li><a href="#dummy">dummy</a></li>
<li><a href="#ignore">ignore</a></li>
<li><a href="#eventMap">eventMap</a></li><br>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
</ul>
<br>
</ul>
<a name="FHZ"></a>
<h3>FHZ</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#FHZ'>FHZ</a><br/>
</ul>
<a name="FLOORPLAN"></a>
<h3>FLOORPLAN</h3>
<ul>
Fügt dem fhem-Menü einen zusätzlichen Menüpunkt "Floorplans" hinzu, dre zu einer Anzeige ohne fhem-Menü, Räume oder device-Listen führt.
Geräte können an einer festlegbaren Koordinate auf dem Bildschirm angezeigt werden, üblicherweise mit einem anklickbaren icon, das das Ein- oder Aus-Schalten
des Geräts durch klicken erlaubt. Ein Hintergrundbild kann verwendet werden - z.B. ein Grundriss oder jegliches andere Bild.
Mit floorplanstyle.css kann die Formatierung angepasst werden.<br>
Eine Schritt-für-Schritt-Anleitung zur Einrichtung ist verfügbar in
<a href="http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/docs/fhem-floorplan-installation-guide.pdf?format=raw">Englisch</a> und
<a href="http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/docs/fhem-floorplan-installation-guide_de.pdf?format=raw">Deutsch</a>. <br>
<br>
<a name="FLOORPLANdefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; FLOORPLAN </code>
<br><br>
<b>Hinweis:</b> Speichern Sie Ihr Hintergrundbild mit dem Dateinamen fp_&lt;name&gt;.png in Ihrem icon_ordner (www/images/default , www/pgm2 or FHEM) .<br><br>
Beispiel:
<ul>
<code>
define Grundriss FLOORPLAN<br>
fp_Grundriss.png
</code><br>
</ul>
</ul>
<br>
<a name="FLOORPLANset"></a>
<b>Set</b>
<ul>
<li>N/A</li>
</ul>
<br>
<a name="FLOORPLANget"></a>
<b>Get</b>
<ul>
<code>get &lt;name&gt; config</code>
<br>
Zeigt die Konfiguration des FLOORPLAN <name> incl. allen Attributen an. Kann fuer ein include-file verwendet werden.<br>
</ul>
<br>
<a name="FLOORPLANattr"></a>
<b>Attribute</b>
<ul>
<li><a name="fp_fpname">userattr fp_&lt;name&gt; &lt;top&gt;,&lt;left&gt;[,&lt;style&gt;[,&lt;description&gt;]]</a><br><br>
A <a href="#userattr">userattr</a> fp_&lt;name&gt; wird automatisch angelegt, sofern es noch nicht existiert.<br>
<ul>
<li>top = Bildschirmposition, pixel vom oberen Bildschirmrand</li>
<li>left = Bildschirmposition, pixel vom linken Bildschirmrand</li>
<li>style =
<ul>
<li>0 nur icon/Status</li>
<li>1 Gerätename und icon/Status</li>
<li>2 Gerätename, icon/Status und Kommandos</li>
<li>3 Geräte-reading und optionale Beschreibung</li>
<li>4 S300TH-spezifisch, zeigt Temperatur und Luftfeuchtigkeit an</li>
<li>5 icon/Status und Kommandos (ohne Gerätename)</li>
<li>6 Geräte-reading, Zeitstempel und optionale Beschreibung</li>
</ul>
</li>
<li>Eine ggf. angegebene Bschreibung wird anstelle des original-Gerätenamens angezeigt.</li>
</ul></li><br>
Beispiele:<br>
<ul>
<table>
<tr><td><code>attr lamp1 fp_Erdgeschoss 100,100</code></td><td><code>#display lamp1 with icon only at screenposition 100,100</code></td></tr>
<tr><td><code>attr lamp2 fp_Erdgeschoss 100,140,1,Art-Deco</code></td><td><code>#display lamp2 with description 'Art-Deco-Light' at 100,140</code></td></tr>
<tr><td><code>attr lamp2 fp_ErsteEtage 130,100,1</code></td><td><code>#display the same device at different positions on other floorplans</code></td></tr>
<tr><td><code>attr myFHT fp_Erdgeschoss 300,20,10,Temperature</code></td><td><code>#display given Text + FHT-temperature</code></td></tr>
</table>
</ul>
<b>Hinweis:</b> Die Parameter müssen ohne Leerstellen aneinandergereiht werden.<br><br>
<li><a name="fp_arrange">fp_arrange</a><br>
Aktiviert den "arrange-Modus" der ein zusätzliches Menü anzeigt,
mit dem Geräte auf dem Bildschirm angeordnet werden können. Dabei können die Koordinaten auch durch Platzieren mit der Maus gesetzt werden.<br>
Beispiel:
<ul>
<code>attr Erdgeschoss fp_arrange 1</code><br>
<code>attr Erdgeschoss fp_arrange detail #Zeigt die Geräte mit den Infos Raum, Typ und Alias</code><br>
<code>attr Erdgeschoss fp_arrange WEB #Aktiviert den arrange-Modus nur für die Webinstanz WEB</code><br><br>
</ul>
</li>
<li><a name="stylesheet">stylesheet</a><br>
Ermöglicht die Verwendung eines eigenen css-stylesheet für Ihren floorplan. Dieses Attribut hat Vorrang vor dem Standard-stylesheet.
Das Standard-stylesheet für floorplans ist <code>floorplanstyle.css</code>. Falls <a href="#stylesheetPrefix">stylesheetPrefix</a> in der korrespondierenden FHEMWEB-Instanz gesetzt ist, wird dieser
<code>stylesheetPrefix</code> auch dem stylesheet für floorplans vorangestellt (prepend).<br>
Alle stylesheets werden im stylesheet-Ordner des fhem-Dateisystems abgelegt. Legen Sie dort
Ihr eigenes stylesheet neben <code>floorplanstyle.css</code> in demselben Ordner ab.<br>
Beispiel:
<ul>
<code>attr Erdgeschoss stylesheet myfloorplanstyle.css</code><br><br>
</ul>
</li>
<li><a name="fp_default">fp_default</a><br>
Der floorplan-Startbildschirm wird übersprungen wenn dieses Attribut einem der von Ihnen definierten floorplans zugeordnet ist.
</li>
Beispiel:
<ul>
<code>attr Erdgeschoss fp_default 1</code><br><br>
</ul>
<li><a name="fp_noMenu">fp_noMenu</a><br>
Blendet das floorplans-Menü aus, das normalerweise am linken Bildschirmrand angezeigt wird.
</li>
Beispiel:
<ul>
<code>attr Erdgeschoss fp_noMenu 1</code><br><br>
</ul>
<li><a name="commandfield">commandfield</a><br>
Fügt Ihrem floorplan ein fhem-Kommandofeld hinzu.
</li>
Beispiel:
<ul>
<code>attr Erdgeschoss commandfield 1</code><br><br>
</ul>
<li><a name="fp_backgroundimg">fp_backgroundimg</a><br>
Gestattet die Bennung eine Hintergundbilds unabhängig vom floorplan-Namen.<br>
<b>Hinweis:</b> Das Attribut kann mittels notify geändert werden, um z.B. unterschiedliche Hintergundbidlder am Tag oder in der Nacht anzuzeigen.<br>
Beispiel:
<ul>
<code>attr Erdgeschoss fp_backgroundimg foobar.png</code><br><br>
</ul>
</li>
<li><a name="fp_viewport">fp_viewport</a><br>
Gestattet die Verwendung eines abweichenden viewport-Wertes für die touchpad-Ausgabe.<br>
Die Default-viewport-Angbe ist "width=768".
</li>
<a name="fp_roomIcons"></a>
<li>fp_roomIcons<br>
Mit Leerstellen getrennte Liste von floorplan:icon -Paaren, um
einem Eintrag des floorplan-Menues icons zuzuordnen, genau wie
die entsprechende Funktionalitaet in FHEMWEB. Beispiel:<br>
attr Grundriss fp_roomIcons Grundriss:control_building_empty Media:audio_eq
</li>
<li><a name="fp_inherited">Vererbt von FHEMWEB</a><br>
Die folgenden Attribute werden von der zugrundliegenden <a href="#FHEMWEB">FHEMWEB</a>-Instanz vererbt:<br>
<ul>
<a href="#smallscreen">smallscreen</a><br>
<a href="#touchpad">touchpad</a><br>
<a href="#refresh">refresh</a><br>
<a href="#plotmode">plotmode</a><br>
<a href="#plotsize">plotsize</a><br>
<a href="#webname">webname</a><br>
<a href="#redirectCmds">redirectCmds</a><br>
<a href="#longpoll">longpoll</a><br>
<a href="#allowedCommands">allowedCommands</a><br>
</ul>
</li><br>
</ul>
<br>
</ul>
<a name="FRM"></a>
<h3>FRM</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#FRM'>FRM</a><br/>
</ul>
<a name="FRM_AD"></a>
<h3>FRM_AD</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#FRM_AD'>FRM_AD</a><br/>
</ul>
<a name="FRM_I2C"></a>
<h3>FRM_I2C</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#FRM_I2C'>FRM_I2C</a><br/>
</ul>
<a name="FRM_IN"></a>
<h3>FRM_IN</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#FRM_IN'>FRM_IN</a><br/>
</ul>
<a name="FRM_LCD"></a>
<h3>FRM_LCD</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#FRM_LCD'>FRM_LCD</a><br/>
</ul>
<a name="FRM_OUT"></a>
<h3>FRM_OUT</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#FRM_OUT'>FRM_OUT</a><br/>
</ul>
<a name="FRM_PWM"></a>
<h3>FRM_PWM</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#FRM_PWM'>FRM_PWM</a><br/>
</ul>
<a name="FRM_RGB"></a>
<h3>FRM_RGB</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#FRM_RGB'>FRM_RGB</a><br/>
</ul>
<a name="FRM_ROTENC"></a>
<h3>FRM_ROTENC</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#FRM_ROTENC'>FRM_ROTENC</a><br/>
</ul>
<a name="FRM_SERVO"></a>
<h3>FRM_SERVO</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#FRM_SERVO'>FRM_SERVO</a><br/>
</ul>
<a name="FRM_STEPPER"></a>
<h3>FRM_STEPPER</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#FRM_STEPPER'>FRM_STEPPER</a><br/>
</ul>
<a name="FS20"></a>
<h3>FS20</h3>
<ul>
Das FS20 Protokoll wird von einem gro&szlig;en Spektrum an Ger&auml;ten
verwendet. Diese stammen entweder aus der Kategorie Sensor/Sender oder
Aktor/Empf&auml;nger. Die Funknachrichten (868.35 MHz) k&ouml;nnen mit einem
<a href="#FHZ">FHZ</a> oder einem <a href="#CUL">CUL</a> empfangen werden.
Dieses muss daher zuerst definiert werden.
<br><br>
<a name="FS20define"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; FS20 &lt;housecode&gt; &lt;button&gt;
[fg &lt;fgaddr&gt;] [lm &lt;lmaddr&gt;] [gm FF] </code>
<br><br>
Die Werte housecode, button, fg, lm, und gm k&ouml;nnen entweder hexadezimal
oder in der ELV-typischen quatern&auml;ren Notation (Zahlen von 1-4)
eingegeben werden.
Hier und auch in sp&auml;teren Beispielen wird als Referenz die ELV4
Notation verwendet. Die Notationen k&ouml;nnen auch gemischt werden da FHEM
die verwendete Notation durch z&auml;hlen der Zeichen erkennt.<br>
<ul>
<li><code>&lt;housecode&gt;</code> ist eine 4 stellige Hex oder 8 stellige
ELV4 Zahl, entsprechend der Hauscode Adresse.</li>
<li><code>&lt;button&gt;</code> ist eine 2 stellige Hex oder 4 stellige ELV4
Zahl, entsprechend dem Button des Transmitters.</li>
<li>Optional definiert <code>&lt;fgaddr&gt;</code> die Funktionsgruppe mit
einer 2 stelligen Hex oder 4 stelligen ELV4 Adresse. Bei Hex muss die
erste Stelle F, bei ELV4 die ersten zwei Stellen 44 sein.</li>
<li>Optional definiert <code>&lt;lmaddr&gt;</code> definiert einen local
master mit einer 2 stelligen Hex oder 4 stelligen ELV4 Adresse. Bei Hex
muss die letzte Stelle F, bei ELV4 die letzten zwei Stellen 44 sein.</li>
<li>Optional definiert gm den global master. Die Adresse muss FF bei HEX
und 4444 bei ELV4 Notation sein.</li>
</ul>
<br>
Beispiele:
<ul>
<code>define lamp FS20 7777 00 fg F1 gm F</code><br>
<code>define roll1 FS20 7777 01</code><br>
<code>define otherlamp FS20 24242424 1111 fg 4412 gm 4444</code><br>
<code>define otherroll1 FS20 24242424 1114</code>
</ul>
</ul>
<br>
<a name="FS20set"></a>
<b>Set </b>
<ul>
<code>set &lt;name&gt; &lt;value&gt; [&lt;time&gt]</code>
<br><br>
Wobei <code>value</code> einer der folgenden Werte sein kann:<br>
<ul><code>
dim06% dim12% dim18% dim25% dim31% dim37% dim43% dim50%<br>
dim56% dim62% dim68% dim75% dim81% dim87% dim93% dim100%<br>
dimdown<br>
dimup<br>
dimupdown<br>
off<br>
off-for-timer<br>
on # dimmer: Setze auf diesen Wert vor dem Ausschalten<br>
on-for-timer # Siehe Hinweise<br>
on-old-for-timer # Setze zum vorherigen (vor dem Einschalten)<br>
ramp-on-time # Zeit bis zum erreichen des gew&uuml;nschten Dim-Wertes<br>
ramp-off-time # Zeit bis zum Ausschalten bei Dimmern<br>
reset<br>
sendstate<br>
timer<br>
toggle # zwischen aus und dem letztern Dim-Wert<br>
on-till # Siehe Hinweise<br>
</code></ul><br>
Die<a href="#setExtensions"> set extensions</a> sind ebenfalls
unterst&uuml;tzt.<br>
<br>
Beispiele:
<ul>
<code>set lamp on</code><br>
<code>set lamp1,lamp2,lamp3 on</code><br>
<code>set lamp1-lamp3 on</code><br>
<code>set lamp on-for-timer 12</code><br>
</ul>
<br>
Hinweise:
<ul>
<li>reset nur mit Vorsicht verwenden: Auch der Hauscode wird
gel&ouml;scht. </li>
<li>Da das FS20 Protokoll 0.22Sek f&uuml;r eine Funksequenz ben&ouml;tigt
wird nach jeder Ausf&uuml;hrung eine Pause von 0.22Sek eingef&uuml;gt.
</li>
<li>Das FS20ST schaltet f&uuml;r dim*% und dimup ein. Es reagiert nicht
auf sendstate.</li>
<li>Wenn ein Timer gesetzt ist (und dieser nicht 0 ist) werden on, dim*,
und *-for-timer ber&uuml;cksichtigt (zumindest beim FS20ST). </li>
<li>Das <code>time</code> Argument geht von 0.25Sek bis 4Std und 16Min.
Da <code>time</code> nur mit einem Byte dargestellt wird ergeben sich
hieraus nur 112 eindeutige Zeit-Werte die mit ansteigender
gr&ouml;&szlig;e immer gr&ouml;ber aufgel&ouml;st werden. Das Programm
zeigt die exakte Restzeit an wenn die gew&auml;hlte Aufl&ouml;sung
nicht eindeutig war. Die Aufl&ouml;sung ist is 0.25Sek von 0 bis 4
Sekunden, 0.5Sek von 4 bis 8Sek, 1Sek von 8 bis 16 Sek und so weiter.
Wenn eine h&ouml;here Genauigkeit bei gro&szlig;en Werten gebraucht
wird, dann hilft <a href="#at">at</a> mit einer Aufl&ouml;sung von
1Sek.</li>
<li>on-till setzt eine absolute Zeit im "at" Format voraus (HH:MM:SS,
HH:MM oder { &lt;perl code&gt; }, wobei der perl-code eine Zeit
zur&uuml;ck geben muss). Wenn die aktuelle Zeit gr&ouml;&szlig;er ist
als die angegebene, dann wird der Befehl ignoriert und ein at-"on"
Befehl erzeugt, sowie f&uuml;r die angegebe "till-time" ein at-"off"
Befehl.
</li>
</ul>
</ul>
<br>
<b>Get</b> <ul>N/A</ul><br>
<a name="FS20attr"></a>
<b>Attribute</b>
<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>
<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>
<a name="attrdummy"></a>
<li>dummy<br>
Setzt das Attribut dummy um Devices zu definieren, die keine Funksignale
absetzen. Zugeh&ouml;rige notifys werden ausgef&uuml;hrt wenn das Signal
empfangen wird. Wird beispielsweise genutzt um auf Code eines Sender zu
reagieren, dennoch wird es auch dann kein Signal senden wenn es im Web
Frontend getriggert wird.
</li><br>
<a name="follow-on-for-timer"></a>
<li>follow-on-for-timer<br>
Plant ein "setstate off;trigger off" f&uuml;r die angegebene Zeit als
Argument zum on-for-timer Command. Oder das gleiche mit "on" wenn der
Befehl "follow-off-for-timer" war.
</li><br>
<a name="follow-on-timer"></a>
<li>follow-on-timer<br>
Wie follow-on-for-timer plant es ein "setstate off;trigger off", aber
diesmal als Argument in Sekunden zum Attribut. Wird verwendet um dem
vorprogrammierten Timer zu folgen welcher vorher durch den timer-Befehl,
oder manuell durch Dr&uuml;cken des Buttons gesetzt wurde. Im Handbuch
finden sich noch mehr Informationen.
</li><br>
<a name="model"></a>
<li>model<br>
Das "model" Attribut bezeichnet den Modelltyp des Ger&auml;tes. Dieses
Attribut wird (derzeit) nicht direkt durch fhem.pl genutzt. Es kann
beispielsweise von externen Programmen oder Webinterfaces genutzt werden
um Ger&auml;teklassen zu unterscheiden und dazu passende Befehle zu senden
(z.B. "on" oder "off" an ein fs20st, "dim..%" an ein fs20du etc.). Die
Schreibweise des Modellnamens ist wie die in Anf&uuml;hrungszeichen in
der Anleitung gedruckte Bezeichnung die jedem Ger&auml;t beiliegt.
Dieser Name wird ohne Leerzeichen ausschlie&szlig;lich in Kleinbuchstaben
verwendet. G&uuml;ltige Zeichen sind <code>a-z 0-9</code> und
<code>-</code>, andere Zeichen sind zu vermeiden. Hier ist eine Liste der
"offiziellen" Devices:<br><br>
<b>Sender/Sensor</b>: fs20fms fs20hgs fs20irl fs20kse fs20ls
fs20pira fs20piri fs20piru fs20s16 fs20s20 fs20s4 fs20s4a fs20s4m
fs20s4u fs20s4ub fs20s8 fs20s8m fs20sd fs20sn fs20sr fs20ss
fs20str fs20tc1 fs20tc6 fs20tfk fs20tk fs20uts fs20ze fs20bf fs20si3<br><br>
<b>Dimmer</b>: fs20di fs20di10 fs20du<br><br>
<b>Empf&auml;nger/Aktor</b>: fs20as1 fs20as4 fs20ms2 fs20rgbsa fs20rst
fs20rsu fs20sa fs20sig fs20sm4 fs20sm8 fs20st fs20su fs20sv fs20ue1
fs20usr fs20ws1
</li><br>
<a name="ignore"></a>
<li>ignore<br>
Ignoriere dieses Ger&auml;t, beispielsweise wenn es dem Nachbar
geh&ouml;rt. Das Ger&auml;t wird keine FileLogs/notifys triggern,
empfangene Befehle werden stillschweigend ignoriert (es wird kein
Funksignal gesendet, wie auch beim <a href="#attrdummy">dummy</a>
Attribut). Das Ger&auml;t wird weder in der Device-List angezeigt (es sei
denn, es wird explizit abgefragt), noch wird es in Befehlen mit
"Wildcard"-Namenspezifikation (siehe <a href="#devspec">devspec</a>)
erscheinen. Es kann mit dem "ignored=1" devspec dennoch erreicht werden.
</li><br>
<li><a href="#do_not_notify">do_not_notify</a></li>
<li><a href="#showtime">showtime</a></li>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
</ul>
<br>
<a name="FS20events"></a>
<b>Erzeugte Events:</b>
<ul>
Von einem FS20 Ger&auml;t k&ouml;nnen folgende Events empfangen werden:
<li>on</li>
<li>off</li>
<li>toggle</li>
<li>dimdown</li>
<li>dimup</li>
<li>dimupdown</li>
<li>on-for-timer</li>
Welches Event gesendet wird ist Ger&auml;teabh&auml;ngig und kann manchmal
auf dem Device konfiguriert werden.
</ul>
</ul>
<a name="FileLog"></a>
<h3>FileLog</h3>
<ul>
<br>
<a name="FileLogdefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; FileLog &lt;filename&gt; &lt;regexp&gt;</code>
<br><br>
Speichert Ereignisse in einer Log-Datei mit Namen <code>&lt;filename&gt;</code>. Das Log-Format ist
<ul><code><br>
YYYY-MM-DD_HH:MM:SS &lt;device&gt; &lt;event&gt;<br>
<br></code></ul>
Der Ausdruck unter regexp wird anhand des Ger&auml;tenames &uuml;berpr&uuml;ft und zwar
devicename:event oder der timestamp:devicename:event-Kombination.
Der regexp muss mit dem kompletten String &uuml;bereinstimmen und nicht nur teilweise.
<br>
<code>&lt;filename&gt;</code> k&ouml;nnen %-wildcards der POSIX
strftime-Funktion des darunterliegenden OS enthalten (siehe auch strftime
Beschreibung).
Allgemein gebr&auml;uchliche Wildcards sind:
<ul>
<li><code>%d</code> Tag des Monats (01..31)</li>
<li><code>%m</code> Monat (01..12)</li>
<li><code>%Y</code> Jahr (1970...)</li>
<li><code>%w</code> Wochentag (0..6); beginnend mit Sonntag (0)</li>
<li><code>%j</code> Tag des Jahres (001..366)</li>
<li><code>%U</code> Wochennummer des Jahres, wobei Wochenbeginn = Sonntag (00..53)</li>
<li><code>%W</code> Wochennummer des Jahres, wobei Wochenbeginn = Montag (00..53)</li>
</ul>
FHEM ersetzt <code>%L</code> mit dem Wert des global logdir Attributes.<br>
Bevor <code>%V</code> f&uuml;r ISO 8601 Wochennummern verwendet werden,
muss &uuml;berpr&uuml;ft werden, ob diese Funktion durch das Brriebssystem
unterst&uuml;tzt wird (Es kann sein, dass %V nicht umgesetzt wird, durch
einen Leerstring ersetzt wird oder durch eine falsche ISO-Wochennummer
dargestellt wird - besonders am Jahresanfang)
Bei der Verwendung von <code>%V</code> muss gleichzeitig f&uuml;r das Jahr
ein <code>%G</code> anstelle von <code>%Y</code> benutzt werden.<br>
Beispiele:
<ul>
<code>define lamplog FileLog %L/lamp.log lamp</code><br>
<code>define wzlog FileLog ./log/wz-%Y-%U.log
wz:(measured-temp|actuator).*</code><br>
Mit ISO 8601 Wochennummern falls unterst&uuml;tzt:<br>
<code>define wzlog FileLog ./log/wz-%G-%V.log
wz:(measured-temp|actuator).*</code><br>
</ul>
<br>
</ul>
<a name="FileLogset"></a>
<b>Set </b>
<ul>
<li>reopen
<ul>
Erneutes &Ouml;ffnen eines FileLogs nach h&auml;ndischen &Auml;nderungen in dieser Datei.
</ul>
</li>
<li>addRegexpPart &lt;device&gt; &lt;regexp&gt;
<ul>
Hinzuf&uuml;gen eines regexp Teiles, der gem&auml;&szlig; device:regexp
aufgebaut ist. Die Teile werden mit einem | voneinander getrennt.
Achtung: Wenn die regexp-Teile umsortiert werden, k&ouml;nnen die
manuell erzeugten regexps ung&uuml;ltig werden.
</ul>
</li>
<li>removeRegexpPart &lt;re&gt;
<ul>
Entfernt ein regexp-Teil. Achtung: Wenn die regexp-Teile umsortiert
werden, k&ouml;nnen die manuell erzeugten regexps ung&uuml;ltig
werden.<br>
Die Inkonsistenz von addRegexpPart/removeRegexPart-Argumenten hat
seinen Ursprung in der Wiederverwendung von Javascript-Funktionen.
</ul>
</li>
<li>absorb secondFileLog
<ul>
F&uuml;hrt den gegenw&auml;rtigen Log und den secondFileLog zu einer
gemeinsamen Datei zusammen, f&uuml;gt danach die regexp des
secondFileLog dem gegenw&auml;rtigen Filelog hinzu und l&ouml;scht dann
anschlie&szlig;end das secondFileLog.<br>
Dieses Komanndo wird zur Erzeugung von kombinierten Plots (weblinks)
ben&ouml;tigt.<br>
<b>Hinweise:</b>
<ul>
<li>secondFileLog wird gel&ouml;scht (d.h. die FHEM-Definition und
die Datei selbst).</li>
<li>nur das aktuelle File wird zusammengef&uuml;hrt, keine
archivierten Versionen.</li>
<li>Weblinks, die das secondFilelog benutzen werden unbrauchbar, sie
m&uuml;ssen deshalb auf das neue Logfile angepasst oder gel&ouml;scht
werden.</li>
</ul>
</ul>
</li>
<br>
</ul>
<br>
<a name="FileLogget"></a>
<b>Get</b>
<ul>
<code>get &lt;name&gt; &lt;infile&gt; &lt;outfile&gt; &lt;from&gt;
&lt;to&gt; &lt;column_spec&gt; </code>
<br><br>
Liest Daten aus einem Logfile und wird von einem Frontend ben&ouml;tigt, um
Daten ohne direkten Zugriff aus der Datei zu lesen.<br>
<ul>
<li>&lt;infile&gt;<br>
Name des Logfiles, auf das zugegriffen werden soll. "-" steht f&uuml;r
das aktuelle Logfile. Man kann auch auf ein &auml;lteres File zugreifen
(oder eines aus dem Archiv).</li>
<li>&lt;outfile&gt;<br>
Bei einem "-", bekommt man die Daten auf der aktuellen Verbindung
zur&uuml;ck, anderenfall ist es das Name (eigentlich Prefix, s.u.) des
Output-Files. Wenn mehr als ein File angesprochen wird, werden die
einzelnen Dateinamen durch ein "-" getrennt, anderenfalls werden die
Daten in einzelne Dateien geschrieben, die - beginnend mit 0 -
durchnummeriert werden.
</li>
<li>&lt;from&gt; &lt;to&gt;<br>
Bezeichnet den gew&uuml;nschten Datenbereich. Die beiden Elemente
m&uuml;ssen ganz oder mit dem Anfang des Zeitformates
&uuml;bereinstimmen.</li>
<li>&lt;column_spec&gt;<br>
Jede column_spec sendet die gew&uuml;nschten Daten entweder in eine
gesonderte Datei oder &uuml;ber die gegenw&auml;rtige Verbindung durch
"-" getrennt.<br>
Syntax: &lt;col&gt;:&lt;regexp&gt;:&lt;default&gt;:&lt;fn&gt;<br>
<ul>
<li>&lt;col&gt;
gibt die Spaltennummer zur&uuml;ck, beginnend mit 1 beim Datum.
Wenn die Spaltenmummer in doppelten Anf&uuml;hrungszeichen steht,
handelt es sich um einen festen Text und nicht um eine
Spaltennummer.</li>
<li>&lt;regexp&gt;
gibt, falls vorhanden, Zeilen mit Inhalten von regexp zur&uuml;ck.
Gro&szlig;- und Kleinschreibung beachten. </li>
<li>&lt;default&gt;<br>
Wenn keine Werte gefunden werden, und der Default-Wert
(Voreinstellung) wurde gesetzt, wird eine Zeile zur&uuml;ckgegeben,
die den von-Wert (from) und diesen Default-Wert enth&auml;lt.
Dieses Leistungsmerkmal ist notwendig, da gnuplot abbricht, wenn
ein Datensatz keine Daten enth&auml;lt.
</li>
<li>&lt;fn&gt;
Kann folgende Inhalte haben:
<ul>
<li>int<br>
L&ouml;st den Integer-Wert zu Beginn eines Strings heraus. Wird
z.B. bei 10% gebraucht.</li>
<li>delta-h oder delta-d<br>
Gibt nur den Unterschied der Werte-Spalte pro
Stunde oder pro Tag aus. Wird ben&ouml;tigt, wenn die Spalte
einen Z&auml;hler enth&auml;lt, wie im Falles des KS300 in der
Spalte f&uuml;r die Regenmenge.</li>
<li>alles andere<br>
Dieser String wird als Perl-Ausdruck ausgewertet. @fld enthaelt
die aktuelle Zeile getrennt durch Leerzeichen. Achtung:
Dieser String/Perl-Ausdruck darf keine Leerzeichen enthalten.
</li>
</ul></li>
</ul></li>
</ul>
<br><br>
Beispiel:
<ul><code><br>
get outlog out-2008.log - 2008-01-01 2008-01-08 4:IR:int: 9:IR::
</code></ul>
<br>
</ul>
<a name="FileLogattr"></a>
<b>Attribute</b>
<ul>
<a name="archivedir"></a>
<a name="archivecmd"></a>
<a name="nrarchive"></a>
<li>archivecmd / archivedir / nrarchive<br>
Wenn eine neue FileLog-Datei ge&ouml;ffnet wird, wird der FileLog
archiver aufgerufen. Das geschieht aber nur , wenn der Name der Datei
sich ge&auml;ndert hat(abh&auml;ngig von den zeitspezifischen
Wildcards, die weiter oben unter <a href="#FileLogdefine">FileLog
(define)</a> beschrieben werden) und gleichzeitig ein neuer Datensatz
in diese Datei geschrieben werden muss. <br>
Wenn das Attribut archivecmd benutzt wird, startet es als
shell-Kommando ( eine Einbettung in " ist nicht notwendig), und jedes %
in diesem Befehl wird durch den Namen des alten Logfiles ersetzt.<br>
Wenn dieses Attribut nicht gesetzt wird, aber daf&uuml;r nrarchive
und/oder archivecmd, werden nrarchive viele Logfiles im aktuellen
Verzeichnis gelassen, und &auml;ltere Dateien in das Archivverzeichnis
(archivedir) verschoben (oder gel&ouml;scht, falls kein archivedir
gesetzt wurde).<br>
Hinweis: Werden diese Attribute als global instance gesetzt, hat das
auschlie&szlig;lich auf das <a href="#logfile">FHEM logfile</a>
Auswirkungen.
</li><br>
<li><a href="#disable">disable</a></li>
<a name="logtype"></a>
<li>logtype<br>
Wird vom pgm2 webfrontend ben&ouml;tigt, um gnuplot/SVG-Kurven aus den
Logdateien zu zeichnen. Der String wird aus komma-separierten Tokens
(,) erzeugt, wobei jeder Token ein eigenes gnuplot-Programm bezeichnet.
Die Token k&ouml;nnen Doppelpunkte (:) enthalten. Der Teil vor dem
Doppelpunkt bezeichnet den Namen des Programms; der Teil nach dem
Doppelpunkt ist der String, der im Web.Frontend dargestellt werden
soll. Gegenw&auml;rtig sind folgende Typen von gnuplot-Programmen
implementiert:<br>
<ul>
<li>fs20<br>
Zeichnet on als 1 and off als 0. Die geeignete
filelog-Definition f&uuml;r das Ger&auml;t fs20dev lautet:<br>
define fslog FileLog log/fs20dev-%Y-%U.log fs20dev
</li>
<li>fht<br>
Zeichnet die Ist-Temperatur/Soll-temperatur/Aktor Kurven. Die
passende FileLog-Definition (f&uuml;r das FHT-Ger&auml;t mit
Namen fht1)sieht wie folgt aus: <br>
<code>define fhtlog1 FileLog log/fht1-%Y-%U.log fht1:.*(temp|actuator).*</code>
</li>
<li>temp4rain10<br>
Zeichnet eine Kurve aus der Temperatur und dem Niederschlag (pro
Stunde und pro Tag) eines KS300. Die dazu passende
FileLog-Definition (f&uuml;r das KS300
Ger&auml;t mit Namen ks300) sieht wie folgt aus:<br>
define ks300log FileLog log/fht1-%Y-%U.log ks300:.*H:.*
</li>
<li>hum6wind8<br>
Zeichnet eine Kurve aus der Feuchtigkeit und der
Windgeschwindigkeit eines ks300. Die geeignete
FileLog-Definition ist identisch mit der vorhergehenden
Definition. Beide programme erzeugen das gleiche Log.
</li>
<li>text<br>
Zeigt das LogFile in seiner urspr&uuml;nglichen Form (Nur
Text).Eine gnuplot-Definition ist nicht notwendig. </li> </ul>
Beispiel:<br> attr ks300log1 logtype
temp4rain10:Temp/Rain,hum6wind8:Hum/Wind,text:Raw-data </li><br>
</ul>
<br>
</ul>
<a name="GDS"></a>
<h3>GDS</h3>
<ul>
Sorry, keine deutsche Dokumentation vorhanden.<br/><br/>
Die englische Doku gibt es hier: <a href='http://fhem.de/commandref.html#GDS'>GDS</a><br/>
</ul>
<p>
<a name="GEOFANCY" id="GEOFANCY"></a>
</p>
<h3>
GEOFANCY
</h3>
<div style="margin-left: 2em">
Eine deutsche Version der Dokumentation ist derzeit nicht vorhanden. Die englische Version ist hier zu finden:
</div>
<div style="margin-left: 2em">
<a href='http://fhem.de/commandref.html#GEOFANCY'>GEOFANCY</a>
</div>
<p>
<a name="GUEST" id="GUEST"></a>
</p>
<h3>
GUEST
</h3>
<div style="margin-left: 2em">
<a name="GUESTdefine" id="GUESTdefine"></a> <b>Define</b>
<div style="margin-left: 2em">
<code>define &lt;rg_FirstName&gt; GUEST [&lt;Device Name der Bewohnergruppe&gt;]</code><br>
<br>
Stellt ein spezielles Dummy Device bereit, welches einen Gast repräsentiert.<br>
Basierend auf dem aktuelle Status und anderen Readings können andere Aktionen innerhalb von FHEM angestoßen werden.<br>
<br>
Wird vom übergeordneten Modul <a href="#RESIDENTS">RESIDENTS</a> verwendet, kann aber auch einzeln benutzt werden.<br>
<br>
Beispiele:<br>
<div style="margin-left: 2em">
<code># Einzeln<br>
define rg_Guest GUEST<br>
<br>
# Typisches Gruppenmitglied<br>
define rg_Guest GUEST rgr_Residents # um Mitglied der Gruppe rgr_Residents zu sein<br>
<br>
# Mitglied in mehreren Gruppen<br>
define rg_Guest GUEST rgr_Residents,rgr_Guests # um Mitglied den Gruppen rgr_Residents und rgr_Guests zu sein</code>
</div>
</div><br>
<div style="margin-left: 2em">
Bitte beachten, dass das RESIDENTS Gruppen Device zunächst angelegt werden muss, bevor ein GUEST Objekt dort Mitglied werden kann.
</div><br>
<br>
<br>
<a name="GUESTset" id="GUESTset"></a> <b>Set</b>
<div style="margin-left: 2em">
<code>set &lt;rg_FirstName&gt; &lt;command&gt; [&lt;parameter&gt;]</code><br>
<br>
Momentan sind die folgenden Kommandos definiert.<br>
<ul>
<li>
<b>location</b> &nbsp;&nbsp;-&nbsp;&nbsp; setzt das Reading 'location'; siehe auch Attribut rg_locations, um die in FHEMWEB angezeigte Liste anzupassen
</li>
<li>
<b>mood</b> &nbsp;&nbsp;-&nbsp;&nbsp; setzt das Reading 'mood'; siehe auch Attribut rg_moods, um die in FHEMWEB angezeigte Liste anzupassen
</li>
<li>
<b>state</b> &nbsp;&nbsp;home,gotosleep,asleep,awoken,absent,gone&nbsp;&nbsp; wechselt den Status; siehe auch Attribut rg_states, um die in FHEMWEB angezeigte Liste anzupassen
</li>
</ul>
</div><br>
<br>
<div style="margin-left: 2em">
<u>Mögliche Stati und ihre Bedeutung</u><br>
<br>
<div style="margin-left: 2em">
Dieses Modul unterscheidet 6 verschiedene Stati:<br>
<br>
<ul>
<li>
<b>home</b> - Mitbrwohner ist zuhause und wach
</li>
<li>
<b>gotosleep</b> - Mitbewohner ist auf dem Weg ins Bett
</li>
<li>
<b>asleep</b> - Mitbewohner schläft
</li>
<li>
<b>awoken</b> - Mitbewohner ist gerade aufgewacht
</li>
<li>
<b>absent</b> - Mitbewohner ist momentan nicht zuhause, wird aber bald zurück sein
</li>
<li>
<b>none</b> - Gast Device ist deaktiviert
</li>
</ul>
</div>
</div><br>
<br>
<div style="margin-left: 2em">
<u>Zusammenhang zwischen Anwesenheit/Presence und Aufenthaltsort/Location</u><br>
<br>
<div style="margin-left: 2em">
Unter bestimmten Umständen führt der Wechsel des Status auch zu einer Änderung des Readings 'location'.<br>
<br>
Wannimmer die Anwesenheit (bzw. das Reading 'presence') von 'absent' auf 'present' wechselt, wird 'location' auf 'home' gesetzt. Sofern das Attribut rg_locationHome gesetzt ist, wird die erste Lokation daraus anstelle von 'home' verwendet.<br>
<br>
Wannimmer die Anwesenheit (bzw. das Reading 'presence') von 'present' auf 'absent' wechselt, wird 'location' auf 'underway' gesetzt. Sofern das Attribut rg_locationUnderway gesetzt ist, wird die erste Lokation daraus anstelle von 'underway' verwendet.
</div>
</div><br>
<br>
<div style="margin-left: 2em">
<u>Auto-Status 'gone'</u><br>
<br>
<div style="margin-left: 2em">
Immer wenn ein Mitbewohner auf 'absent' gesetzt wird, wird ein Zähler gestartet, der nach einer bestimmten Zeit den Status automatisch auf 'gone' setzt.<br>
Der Standard ist nach 16 Stunden.<br>
<br>
Dieses Verhalten kann über das Attribut rg_autoGoneAfter angepasst werden.
</div>
</div><br>
<br>
<div style="margin-left: 2em">
<u>Anwesenheit mit anderen GUEST oder ROOMMATE Devices synchronisieren</u><br>
<br>
<div style="margin-left: 2em">
Wenn Sie immer zusammen mit anderen Mitbewohnern oder Gästen das Haus verlassen oder erreichen, können Sie ihren Status ganz einfach auf andere Mitbewohner übertragen.<br>
Durch das Setzen des Attributs rg_PassPresenceTo folgen die dort aufgeführten Mitbewohner ihren eigenen Statusänderungen nach 'home', 'absent' oder 'gone'.<br>
<br>
Bitte beachten, dass Mitbewohner mit dem aktuellen Status 'none' oder 'gone' (im Falle von ROOMMATE Devices) nicht beachtet werden.
</div>
</div><br>
<br>
<div style="margin-left: 2em">
<u>Zusammenhang zwischen Aufenthaltsort/Location und Anwesenheit/Presence</u><br>
<br>
<div style="margin-left: 2em">
Unter bestimmten Umständen hat der Wechsel des Readings 'location' auch einen Einfluss auf den tatsächlichen Status.<br>
<br>
Immer wenn eine Lokation mit dem Namen 'home' gesetzt wird, wird auch der Status auf 'home' gesetzt, sofern die Anwesenheit bis dahin noch auf 'absent' stand. Sofern das Attribut rg_locationHome gesetzt wurde, so lösen alle dort angegebenen Lokationen einen Statuswechsel nach 'home' aus.<br>
<br>
Immer wenn eine Lokation mit dem Namen 'underway' gesetzt wird, wird auch der Status auf 'absent' gesetzt, sofern die Anwesenheit bis dahin noch auf 'present' stand. Sofern das Attribut rg_locationUnderway gesetzt wurde, so lösen alle dort angegebenen Lokationen einen Statuswechsel nach 'underway' aus. Diese Lokationen werden auch nicht in das Reading 'lastLocation' übertragen.<br>
<br>
Immer wenn eine Lokation mit dem Namen 'wayhome' gesetzt wird, wird das Reading 'wayhome' auf '1' gesetzt, sofern die Anwesenheit zu diesem Zeitpunkt 'absent' ist. Sofern das Attribut rg_locationWayhome gesetzt wurde, so führt das VERLASSEN einer dort aufgeführten Lokation ebenfalls dazu, dass das Reading 'wayhome' auf '1' gesetzt wird. Es gibt also 2 Möglichkeiten den Nach-Hause-Weg-Indikator zu beeinflussen (implizit und explizit).<br>
Die Ankunft zuhause setzt den Wert von 'wayhome' zurück auf '0'.<br>
<br>
Wenn Sie auch das <a href="#GEOFANCY">GEOFANCY</a> Modul verwenden, können Sie das Reading 'location' ganz einfach über GEOFANCY Ereignisse aktualisieren lassen. Definieren Sie dazu einen NOTIFY-Trigger wie diesen:<br>
<br>
<code>define n_rg_Manfred.location notify geofancy:currLoc_Manfred.* set rg_Manfred location $EVTPART1</code><br>
<br>
Durch das Anlegen von Geofencing-Zonen mit den Namen 'home' und 'wayhome' in der iOS App werden zukünftig automatisch alle Statusänderungen wie oben beschrieben durchgeführt.
</div>
</div><br>
<br>
<a name="GUESTattr" id="GUESTattr"></a> <b>Attribute</b><br>
<div style="margin-left: 2em">
<ul>
<li>
<b>rg_autoGoneAfter</b> - Anzahl der Stunden, nach denen sich der Status automatisch auf 'gone' ändert, wenn der aktuelle Status 'absent' ist; Standard ist 36 Stunden
</li>
<li>
<b>rg_locationHome</b> - hiermit übereinstimmende Lokationen werden als zuhause gewertet; der erste Eintrag wird für das Zusammenspiel bei Statusänderungen benutzt; mehrere Einträge durch Leerzeichen trennen; Standard ist 'home'
</li>
<li>
<b>rg_locationUnderway</b> - hiermit übereinstimmende Lokationen werden als unterwegs gewertet; der erste Eintrag wird für das Zusammenspiel bei Statusänderungen benutzt; mehrere Einträge durch Leerzeichen trennen; Standard ist 'underway'
</li>
<li>
<b>rg_locationWayhome</b> - das Verlassen einer Lokation, die hier aufgeführt ist, lässt das Reading 'wayhome' auf '1' setzen; mehrere Einträge durch Leerzeichen trennen; Standard ist "wayhome"
</li>
<li>
<b>rg_locations</b> - Liste der in FHEMWEB anzuzeigenden Lokationsauswahlliste in FHEMWEB; mehrere Einträge nur durch Komma trennen und KEINE Leerzeichen verwenden
</li>
<li>
<b>rg_moodDefault</b> - die Stimmung, die nach Ankunft zuhause oder nach dem Statuswechsel von 'awoken' auf 'home' gesetzt werden soll
</li>
<li>
<b>rg_moodSleepy</b> - die Stimmung, die nach Statuswechsel zu 'gotosleep' oder 'awoken' gesetzt werden soll
</li>
<li>
<b>rg_moods</b> - Liste von Stimmungen, wie sie in FHEMWEB angezeigt werden sollen; mehrere Einträge nur durch Komma trennen und KEINE Leerzeichen verwenden
</li>
<li>
<b>rg_passPresenceTo</b> - synchronisiere die Anwesenheit mit anderen GUEST oder ROOMMATE Devices; mehrere Devices durch Leerzeichen trennen
</li>
<li>
<b>rg_realname</b> - wo immer GUEST den richtigen Namen verwenden möchte nutzt es den Wert des Attributs alias oder group; Standard ist group
</li>
<li>
<b>rg_showAllStates</b> - die Stati 'asleep' und 'awoken' sind normalerweise nicht immer sichtbar, um einen einfachen Zubettgeh-Prozess über das devStateIcon Attribut zu ermöglichen; Standard ist 0
</li>
<li>
<b>rg_states</b> - Liste aller in FHEMWEB angezeigter Stati; Eintrage nur mit Komma trennen und KEINE Leerzeichen benutzen; nicht unterstützte Stati führen zu Fehlern
</li>
</ul>
</div><br>
<br>
<br>
<b>Generierte Readings/Events:</b><br>
<div style="margin-left: 2em">
<ul>
<li>
<b>durTimerAbsence</b> - Timer, der die Dauer der Abwesenheit in Minuten anzeigt
</li>
<li>
<b>durTimerPresence</b> - Timer, der die Dauer der Anwesenheit in Minuten anzeigt
</li>
<li>
<b>durTimerSleep</b> - Timer, der die Schlafdauer in Minuten anzeigt
</li>
<li>
<b>lastArrival</b> - Zeitstempel der letzten Ankunft zu Hause
</li>
<li>
<b>lastAwake</b> - Zeitstempel des Endes des letzten Schlafzyklus
</li>
<li>
<b>lastDeparture</b> - Zeitstempel des letzten Verlassens des Zuhauses
</li>
<li>
<b>lastDurAbsence</b> - Dauer der letzten Abwesenheit im folgenden Format: Stunden:Minuten:Sekunden
</li>
<li>
<b>lastDurPresence</b> - Dauer der letzten Anwesenheit im folgenden Format: Stunden:Minuten:Sekunden
</li>
<li>
<b>lastDurSleep</b> - Dauer des letzten Schlafzyklus im folgenden Format: Stunden:Minuten:Sekunden
</li>
<li>
<b>lastLocation</b> - der vorherige Aufenthaltsort
</li>
<li>
<b>lastMood</b> - die vorherige Stimmung
</li>
<li>
<b>lastSleep</b> - Zeitstempel des Beginns des letzten Schlafzyklus
</li>
<li>
<b>lastState</b> - der vorherige Status
</li>
<li>
<b>location</b> - der aktuelle Aufenthaltsort
</li>
<li>
<b>presence</b> - gibt den Zuhause Status in Abhängigkeit des Readings 'state' wieder (kann 'present' oder 'absent' sein)
</li>
<li>
<b>mood</b> - die aktuelle Stimmung
</li>
<li>
<b>state</b> - gibt den aktuellen Status wieder
</li>
<li>
<b>wayhome</b> - abhängig vom aktullen Aufenthaltsort, kann der Wert '1' werden, wenn die Person auf dem weg zurück nach Hause ist
</li>
<li>
<br>
Die folgenden Readings werden auf '-' gesetzt, sobald der Status auf 'none' steht:<br>
lastArrival, lastDurAbsence, lastLocation, lastMood, location, mood
</li>
</ul>
</div>
</div>
<a name="HCS"></a>
<h3>HCS</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#HCS'>HCS</a><br/>
</ul>
<a name="HMLAN"></a>
<h3>HMLAN</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#HMLAN'>HMLAN</a><br/>
</ul>
<a name="HMS"></a>
<h3>HMS</h3>
<ul>
<a name="HMSdefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; HMS &lt;housecode&gt;</code>
<br><br>
Der <code>&lt;housecode&gt;</code> ist eine vierstellige HEX-Zahl,
entsprechend dem HMS Ger&auml;t.<br>
Beispiel:
<ul>
<code>define temp HMS 1234</code><br>
</ul>
Hinweise:<br>
<ul>
<li>Derzeit werden folgende Komponenten Unterst&uuml;tzt: HMS100-T
HMS100-TF HMS100-WD HMS100-MG HMS100-TFK HMS100-CO HMS100-FIT RM100-2
RM100-3</li>
<li>Der Hauscode kann sich &auml;ndern wenn die Batterie gewechselt wird.
Um sich das Leben einfacher zu machen kann man ein "Wildcard"
(Platzhalter) Device f&uuml;r jeden Typ von HMS Ger&auml;t anlegen.
Zuerst wird die echte Device-ID gepr&uuml;ft, danach die Wildcard-ID.
Wildcards sind:
<ul>
<li>1000 f&uuml;r das HMS100-TF</li>
<li>1001 f&uuml;r das HMS100-T</li>
<li>1002 f&uuml;r das HMS100-WD</li>
<li>1003 f&uuml;r das RM100-2</li>
<li>1004 f&uuml;r das HMS100-TFK</li>
<li>1006 f&uuml;r das HMS100-MG</li>
<li>1008 f&uuml;r das HMS100-CO</li>
<li>100e f&uuml;r das HMS100-FIT</li>
</ul>
</li>
<li>Einige "Batteriestand niedrig" Benachrichtigungen sind noch nicht
implemeniert (RM100, HMS100WD).</li>
<li>Die Installation ist zu testen bevor man sich auf die
Funktionalit&auml;t verl&auml;sst.</li>
</ul>
<br>
</ul>
<br>
<a name="HMSset"></a>
<b>Set</b> <ul>N/A</ul><br>
<a name="HMSget"></a>
<b>Get</b> <ul>N/A</ul><br>
<a name="HMSattr"></a>
<b>Attributes</b>
<ul>
<li><a href="#ignore">ignore</a></li>
<li><a href="#do_not_notify">do_not_notify</a></li>
<li><a href="#showtime">showtime</a></li>
<li><a href="#IODev">IODev</a></li>
<li><a href="#eventMap">eventMap</a></li>
<li><a href="#model">model</a> (hms100-t hms100-tf hms100-wd hms100-mg
hms100-co hms100-tfk hms100-fit rm100-2)</li>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
</ul>
<br>
</ul>
<a name="HMinfo"></a>
<h3>HMinfo</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#HMinfo'>HMinfo</a><br/>
</ul>
<a name="HTTPMOD"></a>
<h3>HTTPMOD</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#HTTPMOD'>HTTPMOD</a><br/>
</ul>
<a name="HTTPSRV"></a>
<h3>HTTPSRV</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#HTTPSRV'>HTTPSRV</a><br/>
</ul>
<a name="HUEBridge"></a>
<h3>HUEBridge</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#HUEBridge'>HUEBridge</a><br/>
</ul>
<a name="HUEDevice"></a>
<h3>HUEDevice</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#HUEDevice'>HUEDevice</a><br/>
</ul>
<a name="Heating_Control"></a>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<h3>Heating Control</h3>
<ul>
<br>
<a name="Heating_Controldefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; Heating_Control &lt;device&gt; [&lt;language&gt;] &lt;profile&gt; &lt;command&gt;|&lt;condition&gt;</code>
<br><br>
Bildet ein Wochenprofil f&uumlr ein &lt;device&gt;, zb. Heizk&oumlrper, ab.<br>
Es k&oumlnnen f&uumlr jeden Tag unterschiedliche Schaltzeiten angegeben werden.<br>
Ist das &lt;device&gt; ein Heizk&oumlrperthermostat (zb. FHT8b, MAX) so wird bei FHT8b/MAX die
zu setzende Temperatur im &lt;profile&gt; automatisch mittels <br><br>
<code>set &lt;device&gt; (desired-temp|desiredTemerature) &lt;temp&gt;</code> <br><br> gesendet.
Struktuen von Heizk&oumlrperthermostaten bekommen aufgrund des fhem-Typs auch desired-temp gesendet:
Nutze bitte explizite Kommandos wenn Strukturen von MAX Heizthermostaten gesteuert werden sollen.<br><br>
Ist eine &lt;condition&gt; angegeben und ist zum Schaltpunkt der Ausdruck unwahr,
so wird dieser Schaltpunkt nicht ausgef&uumlhrt.<br>
Alternativ zur Automatik kann stattdessen eigener Perl-Code im &lt;command&gt; ausgef&uumlhrt werden.
<p>
Folgende Parameter sind im Define definiert:
<ul><b>device</b><br>
Name des zu schaltenden Device.
</ul>
<p>
<ul><b>language</b><br>
Spezifiziert die Sprache f&uumlr die Definition und die Anzeige der Profile in der Weboberfl&aumlche.
Zurzeit sind de,en,fr definiert. Der Parameter ist optional.
</ul>
<p>
<ul><b>profile</b><br>
Angabe des Wochenprofils. Die einzelnen Schaltzeiten sind durch Leerzeichen getrennt
Die Angabe der Schaltzeiten ist nach folgendem Muster definiert:<br>
<ul><b>[&lt;Wochentage&gt;|]&lt;Uhrzeit&gt;|&lt;Parameter&gt;</b></ul><br>
<u>Wochentage:</u> optionale Angabe, falls nicht gesetzt wird der Schaltpunkt jeden Tag ausgef&uumlhrt.
F&uumlr die Tage an denen dieser Schaltpunkt aktiv sein soll, ist jeder Tag mit seiner
Tagesnummer (Mo=1, ..., So=7) oder Name des Tages (Mo, Di, ..., So) einzusetzen.<br>
<u>Uhrzeit:</u>Angabe der Uhrzeit zu der geschaltet werden soll, Format: HH:MM:[SS](HH im 24 Stunden Format) oder eine Perlfunction wie {sunrise_abs()}<br>
<u>Parameter:</u>Angabe der zu setzenden Temperatur als Zahl mit Format 99.9 oder als symbolische Konstante <b>eco</b>
or <b>comfort</b> - was immer das Heizk&oumlrperthermostat versteht.
Symbolischen Werten kann ein zus&aumltzlicher Parameter angeh&aumlngt werden: dayTemp:16 night-temp:15. Unten folgen Beispiele<br><br>
</ul>
<p>
<ul><b>command</b><br>
Falls keine Condition in () angegeben wurde, so wird alles weitere als Command
interpretiert. Perl-Code ist in {} zu setzen. <br>
Wichtig: Falls ein Command definiert ist, so wird zu den definierten Schaltzeiten
nur(!) das Command ausgef&uumlhrt. Falls ein desired-temp Befehl abgesetzt werde soll,
so muss dies explizit angegeben werden.<br>
Folgende Parameter werden ersetzt:<br>
<ol>
<li>@ => das zu schaltende Device</li>
<li>% => die zu setzende Temperatur</li>
</ol>
</ul>
<p>
<ul><b>condition</b><br>
Bei Angabe einer Condition ist diese in () zu setzen und mit validem Perl-Code zu versehen.<br>
Der R&uumlckgabedatentyp der condition muss boolean sein.<br>
Die Parameter @ und % werden interpretiert.
</ul>
<p>
<b>Beispiel:</b>
<ul>
<code>define HCW Heating_Control Bad_Heizung 12345|05:20|21 12345|05:25|comfort 17:20|21 17:25|eco</code><br>
Mo-Fr wird die Temperatur um 05:20Uhr auf 21&deg;C, und um 05:25Uhr auf <b>comfort</b> gesetzt.
Jeden Tag wird die Temperatur um 17:20Uhr auf 21&deg;C und 17:25Uhr auf <b>eco</b> gesetzt.<p>
<code>define HCW Heating_Control WZ_Heizung 07:00|16 Mo,Di,Mi|16:00|18.5 20:00|12
{fhem("set dummy on"); fhem("set @ desired-temp %");}</code><br>
Zu den definierten Schaltzeiten wird nur(!) der in {} angegebene Perl-Code ausgef&uumlhrt.<p>
<code>define HCW Heating_Control WZ_Heizung Sa-So,Mi|08:00|21 (ReadingsVal("WeAreThere", "state", "no") eq "yes")</code><br>
Die zu setzende Temperatur wird nur gesetzt, falls die Dummy Variable WeAreThere = "yes" ist.<p>
<code>define HCW Heating_Control WZ_Heizung en Su-Fr|{sunrise_abs()}|21 Mo-Fr|{sunset_abs()}|16</code><br>
Das Ger&aumlt wird bei Sonnenaufgang und Sonnenuntergang geschaltet. Sprache: Englisch.
<code>define HCW Heating_Control WZ_Heizung en Mo-Fr|{myFunction}|night-temp:18 Mo-Fr|{myFunction()}|dayTemp:16</code><br>
Das Ger&aumlt wird bei myFunction() geschaltet. Es wird das Kommando "night-temp 18" bzw. "dayTemp 16" gesendet.
Wenn du beispielsweise nach einer Temperaturabsenkungsphase erreichen willst, dass alle Heating_Controls ihren aktuellen Wert
einstellen sollen, kannst du die Funktion <b>Heating_Control_SetAllTemps()</b> aufrufen.
Dieser Aufruf kann per notify automatisch an ein dummy gekoppelt werden:
<code>define HeizStatus2 notify Heizung:.* {Heating_Control_SetAllTemps()}</code>
<p>
</ul>
</ul>
<a name="Heating_Controlset"></a>
<b>Set</b> <ul>N/A</ul><br>
<a name="Heating_Controlget"></a>
<b>Get</b> <ul>N/A</ul><br>
<a name="Heating_ControlLogattr"></a>
<b>Attributes</b>
<ul>
<li><a href="#disable">disable</a></li>
<li><a href="#event-on-update-reading">event-on-update-reading</a></li>
<li><a href="#event-on-change-reading">event-on-change-reading</a></li>
<li><a href="#stateFormat">stateFormat</a></li>
<li>windowSensor<br>Definiert eine Liste mit Fensterkontakten. Wenn das Reading window state eines Fensterkontakts <b>open</b> ist, wird der aktuelle Schaltvorgang verz&oumlgert.</li>
</ul><br>
</ul>
<a name="I2C_BMP180"></a>
<h3>I2C_BMP180</h3>
<ul>
<a name="I2C_BMP180"></a>
<p>
Dieses Modul erm&ouml;glicht das Auslesen der digitalen (Luft)drucksensoren
BMP085 und BMP180 &uuml;ber den I2C Bus des Raspberry Pi.<br><br>
<b>Es gibt zwei M&ouml;glichkeiten das Modul mit dem I2C Bus zu verbinden:</b><br>
<ul>
<li><b>&Uuml;ber das RPII2C Modul</b><br>
I2C-Botschaften werden &uuml;ber ein I2C Interface Modul wie beispielsweise das <a href="#RPII2C">RPII2C</a>, <a href="#FRM">FRM</a>
oder <a href="#NetzerI2C">NetzerI2C</a> gesendet. Daher muss dieses vorher definiert werden.<br>
<b>Das Attribut IODev muss definiert sein.</b><br><br>
</li>
<li><b>&Uuml;ber die HiPi Bibliothek</b><br>
Diese beiden Zeilen m&uuml;ssen in die Datei <b>/etc/modules</b> angef&uuml;gt werden,
um die Kernel Module automatisch beim Booten des Raspberry Pis zu laden.<br>
<code><pre> i2c-bcm2708
i2c-dev</pre></code>
Installation des HiPi Perl Moduls:<br>
<code><pre> wget http://raspberry.znix.com/hipifiles/hipi-install
perl hipi-install</pre></code>
Um die Rechte f&uuml;r die I2C Devices anzupassen, folgende Datei:<br>
<code><pre> /etc/udev/rules.d/98_i2c.rules</pre></code>
mit diesem Inhalt anlegen:<br>
<code><pre> SUBSYSTEM=="i2c-dev", MODE="0666"</pre></code>
<b>Reboot</b><br><br>
Falls der Sensor am zweiten I2C Bus am Stecker P5 (nur in Version 2 des
Raspberry Pi) verwendet werden soll, muss die fett gedruckte Zeile
des folgenden Codes in das FHEM Start Skript aufgenommen werden:
<code><pre> case "$1" in
'start')
<b>sudo hipi-i2c e 0 1</b>
...</pre></code>
</li></ul>
<p>
<b>Define</b>
<ul>
<code>define BMP180 &lt;BMP180_name&gt; &lt;I2C_device&gt;</code><br><br>
&lt;I2C device&gt; darf nicht verwendet werden, wenn der I2C Bus &uuml;ber das RPII2C Modul angesprochen wird. For HiPi ist es allerdings notwendig. <br>
<br>
Beispiel:
<pre>
define BMP180 I2C_BMP180 /dev/i2c-0
attr BMP180 oversampling_settings 3
attr BMP180 poll_interval 5
</pre>
<pre>
define BMP180 I2C_BMP180
attr BMP180 IODev RPiI2CMod
attr BMP180 oversampling_settings 3
attr BMP180 poll_interval 5
</pre>
</ul>
<a name="I2C_BMP180set"></a>
<b>Set</b>
<ul>
<code>set BMP180 readValues</code>
<br><br>
Liest die aktuelle Temperatur und den Luftdruck des Sensors aus.<br>
Dies wird automatisch nach Ablauf des definierten Intervalls ausgef&uuml;hrt.
Wenn der aktuelle Wert gelesen werden soll, kann dieser Befehl auch manuell
ausgef&uuml;hrt werden.
<br><br>
</ul>
<a name="I2C_BMP180get"></a>
<b>Get</b>
<ul>
N/A
</ul>
<br>
<a name="I2C_BMP180attr"></a>
<b>Attribute</b>
<ul>
<li>oversampling_settings<br>
Steuert das Oversampling der Druckmessung im Sensor.<br>
Default: 3, g&uuml;ltige Werte: 0, 1, 2, 3<br><br>
</li>
<li>poll_interval<br>
Definiert das Poll Intervall in Minuten f&uuml;r das Auslesen einer neuen Messung.<br>
Default: 5, g&uuml;ltige Werte: 1, 2, 5, 10, 20, 30<br><br>
</li>
<li>roundTemperatureDecimal<br>
Rundet den Temperaturwert mit den angegebenen Nachkommastellen.<br>
Default: 1, g&uuml;ltige Werte: 0, 1, 2<br><br>
</li>
<li>roundPressureDecimal<br>
Rundet die Drucksensorwerte mit den angegebenen Nachkommastellen.<br>
Default: 1, valid values: 0, 1, 2<br><br>
</li>
<li>altitude<br>
Wenn dieser Wert definiert ist, wird diese Angabe zus&auml; f&uuml;r die Berechnung des
Luftdrucks bezogen auf Meeresh&ouml;he (Normalnull) NN herangezogen.<br>
Bemerkung: Dies ist ein globales Attribut.<br><br>
<code>attr global altitude 220</code>
</li>
</ul>
<br>
</ul>
<a name="I2C_DS1307"></a>
<h3>I2C_DS1307</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#I2C_DS1307'>I2C_DS1307</a><br/>
</ul>
<a name="I2C_LCD"></a>
<h3>I2C_LCD</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#I2C_LCD'>I2C_LCD</a><br/>
</ul>
<a name="I2C_PCA9532"></a>
<h3>I2C_PCA9532</h3>
<ul>
<a name="I2C_PCA9532"></a>
Erm&ouml;glicht die Verwendung eines PCA9532 I2C 16 Kanal PWM IC.
Das PCA9532 hat 2 unabh&auml;ngige PWM Stufen. Jeder Kanal kanne einer der Stufen zugeordnet werden oder direkt auf off/on gesetzt werden.
I2C-Botschaften werden &uuml;ber ein I2C Interface Modul wie beispielsweise das <a href="#RPII2C">RPII2C</a>, <a href="#FRM">FRM</a>
oder <a href="#NetzerI2C">NetzerI2C</a> gesendet. Daher muss dieses vorher definiert werden.<br>
<b>Das Attribut IODev muss definiert sein.</b><br>
<a name="I2C_PCA9532Define"></a><br>
<b>Define</b>
<ul>
<code>define &lt;name&gt; I2C_PCA9532 &lt;I2C Address&gt;</code><br>
Der Wert <code>&lt;I2C Address&gt;</code> ist ein zweistelliger Hex-Wert<br>
</ul>
<a name="I2C_PCA9532Set"></a>
<b>Set</b>
<ul>
<code>set &lt;name&gt; &lt;port&gt; &lt;value&gt;</code><br><br>
<ul>
<li>wenn als <code>&lt;port&gt;</code> Port0 bis Port15 verwendet wird, dann ist <code>&lt;value&gt;</code> einer dieser Werte:<br>
<ul>
<code>
off<br>
on<br>
PWM0 (Port wird auf PWM0 Frequenz- und Pulsweiteneinstellung gesetzt)<br>
PWM1 (Port wird auf PWM1 Frequenz- und Pulsweiteneinstellung gesetzt)<br>
</code>
</ul>
</li>
<li>
wenn als <code>&lt;port&gt;</code> PWM0 oder PWM1 verwendet wird, ist <code>&lt;value&gt;</code> ein Wert zwischen 0 und 255 ensprechend der Pulsweite der PWM Stufe.
</li>
</ul>
<br>
Beispiele:
<ul>
<code>set mod1 Port4 PWM1</code><br>
<code>set mod1 PWM1 128</code><br>
</ul><br>
</ul>
<a name="I2C_PCA9532Get"></a>
<b>Get</b>
<ul>
<code>get &lt;name&gt;</code>
<br><br>
Aktualisierung aller Werte
</ul><br>
<a name="I2C_PCA9532Attr"></a>
<b>Attribute</b>
<ul>
<li>poll_interval<br>
Aktualisierungsintervall aller Werte in Minuten.<br>
Standard: -, g&uuml;ltige Werte: Dezimalzahl<br><br>
</li>
<li>InputPorts<br>
Durch Leerzeichen getrennte Portnummern die als Inputs genutzt werden.<br>
Ports in dieser Liste k<>nnen nicht geschrieben werden.<br>
Standard: no, g&uuml;ltige Werte: 0 1 2 .. 15<br><br>
</li>
<li>T0/T1<br>
&Auml;nderung der Frequenzwerte von PWM0/PWM1 nach der Formel: Fx = 152/(Tx + 1). Der entsprechende Frequenzwert wird unter Internals angezeigt.<br>
Standard: 0 (152Hz), g&uuml;ltige Werte: 0-255<br><br>
</li>
<li><a href="#IODev">IODev</a></li>
<li><a href="#ignore">ignore</a></li>
<li><a href="#do_not_notify">do_not_notify</a></li>
<li><a href="#showtime">showtime</a></li>
</ul>
<br>
</ul>
<a name="I2C_PCF8574"></a>
<h3>I2C_PCF8574</h3>
<ul>
<a name="I2C_PCF8574"></a>
Erm&ouml;glicht die Verwendung eines PCF8574 I2C 8 Bit Portexenders.
Auf einem Raspberry Pi kann der Interrupt Pin des PCF8574 mit einem GPIO verbunden werden und &uml;ber die Interrupt Funktionen von <a href="#RPI_GPIO">RPI_GPIO</a> l&aml;sst sich dann ein get f&uuml;r den PCF8574 bei Pegel&aml;nderung ausl&oml;sen.<br>
I2C-Botschaften werden &uuml;ber ein I2C Interface Modul wie beispielsweise das <a href="#RPII2C">RPII2C</a>, <a href="#FRM">FRM</a>
oder <a href="#NetzerI2C">NetzerI2C</a> gesendet. Daher muss dieses vorher definiert werden.<br>
<b>Das Attribut IODev muss definiert sein.</b><br>
<a name="I2C_PCF8574Define"></a><br>
<b>Define</b>
<ul>
<code>define &lt;name&gt; I2C_PCF8574 &lt;I2C Address&gt;</code><br>
Der Wert <code>&lt;I2C Address&gt;</code> ist ein zweistelliger Hex-Wert<br>
</ul>
<a name="I2C_PCF8574Set"></a>
<b>Set</b>
<ul>
<code>set &lt;name&gt; &lt;port&gt; &lt;value&gt;</code><br><br>
<ul>
<li><code>&lt;port&gt;</code> kann Port0 bis Port7 annehmen und <code>&lt;value&gt;</code> folgende Werte:<br>
<ul>
<code>
off<br>
on<br>
</code>
</ul>
</li>
</ul>
<br>
Beispiel:
<ul>
<code>set mod1 Port4 on</code><br>
</ul><br>
</ul>
<a name="I2C_PCF8574Get"></a>
<b>Get</b>
<ul>
<code>get &lt;name&gt;</code>
<br><br>
Aktualisierung aller Werte
</ul><br>
<a name="I2C_PCF8574Attr"></a>
<b>Attribute</b>
<ul>
<li>poll_interval<br>
Aktualisierungsintervall aller Werte in Minuten.<br>
Standard: -, g&uuml;ltige Werte: Dezimalzahl<br><br>
</li>
<li>InputPorts<br>
Durch Leerzeichen getrennte Portnummern die als Inputs genutzt werden.<br>
Ports in dieser Liste k&ouml;nnen nicht geschrieben werden.<br>
Standard: no, g&uuml;ltige Werte: 0 1 2 .. 15<br><br>
</li>
<li><a href="#IODev">IODev</a></li>
<li><a href="#ignore">ignore</a></li>
<li><a href="#do_not_notify">do_not_notify</a></li>
<li><a href="#showtime">showtime</a></li>
</ul>
<br>
</ul>
<a name="I2C_SHT21"></a>
<h3>I2C_SHT21</h3>
<ul>
<a name="I2C_SHT21"></a>
Erm&ouml;glicht die Verwendung eines SHT21 I2C Feuchtesensors von <a href="www.sensirion.com">Sensirion</a>.
I2C-Botschaften werden &uuml;ber ein I2C Interface Modul wie beispielsweise das <a href="#RPII2C">RPII2C</a>, <a href="#FRM">FRM</a>
oder <a href="#NetzerI2C">NetzerI2C</a> gesendet. Daher muss dieses vorher definiert werden.<br>
<b>Das Attribut IODev muss definiert sein.</b><br>
<a name="I2C_SHT21Define"></a><br>
<b>Define</b>
<ul>
<code>define &lt;name&gt; I2C_SHT21 [&lt;I2C Address&gt;]</code><br>
Der Wert <code>&lt;I2C Address&gt;</code> ist ein zweistelliger Hex-Wert<br>
</ul>
<a name="I2C_SHT21Set"></a>
<b>Set</b>
<ul>
<code>set &lt;name&gt; readValues</code><br>
Aktuelle Temperatur und Feuchte Werte vom Sensor lesen.<br><br>
</ul>
<a name="I2C_SHT21Attr"></a>
<b>Attribute</b>
<ul>
<li>poll_interval<br>
Aktualisierungsintervall aller Werte in Minuten.<br>
Standard: 5, g&uuml;ltige Werte: 1,2,5,10,20,30<br><br>
</li>
<li>roundHumidityDecimal<br>
Anzahl Dezimalstellen f<>r den Feuchtewert<br>
Standard: 1, g&uuml;ltige Werte: 0 1 2<br><br>
</li>
<li>roundTemperatureDecimal<br>
Anzahl Dezimalstellen f<>r den Temperaturwert<br>
Standard: 1, g&uuml;ltige Werte: 0,1,2<br><br>
</li>
<li><a href="#IODev">IODev</a></li>
<li><a href="#do_not_notify">do_not_notify</a></li>
<li><a href="#showtime">showtime</a></li>
</ul><br>
</ul>
<a name="IF"></a>
<h3>IF</h3>
<ul>
<code>IF (&lt;Bedingung&gt;) (&lt;FHEM-Kommandos1&gt;) ELSE (&lt;FHEM-Kommandos2&gt;)</code><br>
<br>
Es werden <code>&lt;FHEM-Kommandos1&gt;</code> ausgeführt, wenn <code>&lt;Bedingung&gt;</code> erfüllt ist, sonst werden <code>&lt;FHEM-Kommanodos2&gt;</code> ausgeführt.<br>
<br>
Beim IF-Befehl handelt es sich um einen FHEM-Befehl. Der Befehl kann überall dort genutzt werden, wo FHEM-Befehle vorkommen dürfen.
Im Gegensatz zu Perl-if bleibt man auf der FHEM-Ebene und muss nicht auf die Perl-Ebene, um FHEM-Befehle mit Hilfe der fhem-Funktion auszuführen.<br>
<br>
IF ist kein eigenständig arbeitendes Modul, sondern ein FHEM-Befehl, der in Kombination mit anderen Modulen, wie z. B. notify oder at, sinnvoll eingesetzt werden kann.<br>
<br>
In der Bedingung des IF-Befehls wird die vollständige Syntax des Perl-if unterstützt. Mögliche Operatoren sind u. a.:<br>
<br>
++ -- Inkrementieren, Dekrementieren<br>
** Potenzierung<br>
! ~ logische und bitweise Negation<br>
=~ !~ Bindung an Seite reguläre Ausdrücke<br>
* / % x Multiplikation, Division, Modulo-Operation, Zeichenkettenwiederholung<br>
+ - . Addition, Subtraktion, Zeichenkettenaddition<br>
< <= > >= lt le gt ge Vergleich größer/kleiner<br>
== != eq ne Gleichheit/Ungleichheit<br>
& bitweises UND<br>
| ^ bitweises ODER - inklusiv/exklusiv<br>
&& logisches UND<br>
|| logisches ODER<br>
not logische Negation<br>
and logisches UND<br>
or xor logisches ODER (inklusiv/exklusiv)<br>
<br>
<b>Features:</b><br>
<br>
<ul>
<li>Angabe von Readings und Internals ist an beliebiger Stelle möglich<br></li>
<br>
<li>Filtern nach Zahlen oder beliebigen Ausdrücken über reguläre Ausdrücke ist möglich<br></li>
<br>
<li>IF kann beliebig mit anderen FHEM-Befehlen kombiniert werden (at, notify usw.)<br></li>
<br>
<li>es können beliebig viele IF-Befehle ineinander geschachtelt werden<br></li>
<br>
<li>Syntaxprüfung: fehlende Klammern werden erkannt<br></li>
<br>
<li>Definition über mehrere Zeilen mit Einrückung zwecks übersichtlicher Darstellung ist möglich<br></li>
<br>
<li>Überprüfung auf Existenz von Device und Reading bzw. Internal<br></li>
<br>
<li>Ausführung von Perl-Befehlen im dann- und sonst-Fall ist weiterhin möglich<br></li>
<br>
<li>Auswertung von Ausdrücken in geschweiften Klammen innerhalb eines FHEM-Befehls ist möglich<br></li>
<br>
<li>ELSE-Fall ist optional<br></li>
</ul>
<br>
<br>
Die Syntax für die Nutzung von Readings oder Internals (ein Internal wird durch ein & gekennzeichnet)<br>
<br>
<code>[&lt;device&gt;:&lt;reading&gt;:&lt;format&gt;|[&lt;regulärer Ausdruck&gt]]</code>
bzw. <code>[&lt;device&gt;:&&lt;internal&gt;:&lt;format&gt;|[&lt;regulärer Ausdruck&gt]]<br></code>
<br>
<code>&lt;format&gt;</code> und <code>[&lt;regulärer Ausdruck&gt;]</code> sind Filteroptionen, sie können optional genutzt werden.<br>
<br>
Mögliche Formatangaben für <code>&lt;format&gt;</code> sind:<br>
<br>
<code>'d'</code> zum Filtern von positiven und negatien Dezimalzahlen. <code>[&lt;device&gt;:&lt;reading&gt;:d]</code> entspricht <code>[&lt;device&gt;:&lt;reading&gt;:[(-?\d+(\.\d+)?)]]<br></code>
<br>
Wenn nur der Status eines Devices genutzt werden soll, dann kann auch nur das Device angeben werden:<br>
<br>
<code>[&lt;device&gt;]</code> entspricht <code>[&lt;device&gt;:&STATE]</code><br>
<br>
<b>Beispiele:</b><br>
<br>
IF in Kombination mit at-Modul, Readingangabe in der Bedingung:<br>
<br>
<code>define check at +00:10 IF ([outdoor:humidity] > 70) (set switch1 off) ELSE (set switch1 on)<br></code>
<br>
IF Statusabfrage des Devices "outdoor" in der Bedingung:<br>
<br>
<code>define check at +00:10 IF ([outdoor] eq "open") (set switch1 on)<br></code>
<br>
entspricht mit Angabe des Internals:<br>
<br>
<code>define check at +00:10 IF ([outdoor:&STATE] eq "open") (set switch1 on)<br></code>
<br>
Wenn der Reading "state" abgefragt werden soll, dann wird der Readingname ohne & angegeben:<br>
<br>
<code>define check at +00:10 IF ([outdoor:state] eq "open") (set switch1 on)<br></code>
<br>
Geschachtelte Angabe von zwei IF-Befehlen (kann in mehreren Zeilen mit Einrückungen zwecks übersichtlicher Darstellung in der DEF-Eingabe eingegeben werden):<br>
<br>
<code>define test notify lamp <br>
IF ([lamp] eq "on") (<br>
<ol>
IF ([outdoor:humidity] < 70)<br>
<ol>
(set lamp off)<br>
</ol>
ELSE<br>
<ol>
(set lamp on)<br>
</ol>
</ol>
) ELSE<br>
<ol>
(set switch on)<br>
</ol>
<br></code>
Filtern nach Zahlen im Reading "temperature":<br>
<br>
<code>define settemp at 22:00 IF ([tempsens:temperature:d] >= 10) (set heating on)<br></code>
<br>
Filtern nach "on" und "off" im Status des Devices "move":<br>
<br>
<code>define activity notify move IF ([move:&STATE:[(on|off)] eq "on" and $we) (set lamp off)<br></code>
<br>
Beispiel für die Nutzung von Readings im dann-Fall:<br>
<br>
<code>define temp at 18:00 IF ([outdoor:temperature] > 10) (set lampe [dummy])<br></code>
<br>
Falls bei einem FHEM-Befehl ein Ausdruck mit Readings zuvor ausgewertet werden soll, so muss er in geschweifte Klammern gesetzt werden.<br>
Beispiel: Wenn um 18:00 Uhr die Außentemperatur höher ist als 10 Grad, dann wird die Solltemperatur um 1 Grad erhöht.<br>
<br>
<code>define temp at 18:00 IF ([outdoor:temperature] > 10) (set thermostat desired-temp {[thermostat:desired-temp:d]+1})<br></code>
<br>
Mehrerer Befehle werden durch ein Komma statt durch ein Semikolon getrennt, dadurch entfällt das Doppeln, Vervierfachen usw. des Semikolons:<br>
<br>
<code>define check at +00:10 IF ([outdoor:humidity] > 10) (set switch1 off,set switch2 on) ELSE (set switch1 on,set switch2 off)<br></code>
<br>
Falls ein Komma im FHEM-Ausdruck vorkommt, muss dieser zusätzlich geklammert werden, damit das Komma nicht als Trennzeichen erkannt wird:<br>
<br>
<code>define check at +00:10 IF ([outdoor:humidity] > 10) ((set switch1,switch2 off))<br></code>
<br>
IF in Kombination mit einem define at mit mehreren set-Befehlen (Eingabe muss wegen der Semikolons im DEF-Editor erfolgen,
einfaches Semikolon ist nicht erlaubt - es würde vom FHEM-Parser "geschluckt" werden und beim IF nicht mehr ankommen):<br>
<br>
<code>define check at *10:00 IF ([indoor] eq "on") (define a_test at +00:10 set lampe1 on;;set lampe2 off;;set temp desired 20)<br></code>
<br>
Man kann die Problematik des Doppelns von Semikolons wie folgt umgehen:<br>
<br>
<code>define check at *10:00 IF ([indoor] eq "on") (define a_test at +00:10 IF (1) (set lampe1 on,set lampe2 off,set temp desired 20))<br></code>
<br>
Das Komma als Trennzeichen zwischen den FHEM-Befehlen lässt sich mit ;; kombinieren, z. B.:<br>
<br>
<code>define check at *10:00 IF ([indoor] eq "on") (set lamp1 on,define a_test at +00:10 set lampe2 on;;set lampe3 off;;set temp desired 20)<br></code>
<br>
Zeitabhängig schalten: In der Zeit zwischen 20:00 und 22:00 Uhr soll das Licht ausgehen, wenn es an war und ich den Raum verlasse:<br>
<br>
<code>define n_lamp_off notify sensor IF ($hms gt "20:00" and $hms lt "22:00" and [sensor] eq "absent") (set lamp:FILTER=STATE!=off off)<br></code>
<br>
Kombination von Perl und FHEM-Befehlen ($NAME sowie $EVENT können ebenso benutzt werden):<br>
<br>
<code>define mail notify door:open IF ([alarm] eq "on")({system("wmail $NAME:$EVENT")},set alarm_signal on)<br></code>
</ul>
<a name="IPCAM"></a>
<h3>IPCAM</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#IPCAM'>IPCAM</a><br/>
</ul>
<a name="IPWE"></a>
<h3>IPWE</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#IPWE'>IPWE</a><br/>
</ul>
<a name="IT"></a>
<h3>IT</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#IT'>IT</a><br/>
</ul>
<a name="Itach_Relay"></a>
<h3>Itach_Relay</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#Itach_Relay'>Itach_Relay</a><br/>
</ul>
<a name="JSONMETER"></a>
<h3>JSONMETER</h3>
<ul>
Dieses Modul liest Daten von Messger&auml;ten (z.B. Stromz&auml;hler, Gasz&auml;hler oder W&auml;rmez&auml;hler, so genannte Smartmeter),
<br>
welche <a href="http://de.wikipedia.org/wiki/OBIS-Kennzahlen">OBIS</a> kompatible Daten im JSON-Format auf einem Webserver oder auf dem FHEM-Dateisystem zur Verf&uuml;gung stellen.
<br>
&nbsp;
<br>
<b>Define</b>
<ul>
<code>define &lt;name&gt; JSONMETER &lt;Ger&auml;tetyp&gt; [&lt;IP-Adresse&gt;] [Abfrageinterval]</code>
<br>
Beispiel: <code>define Stromzaehler JSONMETER ITF 192.168.178.20 300</code>
<br>&nbsp;
<li><code>[Abfrageinterval]</code>
<br>
Optional. Standardm&auml;ssig 300 Sekunden. Der kleinste m&ouml;gliche Wert ist 30.
<br>
Bei 0 kann die Ger&auml;teabfrage nur manuell gestartet werden.
</li><br>
<li><code>&lt;Ger&auml;tetyp&gt;</code>
<br>
Definiert den Pfad und den Port, um die JSON-Datei einzulesen.
<br>
Mit dem Attribute 'pathString' k&ouml;nnen Login Information an den URL-Pfad von vordefinierten Ger&auml;te angehangen werden.
<ul>
<li><b>ITF</b> - FROETEC Simplex ME Eintarifz&auml;hler (N-ENERGY) (<a href="http://www.itf-froeschl.de">ITF Fr&ouml;schl</a>)</li>
<li><b>EFR</b> - <a href="http://www.efr.de">EFR</a> Smart Grid Hub f&uuml;r Stromz&auml;hler (EON, N-ENERGY, EnBW)
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Die Login-Information wird &uuml;ber das Attribute 'pathstring' angegeben.
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>?LogName=<i>Benutzer</i>&LogPSWD=<i>Passwort</i></code></li>
<li><b>LS110</b> - <a href="http://www.youless.nl/productdetails/product/ls110.html">YouLess LS110</a> Netzwerkf&auml;higer Sensor f&uuml;r elektromechanische Stromz&auml;hler</li>
<li><b>url</b> - benutzt die URL, welche durch das Attribut 'pathString' und 'port' definiert wird.</li>
<li><b>file</b> - benutzt die Datei, welche durch das Attribut 'pathString' definiert wird (im FHEM Dateisystem)</li>
</ul>
</li>
</ul>
<br>
<b>Set</b>
<ul>
<li><code>INTERVAL &lt;Abfrageinterval&gt;</code>
<br>
Abfrageinterval in Sekunden
</li><br>
<li><code>restartJsonAnalysis</code>
<br>
Neustart der Analyse der json-Datei zum Auffinden bekannter Ger&auml;tewerte (kompatibel zum OBIS Standard).
<br>
Diese Analysie wird normaler Weise nur einmalig durchgef&uuml;hrt, nachdem Ger&auml;tewerte gefunden wurden.
</li><br>
<li><code>statusRequest</code>
<br>
Aktualisieren der Ger&auml;tewerte</li>
</ul>
<br>
<b>Get</b>
<ul>
<li><code>jsonFile</code>
<br>
Liest die JSON-Datei ein und zeigt sie an.
</li><br>
<li><code>jsonAnalysis</code>
<br>
Extrahiert die JSON-Daten und zeigt das Resultat der JSON-Analyse.</li>
</ul>
<br>
<a name="JSONMETERattr"></a>
<b>Attributes</b>
<ul>
<li><code>alwaysAnalyse &lt; 0 | 1 &gt;</code>
<br>
F&uuml;hrt bei jeder Abfrage der Ger&auml;tewerte eine Analyse der JSON-Datenstruktur durch.
<br>
Dies ist sinnvoll, wenn sich die JSON-Struktur &auml;ndert. Normalerweise wird die analysierte Struktur
zwischengespeichert, um die CPU-Last gering zu halten.
</li><br>
<li><code>doStatistics &lt; 0 | 1 &gt;</code>
<br>
Bildet t&auml;gliche, monatliche und j&auml;hrliche Statistiken bestimmter Ger&auml;tewerte (Mittel/Min/Max oder kumulierte Werte).
<br>
F&uuml;r grafische Auswertungen k&ouml;nnen die Werte der Form 'stat<i>ReadingName</i><b>Last</b>' genutzt werden.
</li><br>
<li><code>pathString &lt;Zeichenkette&gt;</code>
<ul>
<li>Ger&auml;tetyp 'file': definiert den lokalen Dateinamen und -pfad
</li>
<li>Ger&auml;tetyp 'url': Definiert den URL-Pfad
</li>
<li>Andere: Kann benutzt werden um Login-Information zum URL Pfad von vordefinerten Ger&auml;ten hinzuzuf&uuml;gen
</li>
</ul>
</li><br>
<li><code>port &lt;Nummer&gt;</code>
<br>
Beim Ger&auml;tetyp 'url' kann hier der URL-Port festgelegt werden (standardm&auml;ssig 80)
</li><br>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
</ul>
</ul>
<a name="JeeLink"></a>
<h3>JeeLink</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#JeeLink'>JeeLink</a><br/>
</ul>
<a name="JsonList"></a>
<h3>JsonList</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#JsonList'>JsonList</a><br/>
</ul>
<a name="JsonList2"></a>
<h3>JsonList2</h3>
<ul>
<code>jsonlist [&lt;devspec&gt;]</code>
<br><br>
Dieses Befehl sollte in der FHEMWEB oder telnet Eingabezeile ausgef&uuml;hrt
werden, kann aber auch direkt &uuml;ber HTTP abgerufen werden &uuml;ber
<ul>
http://fhemhost:8083/fhem?cmd=jsonlist2&XHR=1
</ul>
Es liefert die JSON Darstellung der internen Variablen, Readings und
Attribute zur&uuml;ck.
<b>Achtung</b>: die alte Version dieses Befehls (jsonlist, ohne 2 am Ende) is
&uuml;berholt, und wird in der Zukunft entfernt.<br>
</ul>
<a name="KM271"></a>
<h3>KM271</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#KM271'>KM271</a><br/>
</ul>
<a name="KS300"></a>
<h3>KS300</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#KS300'>KS300</a><br/>
</ul>
<a name="LGTV"></a>
<h3>LGTV</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#LGTV'>LGTV</a><br/>
</ul>
<a name="LINDY_HDMI_SWITCH"></a>
<h3>LINDY_HDMI_SWITCH</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#LINDY_HDMI_SWITCH'>LINDY_HDMI_SWITCH</a><br/>
</ul>
<a name="LIRC"></a>
<h3>LIRC</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#LIRC'>LIRC</a><br/>
</ul>
<a name="LISTENLIVE"></a>
<h3>LISTENLIVE</h3>
<ul>
Sorry, keine deutsche Dokumentation vorhanden.<br/><br/>
Die englische Doku gibt es hier: <a href='http://fhem.de/commandref.html#LISTENLIVE'>LISTENLIVE</a><br/>
</ul>
<a name="LUXTRONIK2"></a>
<h3>LUXTRONIK2</h3>
<ul>
Die Luxtronik 2.0 ist eine Heizungssteuerung, welche in W&auml;rmepumpen von <a href="http://www.alpha-innotec.de">Alpha Innotec</a>,
Siemens Novelan (WPR NET) und Wolf Heiztechnik (BWL/BWS) verbaut ist.
<br>
Sie besitzt einen Ethernet Anschluss, so dass sie direkt in lokale Netzwerke (LAN) integriert werden kann.
<br>
<i>Das Modul wurde bisher mit folgender Steuerungs-Firmware getestet: V1.54C, V1.60, V1.69.</i>
<br>
Mehr Infos unter im entsprechenden <a href="http://www.fhemwiki.de/wiki/Luxtronik_2.0">Artikel der FHEM-Wiki</a>.
<br>&nbsp;
<br>
<a name="LUXTRONIK2define"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; LUXTRONIK2 &lt;IP-Adresse&gt; [Abfrageinterval]</code>
<br>
Wenn das Abfrage-Interval nicht angegeben ist, wird es auf 300 (Sekunden) gesetzt. Der kleinste m&ouml;gliche Wert ist 30.
<br>
Beispiel: <code>define Heizung LUXTRONIK2 192.168.0.12 600</code>
</ul>
<br>
<a name="LUXTRONIK2set"></a>
<b>Set</b><br>
<ul>
Durch einen Firmware-Test wird vor jeder Set-Operation sichergestellt, dass W&auml;rmepumpen mit ungetester Firmware nicht unabsichtlich besch&auml;digt werden.
<li><code>opModeHotWater &lt;Betriebsmodus&gt;</code>
<br>
Betriebsmodus des Hei&szlig;wasserboilers ( Auto | Party | Off )
</li><br>
<li><code>hotWaterTemperatureTarget &lt;Temperatur&gt;</code>
<br>
Soll-Temperatur des Hei&szlig;wasserboilers in &deg;C
</li><br>
<li><code>INTERVAL &lt;Abfrageinterval&gt;</code>
<br>
Abfrageinterval in Sekunden
</li><br>
<li><code>statusRequest</code>
<br>
Aktualisieren der Ger&auml;tewerte
</li><br>
<li><code>synchClockHeatPump</code>
<br>
Abgleich der Uhr der Steuerung mit der FHEM Zeit. <b>Diese &Auml;nderung geht verloren, sobald die Steuerung ausgeschaltet wird!!</b></li>
</ul>
<br>
<a name="LUXTRONIK2get"></a>
<b>Get</b>
<ul>
Es wurde noch kein "get" implementiert ...
</ul>
<br>
<a name="LUXTRONIK2attr"></a>
<b>Attribute</b>
<ul>
<li><code>statusHTML</code><br>
wenn gesetzt, dann wird ein HTML-formatierter Wert "floorplanHTML" erzeugt,
welcher vom Modul <a href="#FLOORPLAN">FLOORPLAN</a> genutzt werden kann.<br>
Momentan wird nur gepr&uuml;ft, ob der Wert dieses Attributes ungleich NULL ist,
der entsprechende Ger&auml;tewerte besteht aus dem aktuellen W&auml;rmepumpenstatus und der Heizwassertemperatur.
</li><br>
<li><code>doStatistics &lt; 0 | 1 &gt;</code>
<br>
Berechnet statistische Werte: <i>statBoilerGradientHeatUp, statBoilerGradientCoolDown,
statBoilerGradientCoolDownMin (W&auml;rmeverlust des Boilers)</i>
<br>
Bildet t&auml;gliche, monatliche und j&auml;hrliche Statistiken bestimmter Ger&auml;tewerte.<br>
F&uuml;r grafische Auswertungen k&ouml;nnen die Werte der Form 'stat<i>ReadingName</i><b>Last</b>' genutzt werden.
</li><br>
<li><code>allowSetParameter &lt; 0 | 1 &gt;</code>
<br>
Die internen <a href="#LUXTRONIK2set">Parameter</a> der W&auml;rmepumpensteuerung k&ouml;nnen
nur ge&auml;ndert werden, wenn dieses Attribut auf 1 gesetzt ist.
</li><br>
<li><code>autoSynchClock &lt;Zeitunterschied&gt;</code>
<br>
Die Uhr der W&auml;rmepumpe wird automatisch korrigiert, wenn ein gewisser <i>Zeitunterschied</i> (10 s - 600 s)
gegen&uuml;ber der FHEM Zeit erreicht ist. Zuvor wird die Kompatibilit&auml;t der Firmware &uuml;berpr&uuml;ft.<br>
<i>(Ein Ger&auml;tewert 'delayDeviceTimeCalc' &lt;= 2 s ist auf die internen Berechnungsintervale der
W&auml;rmepumpensteuerung zur&uuml;ckzuf&uuml;hren.)</i>
</li><br>
<li><code>ignoreFirmwareCheck &lt; 0 | 1 &gt;</code>
<br>
Durch einen Firmware-Test wird vor jeder Set-Operation sichergestellt, dass W&auml;rmepumpen
mit ungetester Firmware nicht unabsichtlich besch&auml;digt werden. Wenn dieses Attribute auf 1
gesetzt ist, dann wird der Firmware-Test ignoriert und neue Firmware kann getestet werden.
Dieses Attribut wird jedoch ignoriert, wenn die Steuerungs-Firmware bereits als nicht kompatibel berichtet wurde.
</li><br>
<li><a href="#readingFnAttributes">readingFnAttributes</a>
</li><br>
</ul>
</ul>
<a name="LaCrosse"></a>
<h3>LaCrosse</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#LaCrosse'>LaCrosse</a><br/>
</ul>
<a name="LightScene"></a>
<h3>LightScene</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#LightScene'>LightScene</a><br/>
</ul>
<a name="M232"></a>
<h3>M232</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#M232'>M232</a><br/>
</ul>
<a name="M232Counter"></a>
<h3>M232Counter</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#M232Counter'>M232Counter</a><br/>
</ul>
<a name="M232Voltage"></a>
<h3>M232Voltage</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#M232Voltage'>M232Voltage</a><br/>
</ul>
<a name="MAX"></a>
<h3>MAX</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#MAX'>MAX</a><br/>
</ul>
<a name="MAXLAN"></a>
<h3>MAXLAN</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#MAXLAN'>MAXLAN</a><br/>
</ul>
<a name="MPD"></a>
<h3>MPD</h3>
<ul>
FHEM Modul zur Steuerung des MPD &auml;hnlich dem MPC (MPC = Music Player Command, das Kommando Zeilen Interface f&uuml;r den
<a href='http://en.wikipedia.org/wiki/Music_Player_Daemon'>Music Player Daemon</a> ) (englisch)<br>
Um den MPD auf einem Raspberry Pi zu installieren finden sich im Internet zahlreiche gute Dokumentaionen
z.B. <a href="http://www.forum-raspberrypi.de/Thread-tutorial-music-player-daemon-mpd-und-mpc-auf-dem-raspberry-pi">hier</a><br>
Thread im FHEM Forum : <a href='http://forum.fhem.de/index.php/topic,18517.0.html'>Modul f&uuml;r MPD</a><br>
<br>&nbsp;<br>
<a name="MPDdefine"></a>
<b>Define</b>
<ul>
define &lt;name&gt; MPD &lt;IP MPD Server | default localhost&gt; &lt;Port MPD Server | default 6600&gt;<br>
Beispiel :<br>
<ul><pre>
define myMPD MPD 192.168.0.99 7000
</pre>
wenn FHEM und der MPD auf dem gleichen PC laufen :
<pre>
define myMPD MPD
</pre>
</ul>
</ul>
<br>
<a name="MPDset"></a>
<b>Set</b><ul>
<code>set &lt;name&gt; &lt;was&gt;</code>
<br>&nbsp;<br>
z.Z. unterst&uuml;tzte Kommandos<br>
&nbsp;<br>
play => spielt den aktuellen Titel der geladenen Playliste<br>
clear => l&ouml;scht die Playliste<br>
stop => stoppt die Wiedergabe<br>
pause => Pause an/aus<br>
previous => spielt den vorherigen Titel in der Playliste<br>
next => spielt den n&aumlchsten Titel in der Playliste<br>
random => zuf&auml;llige Wiedergabe an/aus<br>
repaet => Wiederholung an/aus<br>
volume (%) => &auml;ndert die Lautst&auml;rke von 0 - 100%<br>
volumeUp => Lautst&auml;rke schrittweise erh&ouml;hen , Schrittweite = ( attr volumeStep size )<br>
volumeDown => Lautst&auml;rke schrittweise erniedrigen , Schrittweite = ( attr volumeStep size )<br>
playlist (playlist name) => lade Playliste <name> aus der MPD Datenbank und starte Wiedergabe mit dem ersten Titel<br>
playfile (file) => erzeugt eine temor&auml;re Playliste mit file und spielt dieses ab<br>
updateDb => wie MPC update, Update der MPD Datenbank<br>
interval => in Sekunden bis neue aktuelle Informationen vom MPD geholt werden. Überschreibt die Einstellung von attr interval Ein Wert von 0 deaktiviert diese Funktion<br>
reset => reset des FHEM MPD Moduls<br>
mpdCMD => gleiche Funktion wie get mpdCMD<br>
IdleNow => sendet das Kommando idle zum MPD und wartet auf Ereignisse - siehe auch Attribut useIdle<br>
</ul>
<br>
<a name="MPDget"></a>
<b>Get</b><ul>
<code>get &lt;name&gt; &lt;was&gt;</code>
<br>&nbsp;<br>
z.Z. unterst&uuml;tzte Kommandos<br>
music => zeigt alle Dateien der MPD Datenbank<br>
playlists => zeigt alle Playlisten der MPD Datenbank<br>
playlistsinfo => zeigt Informationen der aktuellen Playliste<br>
webrc => HTML Ausgabe einer einfachen Web Fernbedienung Bsp :.<br>
<pre>
define &lt;name&gt; weblink htmlCode {fhem("get &lt;name&gt; webrc", 1)}
attr &lt;name&gt; room MPD
</pre>
statusRequest => hole aktuellen MPD Status<br>
mpdCMD (cmd) => sende cmd direkt zum MPD Server ( siehe auch <a href="http://www.musicpd.org/doc/protocol/">MPD Comm Ref</a> )<br>
currentsong => zeigt Informationen zum aktuellen Titel in der Playliste<br>
outputs => zeigt Informationen der definierten MPD Ausgabe Kan&auml;le ( aus /etc/mpd.conf )<br>
</ul>
<br>
<a name="MPDattr"></a>
<b>Attribute</b>
<ul>
<li>interval 0..x => polling Interval des MPD Servers, 0 zum abschalten oder in Verbindung mit useIdle</li>
<li>password <pwd> => (z.Z. nicht umgesetzt)</li>
<li>loadMusic 0|1 => lade die MPD Titel beim FHEM Start</li>
<li>loadPlaylists 0|1 => lade die MPD Playlisten beim FHEM Start</li>
<li>volumeStep x => Schrittweite f&uuml;r Volume +/-</li>
<li>useIdle 0|1 => sendet das Kommando idle zum MPD und wartet auf Ereignisse - ben&ouml;tigt MPD Version 0.16.0 oder h&ouml;her<br>
Wenn useIdle benutzt wird kann das Polling auf einen hohen Wert (300-600) gesetzt werden oder gleich ganz abgeschaltet werden.<br>
FHEM startet einen Hintergrundprozess und wartet auf &Auml;nderungen des MPD , wie z.B Titelwechsel im Stream, start/stop, etc.<br>
So lassen sich relativ zeitnah andere Ger&auml;te an/aus schalten oder z.B. eine LCD Anzeige aktualisieren ohne erst den n&auml;chsten Polling Intervall abwarten zu m&uuml;ssen !</li>
<li>titleSplit 1|0 = zerlegt die aktuelle Titelangabe am ersten Vorkommen von - (BlankMinusBlank) in die zwei Felder Artist und Titel,<br>
wenn im abgespielten Titel die Artist Information nicht verf&uuml;gbar ist (sehr oft bei Radio-Streams)<br>
Liegen keine Titelangaben vor wird die Ausgabe durch den Namen der Radiostation erstetzt</li>
</ul>
<br>
<b>Readings</b>
<ul>
alle MPD internen Werte
</ul>
</ul>
<a name="MSG"></a>
<h3>MSG</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#MSG'>MSG</a><br/>
</ul>
<a name="MSGFile"></a>
<h3>MSGFile</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#MSGFile'>MSGFile</a><br/>
</ul>
<a name="MSGMail"></a>
<h3>MSGMail</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#MSGMail'>MSGMail</a><br/>
</ul>
<a name="NetIO230B"></a>
<h3>NetIO230B</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#NetIO230B'>NetIO230B</a><br/>
</ul>
<p>
<a name="ONKYO_AVR" id="ONKYO_AVR"></a>
</p>
<h3>
ONKYO_AVR
</h3>
<div style="margin-left: 2em">
Eine deutsche Version der Dokumentation ist derzeit nicht vorhanden. Die englische Version ist hier zu finden:
</div>
<div style="margin-left: 2em">
<a href='http://fhem.de/commandref.html#ONKYO_AVR'>ONKYO_AVR</a>
</div>
<a name="OREGON"></a>
<h3>OREGON</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#OREGON'>OREGON</a><br/>
</ul>
<a name="OWAD"></a>
<h3>OWAD</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#OWAD'>OWAD</a><br/>
</ul>
<a name="OWCOUNT"></a>
<h3>OWCOUNT</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#OWCOUNT'>OWCOUNT</a><br/>
</ul>
<a name="OWDevice"></a>
<h3>OWDevice</h3>
<ul>
<br>
<a name="OWDevicedefine"></a>
<b>Definition</b>
<ul>
<code>define &lt;name&gt; OWDevice &lt;address&gt; [&lt;interval&gt;]</code>
<br><br>
Definiert ein 1-Wire- Gerät. 1-Wire- Geräte werden anhand ihrer Adresse &lt;address&gt; definiert. Diese wird
durch den zuvor eingerichteten <a href="#OWServer">OWServer</a> bereitgestellt.
<br><br>
Wird zusätzlich &lt;interval&gt; angegeben, ruft OWServer alle &lt;interval&gt; Sekunden
einen Datensatz des Gerätes ab.
<br><br>
Jedes OWDevice ist ein eigenständiges Gerät. Seine Eigenschaften werden erstmals zum Zeitpunkt der Definition
abgefragt. Die durch "get" oder "set" erzeugten, sowie durch den zyklischen Abruf gelieferten readings,
können mit dem Kommando <code><a href="#list">list</a> &lt;name&gt;</code> angezeigt werden.
<br><br>
Folgende 1-Wire- und iButton- Komponenten werden aktuell unterstützt:
<ul>
<li>DS2401 - Im Chip integrierte Seriennummer</li>
<li>DS1990A - iButton mit fester Seriennummer</li>
<li>DS2405 - Adressierbarer Schalter</li>
<li>DS18S20 - Hochpräzisions-Digital-Thermosensor</li>
<li>DS1920 - iButton-Thermosensor</li>
<li>DS2406, DS2407 - Dualer adressierbarer Schalter mit 1 kbit Speicher</li>
<li>DS2436 - Batterie-ID/Monitor- Schaltkreis</li>
<li>DS2423 - Dual-Zählerbaustein mit Speicherfunktion</li>
<li>DS2450 - Vierfach-A/D Umsetzer</li>
<li>DS1822 - Econo-Thermosensor</li>
<li>DS2415 - Zeitgeber- Schaltkreis </li>
<li>DS1904 - iButton-Echtzeituhr</li>
<li>DS2438 - Smart-Batterie-Monitor</li>
<li>DS2417 - Zeitgeber-Schaltkreis mit Interrupt</li>
<li>DS18B20 - Thermosensor mit programmierbarer Auflösung</li>
<li>DS2408 - 8-kanaliger adressierbarer Schalter</li>
<li>DS2413 - 2-kanaliger adressierbarer Schalter</li>
<li>DS1825 - Thermosensor mit programmierbarer Auflösung und ID</li>
<li>EDS0066 - Vielfachsensor für Temperatur und Luftdruck</li>
<li>LCD - LCD-Ansteuerung von Louis Swart</li>
</ul>
<br>
Das Hinzufügen weiterer Geräte ist im Modulcode (subroutine <code>OWDevice_GetDetails</code>) sehr einfach möglich.
<br><br>
<b>Achtung: Dieses Modul ist weder verwandt noch verwendbar mit den 1-Wire Modulen, deren Namen nur aus Großbuchstaben bestehen!</b>
<br><br>
<b>Bitte beachten:</b> Um einer Verwechselung entgegenzuwirken, stößt das reading "state" der Geräte keine Events an.<br><br>
Beispiele zur Einrichtung:
<ul>
<code>
define myOWServer localhost:4304<br><br>
get myOWServer devices<br>
10.487653020800 DS18S20<br><br>
define myT1 10.487653020800<br><br>
list myT1 10.487653020800<br>
Internals:<br>
...<br>
Readings:<br>
2012-12-22 20:30:07 temperature 23.1875<br>
Fhem:<br>
...<br>
getters:<br>
address<br>
family<br>
id<br>
power<br>
type<br>
temperature<br>
templow<br>
temphigh<br>
polls:<br>
temperature<br>
setters:<br>
alias<br>
templow<br>
temphigh<br>
...<br>
</code>
</ul>
<br>
</ul>
<a name="OWDeviceset"></a>
<b>Set-Befehle</b>
<ul>
<li><code>set &lt;name&gt; interval &lt;value&gt;</code>
<br>
<code>value</code> überschreibt das Abrufintervall der Datensätze. Der Wert ist in Sekunden anzugeben.
</li><br>
<li><code>set &lt;name&gt; &lt;reading&gt; &lt;value&gt;</code>
<br>
Setzt das &lt;reading&gt; auf &lt;value&gt; für das 1-Wire-Gerät &lt;name&gt;. Die verwendbaren Werte werden durch die
jeweiligen 1-wire-Geräte bestimmt.
<br><br>
Beispiel:
<ul>
<code>set myT1 templow 5</code><br>
</ul>
<br>
</li>
</ul>
<a name="OWDeviceget"></a>
<b>Get-Befehle</b>
<ul>
<code>get &lt;name&gt; &lt;reading&gt; &lt;value&gt;</code>
<br>
Holt das &lt;reading&gt; des 1- Wire Geräte- &lt;name&gt;. Die verwendbaren Werte werden durch die
jeweiligen 1-wire-Geräte bestimmt.
<br><br>
Beispiel:
<ul>
<code>get myT1 temperature</code><br>
</ul>
<br>
</ul>
<a name="OWDeviceattr"></a>
<b>Attribute</b>
<ul>
<a name="IODev"></a>
<li>IODev:
Bestimmt die OWServer-Instanz, welche für das Senden und Abrufen der Daten
eines OWDevice-Gerätes genutzt werden soll. Hinweis: Während des Starts
ordnet FHEM die neuen OWDevice-Geräte der jeweils zuletzt definierten OWServer-Instanz zu.
Deshalb verfährt man idealerweise so, dass man zuerst eine OWServer-Instanz und
anschließend die zugehörigen OWDevice-Geräte definiert. Danach definiert man die
nächste OWServer-Instanz, gefolgt von den zugehörigen OWDevice-Geräten, usw.
</li>
<li>trimvalues: Entfernt voran- und nachgestellte Leerzeichen aus den readings. Standartwert ist 1 (ein).</li>
<li>polls: Eine per Komma getrennte Liste der abzurufenden readings. Mit diesem Attribut unterdrückt man alle standartmäßig abgerufenen readings und ersetzt sie durch die eigene Zusammenstellung.</li>
<li>interfaces: Ersetzt die durch dieses Gerät erzeugten Interfaces.</li>
<li>model: Angabe des Gerätetyps, z.B.: DS18S20.</li>
<li>resolution: Angabe der Auflösung für die Temperaturmessung in bits, zur Verfügung stehen: 9, 10, 11 oder 12.
Hinweis: Geringere Auflösungen bewirken schnellere Reaktionen des Busses. Dies kann z.B. bei umfangreichen 1-Wire- Installationen hilfreich sein,
um eventuelle Stillstände von FHEM zu vermindern.</li>
<li><a href="#eventMap">eventMap</a></li>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
</ul>
<br><br>
</ul>
<a name="OWFS"></a>
<h3>OWFS</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#OWFS'>OWFS</a><br/>
</ul>
<a name="OWID"></a>
<h3>OWID</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#OWID'>OWID</a><br/>
</ul>
<a name="OWLCD"></a>
<h3>OWLCD</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#OWLCD'>OWLCD</a><br/>
</ul>
<a name="OWMULTI"></a>
<h3>OWMULTI</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#OWMULTI'>OWMULTI</a><br/>
</ul>
<a name="OWSWITCH"></a>
<h3>OWSWITCH</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#OWSWITCH'>OWSWITCH</a><br/>
</ul>
<a name="OWServer"></a>
<h3>OWServer</h3>
<ul>
<br>
<a name="OWDevicedefine"></a>
<b>Definition</b>
<ul>
<code>define &lt;name&gt; OWServer &lt;protocol&gt;</code>
<br><br>
Definiert eine logische OWServer- Instanz. OWServer ist die Serverkomponente des
<a href="http://owfs.org">1-Wire Dateisystems</a>. Sie ermöglicht den Zugriff auf
alle 1-Wire- Busteilnehmer eines Systems.<br><br>
&lt;protocol&gt; hat das Format &lt;hostname&gt;:&lt;port&gt; Nähere Informationen dazu gibt es in der <a href="http://owfs.org/index.php?page=owserver_protocol">owserver Dokumentation</a>.
<br><br>
Voraussetzung innerhalb von FHEM ist das Modul <a href="http://owfs.cvs.sourceforge.net/viewvc/owfs/owfs/module/ownet/perl5/OWNet/lib/OWNet.pm">OWNet.pm von owfs.org</a>, welches bereits mit FHEM ausgeliefert wird.
Das auf CPAN erhältliche OWNet- Modul beinhaltet seit dem 23.12.2012 einen Fehler, der es für Fernzugriffe unbrauchbar macht.<p>
Auf dem Computer, an dem der 1-Wire- Bus angeschlossen ist, muss die Software "owserver" installiert sein. Zusätzlich sollte auf diesem Rechner die Konfigurationsdatei "owfs.conf" eingesehen bzw. angepasst werden. <a href="http://www.fhemwiki.de/wiki/OWServer_%26_OWDevice#Tipps_und_Tricks"> Einen WIKI- Artikel dazu gibt es hier.</a>
<br><br>
Die vorhandenen 1-Wire- Busteilnehmer werden als <a href="#OWDevice">OWDevice</a> -Geräte definiert.
Wenn <a href="#autocreate">autocreate</a> aktiviert ist, werden beim Start von FHEM alle Geräte automatisch erkannt und eingerichtet.
<br><br>
<b>Achtung: Dieses Modul ist weder verwandt noch verwendbar mit den 1-Wire Modulen, deren Namen nur aus Großbuchstaben bestehen!</b>
<br><br>
Beispiele für die Einrichtung:
<ul>
<code>define myLocalOWServer OWServer localhost:4304</code><br>
<code>define myRemoteOWServer OWServer 192.168.1.100:4304</code><br>
<code>define myRemoteOWServer OWServer raspi:4304</code><br>
</ul>
<br>
Hinweis: Sollten keine Geräte erkannt werden, kann man versuchen in der owserver- Konfigurationsdatei (owfs.conf) zwei Servereinträge anzulegen:
Einen mit <code>localhost</code> und einen mit dem "FQDN", bzw. dem Hostnamen, oder der IP-Adresse des Computers, auf dem die Software "owserver" läuft.
<br><br>
</ul>
<a name="OWServerset"></a>
<b>Set- Befehle</b>
<ul>
<code>set &lt;name&gt; &lt;value&gt;</code>
<br><br>
wobei <code>value</code> für einen der folgenden Befehle steht:<br><br>
<li><code>reopen</code><br>
Erneuert die Verbindung zum owserver.
</li>
<li>owserver (OWFS) -spezifische Einstellungen:
<ul>
<li><code>timeout/directory</code></li>
<li><code>timeout/ftp</code></li>
<li><code>timeout/ha7</code></li>
<li><code>timeout/network</code></li>
<li><code>timeout/presence</code></li>
<li><code>timeout/serial</code></li>
<li><code>timeout/server</code></li>
<li><code>timeout/stable</code></li>
<li><code>timeout/uncached</code></li>
<li><code>timeout/usb</code></li>
<li><code>timeout/volatile</code></li>
<li><code>timeout/w1</code></li>
<li><code>units/pressure_scale</code></li>
<li><code>units/temperature_scale</code></li>
</ul>
</li>
Nähere Informationen zu diesen Einstellungen gibt es im <a href="http://owfs.org/uploads/owserver.1.html#sect41">owserver- Manual</a>.
<br>
</ul>
<br><br>
<a name="OWServerget"></a>
<b>Get- Befehle</b>
<ul>
<code>get &lt;name&gt; &lt;value&gt;</code>
<br><br>
wobei <code>value</code> für einen der folgenden Befehle steht:<br><br>
<li><code>devices</code><br>
Gibt eine Liste der Adressen und Typen aller von owserver erkannten Geräte aus. Außerdem
werden die entsprechenden <a href="#OWDevice">OWDevice-</a> Namen angezeigt, soweit sie bereits definiert sind.
</li>
<li><code>errors</code><br>
Liefert eine Fehlerstatistik zurück.</li>
<li>owserver (OWFS) -spezifische Einstellungen:
<ul>
<li><code>/settings/timeout/directory</code></li>
<li><code>/settings/timeout/ftp</code></li>
<li><code>/settings/timeout/ha7</code></li>
<li><code>/settings/timeout/network</code></li>
<li><code>/settings/timeout/presence</code></li>
<li><code>/settings/timeout/serial</code></li>
<li><code>/settings/timeout/server</code></li>
<li><code>/settings/timeout/stable</code></li>
<li><code>/settings/timeout/uncached</code></li>
<li><code>/settings/timeout/usb</code></li>
<li><code>/settings/timeout/volatile</code></li>
<li><code>/settings/timeout/w1</code></li>
<li><code>/settings/units/pressure_scale</code></li>
<li><code>/settings/units/temperature_scale</code></li>
</ul>
</li>
Nähere Informationen zu diesen Einstellungen gibt es im <a href="http://owfs.org/uploads/owserver.1.html#sect41">owserver- Manual</a>.
<br>
</ul>
<p>
<a name="OWDeviceattr"></a>
<b>Attribute</b>
<ul>
<li>nonblocking<br>
Holt alle readings (OWServer / <a href="#OWDevice">OWDevice</a>) über einen Tochterprozess. Dieses Verfahren stellt sicher,
dass FHEM während der Kommunikation mit owserver nicht angehalten wird.<br>
Beispiel:<br>
<code> attr &lt;name&gt; nonblocking 1</code>
</li>
<li><a href="#eventMap">eventMap</a></li>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
</ul>
<br>
Hinweis: Falls in FHEM trotzdem ungewöhnliche Stillstände auftreten, sollte das Attribut <code>nonblocking</code> wieder deaktiviert werden.<br>
</ul>
<a name="OWTEMP"></a>
<h3>OWTEMP</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#OWTEMP'>OWTEMP</a><br/>
</ul>
<a name="OWTHERM"></a>
<h3>OWTHERM</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#OWTHERM'>OWTHERM</a><br/>
</ul>
<a name="OWX"></a>
<h3>OWX</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#OWX'>OWX</a><br/>
</ul>
<a name="PCA301"></a>
<h3>PCA301</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#PCA301'>PCA301</a><br/>
</ul>
<a name="PHTV"></a>
<h3>PHTV</h3>
<ul>
Eine deutsche Version der Dokumentation ist derzeit nicht vorhanden.
Die englische Version ist hier zu finden:
</ul>
<ul>
<a href='http://fhem.de/commandref.html#PHTV'>PHTV</a>
</ul>
<a name="PID"></a>
<h3>PID</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#PID'>PID</a><br/>
</ul>
<a name="PID20"></a>
<h3>PID20</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#PID20'>PID20</a><br/>
</ul>
<a name="PIFACE"></a>
<h3>PIFACE</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#PIFACE'>PIFACE</a><br/>
</ul>
<a name="POKEYS"></a>
<h3>POKEYS</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#POKEYS'>POKEYS</a><br/>
</ul>
<a name="PRESENCE"></a>
<h3>PRESENCE</h3>
<ul>
<tr><td>
Das PRESENCE Module bietet mehrere M&ouml;glichkteiten um die Anwesenheit von Handys/Smartphones oder anderen mobilen Ger&auml;ten (z.B. Tablets) zu erkennen.
<br><br>
Dieses Modul bietet dazu mehrere Modis an um Anwesenheit zu erkennen. Diese sind:<br><br>
<ul>
<li><b>lan-ping</b> - Eine Erkennung auf Basis von Ping-Tests im lokalen LAN/WLAN</li>
<li><b>fritzbox</b> - Eine Erkennung aufgrund der internen Abfrage des Status auf der FritzBox (nur m&ouml;glich, wenn FHEM auf einer FritzBox l&auml;uft)</li>
<li><b>local-bluetooth</b> - Eine Erkennung auf Basis von Bluetooth-Abfragen durch den FHEM Server. Das Ger&auml;t muss dabei in Empfangsreichweite sein, aber nicht sichtbar sein</li>
<li><b>function</b> - Eine Erkennung mithilfe einer selbst geschriebenen Perl-Funktion, welche den Anwesenheitsstatus ermittelt.</li>
<li><b>shellscript</b> - Eine Erkennung mithilfe eines selbst geschriebenen Skriptes oder Programm (egal in welcher Sprache).</li>
<li><b>lan-bluetooth</b> - Eine Erkennung durch Bluetooth-Abfragen via Netzwerk (LAN/WLAN) in ein oder mehreren R&auml;umen</li>
</ul>
<br>
Jeder Modus kann optional mit spezifischen Pr&uuml;f-Intervallen ausgef&uuml;hrt werden.<br><br>
<ul>
<li>check-interval - Das normale Pr&uuml;finterval in Sekunden für eine Anwesenheitspr&uuml;fung. Standardwert: 30 Sekunden</li>
<li>present-check-interval - Das Pr&uuml;finterval in Sekunden, wenn ein Ger&auml;t anwesend (<i>present</i>) ist. Falls nicht angegeben, wird der Wert aus check-interval verwendet</li>
</ul>
<br><br>
<a name="PRESENCEdefine"></a>
<b>Define</b><br><br>
<ul><b>Modus: lan-ping</b><br><br>
<code>define &lt;name&gt; PRESENCE lan-ping &lt;IP-Addresse oder Hostname&gt; [ &lt;Interval&gt; [ &lt;Anwesend-Interval&gt; ] ]</code><br>
<br>
Pr&uuml;ft ob ein Ger&auml;t &uuml;ber Netzwerk (&uuml;blicherweise WLAN) auf Ping-Anfragen reagiert und setzt entsprechend den Anwesenheitsstatus.<br><br>
<u>Beispiel</u><br><br>
<code>define iPhone PRESENCE lan-ping 192.168.179.21</code><br><br>
<b>Modus: fritzbox</b><br><br>
<code>define &lt;name&gt; PRESENCE fritzbox &lt;Ger&auml;tename&gt; [ &lt;Interval&gt; [ &lt;Anwesend-Interval&gt; ] ]</code><br>
<br>
Pr&uuml;ft ob ein Ger&auml;t welches per WLAN mit der FritzBox verbunden ist, erreichbar durch Abfrage des Status mit dem Befehl ctlmgr_ctl.
Der Ger&auml;tename (Parameter: &lt;Ger&auml;tename&gt;) muss dem Namen entsprechen, welcher im Men&uuml;punkt "Heimnetz" auf der FritzBox-Oberfl&auml;che angezeigt wird.<br><br>
<i>Dieser Modus ist nur verwendbar, wenn FHEM auf einer FritzBox läuft!</i><br><br>
<u>Beispiel</u><br><br>
<code>define iPhone PRESENCE fritzbox iPhone-4S</code><br><br>
<b>Modus: local-bluetooth</b><br><br>
<code>define &lt;name&gt; PRESENCE local-bluetooth &lt;Bluetooth-Adresse&gt; [ &lt;Interval&gt; [ &lt;Anwesend-Interval&gt; ] ]</code><br>
<br>
Pr&uuml;ft ob ein Bluetooth-Ger&auml;t abgefragt werden kann und meldet dies als Anwesenheit. F&uuml;r diesen Modus wird der Shell-Befehl "hcitool" ben&ouml;tigt
(wird durch das Paket <a href="http://www.bluez.org" target="_new">bluez</a> bereitgestellt), sowie ein funktionierender Bluetooth-Empf&auml;nger (intern oder als USB-Stick)<br><br>
<u>Beispiel</u><br><br>
<code>define iPhone PRESENCE local-bluetooth 0a:4f:36:d8:f9:8</code><br><br>
<b>Modus: function</b><br><br>
<code>define &lt;name&gt; PRESENCE function {...} [ &lt;Interval&gt; [ &lt;Anwesend-Interval&gt; ] ]</code><br>
<br>
Pr&uuml;ft den Anwesenheitsstatus mithilfe einer selbst geschriebenen Perl-Funktion (z.B. SNMP Abfrage).<br><br>
Diese Funktion muss 0 (Abwesend) oder 1 (Anwesend) zurückgeben. Ein entsprechendes Beispiel findet man im <a href="http://www.fhemwiki.de/wiki/Anwesenheitserkennung" target="_new">FHEM-Wiki</a>.<br><br>
<u>Beispiel</u><br><br>
<code>define iPhone PRESENCE function {snmpCheck("10.0.1.1","0x44d77429f35c")</code><br><br>
<b>Mode: shellscript</b><br><br>
<code>define &lt;name&gt; PRESENCE shellscript "&lt;Skript-Pfad&gt; [&lt;arg1&gt;] [&lt;argN&gt;]..." [ &lt;Interval&gt; [ &lt;Anwesend-Interval&gt; ] ]</code><br>
<br>
Pr&uuml;ft den Anwesenheitsstatus mithilfe eines selbst geschrieben Skripts oder Programmes (egal in welcher Programmier-/Skriptsprache)<br><br>
Der Aufruf dieses Skriptes muss eine 0 (Abwesend) oder 1 (Anwesend) auf der <u>Kommandozeile (STDOUT)</u> ausgeben. Alle anderen Werte/Ausgaben werden als Fehler behandelt.<br><br>
<u>Beispiel</u><br><br>
<code>define iPhone PRESENCE shellscript "/opt/check_device.sh iPhone"</code><br><br>
<b>Modus: lan-bluetooth</b><br><br>
Pr&uuml;ft ein Bluetooth-Ger&auml;t auf Anwesenheit &uuml;ber Netzwerk mit Hilfe von presenced oder collectord. Diese k&ouml;nnen auf jeder Maschine installiert werden,
welche eine Standard-Perl-Umgebung bereitstellt und &uuml;ber Netzwerk erreichbar ist.
<br>
<br>
<code>define &lt;name&gt; PRESENCE lan-bluetooth &lt;Bluetooth-Adresse&gt; &lt;IP-Adresse&gt;[:Port] [ &lt;Interval&gt; ]</code><br>
<br>
Der Standardport ist 5111 (presenced). Alternativ kann man den Port 5222 (collectord) nutzen. Generell ist der Port aber frei w&auml;hlbar.<br><br>
<u>Beispiel</u><br><br>
<code>define iPhone PRESENCE lan-bluetooth 0a:4f:36:d8:f9:89 127.0.0.1:5222</code><br><br>
<u>presenced</u><br><br>
<ul>Der presenced ist ein Perl Netzwerk Dienst, welcher eine Bluetooth-Anwesenheitserkennung von ein oder mehreren Ger&auml;ten &uuml;ber Netzwerk bereitstellt.
Dieser lauscht standardm&auml;&szlig;ig auf TCP Port 5111 nach eingehenden Verbindungen von dem PRESENCE Modul oder einem collectord.<br>
<PRE>
Usage:
presenced -d [-p &lt;port&gt;] [-P &lt;filename&gt;]
presenced [-h | --help]
Options:
-p, --port
TCP Port which should be used (Default: 5111)
-P, --pid-file
PID file for storing the local process id (Default: /var/run/presenced.pid)
-d, --daemon
detach from terminal and run as background daemon
-v, --verbose
Print detailed log output
-h, --help
Print detailed help screen
</PRE>
Zur Bluetooth-Abfrage wird der Shell-Befehl "hcitool" verwendet (Paket: <a href="http://www.bluez.org" target="_new">bluez</a>)
um sogenannte "Paging-Request" an die gew&uuml;nschte Bluetooth Adresse (z.B. 01:B4:5E:AD:F6:D3) durchzuf&uuml;hren. Das Ger&auml;t muss dabei nicht sichtbar sein, allerdings st&auml;ndig aktiviert sein
um Bluetooth-Anfragen zu beantworten.
<br><br>
Wenn ein Ger&auml;t anwesend ist, wird dies an FHEM &uuml;bermittelt zusammen mit dem Ger&auml;tenamen als Reading.<br><br>
Der presenced ist zum Download verf&uuml;gbar als:<br><br>
<ul>
<li>Perl Skript: <a href="http://svn.code.sf.net/p/fhem/code/trunk/fhem/contrib/PRESENCE/presenced" target="_new">presenced</a></li>
<li>.deb Paket f&uuml;r Debian (architekturunabh&auml;ngig): <a href="http://svn.code.sf.net/p/fhem/code/trunk/fhem/contrib/PRESENCE/deb/presenced-1.3.deb" target="_new">presenced-1.3.deb</a></li>
<li>.deb Paket f&uuml;r Raspberry Pi (raspbian): <a href="http://svn.code.sf.net/p/fhem/code/trunk/fhem/contrib/PRESENCE/deb/presenced-rpi-1.3.deb" target="_new">presenced-rpi-1.3.deb</a></li>
</ul>
</ul><br><br>
<u>collectord</u><br><br>
<ul>
Der collectord ist ein Perl Netzwerk Dienst, welcher Verbindungen zu mehreren presenced-Instanzen verwaltet um eine koordinierte Suche nach ein oder mehreren Bluetooth-Ger&auml;ten &uuml;ber Netzwerk durchzuf&uuml;hren.<br><br>
Er lauscht auf TCP port 5222 nach eingehenden Verbindungen von einem PRESENCE Modul.
<PRE>
Usage:
collectord -c &lt;configfile&gt; [-d] [-p &lt;port&gt;] [-P &lt;pidfile&gt;]
collectord [-h | --help]
Options:
-c, --configfile &lt;configfile&gt;
The config file which contains the room and timeout definitions
-p, --port
TCP Port which should be used (Default: 5222)
-P, --pid-file
PID file for storing the local process id (Default: /var/run/collectord.pid)
-d, --daemon
detach from terminal and run as background daemon
-v, --verbose
Print detailed log output
-l, --logfile &lt;logfile&gt;
log to the given logfile
-h, --help
Print detailed help screen
</PRE>
Bevor der collectord verwendet werden kann, ben&ouml;tigt er eine Konfigurationsdatei in welcher alle R&auml;ume mit einem presenced-Agenten eingetragen sind. Diese Datei sieht wie folgt aus:
<br><br>
<PRE>
# Raum Definitionen
# =================
#
[Raum-Name] # Name des Raumes
address=192.168.0.10 # IP-Adresse oder Hostname
port=5111 # TCP Port welcher benutzt werden soll (standardm&auml;&szlig;ig 5111)
presence_timeout=120 # Pr&uuml;finterval in Sekunden f&uuml;r jede Abfrage eines Ger&auml;tes, welches anwesend ist
absence_timeout=20 # Pr&uuml;finterval in Sekunden f&uuml;r jede Abfrage eines Ger&auml;tes, welches abwesend ist
[Wohnzimmer]
address=192.168.0.11
port=5111
presence_timeout=180
absence_timeout=20
</PRE>
<br>
Wenn ein Ger&auml;t in irgend einem Raum anwesend ist, wird dies an FHEM &uuml;bermittelt, zusammen mit dem Ger&auml;tenamen und dem Raum, in welchem das Ger&auml;t erkannt wurde.<br><br>
Der collectord ist zum Download verf&uuml;gbar als:<br><br>
<ul>
<li>Perl Skript: <a href="http://svn.code.sf.net/p/fhem/code/trunk/fhem/contrib/PRESENCE/collectord" target="_new">collectord</a></li>
<li>.deb Paket f&uuml;r Debian (architekturunabh&auml;ngig): <a href="http://svn.code.sf.net/p/fhem/code/trunk/fhem/contrib/PRESENCE/deb/collectord-1.4.deb" target="_new">collectord-1.4.deb</a></li>
</ul>
</ul>
</ul>
<br>
<a name="PRESENCEset"></a>
<b>Set</b>
<ul>
<li><b>statusRequest</b> - Startet einen sofortigen Check.</li>
</ul>
<br>
<a name="PRESENCEget"></a>
<b>Get</b>
<ul>
N/A
</ul>
<br>
<a name="PRESENCEattr"></a>
<b>Attributes</b><br><br>
<ul>
<li><a href="#do_not_notify">do_not_notify</a></li>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li><br>
<li><a>disable</a></li>
Wenn dieses Attribut aktiviert ist, wird die Anwesenheitserkennung nicht mehr durchgef&uuml;hrt.<br><br>
M&ouml;gliche Werte: 0 => Erkennung durchf&uuml;hren , 1 => Keine Erkennungen durchf&uuml;hren<br>
Standardwert ist 0 (Erkennung durchf&uuml;hren)<br><br>
<li><a>ping_count</a></li> (Nur im Modus "ping" anwendbar auf Nicht-Windows-Maschinen)<br>
Verändert die Anzahl der Ping-Pakete die gesendet werden sollen um die Anwesenheit zu erkennen.
Je nach Netzwerkstabilität können erste Pakete verloren gehen oder blockiert werden.<br><br>
Standartwert ist 4 (Versuche)<br><br>
<li><a>fritzbox_repeater</a></li> (Nur im Modus "fritzbox" anwendbar)<br>
Wenn die FritzBox Teil eines Netzwerkes ist, welches mit Repeatern arbeitet, dann muss dieses Attribut gesetzt sein um die Erkennung von Ger&auml;ten zu gew&auml;hrleisten,
welche &uuml;ber einen Repeater erreichbar sind.
<br><br>
Dies gilt ebenso f&uuml;r Devices, welche keine Geschwindigkeitsangaben auf der FritzBox Seite (Heimnetz) anzeigen k&ouml;nnen.<br><br>
<b>ACHTUNG: Die Erkennung der Abwesenheit eines Ger&auml;tes in einem Repeater-Netzwerk kann ca. 15 - 20 Minuten dauern!!</b>
<br><br>
M&ouml;gliche Werte: 0 => Standarderkennung verwenden, 1 => Erkennung f&uuml;r Repeaterger&auml;te verwenden<br>
Standardwert ist 0 (Standarderkennung verwenden)
<br><br>
</ul>
<br>
<a name="PRESENCEevents"></a>
<b>Generierte Events:</b><br><br>
<ul>
<u>Generelle Events:</u><br><br>
<ul>
<li><b>state</b>: $state (absent|present|disabled) - Der Anwesenheitsstatus eine Ger&auml;tes (absent = abwesend; present = anwesend) oder "disabled" wenn das disable-Attribut aktiviert ist</li>
</ul><br><br>
<u>Bluetooth-spezifische Events:</u><br><br>
<ul>
<li><b>device_name</b>: $name - Der Name des Bluetooth-Ger&auml;tes, wenn es anwesend (Status: present) ist</li>
</ul><br><br>
<u>presenced-/collectord-spezifische Events:</u><br><br>
<ul>
<li><b>command_accepted</b>: $command_accepted (yes|no) - Wurde das letzte Kommando an den presenced/collectord akzeptiert (yes = ja, no = nein)?</li>
<li><b>room</b>: $room - Wenn das Modul mit einem collectord verbunden ist, zeigt dieses Event den Raum an, in welchem dieses Ger&auml;t erkannt wurde (Raumname entsprechend der Konfigurationsdatei des collectord)</li>
</ul>
</ul>
</ul>
<a name="PachLog"></a>
<h3>PachLog</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#PachLog'>PachLog</a><br/>
</ul>
<a name="Pushover"></a>
<h3>Pushover</h3>
<ul>
Pushover ist ein Dienst, um Benachrichtigungen von einer vielzahl
von Quellen auf Deinem Smartphone oder Tablet zu empfangen.<br>
Du brauchst einen Account um dieses Modul zu verwenden.<br>
Für weitere Informationen über den Dienst besuche <a href="https://pushover.net">pushover.net</a>.<br>
<br>
Diskutiere das Modul <a href="http://forum.fhem.de/index.php/topic,16215.0.html">hier</a>.<br>
<br>
<br>
<a name="PushoverDefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; Pushover &lt;token&gt; &lt;user&gt;</code><br>
<br>
Du musst einen Account erstellen, um den User Key zu bekommen.<br>
Und du musst eine Anwendung erstellen, um einen API Token zu bekommen.<br>
<br>
Beispiel:
<ul>
<code>define Pushover1 Pushover 01234 56789</code>
</ul>
</ul>
<br>
<a name="PushoverSet"></a>
<b>Set</b>
<ul>
<code>set &lt;name&gt; msg &lt;title&gt; &lt;msg&gt; &lt;device&gt; &lt;priority&gt; &lt;sound&gt; [&lt;retry&gt; &lt;expire&gt;]</code>
<br>
<br>
Beispiele:
<ul>
<code>set Pushover1 msg 'Titel' 'Dies ist ein Text.' '' 0 ''</code><br>
<code>set Pushover1 msg 'Notfall' 'Sicherheitsproblem im Wohnzimmer.' '' 2 'siren' 30 3600</code><br>
</ul>
<br>
Anmerkungen:
<ul>
<li>Wenn device leer ist, wird die Nachricht an alle Geräte geschickt.
</li>
<li>Wenn sound leer ist, dann wird die Standardeinstellung in der App verwendet.
</li>
<li>Wenn die Priorität höher oder gleich 2 ist müssen retry und expire definiert sein.
</li>
<li>Für weiterführende Dokumentation über diese Parameter lies Dir die <a href="https://pushover.net/api">Pushover API</a> durch.
</li>
</ul>
</ul>
<br>
<b>Get</b> <ul>N/A</ul><br>
<a name="PushoverAttr"></a>
<b>Attributes</b>
<ul>
<a name="timestamp"></a>
<li>timestamp<br>
Sende den Unix-Zeitstempel mit jeder Nachricht.
</li><br>
</ul>
<br>
<a name="PushoverEvents"></a>
<b>Generated events:</b>
<ul>
N/A
</ul>
</ul>
<p>
<a name="RESIDENTS" id="RESIDENTS"></a>
</p>
<h3>
RESIDENTS
</h3>
<div style="margin-left: 2em">
<a name="RESIDENTSdefine" id="RESIDENTSdefine"></a> <b>Define</b>
<div style="margin-left: 2em">
<code>define &lt;rgr_ResidentsName&gt; RESIDENTS</code><br>
<br>
Stellt ein spezielles Dummy-Device bereit, um eine Gruppe von Personen zu repräsentieren, die zusammen wohnen.<br>
Es kombiniert dabei logisch die individuellen Stati von <a href="#ROOMMATE">ROOMMATE</a> und <a href="#GUEST">GUEST</a> Devices und erlaubt den Status für alle Mitglieder zeitgleich zu ändern. Basierend auf dem aktuelle Status und anderen Readings können andere Aktionen innerhalb von FHEM angestoßen werden.<br>
<br>
Beispiele:<br>
<div style="margin-left: 2em">
<code># Einzeln<br>
define rgr_Residents RESIDENTS</code>
</div>
</div><br>
<br>
<a name="RESIDENTSset" id="RESIDENTSset"></a> <b>Set</b>
<div style="margin-left: 2em">
<code>set &lt;rgr_ResidentsName&gt; &lt;command&gt; [&lt;parameter&gt;]</code><br>
<br>
Momentan sind die folgenden Kommandos definiert.<br>
<ul>
<li>
<b>addGuest</b> &nbsp;&nbsp;-&nbsp;&nbsp; erstellt ein neues GUEST Device und fügt es der aktuellen RESIDENTS Gruppe hinzu. Einfach den Platzhalternamen eingeben und das wars.
</li>
<li>
<b>addRoommate</b> &nbsp;&nbsp;-&nbsp;&nbsp; erstellt ein neues GUEST Device und fügt es der aktuellen RESIDENTS Gruppe hinzu. Einfach den Vornamen eingeben und das wars.
</li>
<li>
<b>removeGuest</b> &nbsp;&nbsp;-&nbsp;&nbsp; zeigt alle Mitglieder vom Typ GUEST an und ermöglicht ein einfaches löschen des dazugehörigen Dummy Devices.
</li>
<li>
<b>removeRoommate</b> &nbsp;&nbsp;-&nbsp;&nbsp; zeigt alle Mitglieder vom Typ ROOMMATE an und ermöglicht ein einfaches löschen des dazugehörigen Dummy Devices.
</li>
<li>
<b>state</b> &nbsp;&nbsp;home,gotosleep,asleep,awoken,absent,gone&nbsp;&nbsp; wechselt den Status für alle Gruppenmitglieder gleichzeitig; siehe Attribut rgr_states, um die angezeigte Liste in FHEMWEB abzuändern
</li>
</ul>
</div><br>
<br>
<div style="margin-left: 2em">
<u>Mögliche Stati und ihre Bedeutung</u><br>
<br>
<div style="margin-left: 2em">
Dieses Modul unterscheidet 7 verschiedene Stati:<br>
<br>
<ul>
<li>
<b>home</b> - Bewohner sind zu Hause und mindestens einer schläft nicht
</li>
<li>
<b>gotosleep</b> - alle anwesenden Bewohner sind auf dem Weg ins Bett (wenn sie nicht schon schlafen)
</li>
<li>
<b>asleep</b> - alle anwesenden Bewohner schlafen
</li>
<li>
<b>awoken</b> - mindestens einer der anwesenden Bewohner ist gerade aufgewacht
</li>
<li>
<b>absent</b> - keiner der Bewohner ist momentan zu Hause; mindestens einer ist aber in Kürze zurück
</li>
<li>
<b>gone</b> - alle Bewohner sind für längere Zeit verreist
</li>
<li>
<b>none</b> - kein Mitglied aktiv
</li>
</ul><br>
<br>
Hinweis: Der Status 'none' kann nicht explizit gesetzt werden. Das setzen von 'gone' wird bei Mitgliedern vom Typ GUEST als 'none' behandelt.
</div>
</div><br>
<br>
<a name="RESIDENTSattr" id="RESIDENTSattr"></a> <b>Attribute</b><br>
<div style="margin-left: 2em">
<ul>
<li>
<b>rgr_showAllStates</b> - die Stati 'asleep' und 'awoken' sind normalerweise nicht immer sichtbar, um einen einfachen Zubettgeh-Prozess über das devStateIcon Attribut zu ermöglichen; Standard ist 0
</li>
<li>
<b>rgr_states</b> - Liste aller in FHEMWEB angezeigter Stati; Eintrage nur mit Komma trennen und KEINE Leerzeichen benutzen; nicht unterstützte Stati führen zu Fehlern
</li>
</ul>
</div><br>
<br>
<br>
<b>Generierte Readings/Events:</b><br>
<div style="margin-left: 2em">
<ul>
<li>
<b>lastActivity</b> - der letzte Status Wechsel eines Gruppenmitglieds
</li>
<li>
<b>lastActivityBy</b> - der Name des Gruppenmitglieds, dessen Status zuletzt geändert wurde
</li>
<li>
<b>lastArrival</b> - Zeitstempel der letzten Ankunft zu Hause
</li>
<li>
<b>lastAwake</b> - Zeitstempel des Endes des letzten Schlafzyklus
</li>
<li>
<b>lastDeparture</b> - Zeitstempel des letzten Verlassens des Zuhauses
</li>
<li>
<b>lastDurAbsence</b> - Dauer der letzten Abwesenheit im folgenden Format: Stunden:Minuten:Sekunden
</li>
<li>
<b>lastDurPresence</b> - Dauer der letzten Anwesenheit im folgenden Format: Stunden:Minuten:Sekunden
</li>
<li>
<b>lastDurSleep</b> - Dauer des letzten Schlafzyklus im folgenden Format: Stunden:Minuten:Sekunden
</li>
<li>
<b>lastSleep</b> - Zeitstempel des Beginns des letzten Schlafzyklus
</li>
<li>
<b>lastState</b> - der vorherige Status
</li>
<li>
<b>presence</b> - gibt den Zuhause Status in Abhängigkeit des Readings 'state' wieder (kann 'present' oder 'absent' sein)
</li>
<li>
<b>residentsAbsent</b> - Anzahl der Bewohner mit Status 'absent'
</li>
<li>
<b>residentsAsleep</b> - Anzahl der Bewohner mit Status 'asleep'
</li>
<li>
<b>residentsAwoken</b> - Anzahl der Bewohner mit Status 'awoken'
</li>
<li>
<b>residentsGone</b> - Anzahl der Bewohner mit Status 'gone'
</li>
<li>
<b>residentsGotosleep</b> - Anzahl der Bewohner mit Status 'gotosleep'
</li>
<li>
<b>residentsGuests</b> - Anzahl der aktiven Gäste, welche momentan du den Bewohnern dazugezählt werden
</li>
<li>
<b>residentsHome</b> - Anzahl der Bewohner mit Status 'home'
</li>
<li>
<b>residentsTotal</b> - Summe aller aktiven Bewohner unabhängig von ihrem aktuellen Status
</li>
<li>
<b>residentsTotalAbsent</b> - Summe aller aktiven Bewohner, die unterwegs sind
</li>
<li>
<b>residentsTotalPresent</b> - Summe aller aktiven Bewohner, die momentan Zuhause sind
</li>
<li>
<b>residentsTotalWayhome</b> - Summe aller aktiven Bewohner, die momentan auf dem Weg zurück nach Hause sind
</li>
<li>
<b>state</b> - gibt den aktuellen Status wieder
</li>
</ul>
</div>
</div>
<a name="RFXCOM"></a>
<h3>RFXCOM</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#RFXCOM'>RFXCOM</a><br/>
</ul>
<a name="RFXMETER"></a>
<h3>RFXMETER</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#RFXMETER'>RFXMETER</a><br/>
</ul>
<a name="RFXX10REC"></a>
<h3>RFXX10REC</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#RFXX10REC'>RFXX10REC</a><br/>
</ul>
<p>
<a name="ROOMMATE" id="ROOMMATE"></a>
</p>
<h3>
ROOMMATE
</h3>
<div style="margin-left: 2em">
<a name="ROOMMATEdefine" id="ROOMMATEdefine"></a> <b>Define</b>
<div style="margin-left: 2em">
<code>define &lt;rr_FirstName&gt; ROOMMATE [&lt;Device Name der Bewohnergruppe&gt;]</code><br />
<br />
Stellt ein spezielles Dummy Device bereit, welches einen Mitbewohner repräsentiert.<br />
Basierend auf dem aktuelle Status und anderen Readings können andere Aktionen innerhalb von FHEM angestoßen werden.<br />
<br />
Wird vom übergeordneten Modul <a href="#RESIDENTS">RESIDENTS</a> verwendet, kann aber auch einzeln benutzt werden.<br />
<br />
Beispiele:<br />
<div style="margin-left: 2em">
<code># Einzeln<br />
define rr_Manfred ROOMMATE<br />
<br />
# Typisches Gruppenmitglied<br />
define rr_Manfred ROOMMATE rgr_Residents # um Mitglied der Gruppe rgr_Residents zu sein<br />
<br />
# Mitglied in mehreren Gruppen<br />
define rr_Manfred ROOMMATE rgr_Residents,rgr_Parents # um Mitglied den Gruppen rgr_Residents und rgr_Parents zu sein<br />
<br />
# Komplexe Familien Struktur<br />
define rr_Manfred ROOMMATE rgr_Residents,rgr_Parents # Elternteil<br />
define rr_Lisa ROOMMATE rgr_Residents,rgr_Parents # Elternteil<br />
define rr_Rick ROOMMATE rgr_Residents,rgr_Children # Kind1<br />
define rr_Alex ROOMMATE rgr_Residents,rgr_Children # Kind2</code>
</div>
</div><br />
<div style="margin-left: 2em">
Bitte beachten, dass das RESIDENTS Gruppen Device zunächst angelegt werden muss, bevor ein ROOMMATE Objekt dort Mitglied werden kann.
</div><br />
<br />
<br />
<a name="ROOMMATEset" id="ROOMMATEset"></a> <b>Set</b>
<div style="margin-left: 2em">
<code>set &lt;rr_FirstName&gt; &lt;command&gt; [&lt;parameter&gt;]</code><br />
<br />
Momentan sind die folgenden Kommandos definiert.<br />
<ul>
<li>
<b>location</b> &nbsp;&nbsp;-&nbsp;&nbsp; setzt das Reading 'location'; siehe auch Attribut rr_locations, um die in FHEMWEB angezeigte Liste anzupassen
</li>
<li>
<b>mood</b> &nbsp;&nbsp;-&nbsp;&nbsp; setzt das Reading 'mood'; siehe auch Attribut rr_moods, um die in FHEMWEB angezeigte Liste anzupassen
</li>
<li>
<b>state</b> &nbsp;&nbsp;home,gotosleep,asleep,awoken,absent,gone&nbsp;&nbsp; wechselt den Status; siehe auch Attribut rr_states, um die in FHEMWEB angezeigte Liste anzupassen
</li>
</ul>
</div><br />
<br />
<div style="margin-left: 2em">
<u>Mögliche Stati und ihre Bedeutung</u><br />
<br />
<div style="margin-left: 2em">
Dieses Modul unterscheidet 6 verschiedene Stati:<br />
<br />
<ul>
<li>
<b>home</b> - Mitbrwohner ist zuhause und wach
</li>
<li>
<b>gotosleep</b> - Mitbewohner ist auf dem Weg ins Bett
</li>
<li>
<b>asleep</b> - Mitbewohner schläft
</li>
<li>
<b>awoken</b> - Mitbewohner ist gerade aufgewacht
</li>
<li>
<b>absent</b> - Mitbewohner ist momentan nicht zuhause, wird aber bald zurück sein
</li>
<li>
<b>gone</b> - Mitbewohner ist für längere Zeit verreist
</li>
</ul>
</div>
</div><br />
<br />
<div style="margin-left: 2em">
<u>Zusammenhang zwischen Anwesenheit/Presence und Aufenthaltsort/Location</u><br />
<br />
<div style="margin-left: 2em">
Unter bestimmten Umständen führt der Wechsel des Status auch zu einer Änderung des Readings 'location'.<br />
<br />
Wannimmer die Anwesenheit (bzw. das Reading 'presence') von 'absent' auf 'present' wechselt, wird 'location' auf 'home' gesetzt. Sofern das Attribut rr_locationHome gesetzt ist, wird die erste Lokation daraus anstelle von 'home' verwendet.<br />
<br />
Wannimmer die Anwesenheit (bzw. das Reading 'presence') von 'present' auf 'absent' wechselt, wird 'location' auf 'underway' gesetzt. Sofern das Attribut rr_locationUnderway gesetzt ist, wird die erste Lokation daraus anstelle von 'underway' verwendet.
</div>
</div><br />
<br />
<div style="margin-left: 2em">
<u>Auto-Status 'gone'</u><br />
<br />
<div style="margin-left: 2em">
Immer wenn ein Mitbewohner auf 'absent' gesetzt wird, wird ein Zähler gestartet, der nach einer bestimmten Zeit den Status automatisch auf 'gone' setzt.<br />
Der Standard ist nach 36 Stunden.<br />
<br />
Dieses Verhalten kann über das Attribut rr_autoGoneAfter angepasst werden.
</div>
</div><br />
<br />
<div style="margin-left: 2em">
<u>Anwesenheit mit anderen ROOMMATE oder GUEST Devices synchronisieren</u><br />
<br />
<div style="margin-left: 2em">
Wenn Sie immer zusammen mit anderen Mitbewohnern oder Gästen das Haus verlassen oder erreichen, können Sie ihren Status ganz einfach auf andere Mitbewohner übertragen.<br />
Durch das Setzen des Attributs rr_PassPresenceTo folgen die dort aufgeführten Mitbewohner ihren eigenen Statusänderungen nach 'home', 'absent' oder 'gone'.<br />
<br />
Bitte beachten, dass Mitbewohner mit dem aktuellen Status 'gone' oder 'none' (im Falle von Gästen) nicht beachtet werden.
</div>
</div><br />
<br />
<div style="margin-left: 2em">
<u>Zusammenhang zwischen Aufenthaltsort/Location und Anwesenheit/Presence</u><br />
<br />
<div style="margin-left: 2em">
Unter bestimmten Umständen hat der Wechsel des Readings 'location' auch einen Einfluss auf den tatsächlichen Status.<br />
<br />
Immer wenn eine Lokation mit dem Namen 'home' gesetzt wird, wird auch der Status auf 'home' gesetzt, sofern die Anwesenheit bis dahin noch auf 'absent' stand. Sofern das Attribut rr_locationHome gesetzt wurde, so lösen alle dort angegebenen Lokationen einen Statuswechsel nach 'home' aus.<br />
<br />
Immer wenn eine Lokation mit dem Namen 'underway' gesetzt wird, wird auch der Status auf 'absent' gesetzt, sofern die Anwesenheit bis dahin noch auf 'present' stand. Sofern das Attribut rr_locationUnderway gesetzt wurde, so lösen alle dort angegebenen Lokationen einen Statuswechsel nach 'underway' aus. Diese Lokationen werden auch nicht in das Reading 'lastLocation' übertragen.<br />
<br />
Immer wenn eine Lokation mit dem Namen 'wayhome' gesetzt wird, wird das Reading 'wayhome' auf '1' gesetzt, sofern die Anwesenheit zu diesem Zeitpunkt 'absent' ist. Sofern das Attribut rr_locationWayhome gesetzt wurde, so führt das VERLASSEN einer dort aufgeführten Lokation ebenfalls dazu, dass das Reading 'wayhome' auf '1' gesetzt wird. Es gibt also 2 Möglichkeiten den Nach-Hause-Weg-Indikator zu beeinflussen (implizit und explizit).<br />
Die Ankunft zuhause setzt den Wert von 'wayhome' zurück auf '0'.<br />
<br />
Wenn Sie auch das <a href="#GEOFANCY">GEOFANCY</a> Modul verwenden, können Sie das Reading 'location' ganz einfach über GEOFANCY Ereignisse aktualisieren lassen. Definieren Sie dazu einen NOTIFY-Trigger wie diesen:<br />
<br />
<code>define n_rr_Manfred.location notify geofancy:currLoc_Manfred.* set rr_Manfred location $EVTPART1</code><br />
<br />
Durch das Anlegen von Geofencing-Zonen mit den Namen 'home' und 'wayhome' in der iOS App werden zukünftig automatisch alle Statusänderungen wie oben beschrieben durchgeführt.
</div>
</div><br />
<br />
<a name="ROOMMATEattr" id="ROOMMATEattr"></a> <b>Attribute</b><br />
<div style="margin-left: 2em">
<ul>
<li>
<b>rr_autoGoneAfter</b> - Anzahl der Stunden, nach denen sich der Status automatisch auf 'gone' ändert, wenn der aktuelle Status 'absent' ist; Standard ist 36 Stunden
</li>
<li>
<b>rr_locationHome</b> - hiermit übereinstimmende Lokationen werden als zuhause gewertet; der erste Eintrag wird für das Zusammenspiel bei Statusänderungen benutzt; mehrere Einträge durch Leerzeichen trennen; Standard ist 'home'
</li>
<li>
<b>rr_locationUnderway</b> - hiermit übereinstimmende Lokationen werden als unterwegs gewertet; der erste Eintrag wird für das Zusammenspiel bei Statusänderungen benutzt; mehrere Einträge durch Leerzeichen trennen; Standard ist 'underway'
</li>
<li>
<b>rr_locationWayhome</b> - das Verlassen einer Lokation, die hier aufgeführt ist, lässt das Reading 'wayhome' auf '1' setzen; mehrere Einträge durch Leerzeichen trennen; Standard ist "wayhome"
</li>
<li>
<b>rr_locations</b> - Liste der in FHEMWEB anzuzeigenden Lokationsauswahlliste in FHEMWEB; mehrere Einträge nur durch Komma trennen und KEINE Leerzeichen verwenden
</li>
<li>
<b>rr_moodDefault</b> - die Stimmung, die nach Ankunft zuhause oder nach dem Statuswechsel von 'awoken' auf 'home' gesetzt werden soll
</li>
<li>
<b>rr_moodSleepy</b> - die Stimmung, die nach Statuswechsel zu 'gotosleep' oder 'awoken' gesetzt werden soll
</li>
<li>
<b>rr_moods</b> - Liste von Stimmungen, wie sie in FHEMWEB angezeigt werden sollen; mehrere Einträge nur durch Komma trennen und KEINE Leerzeichen verwenden
</li>
<li>
<b>rr_passPresenceTo</b> - synchronisiere die Anwesenheit mit anderen ROOMMATE oder GUEST Devices; mehrere Devices durch Leerzeichen trennen
</li>
<li>
<b>rr_realname</b> - wo immer ROOMMATE den richtigen Namen verwenden möchte nutzt es den Wert des Attributs alias oder group; Standard ist group
</li>
<li>
<b>rr_showAllStates</b> - die Stati 'asleep' und 'awoken' sind normalerweise nicht immer sichtbar, um einen einfachen Zubettgeh-Prozess über das devStateIcon Attribut zu ermöglichen; Standard ist 0
</li>
<li>
<b>rr_states</b> - Liste aller in FHEMWEB angezeigter Stati; Eintrage nur mit Komma trennen und KEINE Leerzeichen benutzen; nicht unterstützte Stati führen zu Fehlern
</li>
</ul>
</div><br />
<br />
<br />
<b>Generierte Readings/Events:</b><br />
<div style="margin-left: 2em">
<ul>
<li>
<b>durTimerAbsence</b> - Timer, der die Dauer der Abwesenheit in Minuten anzeigt
</li>
<li>
<b>durTimerPresence</b> - Timer, der die Dauer der Anwesenheit in Minuten anzeigt
</li>
<li>
<b>durTimerSleep</b> - Timer, der die Schlafdauer in Minuten anzeigt
</li>
<li>
<b>lastArrival</b> - Zeitstempel der letzten Ankunft zu Hause
</li>
<li>
<b>lastAwake</b> - Zeitstempel des Endes des letzten Schlafzyklus
</li>
<li>
<b>lastDeparture</b> - Zeitstempel des letzten Verlassens des Zuhauses
</li>
<li>
<b>lastDurAbsence</b> - Dauer der letzten Abwesenheit im folgenden Format: Stunden:Minuten:Sekunden
</li>
<li>
<b>lastDurPresence</b> - Dauer der letzten Anwesenheit im folgenden Format: Stunden:Minuten:Sekunden
</li>
<li>
<b>lastDurSleep</b> - Dauer des letzten Schlafzyklus im folgenden Format: Stunden:Minuten:Sekunden
</li>
<li>
<b>lastLocation</b> - der vorherige Aufenthaltsort
</li>
<li>
<b>lastMood</b> - die vorherige Stimmung
</li>
<li>
<b>lastSleep</b> - Zeitstempel des Beginns des letzten Schlafzyklus
</li>
<li>
<b>lastState</b> - der vorherige Status
</li>
<li>
<b>location</b> - der aktuelle Aufenthaltsort
</li>
<li>
<b>presence</b> - gibt den Zuhause Status in Abhängigkeit des Readings 'state' wieder (kann 'present' oder 'absent' sein)
</li>
<li>
<b>mood</b> - die aktuelle Stimmung
</li>
<li>
<b>state</b> - gibt den aktuellen Status wieder
</li>
<li>
<b>wayhome</b> - abhängig vom aktullen Aufenthaltsort, kann der Wert '1' werden, wenn die Person auf dem weg zurück nach Hause ist
</li>
</ul>
</div>
</div>
<a name="RPII2C"></a>
<h3>RPII2C</h3>
<ul>
<a name="RPII2C"></a>
Erm&ouml;glicht den Zugriff auf die I2C Schnittstellen des Raspberry Pi &uuml;ber logische Module. Register von I2C IC's k&ouml;nnen auch direkt gelesen und geschrieben werden.<br><br>
Dieses Modul funktioniert gruns&auml;tzlich auf allen Linux Systemen, die <code>/dev/i2c-x</code> bereitstellen.<br><br>
<b>Vorbereitung:</b><br>
<ul>
<li>
Dieses Modul nutzt das gpio Utility der <a href="http://wiringpi.com/download-and-install/">WiringPi</a> Bibliothek um FHEM Schreibrechte auf die I2C Schnittstelle zu geben.<br>
WiringPi Installation ist hier beschrieben: <a href="#RPI_GPIO">RPI_GPIO</a><br>
F&uuml;r andere Systeme (BeagleBone, etc.) oder auch für das Raspberry kann auf WiringPi verzichtet werden. In diesem Fall müssen die Dateien <code>/dev/i2c-x</code> Schreib-/Leserechte, für den User unter dem FHEM läuft, gesetzt bekommen. (z.B. in der etc/init.d/fhem)<br>
</li>
<li>
Installation der I2C Abh&auml;ngigkeiten:<br>
<code>sudo apt-get install libi2c-dev i2c-tools build-essential</code><br>
</li>
<li>
I2C Kernelmodule laden:<br>
modules Datei &ouml;ffnen<br>
<code>sudo nano /etc/modules</code><br>
folgendes einf&uuml;gen<br>
<code>
i2c-dev<br>
i2c-bcm2708<br>
</code>
</li>
<li>
Desweiteren ist das Perl Modul Device::SMBus f&uuml;r den Zugrff auf den I2C Bus notwendig:<br>
<code>sudo apt-get install libmoose-perl<br>
sudo cpan Device::SMBus</code><br>
</li>
</ul>
<a name="RPII2CDefine"></a><br>
<b>Define</b>
<ul>
<code>define &lt;name&gt; RPII2C &lt;I2C Bus Number&gt;</code><br>
Die <code>&lt;I2C Bus Number&gt;</code> ist die Nummer des I2C Bus an den die I2C IC's angeschlossen werden (0 oder 1)<br><br>
</ul>
<a name="RPII2CSet"></a>
<b>Set</b>
<ul>
<li>
Schreibe ein Byte (oder auch mehrere nacheinander) direkt auf ein I2C device (manche I2C Module sind so einfach, das es nicht einmal mehrere Register gibt):<br>
<code>set &lt;name&gt; writeByte &lt;I2C Address&gt; &lt;value&gt;</code><br><br>
</li>
<li>
Schreibe ein Byte (oder auch mehrere nacheinander) direkt auf ein Register des adressierten I2C device:<br>
<code>set &lt;name&gt; writeByteReg &lt;I2C Address&gt; &lt;Register Address&gt; &lt;value&gt;</code><br><br>
</li>
<li>
Schreibe n-bytes auf einen Registerbereich, beginnend mit dem angegebenen Register:<br>
<code>set &lt;name&gt; writeBlock &lt;I2C Address&gt; &lt;Register Address&gt; &lt;value&gt;</code><br><br>
</li>
<li>
Identisch zu writeBlock nur kann der Registerbereich sequentiell beschrieben werden. Die Anzahl der Byte muss ein vielfaches der &lt;number of registers&gt; sein.
<code>set &lt;name&gt; writeNBlock &lt;I2C Address&gt; &lt;Register Address&gt; &lt;number of registers&gt; &lt;value&gt;</code><br><br>
</li><br>
Beispiele:
<ul>
Schreibe 0xAA zu Modul mit I2C Addresse 0x60<br>
<code>set test1 writeByte 60 AA</code><br>
Schreibe 0xAA zu Register 0x01 des Moduls mit der I2C Adresse 0x6E<br>
<code>set test1 writeByteReg 6E 01 AA</code><br>
Schreibe 0xAA zu Register 0x01 des Moduls mit der I2C Adresse 0x6E, schreibe danach 0x55 in das Register 0x02 als einzelne Befehle<br>
<code>set test1 writeByteReg 6E 01 AA 55</code><br>
Schreibe 0xA4 zu Register 0x03, 0x00 zu Register 0x04 und 0xDA zu Register 0x05 des Moduls mit der I2C Adresse 0x60 zusammen als ein Blockbefehl<br>
<code>set test1 writeBlock 60 03 A4 00 DA</code><br>
</ul><br>
</ul>
<a name="RPII2CGet"></a>
<b>Get</b>
<ul>
<code>get &lt;name&gt; read &lt;I2C Address&gt; [&lt;Register Address&gt; [&lt;number of registers&gt;]] </code>
<br>
Auslesen der Registerinhalte des I2C Moduls<br><br>
Examples:
<ul>
Lese Byte vom Modul mit der I2C Adresse 0x60<br>
<code>get test1 writeByte 60</code><br>
Lese den Inhalt des Registers 0x01 vom Modul mit der I2C Adresse 0x6E.<br>
<code>get test1 read 6E 01 AA 55</code><br>
Lese den Inhalt des Registerbereichs 0x03 bis 0x06 vom Modul mit der I2C Adresse 0x60.<br>
<code>get test1 read 60 03 4</code><br>
</ul><br>
</ul><br>
<a name="RPII2CAttr"></a>
<b>Attribute</b>
<ul>
<li><a href="#ignore">ignore</a></li>
<li><a href="#do_not_notify">do_not_notify</a></li>
<li><a href="#showtime">showtime</a></li>
</ul>
<br>
</ul>
<a name="RPI_GPIO"></a>
<h3>RPI_GPIO</h3>
<ul>
<a name="RPI_GPIO"></a>
<p>
Das Raspberry Pi erm&ouml;glicht direkten Zugriff zu einigen GPIO's &uuml;ber den Pfostenstecker P1 (und P5 bei V2). Die Steckerbelegung ist in den Tabellen unter Define zu finden.
Dieses Modul erm&ouml;glicht es, die herausgef&uuml;hten GPIO's direkt als Ein- und Ausgang zu benutzen. Die Eing&auml;nge k&ouml;nnen zyklisch abgefragt werden oder auch sofort bei Pegelwechsel gesetzt werden.<br><br>
<b>Wichtig: Niemals Spannung an einen GPIO anlegen, der als Ausgang eingestellt ist! Die interne Logik der GPIO's arbeitet mit 3,3V. Ein &uuml;berschreiten der 3,3V zerst&ouml;rt den GPIO und vielleicht auch den ganzen Prozessor!</b><br><br>
<b>Vorbereitung:</b><br>
Auf GPIO Pins wird im Modul &uuml;ber sysfs zugegriffen. Die Dateien befinden sich unter /system/class/gpio und k&ouml;nnen nur mit root erreicht werden.
Dieses Modul nutzt das gpio Tool von der <a href="http://wiringpi.com/download-and-install/">WiringPi</a>. Bibliothek um GPIS zu exportieren und die korrekten Nutzerrechte zu setzen.
Installation WiringPi:
<pre>
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install git-core
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build
sudo adduser fhem gpio</pre>
Das wars!<br><br>
<a name="RPI_GPIODefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; RPI_GPIO &lt;GPIO number&gt;</code><br><br>
Alle verf&uuml;gbaren <code>GPIO number</code> sind in den folgenden Tabellen zu finden<br><br>
<table border="0" cellspacing="0" cellpadding="0">
<td>
PCB Revision 1 P1 pin header
<table border="2" cellspacing="0" cellpadding="4" rules="all" style="margin:1em 1em 1em 0; border:solid 1px #000000; border-collapse:collapse; font-size:80%; empty-cells:show;">
<tr><td>Function</td> <td>Pin</td><td></td><td>Pin</td> <td>Function</td></tr>
<tr><td>3,3V</td> <td>1</td> <td></td><td>2</td> <td>5V</td></tr>
<tr><td><b>GPIO 0 (SDA0)</b></td><td>3</td> <td></td><td>4</td> <td></td></tr>
<tr><td><b>GPIO 1 (SCL0)</b></td><td>5</td> <td></td><td>6</td> <td>GND</td></tr>
<tr><td>GPIO 4 (GPCLK0)</td> <td>7</td> <td></td><td>8</td> <td>GPIO 14 (TxD)</td></tr>
<tr><td></td> <td>9</td> <td></td><td>10</td> <td>GPIO 15 (RxD)</td></tr>
<tr><td>GPIO 17</td> <td>11</td> <td></td><td>12</td> <td>GPIO 18 (PCM_CLK)</td></tr>
<tr><td><b>GPIO 21</b></td> <td>13</td> <td></td><td>14</td> <td></td></tr>
<tr><td>GPIO 22</td> <td>15</td> <td></td><td>16</td> <td>GPIO 23</td></tr>
<tr><td></td> <td>17</td> <td></td><td>18</td> <td>GPIO 24</td></tr>
<tr><td>GPIO 10 (MOSI)</td> <td>19</td> <td></td><td>20</td> <td></td></tr>
<tr><td>GPIO 9 (MISO)</td> <td>21</td> <td></td><td>22</td> <td>GPIO 25</td></tr>
<tr><td>GPIO 11 (SCLK)</td> <td>23</td> <td></td><td>24</td> <td>GPIO 8 (CE0)</td></tr>
<tr><td></td> <td>25</td> <td></td><td>26</td> <td>GPIO 7 (CE1)</td></tr></table>
</td>
<td>
PCB Revision 2 P1 pin header
<table border="2" cellspacing="0" cellpadding="4" rules="all" style="margin:1em 1em 1em 0; border:solid 1px #000000; border-collapse:collapse; font-size:80%; empty-cells:show;">
<tr><td>Function</td> <td>Pin</td><td></td><td>Pin</td> <td>Function</td></tr>
<tr><td>3,3V</td> <td>1</td> <td></td><td>2</td> <td>5V</td></tr>
<tr><td><b>GPIO 2 (SDA1)</b></td><td>3</td> <td></td><td>4</td> <td></td></tr>
<tr><td><b>GPIO 3 (SCL1)</b></td><td>5</td> <td></td><td>6</td> <td>GND</td></tr>
<tr><td>GPIO 4 (GPCLK0)</td> <td>7</td> <td></td><td>8</td> <td>GPIO 14 (TxD)</td></tr>
<tr><td></td> <td>9</td> <td></td><td>10</td> <td>GPIO 15 (RxD)</td></tr>
<tr><td>GPIO 17</td> <td>11</td> <td></td><td>12</td> <td>GPIO 18 (PCM_CLK)</td></tr>
<tr><td><b>GPIO 27</b></td> <td>13</td> <td></td><td>14</td> <td></td></tr>
<tr><td>GPIO 22</td> <td>15</td> <td></td><td>16</td> <td>GPIO 23</td></tr>
<tr><td></td> <td>17</td> <td></td><td>18</td> <td>GPIO 24</td></tr>
<tr><td>GPIO 10 (MOSI)</td> <td>19</td> <td></td><td>20</td> <td></td></tr>
<tr><td>GPIO 9 (MISO)</td> <td>21</td> <td></td><td>22</td> <td>GPIO 25</td></tr>
<tr><td>GPIO 11 (SCLK)</td> <td>23</td> <td></td><td>24</td> <td>GPIO 8 (CE0)</td></tr>
<tr><td></td> <td>25</td> <td></td><td>26</td> <td>GPIO 7 (CE1)</td></tr></table>
</td>
<td>
PCB Revision 2 P5 pin header
<table border="2" cellspacing="0" cellpadding="4" rules="all" style="margin:1em 1em 1em 0; border:solid 1px #000000; border-collapse:collapse; font-size:80%; empty-cells:show;">
<tr><td>Function</td> <td>Pin</td><td></td><td>Pin</td><td>Function</td></tr>
<tr><td>5V</td> <td>1</td> <td></td><td>2</td> <td>3,3V</td></tr>
<tr><td>GPIO 28 (SDA0)</td><td>3</td> <td></td><td>4</td> <td>GPIO 29 (SCL0)</td></tr>
<tr><td>GPIO 30</td> <td>5</td> <td></td><td>6</td> <td>GPOI 31</td></tr>
<tr><td>GND</td> <td>7</td> <td></td><td>8</td> <td>GND</td></tr></table>
</td>
</table>
Beispiele:
<pre>
define Pin12 RPI_GPIO 18
attr Pin12
attr Pin12 poll_interval 5
</pre>
</ul>
<a name="RPI_GPIOSet"></a>
<b>Set</b>
<ul>
<code>set &lt;name&gt; &lt;value&gt;</code>
<br><br>
<code>value</code> ist dabei einer der folgenden Werte:<br>
<ul><li>F&uuml;r GPIO der als output konfiguriert ist
<ul><code>
off<br>
on<br>
toggle<br>
</code>
</ul>
Die <a href="#setExtensions"> set extensions</a> werden auch unterst&uuml;tzt.<br>
</li>
<li>F&uuml;r GPIO der als input konfiguriert ist
<ul><code>
readval
</code></ul>
readval aktualisiert das reading Pinlevel und, wenn attr toggletostate nicht gesetzt ist, auch state
</ul>
</li><br>
Beispiele:
<ul>
<code>set Pin12 off</code><br>
<code>set Pin11,Pin12 on</code><br>
</ul><br>
</ul>
<a name="RPI_GPIOGet"></a>
<b>Get</b>
<ul>
<code>get &lt;name&gt;</code>
<br><br>
Gibt "high" oder "low" entsprechend dem aktuellen Pinstatus zur&uuml;ck und schreibt den Wert auch in das reading <b>Pinlevel</b>
</ul><br>
<a name="RPI_GPIOAttr"></a>
<b>Attributes</b>
<ul>
<li>direction<br>
Setzt den GPIO auf Ein- oder Ausgang.<br>
Standard: input, g&uuml;ltige Werte: input, output<br><br>
</li>
<li>interrupt<br>
<b>kann nur gew&auml;hlt werden, wenn der GPIO als Eingang konfiguriert ist</b><br>
Aktiviert Flankenerkennung f&uuml;r den GPIO<br>
bei jedem interrupt Ereignis werden die readings Pinlevel und state aktualisiert<br>
Standard: none, g&uuml;ltige Werte: none, falling, rising, both<br><br>
Bei "both" wird ein reading Longpress angelegt, welches auf on gesetzt wird solange der Pin länger als 1s gedr&uuml;ckt wird<br>
Bei "falling" und "rising" wird ein reading Toggle angelegt, das bei jedem Interruptereignis toggelt und das Reading Counter, das bei jedem Ereignis um 1 hochzählt<br><br>
</li>
<li>poll_interval<br>
Fragt den Zustand des GPIO regelm&auml;&szlig;ig ensprechend des eingestellten Wertes in Minuten ab<br>
Standard: -, g&uuml;ltige Werte: Dezimalzahl<br><br>
</li>
<li>toggletostate<br>
<b>Funktioniert nur bei auf falling oder rising gesetztem Attribut interrupt</b><br>
Wenn auf "yes" gestellt wird bei jedem Triggerereignis das <b>state</b> reading invertiert<br>
Standard: no, g&uuml;ltige Werte: yes, no<br><br>
</li>
<li>pud_resistor<br>
Interner Pullup/down Widerstand<br>
Standard: -, g&uuml;ltige Werte: off, up, down<br><br>
</li>
<li>debounce_in_ms<br>
Wartezeit in ms bis nach ausgel&ouml;stem Interrupt der entsprechende Pin abgefragt wird. Kann zum entprellen von mechanischen Schaltern verwendet werden<br>
Standard: 0, g&uuml;ltige Werte: Dezimalzahl<br><br>
</li>
<li>restoreOnStartup<br>
Wiederherstellen der Portzust&äuml;nde nach Neustart<br>
Standard: on, g&uuml;ltige Werte: on, off<br><br>
</li>
<li>longpressinterval<br>
<b>Funktioniert nur bei auf both gesetztem Attribut interrupt</b><br>
Zeit in Sekunden, die ein GPIO auf high verweilen muss, bevor das Reading longpress auf on gesetzt wird <br>
Standard: 1, g&uuml;ltige Werte: 0.1 - 10<br><br>
</li>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
</ul>
<br>
</ul>
<a name="RSS"></a>
<h3>RSS</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#RSS'>RSS</a><br/>
</ul>
<a name="RandomTimer"></a>
<h3>RandomTimer</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#RandomTimer'>RandomTimer</a><br/>
</ul>
<a name="Revolt"></a>
<h3>Revolt</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#Revolt'>Revolt</a><br/>
</ul>
<a name="SCIVT"></a>
<h3>SCIVT</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#SCIVT'>SCIVT</a><br/>
</ul>
<a name="SISPM"></a>
<h3>SISPM</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#SISPM'>SISPM</a><br/>
</ul>
<a name="SIS_PMS"></a>
<h3>SIS_PMS</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#SIS_PMS'>SIS_PMS</a><br/>
</ul>
<a name="SML"></a>
<h3>SML</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#SML'>SML</a><br/>
</ul>
<a name="STACKABLE_CC"></a>
<h3>STACKABLE_CC</h3>
<ul>
Mit Hilfe dieses Moduls kann man die "Stackable CC" Ger&auml;te von busware.de in
FHEM integrieren. Diese Ger&auml;te erm&ouml;glichen eine Menge von CULs an einem RPi
anzuschliessen.
Das erste Ger&auml;t wird als CUL definiert, alle nachfolgenden als STACKABLE_CC.
<br><br>
<a name="STACKABLE_CCdefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; STACKABLE_CC &lt;Base-Device-Name&gt;</code> <br>
<br>
&lt;Base-Device-Name&gt; ist der Name des Ger&auml;tes, der als Basis f&uuml;r das
aktuelle Ger&auml;t dient.<br>
Beispiel:
<ul><code>
define SCC0 CUL /dev/ttyAMA0@38400<br>
attr SCC0 rfmode SlowRF<br>
define SCC1 STACKABLE_CC CUL<br>
attr SCC1 rfmode HomeMatic<br>
define SCC2 STACKABLE_CC CUL<br>
attr SCC2 rfmode Max<br>
</code></ul>
<b>Wichtig:</b>
<ul>
<li>Das rfmode Attribut muss explizit spezifiziert werden. Das gilt nur
f&uuml;r die STACKABLE_CC Definitionen, und nicht f&uuml;r die erste, die
als CUL definiert wurde.</li>
<li>Falls SlowRF spezifiziert wurde, dann muss das FHTID explizit gesetzt
werden, mit folgendem Kommando: "set SCCX raw T01HHHH". Auch das ist nur
f&uuml;r die STACKABLE_CC n&ouml;tig.</li>
<li>Falls ein Ger&auml;t umbenannt wird, was als Basis f&uuml;r ein STACKABLE_CC
dient, dann muss es auch in der Definition des abh&auml;ngigen Ger&auml;tes
umbenannt werden, und FHEM muss neugestartet werden.</li>
</ul>
</ul>
<a name="STACKABLE_CCset"></a>
<b>Set</b> <ul>Die gleichen wie f&uuml;r das <a href="#CULset">CUL</a>.</ul><br>
<a name="STACKABLE_CCget"></a>
<b>Get</b> <ul>Die gleichen wie f&uuml;r das <a href="#CULget">CUL</a>.</ul><br>
<a name="STACKABLE_CCattr"></a>
<b>Attributes</b>
<ul>
<li><a href="#IODev">IODev</a></li><br>
<li><a href="#ignore">ignore</a></li><br>
Die anderen Attribute sind die gleichen wie f&uuml;r das <a href="#CULattr">CUL</a>.
</ul>
</ul>
<a name="STV"></a>
<h3>STV</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#STV'>STV</a><br/>
</ul>
<a name="SUNRISE_EL"></a>
<h3>SUNRISE_EL</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#SUNRISE_EL'>SUNRISE_EL</a><br/>
</ul>
<a name="SVG"></a>
<h3>SVG</h3>
<ul>
<a name="SVGlinkdefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; SVG &lt;logDevice&gt;:&lt;gplotfile&gt;:&lt;logfile&gt;</code>
<br><br>
Dies ist das Zeichenmodul von FHEMWEB, mit dem Vektorgrafiken (SVG) erzeugt
werden. <br><br>
Beispiel:
<ul>
<code>define MyPlot SVG inlog:temp4hum4:CURRENT</code><br>
</ul>
<br>
Hinweise:
<ul>
<li>Normalerweise m&uuml;ssen SVG-Ger&auml;te nicht manuell erzeugt
werden, da FHEMWEB es f&uuml;r den Nutzer einfach macht: man muss in
der Detailansicht eines FileLogs wechseln und auf "Create SVG instance"
klicken.</li>
<li>CURRENT als &lt;logfile&gt; wird immer das aktuelle Logfile
benutzen, selbst dann, wenn der Name des Logfiles sich
regelm&auml;&szlig;ig &auml;ndert. </li>
<li>Aus historischen Gr&uuml;nden ben&ouml;tigt jede SVG-Instanz eine
sog. .gplot Datei, die auch als Input f&uuml;r das gnuplot Programm
verwendet werden kann. Einige besondere Zeilen (welche mit #FileLog
oder #DbLog beginnen) werden zus&auml;tzlich benutzt, diese werden von
gnuplot als Kommentar betrachtet. Auf der anderen Seite implementiert
dieses Modul nicht alle gnuplot-Attribute.</li>
</ul>
</ul>
<br>
<a name="SVGset"></a>
<b>Set</b>
<ul>
<li>copyGplotFile<br>
Kopiert die aktuell ausgew&auml;hlte .gplot Datei in eine neue Datei, die
den Namen der SVG Instanz tr&auml;gt; bereits bestehende Dateien mit
gleichem Namen werden &uuml;berschrieben. Diese Vorgehensweise ist
notwendig, wenn man den Ploteditor benutzt. Erzeugt man aus der
Detailansicht des FileLogs die SVG Instanz, wird eine eindeutige
.gplot-Datei erzeugt. In diesem Fall ist dieses Befehl nicht
erforderlich.</li>
</ul><br>
<a name="SVGget"></a>
<b>Get</b> <ul>N/A</ul><br>
<a name="SVGattr"></a>
<b>Attribute</b>
<ul>
<a name="fixedrange"></a>
<li>fixedrange [offset]<br>
Version 1<br>
Enth&auml;lt zwei Zeit-Spezifikationen in der Schreibweise YYYY-MM-DD,
getrennt durch ein Leerzeichen. Im Plotmodus gnuplot-Scroll oder SVG wird
das vorgegebene Intervall verwendet und ein Scrolling der Zeitachse ist
nicht m&ouml;glich. Dies wird z.B. verwendet, um sich die Daten des
vergangenen Jahres ohne Scrollen anzusehen.<br><br>
Version 2<br>
Wenn der Wert entweder Tag, &lt;N&gt;Tage, Woche, Monat oder Jahr lautet,
kann der Zoom-Level f&uuml;r dieses SVG unabh&auml;ngig vom
User-spezifischen Zoom eingestellt werden. Diese Einstellung ist
n&uuml;tzlich f&uuml;r mehrere Plots auf einer Seite: Eine Grafik ist mit
dem Standard-Zoom am aussagekr&auml;ftigsten, die anderen mit einem Zoom
&uuml;ber eine Woche.
Der optionale ganzzahlige Parameter [offset] setzt ein anderes
Zeitintervall (z.B. letztes Jahr: <code> fixedrange year -1</code>,
vorgestern: <code> fixedrange day -2</code>).
</li><br>
<a name="fixedoffset"></a>
<li>fixedoffset &lt;nTage&gt;<br>
Verschiebt den Plot-Offset um einen festen Wert (in Tagen).
</li><br>
<a name="startDate"></a>
<li>startDate<br>
Setzt das Startdatum f&uuml;r den Plot. Wird f&uuml;r Demo-Installationen
verwendet.
</li><br>
<li><a href="#plotsize">plotsize</a></li><br>
<li><a href="#plotmode">plotmode</a></li><br>
<a name="label"></a>
<li>label<br>
Eine Liste, bei der die einzelnen Werte mit einem zweifachen Doppelpunkt
voneinander getrennt werden. Diese Liste wird verwendet um die &lt;L#&gt;
Zeichenfolgen in der .gplot-Datei zu ersetzen. Dabei steht das # f&uuml;r
eine laufende Ziffer beginnend mit 1 (&lt;L1&gt;, &lt;L2&gt;, usw.).
Jeder Wert wird als Perl-Ausdruck bewertet, deshalb hat man Zugriff z.B.
auf die hinterlegten Funktionen. <br><br>
Egal, ob es sich bei der Plotart um gnuplot-scroll oder SVG handelt, es
k&ouml;nnen ebenfalls die Werte der individuellen Kurve f&uuml;r min,
max, avg, cnt, sum, currval (letzter Wert) und currdate (letztes Datum)
durch Zugriff der entsprechenden Werte &uuml;ber das DataHash verwendet
werden. Siehe untenstehendes Beispiel:<br>
<ul>
<li>Beschriftunng der rechten und linken y-Achse:<br>
<ul>
<li>Fhem config:<br>
<code>attr wl_1 label "Temperature"::"Humidity"</code></li>
<li>Eintrag in der .gplot-Datei:<br>
<code>set ylabel &lt;L1&gt;<br>
set y2label &lt;L2&gt;</code></li>
</ul>
</li>
<li>&Uuml;berschrift aus Maximum und dem letzten Wert der ersten
Kurve(FileLog)
<ul>
<li>Fhem config:<br>
<code>attr wl_1 label "Max $data{max1}, Current
$data{currval1}"</code></li>
<li>Eintrag in der .gplot-Datei:<br>
<code>set title &lt;L1&gt;</code><br></li>
</ul>
</li>
</ul>
</li>
<a name="title"></a>
<li>title<br>
Eine besondere Form der &Uuml;berschrift (siehe oben), bei der die
Zeichenfolge &lt;TL&gt; in der .gplot-Datei ersetzt wird.
Standardm&auml;&szlig;ig wird als &lt;TL&gt; der Dateiname des Logfiles
eingesetzt.
</li><br>
<a name="plotfunction"></a>
<li>plotfunction<br>
Eine Liste, deren Werte durch Leerzeichen voneinander getrennt sind.
Diese Liste wird verwendet um die &lt;SPEC#&gt; Zeichenfolgen in der
.gplot-Datei zu ersetzen. Dabei steht das # f&uuml;r eine laufende Ziffer
beginnend mit 1 (&lt;SPEC1&gt;, &lt;SPEC2&gt;, usw.) in der #FileLog oder
#DBLog Anweisung. Mit diesem Attrbute ist es m&ouml;glich eine
.gplot-Datei f&uuml;r mehrere Ger&auml;te mit einem einzigen logdevice zu
verwenden. <br><br>
<ul><b>Beispiel:</b><br>
<li>#FileLog &lt;SPEC1&gt;<br>
mit:<br>
<code>attr &lt;SVGdevice&gt; plotfunction "4:IR\x3a:0:"</code><br>
anstelle von:<br>
<code>#FileLog 4:IR\x3a:0:</code>
</li>
<li>#DbLog &lt;SPEC1&gt;<br>
mit:<br>
<code>attr &lt;SVGdevice&gt; plotfunction
"Garage_Raumtemp:temperature::"</code><br>
anstelle von:<br>
<code>#DbLog Garage_Raumtemp:temperature::</code>
</li>
</ul>
</li>
</ul>
<br>
<a name="plotEditor"></a>
<b>Plot-Editor</b>
<br>
Dieser Editor ist in der Detailansicht der SVG-Instanz zu sehen. Die
meisten Features sind hier einleuchtend und bekannt, es gibt aber auch
einige Ausnahmen:
<ul>
<li>wenn f&uuml;r ein Diagramm die &Uuml;berschrift unterdr&uuml;ckt werden
soll, muss im Eingabefeld <code>notitle</code> eingetragen werden.
</li>
<li>wenn ein fester Wert (nicht aus einer Wertespalte) definiert werden
soll, f&uuml;r den Fall, das eine Zeichenfoge gefunden wurde (z.B. 1
f&uuml;r eine FS20 Schalter, der AN ist und 0 f&uuml;r den AUS-Zustand),
muss zuerst das Tics-Feld gef&uuml;llt, und die .gplot-Datei
gespeichert werden, bevor der Wert &uuml;ber die Dropdownliste erreichbar
ist.
<ul><b>Beispiel:</b><br>
Eingabe im Tics-Feld: ("On" 1, "Off" 0)<br>
.gplot-Datei speichern<br>
"1" als Regexp switch.on und "0" f&uuml;r den Regexp switch.off vom
Spalten-Dropdown ausw&auml;hlen (auf die G&auml;nsef&uuml;&szlig;chen
achten!).<br>
.gplot-Datei erneut speichern<br>
</ul>
</li>
</ul>
Die sichtbarkeit des Plot-Editors kann mit dem FHEMWEB Attribut <a
href="#ploteditor">ploteditor</a> konfiguriert werden.
<br>
</ul>
<a name="SWAP"></a>
<h3>SWAP</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#SWAP'>SWAP</a><br/>
</ul>
<a name="SWAP_0000002200000003"></a>
<h3>SWAP_0000002200000003</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#SWAP_0000002200000003'>SWAP_0000002200000003</a><br/>
</ul>
<a name="SYSMON"></a>
<h3>SYSMON</h3>
<ul>
Dieses Modul liefert diverse Informationen und Statistiken zu dem System, auf dem FHEM-Server ausgef&uuml;hrt wird.
Es werden nur Linux-basierte Systeme unterst&uuml;tzt. Manche Informationen sind hardwarespezifisch und sind daher nicht auf jeder Plattform
verf&uuml;gbar.
Bis jetzt wurde dieses Modul auf folgenden Systemen getestet: Raspberry Pi (Debian Wheezy), BeagleBone Black,
FritzBox 7390 (keine CPU-Daten), WR703N unter OpenWrt.
<br><br>
<b>Define</b>
<br><br>
<code>define &lt;name&gt; SYSMON [&lt;M1&gt;[ &lt;M2&gt;[ &lt;M3&gt;[ &lt;M4&gt;]]]]</code><br>
<br>
Diese Anweisung erstellt eine neue SYSMON-Instanz.
Die Parameter M1 bis M4 legen die Aktualisierungsintervalle f&uuml;r verschiedenen Readings (Statistiken) fest.
Die Parameter sind als Multiplikatoren f&uuml;r die Zeit, die durch INTERVAL_BASE definiert ist, zu verstehen.
Da diese Zeit fest auf 60 Sekunden gesetzt ist, k&ouml;nnen die Mx-Parameters als Zeitintervalle in Minuten angesehen werden.<br>
Wird einer (oder mehrere) Multiplikatoren auf Null gesetzt werden, wird das entsprechende Readings deaktiviert.<br>
<br>
Die Parameter sind f&uuml;r die Aktualisierung der Readings nach folgender Schema zust&auml;ndig:
<ul>
<li>M1: (Default-Wert: 1)<br>
cpu_freq, cpu_temp, cpu_temp_avg, loadavg, stat_cpu, stat_cpu_diff, stat_cpu_percent, stat_cpu_text<br><br>
</li>
<li>M2: (Default-Wert: M1)<br>
ram, swap<br>
</li>
<li>M3: (Default-Wert: M1)<br>
eth0, eth0_diff, wlan0, wlan0_diff<br><br>
</li>
<li>M4: (Default-Wert: 10*M1)<br>
Filesystem-Informationen<br><br>
</li>
<li>folgende Parameter werden immer anhand des Basisintervalls (unabh&auml;ngig von den Mx-Parameters) aktualisiert:<br>
fhemuptime, fhemuptime_text, idletime, idletime_text, uptime, uptime_text<br><br>
</li>
</ul>
<br>
<b>Readings:</b>
<br><br>
<ul>
<li>cpu_bogomips<br>
CPU Speed: BogoMIPS
</li>
<li>cpu_freq<br>
CPU-Frequenz
</li>
<br>
<li>cpu_temp<br>
CPU-Temperatur
</li>
<br>
<li>cpu_temp_avg<br>
Durchschnitt der CPU-Temperatur, gebildet &uuml;ber die letzten 4 Werte.
</li>
<br>
<li>fhemuptime<br>
Zeit (in Sekunden) seit dem Start des FHEM-Servers.
</li>
<br>
<li>fhemuptime_text<br>
Zeit seit dem Start des FHEM-Servers: Menschenlesbare Ausgabe (texttuelle Darstellung).
</li>
<br>
<li>idletime<br>
Zeit (in Sekunden und in Prozent), die das System (nicht der FHEM-Server!)
seit dem Start in dem Idle-Modus verbracht hat. Also die Zeit der Inaktivit&auml;t.
</li>
<br>
<li>idletime_text<br>
Zeit der Inaktivit&auml;t des Systems seit dem Systemstart in menschenlesbarer Form.
</li>
<br>
<li>loadavg<br>
Ausgabe der Werte f&uuml;r die Systemauslastung (load average): 1 Minute-, 5 Minuten- und 15 Minuten-Werte.
</li>
<br>
<li>ram<br>
Ausgabe der Speicherauslastung.
</li>
<br>
<li>swap<br>
Benutzung und Auslastung der SWAP-Datei (bzw. Partition).
</li>
<br>
<li>uptime<br>
Zeit (in Sekenden) seit dem Systemstart.
</li>
<br>
<li>uptime_text<br>
Zeit seit dem Systemstart in menschenlesbarer Form.
</li>
<br>
<li>Netzwerkinformationen<br>
Informationen zu den &uuml;ber die angegebene Netzwerkschnittstellen &uuml;bertragene Datenmengen
und der Differenz zu der vorherigen Messung.
<br>
Beispiele:<br>
Menge der &uuml;bertragenen Daten &uuml;ber die Schnittstelle eth0.<br>
<code>eth0: RX: 940.58 MB, TX: 736.19 MB, Total: 1676.77 MB</code><br>
&Auml;nderung der &uuml;bertragenen Datenmenge in Bezug auf den vorherigen Aufruf (f&uuml;r eth0).<br>
<code>eth0_diff: RX: 0.66 MB, TX: 0.06 MB, Total: 0.72 MB</code><br>
</li>
<br>
<li>Dateisysteminformationen<br>
Informationen zu der Gr&ouml;&szlig;e und der Belegung der gew&uuml;nschten Dateisystemen.<br>
Seit Version 1.1.0 k&ouml;nnen Dateisysteme auch benannt werden (s.u.). <br>
In diesem Fall werden f&uuml;r die diese Readings die angegebenen Namen verwendet.<br>
Dies soll die &Uuml;bersicht verbessern und die Erstellung von Plots erleichten.<br>
Beispiel:<br>
<code>fs_root: Total: 7340 MB, Used: 3573 MB, 52 %, Available: 3425 MB at /</code>
</li>
<br>
<li>CPU Auslastung<br>
Informationen zu der Auslastung der CPU(s).<br>
Beispiel:<br>
<code>stat_cpu: 10145283 0 2187286 90586051 542691 69393 400342</code><br>
<code>stat_cpu_diff: 2151 0 1239 2522 10 3 761</code><br>
<code>stat_cpu_percent: 4.82 0.00 1.81 93.11 0.05 0.00 0.20</code><br>
<code>stat_cpu_text: user: 32.17 %, nice: 0.00 %, sys: 18.53 %, idle: 37.72 %, io: 0.15 %, irq: 0.04 %, sirq: 11.38 %</code>
</li>
<br>
<li>Benutzerdefinierte Eintr&auml;ge<br>
Diese Readings sind Ausgaben der Kommanden, die an das Betriebssystem &uuml;bergeben werden.
Die entsprechende Angaben werden im Attribut <code>user-defined</code> vorgenommen.
</li>
<br>
<br>
</ul>
Beispiel-Ausgabe:<br>
<ul>
<table style="border: 1px solid black;">
<tr><td style="border-bottom: 1px solid black;"><div class="dname">cpu_freq</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>900</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>2013-11-27 00:05:36</div></td>
</tr>
<tr><td style="border-bottom: 1px solid black;"><div class="dname"><div class="dname">cpu_temp</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>49.77</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>2013-11-27 00:05:36</div></td>
</tr>
<tr><td style="border-bottom: 1px solid black;"><div class="dname"><div class="dname">cpu_temp_avg</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>49.7</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>2013-11-27 00:05:36</div></td>
</tr>
<tr><td style="border-bottom: 1px solid black;"><div class="dname"><div class="dname">eth0</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>RX: 2954.22 MB, TX: 3469.21 MB, Total: 6423.43 MB</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>2013-11-27 00:05:36</div></td>
</tr>
<tr><td style="border-bottom: 1px solid black;"><div class="dname"><div class="dname">eth0_diff</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>RX: 6.50 MB, TX: 0.23 MB, Total: 6.73 MB</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>2013-11-27 00:05:36</div></td>
</tr>
<tr><td style="border-bottom: 1px solid black;"><div class="dname"><div class="dname">fhemuptime</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>11231</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>2013-11-27 00:05:36</div></td>
</tr>
<tr><td style="border-bottom: 1px solid black;"><div class="dname"><div class="dname">fhemuptime_text&nbsp;&nbsp;</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>0 days, 03 hours, 07 minutes</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>2013-11-27 00:05:36</div></td>
</tr>
<tr><td style="border-bottom: 1px solid black;"><div class="dname"><div class="dname">idletime</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>931024 88.35 %</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>2013-11-27 00:05:36</div></td>
</tr>
<tr><td style="border-bottom: 1px solid black;"><div class="dname"><div class="dname">idletime_text</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>10 days, 18 hours, 37 minutes (88.35 %)</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>2013-11-27 00:05:36</div></td>
</tr>
<tr><td style="border-bottom: 1px solid black;"><div class="dname"><div class="dname">loadavg</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>0.14 0.18 0.22</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>2013-11-27 00:05:36</div></td>
</tr>
<tr><td style="border-bottom: 1px solid black;"><div class="dname"><div class="dname">ram</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>Total: 485 MB, Used: 140 MB, 28.87 %, Free: 345 MB</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>2013-11-27 00:05:36</div></td>
</tr>
<tr><td style="border-bottom: 1px solid black;"><div class="dname"><div class="dname">swap</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>n/a</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>2013-11-27 00:05:36</div></td>
</tr>
<tr><td style="border-bottom: 1px solid black;"><div class="dname"><div class="dname">uptime</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>1053739</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>2013-11-27 00:05:36</div></td>
</tr>
<tr><td style="border-bottom: 1px solid black;"><div class="dname"><div class="dname">uptime_text</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>12 days, 04 hours, 42 minutes</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>2013-11-27 00:05:36</div></td>
</tr>
<tr><td style="border-bottom: 1px solid black;"><div class="dname"><div class="dname">wlan0</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>RX: 0.00 MB, TX: 0.00 MB, Total: 0 MB</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>2013-11-27 00:05:36</div></td>
</tr>
<tr><td style="border-bottom: 1px solid black;"><div class="dname"><div class="dname">wlan0_diff</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>RX: 0.00 MB, TX: 0.00 MB, Total: 0.00 MB</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>2013-11-27 00:05:36</div></td>
</tr>
<tr><td style="border-bottom: 1px solid black;"><div class="dname"><div class="dname">fs_root</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>Total: 7404 MB, Used: 3533 MB, 50 %, Available: 3545 MB at /</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>2013-11-27 00:05:36</div></td>
</tr>
<tr><td style="border-bottom: 1px solid black;"><div class="dname"><div class="dname">fs_boot</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>Total: 56 MB, Used: 19 MB, 33 %, Available: 38 MB at /boot</div></td>
<td style="border-bottom: 1px solid black;"><div class="dname"><div>2013-11-27 00:05:36</div></td>
</tr>
<tr><td style="border-bottom: 1px solid black;"><div class="dname">fs_usb1</div></td>
<td style="border-bottom: 1px solid black;"><div>Total: 30942 MB, Used: 6191 MB, 21 %, Available: 24752 MB at /media/usb1&nbsp;&nbsp;</div></td>
<td style="border-bottom: 1px solid black;"><div>2013-11-27 00:05:36</div></td>
</tr>
<tr><td style="border-bottom: 1px solid black;"><div class="dname">stat_cpu</div></td>
<td style="border-bottom: 1px solid black;"><div>10145283 0 2187286 90586051 542691 69393 400342&nbsp;&nbsp;</div></td>
<td style="border-bottom: 1px solid black;"><div>2013-11-27 00:05:36</div></td>
</tr>
<tr><td style="border-bottom: 1px solid black;"><div class="dname">stat_cpu_diff</div></td>
<td style="border-bottom: 1px solid black;"><div>2151 0 1239 2522 10 3 761&nbsp;&nbsp;</div></td>
<td style="border-bottom: 1px solid black;"><div>2013-11-27 00:05:36</div></td>
</tr>
<tr><td style="border-bottom: 1px solid black;"><div class="dname">stat_cpu_percent</div></td>
<td style="border-bottom: 1px solid black;"><div>4.82 0.00 1.81 93.11 0.05 0.00 0.20&nbsp;&nbsp;</div></td>
<td style="border-bottom: 1px solid black;"><div>2013-11-27 00:05:36</div></td>
</tr>
<tr><td><div class="dname">stat_cpu_text</div></td>
<td><div>user: 32.17 %, nice: 0.00 %, sys: 18.53 %, idle: 37.72 %, io: 0.15 %, irq: 0.04 %, sirq: 11.38 %&nbsp;&nbsp;</div></td>
<td><div>2013-11-27 00:05:36</div></td>
</tr>
</table>
</ul><br>
<b>Get:</b><br><br>
<ul>
<li>interval<br>
Listet die bei der Definition angegebene Polling-Intervalle auf.
</li>
<br>
<li>list<br>
Gibt alle Readings aus.
</li>
<br>
<li>update<br>
Aktualisiert alle Readings. Alle Werte werden neu abgefragt.
</li>
<br>
<li>version<br>
Zeigt die Version des SYSMON-Moduls.
</li>
<br>
</ul><br>
<b>Set:</b><br><br>
<ul>
<li>interval_multipliers<br>
Definiert Multipliers (wie bei der Definition des Ger&auml;tes).
</li>
<br>
<li>clean<br>
L&ouml;scht benutzerdefinierbare Readings. Nach einem Update (oder nach der automatischen Aktualisierung) werden neue Readings generiert.<br>
</li>
<br>
<li>clear &lt;reading name&gt;<br>
L&ouml;scht den Reading-Eintrag mit dem gegebenen Namen. Nach einem Update (oder nach der automatischen Aktualisierung)
wird dieser Eintrag ggf. neu erstellt (falls noch definiert). Dieses Mechanismus erlaubt das gezielte L&ouml;schen nicht mehr ben&ouml;tigter
benutzerdefinierten Eintr&auml;ge.<br>
</li>
<br>
</ul><br>
<b>Attributes:</b><br><br>
<ul>
<li>filesystems &lt;reading name&gt;[:&lt;mountpoint&gt;[:&lt;comment&gt;]],...<br>
Gibt die zu &uuml;berwachende Dateisysteme an. Es wird eine kommaseparierte Liste erwartet.<br>
Reading-Name wird bei der Anzeige und Logging verwendet, Mount-Point ist die Grundlage der Auswertung,
Kommentar ist relevant f&uuml;r die HTML-Anzeige (s. SYSMON_ShowValuesHTML)<br>
Beispiel: <code>/boot,/,/media/usb1</code><br>
oder: <code>fs_boot:/boot,fs_root:/:Root,fs_usb1:/media/usb1:USB-Stick</code><br>
Im Sinne der besseren &Uuml;bersicht sollten zumindest Name und MountPoint angegeben werden.
</li>
<br>
<li>network-interfaces &lt;name&gt;[:&lt;interface&gt;[:&lt;comment&gt;]],...<br>
Kommaseparierte Liste der Netzwerk-Interfaces, die &uuml;berwacht werden sollen.
Jeder Eintrag besteht aus dem Reading-Namen, dem Namen
des Netwerk-Adapters und einem Kommentar f&uuml;r die HTML-Anzeige (s. SYSMON_ShowValuesHTML). Wird kein Doppelpunkt verwendet,
wird der Wert gleichzeitig als Reading-Name und Interface-Name verwendet.<br>
Beispiel <code>ethernet:eth0:Ethernet,wlan:wlan0:WiFi</code><br>
</li>
<br>
<li>user-defined &lt;readingsName&gt;:&lt;Interval_Minutes&gt;:&lt;Comment&gt;:&lt;Cmd&gt;,...<br>
Diese kommaseparierte Liste definiert Eintr&auml;ge mit jeweils folgenden Daten:
Reading-Name, Aktualisierungsintervall in Minuten, Kommentar und Betriebssystem-Commando.
<br>Die BS-Befehle werden entsprechend des angegebenen Intervalls ausgef&uuml;hrt und als Readings mit den angegebenen Namen vermerkt.
Kommentare werden f&uuml;r die HTML-Ausgaben (s. SYSMON_ShowValuesHTML) ben&ouml;tigt.
<br>Alle Parameter sind nicht optional!
<br>Es ist wichtig, dass die angegebenen Befehle schnell ausgef&uuml;hrt werden, denn in dieser Zeit wird der gesamte FHEM-Server blockiert!
<br>Werden Ergebnisse der lang laufenden Operationen ben&ouml;tigt, sollten diese z.B als CRON-Job eingerichtet werden
und in FHEM nur die davor gespeicherten Ausgaben visualisiert.<br><br>
Beispiel: Anzeige der vorliegenden Paket-Aktualisierungen f&uuml;r das Betriebssystem:<br>
In einem cron-Job wird folgendes t&auml;glich ausgef&uuml;hrt: <br>
<code> apt-get upgrade --dry-run| perl -ne '/(\d*)\s[upgraded|aktualisiert]\D*(\d*)\D*install|^ \S+.*/ and print "$1 aktualisierte, $2 neue Pakete"' 2>/dev/null &gt; /opt/fhem/data/updatestatus.txt</code>
<br>
Das Attribute <code>uder-defined</code> wird auf <br><code>sys_updates:1440:System Aktualisierungen:cat /opt/fhem/data/updatestatus.txt</code><br> gesetzt.
Danach wird die Anzahl der verf&uuml;gbaren Aktualisierungen t&auml;glich als Reading 'sys_updates' protokolliert.
</li>
<br>
<li>disable<br>
M&ouml;gliche Werte: <code>0,1</code>. Bei <code>1</code> wird die Aktualisierung gestoppt.
</li>
<br>
</ul><br>
<b>Plots:</b><br><br>
<ul>
F&uuml;r dieses Modul sind bereits einige gplot-Dateien vordefiniert:<br>
<ul>
FileLog-Versionen:<br>
<code>
SM_RAM.gplot<br>
SM_CPUTemp.gplot<br>
SM_FS_root.gplot<br>
SM_FS_usb1.gplot<br>
SM_Load.gplot<br>
SM_Network_eth0.gplot<br>
SM_Network_eth0t.gplot<br>
SM_Network_wlan0.gplot<br>
SM_CPUStat.gplot<br>
SM_CPUStatSum.gplot<br>
SM_CPUStatTotal.gplot<br>
</code>
DbLog-Versionen:<br>
<code>
SM_DB_all.gplot<br>
SM_DB_CPUFreq.gplot<br>
SM_DB_CPUTemp.gplot<br>
SM_DB_Load.gplot<br>
SM_DB_Network_eth0.gplot<br>
SM_DB_RAM.gplot<br>
</code>
</ul>
</ul><br>
<b>HTML-Ausgabe-Methode (f&uuml;r ein Weblink): SYSMON_ShowValuesHTML(&lt;SYSMON-Instanz&gt;[,&lt;Liste&gt;])</b><br><br>
<ul>
Das Modul definiert eine Funktion, die ausgew&auml;hlte Readings in HTML-Format ausgibt. <br>
Als Parameter wird der Name des definierten SYSMON-Ger&auml;ts erwartet.<br>
Der zweite Parameter ist optional und gibt eine Liste der anzuzeigende Readings
im Format <code>&lt;ReadingName&gt;[:&lt;Comment&gt;[:&lt;Postfix&gt;]]</code> an.<br>
Dabei gibt <code>ReadingName</code> den anzuzeigenden Reading an, der Wert aus <code>Comment</code> wird als der Anzeigename verwendet
und <code>Postfix</code> wird nach dem eihentlichen Wert angezeigt (so k&ouml;nnen z.B. Einheiten wie MHz angezeigt werden).<br>
Falls kein <code>Comment</code> angegeben ist, wird eine intern vordefinierte Beschreibung angegeben.
Bei benutzerdefinierbaren Readings wird ggf. <code>Comment</code> aus der Definition verwendet.<br>
Wird keine Liste angegeben, wird eine vordefinierte Auswahl verwendet (alle Werte).<br><br>
<code>define sysv1 weblink htmlCode {SYSMON_ShowValuesHTML('sysmon')}</code><br>
<code>define sysv2 weblink htmlCode {SYSMON_ShowValuesHTML('sysmon', ('date:Datum', 'cpu_temp:CPU Temperatur: &deg;C', 'cpu_freq:CPU Frequenz: MHz'))}</code>
</ul><br>
<b>Text output method (see Weblink): SYSMON_ShowValuesText(&lt;SYSMON-Instance&gt;[,&lt;Liste&gt;])</b><br><br>
<ul>
Analog SYSMON_ShowValuesHTML, jedoch formatiert als reines Text.<br>
</ul><br>
<b>Beispiele:</b><br><br>
<ul>
<code>
# Modul-Definition<br>
define sysmon SYSMON 1 1 1 10<br>
#attr sysmon event-on-update-reading cpu_temp,cpu_temp_avg,cpu_freq,eth0_diff,loadavg,ram,^~ /.*usb.*,~ /$<br>
attr sysmon event-on-update-reading cpu_temp,cpu_temp_avg,cpu_freq,eth0_diff,loadavg,ram,fs_.*,stat_cpu_percent<br>
attr sysmon filesystems fs_boot:/boot,fs_root:/:Root,fs_usb1:/media/usb1:USB-Stick<br>
attr sysmon network-interfaces eth0:eth0:Ethernet,wlan0:wlan0:WiFi<br>
attr sysmon group RPi<br>
attr sysmon room 9.03_Tech<br>
<br>
# Log<br>
define FileLog_sysmon FileLog ./log/sysmon-%Y-%m.log sysmon<br>
attr FileLog_sysmon group RPi<br>
attr FileLog_sysmon logtype SM_CPUTemp:Plot,text<br>
attr FileLog_sysmon room 9.03_Tech<br>
<br>
# Visualisierung: CPU-Temperatur<br>
define wl_sysmon_temp SVG FileLog_sysmon:SM_CPUTemp:CURRENT<br>
attr wl_sysmon_temp group RPi<br>
attr wl_sysmon_temp label "CPU Temperatur: Min $data{min2}, Max $data{max2}, Last $data{currval2}"<br>
attr wl_sysmon_temp room 9.03_Tech<br>
<br>
# Visualisierung: Netzwerk-Daten&uuml;bertragung f&uuml;r eth0<br>
define wl_sysmon_eth0 SVG FileLog_sysmon:SM_Network_eth0:CURRENT<br>
attr wl_sysmon_eth0 group RPi<br>
attr wl_sysmon_eth0 label "Netzwerk-Traffic eth0: $data{min1}, Max: $data{max1}, Aktuell: $data{currval1}"<br>
attr wl_sysmon_eth0 room 9.03_Tech<br>
<br>
# Visualisierung: Netzwerk-Daten&uuml;bertragung f&uuml;r wlan0<br>
define wl_sysmon_wlan0 SVG FileLog_sysmon:SM_Network_wlan0:CURRENT<br>
attr wl_sysmon_wlan0 group RPi<br>
attr wl_sysmon_wlan0 label "Netzwerk-Traffic wlan0: $data{min1}, Max: $data{max1}, Aktuell: $data{currval1}"<br>
attr wl_sysmon_wlan0 room 9.03_Tech<br>
<br>
# Visualisierung: CPU-Auslastung (load average)<br>
define wl_sysmon_load SVG FileLog_sysmon:SM_Load:CURRENT<br>
attr wl_sysmon_load group RPi<br>
attr wl_sysmon_load label "Load Min: $data{min1}, Max: $data{max1}, Aktuell: $data{currval1}"<br>
attr wl_sysmon_load room 9.03_Tech<br>
<br>
# Visualisierung: RAM-Nutzung<br>
define wl_sysmon_ram SVG FileLog_sysmon:SM_RAM:CURRENT<br>
attr wl_sysmon_ram group RPi<br>
attr wl_sysmon_ram label "RAM-Nutzung Total: $data{max1}, Min: $data{min2}, Max: $data{max2}, Aktuell: $data{currval2}"<br>
attr wl_sysmon_ram room 9.03_Tech<br>
<br>
# Visualisierung: Dateisystem: Root-Partition<br>
define wl_sysmon_fs_root SVG FileLog_sysmon:SM_FS_root:CURRENT<br>
attr wl_sysmon_fs_root group RPi<br>
attr wl_sysmon_fs_root label "Root Partition Total: $data{max1}, Min: $data{min2}, Max: $data{max2}, Aktuell: $data{currval2}"<br>
attr wl_sysmon_fs_root room 9.03_Tech<br>
<br>
# Visualisierung: Dateisystem: USB-Stick<br>
define wl_sysmon_fs_usb1 SVG FileLog_sysmon:SM_FS_usb1:CURRENT<br>
attr wl_sysmon_fs_usb1 group RPi<br>
attr wl_sysmon_fs_usb1 label "USB1 Total: $data{max1}, Min: $data{min2}, Max: $data{max2}, Aktuell: $data{currval2}"<br>
attr wl_sysmon_fs_usb1 room 9.03_Tech<br>
<br>
# Anzeige der Readings zum Einbinden in ein 'Raum'.<br>
define SysValues weblink htmlCode {SYSMON_ShowValuesHTML('sysmon')}<br>
attr SysValues group RPi<br>
attr SysValues room 9.03_Tech<br>
<br>
# Anzeige CPU Auslasung<br>
define wl_sysmon_cpustat SVG FileLog_sysmon:SM_CPUStat:CURRENT<br>
attr wl_sysmon_cpustat label "CPU(min/max): user:$data{min1}/$data{max1} nice:$data{min2}/$data{max2} sys:$data{min3}/$data{max3} idle:$data{min4}/$data{max4} io:$data{min5}/$data{max5} irq:$data{min6}/$data{max6} sirq:$data{min7}/$data{max7}"<br>
attr wl_sysmon_cpustat group RPi<br>
attr wl_sysmon_cpustat room 9.99_Test<br>
attr wl_sysmon_cpustat plotsize 840,420<br>
define wl_sysmon_cpustat_s SVG FileLog_sysmon:SM_CPUStatSum:CURRENT<br>
attr wl_sysmon_cpustat_s label "CPU(min/max): user:$data{min1}/$data{max1} nice:$data{min2}/$data{max2} sys:$data{min3}/$data{max3} idle:$data{min4}/$data{max4} io:$data{min5}/$data{max5} irq:$data{min6}/$data{max6} sirq:$data{min7}/$data{max7}"<br>
attr wl_sysmon_cpustat_s group RPi<br>
attr wl_sysmon_cpustat_s room 9.99_Test<br>
attr wl_sysmon_cpustat_s plotsize 840,420<br>
define wl_sysmon_cpustatT SVG FileLog_sysmon:SM_CPUStatTotal:CURRENT<br>
attr wl_sysmon_cpustatT label "CPU-Auslastung"<br>
attr wl_sysmon_cpustatT group RPi<br>
attr wl_sysmon_cpustatT plotsize 840,420<br>
attr wl_sysmon_cpustatT room 9.99_Test<br>
</code>
</ul>
</ul>
<a name="SYSSTAT"></a>
<h3>SYSSTAT</h3>
<ul>
Das Modul stellt Systemstatistiken f&uuml;r den Rechner, auf dem FHEM l&auml;uft bzw.
f&uuml;r ein entferntes Linux System, das per vorkonfiguriertem ssh Zugang ohne Passwort
erreichbar ist, zur Vef&uuml;gung.<br><br>
Notes:
<ul>
<li>Dieses Modul ben&ouml;tigt <code>Sys::Statistics::Linux</code> f&uuml;r Linux.<br>
Es kann mit '<code>cpan install Sys::Statistics::Linux</code>'<br>
bzw. auf Debian mit '<code>apt-get install libsys-statistics-linux-perl</code>'
installiert werden.</li>
<li>Um einen Zielrechner mit snmp zu &uuml;berwachen, muss
<code>Net::SNMP</code> installiert sein.<br></li>
<li>Um die Lastwerte zu plotten, kann der folgende Code verwendet werden:
<pre>
define sysstatlog FileLog /usr/local/FHEM/var/log/sysstat-%Y-%m.log sysstat
attr sysstatlog nrarchive 1
define wl_sysstat weblink fileplot sysstatlog:sysstat:CURRENT
attr wl_sysstat label "Load Min: $data{min1}, Max: $data{max1}, Aktuell: $data{currval1}"
attr wl_sysstat room System
</pre></li>
<li>Um das Wurzel-Dateisystem (Mountpunkt '/') bei Plots der Plattennutzung zu erhalten,
sollte dieser Code '<code>#FileLog 4:/\x3a:0:</code>' bzw. '<code>#FileLog 4:\s..\s:0:</code>'
und <b>nicht</b> dieser Code '<code>#FileLog 4:/:0:</code>' verwendet werden, da der letztere
alle Mountpunkte darstellt.</li>.
</ul>
<a name="SYSSTAT_Define"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; SYSSTAT [&lt;interval&gt; [&lt;interval_fs&gt;] [&lt;host&gt;]]</code><br>
<br>
definiert ein SYSSTAT Device.<br><br>
Die (Prozessor)last wird alle &lt;interval&gt; Sekunden aktualisiert. Standard bzw. Minimum ist 60.<br><br>
Die Plattennutzung wird alle &lt;interval_fs&gt; Sekunden aktualisiert. Standardwert ist &lt;interval&gt;*60
und Minimum ist 60.
&lt;interval_fs&gt; wird nur angen&auml;hert und funktioniert am Besten, wenn &lt;interval_fs&gt;
ein ganzzahliges Vielfaches von &lt;interval&gt; ist.<br><br>
Wenn &lt;host&gt; angegeben wird, muss der Zugang per ssh ohne Passwort m&ouml;glich sein.<br><br>
Beispiele:
<ul>
<code>define sysstat SYSSTAT</code><br>
<code>define sysstat SYSSTAT 300</code><br>
<code>define sysstat SYSSTAT 60 600</code>
</ul>
</ul><br>
<a name="SYSSTAT_Readings"></a>
<b>Readings</b>
<ul>
<li>load<br>
die durchschnittliche (Prozessor)last der letzten 1 Minute (f&uuml;r Windows Rechner mit
snmp angen&auml;hertem Wert)</li>
<li>state<br>
die durchschnittliche (Prozessor)last der letzten 1, 5 und 15 Minuten (f&uuml;r Windows
Rechner die Nutzung pro CPU via snmp ermittelt)</li>
<li>user, system, idle, iowait<br>
den Prozentsatz der entsprechenden Systemlast (nur f&uuml;r Linux Systeme)</li>
<li>&lt;mountpoint&gt;<br>
Anzahl der freien Bytes f&uuml;r &lt;mountpoint&gt;</li>
</ul><br>
<a name="SYSSTAT_Get"></a>
<b>Get</b>
<ul>
<code>get &lt;name&gt; &lt;value&gt;</code>
<br><br>
Werte f&uuml;r <code>value</code> sind<br><br>
<li>filesystems<br>
zeigt die Dateisysteme an, die &uuml;berwacht werden k&ouml;nnen.</li>
</ul><br>
<a name="SYSSTAT_Attr"></a>
<b>Attributes</b>
<ul>
<li>disable<br>
l&auml;sst die Timer weiterlaufen, aber stoppt die Speicherung der Daten.</li>
<li>filesystems<br>
Liste mit Komma getrennten Dateisystemen (nicht Mountpunkten) die &uuml;berwacht
werden sollen.<br>
Beispiele:
<ul>
<code>attr sysstat filesystems /dev/md0,/dev/md2</code><br>
<code>attr sysstat filesystems /dev/.*</code><br>
<code>attr sysstat filesystems 1,3,5</code><br>
</ul></li>
<li>showpercent<br>
Wenn gesetzt, wird die Nutzung in Prozent angegeben. Wenn nicht gesetzt, wird der verf&uuml;bare
Platz in Bytes angezeigt.</li>
<li>snmp<br>
1 -> snmp wird verwendet, um Last, Einschaltzeit und Dateisysteme (inkl. physikalischem und
virtuellem Speicher) zu &uuml;berwachen</li>
<li>stat<br>
1 -> &uuml;berwacht Prozentsatz der user, system, idle und iowait Last
(nur auf Linux Systemen verf&uuml;gbar)</li>
<li>raspberrytemperature<br>
Wenn gesetzt und > 0 wird der Temperatursensor auf dem Raspberry Pi ausgelesen.<br>
Wenn Wert 2 ist, wird ein geometrischer Durchschnitt der letzten 4 Werte dargestellt.</li>
<li>synologytemperature<br>
Wenn gesetzt und > 0 wird die Temperatur einer Synology Diskstation ausgelesen (erfordert snmp).<br>
Wenn Wert 2 ist, wird ein geometrischer Durchschnitt der letzten 4 Werte dargestellt.</li>
<li>raspberrycpufreq<br>
Wenn gesetzt und > 0 wird die Raspberry Pi CPU Frequenz ausgelesen.</li>
<li>uptime<br>
Wenn gesetzt und > 0 wird die Betriebszeit (uptime) des Systems ausgelesen.<br>
Wenn Wert 2 ist, wird die Betriebszeit (uptime) in Sekunden angezeigt.</li>
<li>useregex<br>
Wenn Wert gesetzt, werden die Eintr&auml;ge der Dateisysteme als regex behandelt.</li>
<li>ssh_user<br>
Der Username f&uuml;r den ssh Zugang auf dem entfernten Rechner.</li>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
</ul>
</ul>
<a name="TCM"></a>
<h3>TCM</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#TCM'>TCM</a><br/>
</ul>
<a name="THRESHOLD"></a>
<h3>THRESHOLD</h3>
<ul>
Vielfältige Steuerungen, bei denen durch die Auswertung von Sensordaten eine Steuerung erfolgen soll, können mit Hilfe dieses Moduls realisiert werden.
Nach der Definition eines THRESHOLD-Moduls und der Vorgabe eines Sollwertes beginnt bereits das definierte Modul mit der Steuerung. Im einfachsten Fall liest das Modul einen Sensor aus, der Werte als Dezimalzahlen liefert
und schaltet beim Überschreiten einer definierten Schwellen-Obergrenze (Sollwert)
bzw. beim Unterschreiten einer Schwellen-Untergrenze einen Aktor oder führt beliebige FHEM/Perl-Befehle aus.
Typisches Anwendungsgebiet ist z. B. die Nachbildung eines Thermostats oder Hygrostats - auch Zweipunktregler genannt.<br>
<br>
Mit Hilfe des Moduls, bzw. vieler solcher Module, lassen sich einfache oder auch komplexe Steuerungen für Heizung, Kühlung, Lüftung, Entfeuchtung, Beschattung oder z. B. einfache Benachrichtung
beim Über- oder Unterschreiten eines bestimmten Wertes realisieren. Dabei müssen keine If-Abfragen in Perl oder Notify-Definitionen vorgenommen werden.
Das führt, nicht nur bei FHEM-Anfängern, zu schnell erstellten und übersichtlichen Steuerungen, ohne zwingend in die Perl-Materie einsteigen zu müssen.<br>
<br>
Nach der Definition eines Moduls vom Typ THRESHOLD z. B. mit: <br>
<br>
<code>define &lt;name&gt; THRESHOLD &lt;sensor&gt; &lt;actor&gt;</code><br>
<br>
erfolgt die eigentliche Steuerung über die Vorgabe eines Sollwertes. Das geschieht über:<br>
<br>
<code>set &lt;name&gt; desired &lt;value&gt;</code><br>
<br>
Das Modul beginnt mit der Steuerung erst dann, wenn ein Sollwert gesetzt wird!<br>
<br>
Die Vorgabe des Sollwertes kann bereits bei der Definition des Moduls angegeben werden. Alternativ kann der Sollwert von einem weiteren Sensor kommen.
Damit kann eine Steuerung durch den Vergleich zweier Sensoren stattfinden.
Typisches Anwendungsbeispiel ist z. B. die Steuerung von Umwälz- oder Zirkulationspumpen.<br>
<br>
Die Vorgabe der Solltemperatur kann auch von beliebigen Wandthermostaten (z. B. HM, MAX, FHT) genutzt werden.<br>
<br>
Das Schaltverhalten des THRESHOLD-Moduls kann zusätzlich durch einen weiteren Sensor oder eine Sensorgruppe,
definiert über structure (z. B. Fensterkontakte), über eine AND- bzw. OR-Verknüpfung beeinflusst werden.<br>
<br>
Ebenfalls ist die Kombination mehrerer THRESHOLD-Module miteinander möglich.<br>
<br>
<br>
<b><u>Beispiele für Heizungssteuerung:</u></b><br>
<br>
<b>Einfaches Heizungsthermostat:</b><br>
<br>
Es soll bis 20 Grad geheizt werden. Beim Unterschreiten der Untergrenze von 19=20-1 Grad (Sollwert-Hysterese) wird die Heizung wieder eingeschaltet.<br>
<br>
<code>define TH_room THRESHOLD temp_room heating</code><br>
<code>set TH_room desired 20</code><br>
<br>
<b>Zeitgesteuertes Heizen mit Hilfe des Heating_Control-Moduls:</b><br>
<br>
<code>define TH_room THRESHOLD temp_room heating</code><br>
<code>define HC_room Heating_Control TH_room 06:00|22 22:00|18 set @ desired %</code><br>
<br>
<b>Steuerung einer Heizung durch ein Wandthermostat mit Übernahme der Soll- und Ist-Temperatur vom Wandthermostat:</b><br>
<br>
<code>define TH_Heizung THRESHOLD WT_ch1:measured-temp:1:WT_ch2:desired-temp Heizung</code><br>
<br>
Mit <code>set TH_Heizung desired 17</code> wird die Vorgabe vom Wandthermostat übersteuert bis <code>set TH_Heizung external</code> aufgerufen wird.<br>
<br>
<b>Heizung in Kombination mit einem Fensterkontakt mit Zuständen: open, closed:</b><br>
<br>
<code>define TH_room THRESHOLD temp_room OR win_sens heating</code><br>
<br>
<b>Heizung in Kombination mit mehreren Fensterkontakten:</b><br>
<br>
<code>define W_ALL structure W_type W1 W2 W3 ....</code><br>
<code>attr W_ALL clientstate_behavior relative</code><br>
<code>attr W_ALL clientstate_priority open closed</code><br>
<br>
<code>define thermostat THRESHOLD S1 OR W_ALL heating</code><br>
<br>
<b>Kombination mehrerer THRESHOLD-Module miteinander:</b><br>
<br>
Es soll bis 21 Grad geheizt werden, aber nur, wenn die Außentemperatur unter 15 Grad ist:<br>
<br>
<code>define TH_outdoor THRESHOLD outdoor:temperature:0:15</code><br>
<code>define TH_room THRESHOLD indoor OR TH_outdoor:state:off heating</code><br>
<code>set TH_room desired 21</code><br>
<br>
<br>
<b><u>Beispiele für Belüftungssteuerung:</u></b><br>
<br>
<b>Einfache Belüftung anhand der Luftfeuchtigkeit:</b><br>
<br>
Es soll gelüftet werden, wenn die Feuchtigkeit im Zimmer über 70 % ist; bei 60 % geht der Lüfter wieder aus.<br>
<br>
<code>define TH_hum THRESHOLD sens:humidity:10:70 ventilator|set @ on|set @ off|1</code><br>
<br>
<b>Belüftung anhand des Taupunktes, abhängig von der Luftfeuchtigkeit innen:</b><br>
<br>
Es soll gelüftet werden, wenn die Luftfeuchtigkeit im Zimmer über 70 % ist und der Taupunkt innen höher ist als außen.<br>
<br>
<code>define TH_hum THRESHOLD sens:humidity:10:70||||on:off|_sc</code><br>
<code>define dewpoint dewpoint indoor</code><br>
<code>define dewpoint dewpoint outdoor</code><br>
<code>define TH_room THRESHOLD indoor:dewpoint:0:outdoor:dewpoint AND TH_hum:state:on ventilator|set @ on|set @ off|2</code><br>
<br>
<b>Belüftung in Kombination mit einem Lichtschalter mit Nachlaufsteuerung:</b><br>
<br>
Der Lüfter soll angehen, wenn das Licht mindestens 2 Minuten lang brennt oder die Luftfeuchtigkeit 65 % überschreitet,<br>
der Lüfter soll ausgehen, wenn die Luftfeuchtigkeit unter 60 % fällt und das Licht mindestens 3 Minuten lang aus ist.<br>
<br>
<code>define ventilator_state dummy</code><br>
<code>define w_ventilator_state_off watchdog light_switch:off 00:03 light_switch:on set ventilator_state off;; trigger w_ventilator_state_off .</code><br>
<code>define w_ventilator_state_on watchdog light_switch:on 00:02 light_switch:off set ventilator_state on;; trigger w_ventilator_state_on .</code><br>
<code>define TH_ventilator THRESHOLD humsensor:humidity:5:65 OR ventilator_state:state:on ventilator|set @ on|set @ off|1</code><br>
<br>
<br>
<b><u>Beispiele für die Steuerung der Warmwasserzirkulation:</u></b><br>
<br>
<b>Zeitgesteuerte Warmwasserzirkulation:</b><br>
<br>
In der Hauptzeit soll die Wassertemperatur im Rücklauf mindestens 38 Grad betragen.<br>
<br>
<code>define TH_circ TRHESHOLD return_w:temperature:0 circ_pump</code><br>
<code>define HC_circ Heating_Control TH_circ 12345|05:30|38 67|07:00|38 23:00|15 set @ desired %</code><br>
<br>
<b>Alternative Steuerung mit Sollwert-Vorgabe durch einen weiteren Sensor des Warmwasserspeichers:</b><br>
<br>
Die Rücklauftemperatur soll 5 Grad (offset) unter der Warmwasserspeichertemperatur liegen und bis zu 4 Grad (Hysterese) schwanken dürfen.<br>
<br>
<code>define TH_circ THRESHOLD return_w:temperature:4:water_storage:temperature:-5 circ_pump</code><br>
<br>
<br>
<b><u>Beispiele für Beschattungssteuerung:</u></b><br>
<br>
<b>Beispiel für einfache Beschattung im Sommer:</b><br>
<br>
Zwischen 12:00 und 20:00 Uhr (potenzielle Sonnengefahr auf der Südseite) wird der Rolladen auf 30 % heruntergefahren,<br>
wenn die Raumtemperatur über 23 Grad ist und die Sonne scheint. Im Winter, wenn die Zimmertemperatur niedriger ist (< 23),<br>
will man von der Sonnenenergie profitieren und den Rollladen oben lassen.<br>
<br>
<code>define TH_shutter_room THRESHOLD T_room AND sun:state:on shutter_room|set @ 30||2</code><br>
<code>define HC_R_Keller Heating_Control TH_shutter_room 12:00|23 20:00|30 set @ desired %</code><br>
<br>
<b>Beispiel für Beschattung im Sommer mit Verzögerung und automatischem Hochfahren des Rollladens:</b><br>
<br>
Zusätzlich zum obigen Beispiel wird der Rollladen erst heruntergefahren, wenn die Sonne mindestens 15 Minuten scheint<br>
und wieder hochgefahren, wenn die Sonne mindestens 30 Minuten nicht mehr scheint.<br>
<br>
<code>define sun_state dummy</code><br>
<code>define w_sun_state_off watchdog sun:off 00:30 sun:on set sun_state off;; trigger w_sun_state_off .</code><br>
<code>define w_sun state_on watchdog sun:on 00:15 sun:off set sun_state on;; trigger w_sun_state_on .</code><br>
<code>define TH_shutter_room THRESHOLD T_room AND sun_state:state:on shutter_room|set @ 30|set @ 100|2</code><br>
<code>define HC_R_Keller Heating_Control TH_shutter_room 12:00|23 20:00|30 set @ desired %</code><br>
<br>
<b>Beispiel für Beschattung mit Verzögerung mit Hilfe eines Helligkeitssensors:</b><br>
<br>
Der Rollladen soll herunterfahren, wenn der Helligkeitssensor mindesten 15 Minuten einen Schwellenwert von 10000 überschreitet<br>
und wieder hochfahren, wenn der Schwellenwert 10000 mindestens 30 Minuten lang unterschritten wird.<br>
<br>
<code>define sun dummy</code><br>
<code>define sun_state dummy</code><br>
<code>define TH_lightness THRESHOLD lightness_sensor:0:10000 sun||||on:off|_sc</code><br>
<code>define w_sun_state_off watchdog sun:off 00:30 sun:on set sun_state off;; trigger w_sun_state_off .</code><br>
<code>define w_sun state_on watchdog sun:on 00:15 sun:off set sun_state on;; trigger w_sun_state_on .</code><br>
<code>define TH_shutter_room THRESHOLD T_room AND sun_state:state:on shutter_room|set @ 30|set @ 100|2</code><br>
<br>
<br>
<b><u>Beispiele für die Ausführung beliebiger FHEM/Perl-Befehlsketten:</u></b><br>
<br>
<code>define thermostat THRESHOLD sensor |set Switch1 on;;set Switch2 on|set Switch1 off;;set Switch2 off|1</code><br>
<code>define thermostat THRESHOLD sensor alarm|{Log 2,"Wert überschritten"}|set @ off|</code><br>
<code>define thermostat THRESHOLD sensor ||{Log 2,"Wert unterschritten"}|</code><br>
<br>
<br>
<b><u>Einige weitere Bespiele für Entfeuchtung, Klimatisierung, Bewässerung:</u></b><br>
<br>
<code>define hygrostat THRESHOLD hym_sens:humidity dehydrator|set @ on|set @ off|1</code><br>
<code>define hygrostat THRESHOLD hym_sens:humidity AND Sensor2:state:closed dehydrator|set @ on|set @ off|1</code><br>
<code>define thermostat THRESHOLD temp_sens:temperature:1 aircon|set @ on|set @ off|1</code><br>
<code>define thermostat THRESHOLD temp_sens AND Sensor2:state:closed aircon|set @ on|set @ off|1</code><br>
<code>define hygrostat THRESHOLD hym_sens:humidity:20 watering|set @ off|set @ on|2</code><br>
<br>
<br>
<b><u>Beispiele für angepasste Statusanzeige des THRESHOLD-Moduls:</u></b><br>
<br>
<code>define thermostat THRESHOLD sensor aircon|set @ on|set @ off|2|on:off</code><br>
<br>
<b>Beispiel für reine Zustandanzeige (z. B. für Zustandsauswertung in anderen Modulen) ohne Ausführung von Code:</b><br>
<br>
<code>define thermostat THRESHOLD sensor:temperature:0:30</code><br>
<br>
entspricht wegen Defaultwerte:<br>
<br>
<code>define thermostat THRESHOLD sensor:temperature:0:30||||off:on|_sc</code><br>
<br>
<b>Es soll der Modus (mode), Status (state_cmd), Sollvorgabewert (desired_value) und Wert des ersten Sensors (sensor_value) angezeigt werden:</b><br>
<br>
<code>define TH_living_room THRESHOLD T_living_room heating|set @ off|set @ on|2|off:on|_m _sc _dv _s1v</code><br>
<br>
oder<br>
<br>
<code>define TH_living_room THRESHOLD T_living_room heating</code><br>
<code>attr TH_living_room state_cmd1_gt off</code><br>
<code>attr TH_living_room state_cmd2_lt on</code><br>
<code>attr TH_living_room state_format _m _sc _dv _s1v</code><br>
<br>
</ul>
<a name="THRESHOLDdefine"></a>
<b>Define</b>
<ul>
<br>
<code>define &lt;name&gt; THRESHOLD &lt;sensor&gt;:&lt;reading&gt;:&lt;hysteresis&gt;:&lt;target_value&gt;:&lt;offset&gt; AND|OR &lt;sensor2&gt;:&lt;reading2&gt;:&lt;state&gt; &lt;actor&gt;|&lt;cmd1_gt&gt;|&lt;cmd2_lt&gt;|&lt;cmd_default_index&gt;|&lt;state_cmd1_gt&gt;:&lt;state_cmd2_lt&gt;|&lt;state_format&gt;</code><br>
<br>
<br>
<li><b>sensor</b><br>
ein in FHEM definierter Sensor<br>
</li>
<br>
<li><b>reading</b> (optional)<br>
Reading des Sensors, der einen Wert als Dezimalzahl beinhaltet<br>
Defaultwert: temperature<br>
</li>
<br>
<li><b>hysteresis</b> (optional)<br>
Hysterese, daraus errechnet sich die Untergrenze = Sollwert - hysteresis<br>
Defaultwert: 1 bei Temperaturen, 10 bei Feuchtigkeit<br>
</li>
<br>
<li><b>target_value</b> (optional)<br>
bei Zahl: Initial-Sollwert, wenn kein Wert vorgegeben wird, muss er mit "set desired value" gesetzt werden.<br>
sonst: &lt;sensorname&gt;:&lt;reading&gt, hier kann ein weiterer Sensor angegeben werden, der den Sollwert dynamisch vorgibt.<br>
Defaultwert: kein<br>
</li>
<br>
<li><b>offset</b> (optional)<br>
Offset zum Sollwert<br>
Damit errechnet sich: die Sollwertobergrenze = Sollwert + offset und die Sollwertuntergrenze = Sollwert - Hysterese + offset<br>
Defaultwert: 0<br>
</li>
<br>
<br>
<li><b>AND|OR</b> (optional)<br>
Verknüpfung mit einem optionalen zweiten Sensor<br>
</li>
<br>
<li><b>sensor2</b> (optional, nur in Verbindung mit AND oder OR)<br>
ein definierter Sensor, dessen Status abgefragt wird<br>
</li>
<br>
<li><b>reading2</b> (optional)<br>
Reading, der den Status des Sensors beinhaltet<br>
Defaultwert: state<br>
</li>
<br>
<li><b>state</b> (optional)<br>
Status des Sensors, der zu einer Aktion führt<br>
Defaultwert: open<br>
</li>
<br>
<li><b>actor</b> (optional)<br>
ein in FHEM definierter Aktor<br>
</li>
<br>
<li><b>cmd1_gt</b> (optional)<br>
FHEM/Perl Befehl, der beim Überschreiten des Sollwertes ausgeführt wird bzw.
wenn status des sensor2 übereinstimmt. @ ist ein Platzhalter für den angegebenen Aktor.<br>
Defaultwert: set actor off, wenn Aktor angegeben ist<br>
</li>
<br>
<li><b>cmd2_lt</b> (optional)<br>
FHEM/Perl Befehl, der beim Unterschreiten der Untergrenze (Sollwert-Hysterese) ausgeführt wird bzw.
wenn status des sensor2 nicht übereinstimmt. @ ist ein Platzhalter für den angegebenen Aktor.<br>
Defaultwert: set actor on, wenn Aktor angegeben ist<br>
</li>
<br>
<li><b>cmd_default_index</b> (optional)<br>
FHEM/Perl Befehl, der nach dem Setzen des Sollwertes ausgeführt wird, bis Sollwert oder die Untergrenze erreicht wird.<br>
0 - kein Befehl<br>
1 - cmd1_gt<br>
2 - cmd2_lt<br>
Defaultwert: 2, wenn Aktor angegeben ist, sonst 0<br>
</li>
<br>
<li><b>state_cmd1_gt</b> (optional, wird gleichzeitig als Attribut definiert)<br>
Status, der angezeigt wird, wenn FHEM/Perl-Befehl cmd1_gt ausgeführt wurde.<br>
Defaultwert: kein<br>
</li>
<br>
<li><b>state_cmd2_lt</b> (optional, wird gleichzeitig als Attribut definiert)<br>
Status, der angezeigt wird, wenn FHEM/Perl-Befehl cmd2_lt ausgeführt wurde.<br>
Defaultwert: kein<br>
</li>
<br>
<li><b>state_format</b> (optional, wird gleichzeitig als Attribut definiert und kann dort verändert werden)<br>
Format der Statusanzeige: beliebiger Text mit Platzhaltern<br>
Mögliche Platzhalter:<br>
_m: mode<br>
_dv: desired_value<br>
_s1v: sensor_value<br>
_s2s: sensor2_state<br>
_sc: state_cmd<br>
Defaultwert: _m _dv _sc, _sc, wenn state_cmd1_gt und state_cmd2_lt ohne Aktor gesetzt wird.<br>
</li>
<br>
<br>
</ul>
<a name="THRESHOLDset"></a>
<b>Set </b>
<ul>
<li><code>set &lt;name&gt; desired &lt;value&gt;<br></code>
Setzt den Sollwert. Wenn kein Sollwert gesetzt ist, ist das Modul nicht aktiv.
Sollwert-Vorgabe durch einen Sensor wird hiermit übersteuert, solange bis "set external" gesetzt wird.
</li>
<br>
<li><code>set &lt;name&gt; deactivated &lt;value&gt;<br></code>
Modul wird deaktiviert.
</li>
<br>
<li><code>set &lt;name&gt; active<br></code>
Modul wird aktiviert, falls unter target_value ein Sensor für die Sollwert-Vorgabe definiert wurde, wird der aktuelle Sollwert solange eingefroren bis "set <name> external" gesetzt wird.<br>
</li>
<br>
<li><code>set &lt;name&gt; externel<br></code>
Modul wird aktiviert, Sollwert-Vorgabe kommt vom Sensor, falls ein Sensor unter target_value definierte wurde.<br>
</li>
<br>
<li><code>set &lt;name&gt; hysteresis &lt;value&gt;<br></code>
Setzt Hysterese-Wert.
</li>
<br>
<li><code>set &lt;name&gt; offset &lt;value&gt;<br></code>
Setzt Offset-Wert.<br>
Defaultwert: 0
</li>
<br>
<li><code>set &lt;name&gt; cmd1_gt</code><br>
Führt das unter cmd1_gt definierte Kommando aus.<br>
</li>
<br>
<li><code>set &lt;name&gt; cmd2_lt</code><br>
Führt das unter cmd2_lt definierte Kommando aus.<br>
</li>
</ul>
<br>
<a name="THRESHOLDget"></a>
<b>Get </b>
<ul>
N/A
</ul>
<br>
<a name="THRESHOLDattr"></a>
<b>Attributes</b>
<ul>
<li><a href="#disable">disable</a></li>
<li><a href="#loglevel">loglevel</a></li>
<li>state_cmd1_gt</li>
<li>state_cmd2_lt</li>
<li>state_format</li>
</ul>
<br>
<a name="THZ"></a>
<h3>THZ</h3>
<ul>
THZ Modul: Kommuniziert mittels einem seriellen Interface RS232/USB (z.B. /dev/ttyxx), oder mittels ser2net (z.B. 10.0.x.x:5555) mit einer Tecalor / Stiebel
Eltron W&auml;rmepumpe. <br>
Getestet mit einer Tecalor THZ303/Sol (Serielle Geschwindigkeit 57600/115200@USB) und einer THZ403 (Serielle Geschwindigkeit 115200) mit identischer
Firmware 4.39. <br>
Getestet mit einer Stiebel LWZ404 (Serielle Geschwindigkeit 115200@USB) mit Firmware 5.39. <br>
Getestet auf FritzBox, nas-qnap, Raspberry Pi and MacOS.<br>
Dieses Modul funktioniert nicht mit &aumlterer Firmware; Gleichwohl, das "parsing" k&ouml;nnte leicht angepasst werden da die Register gut
beschrieben wurden.
https://answers.launchpad.net/heatpumpmonitor/+question/100347 <br>
Implementiert: Lesen der Statusinformation sowie Lesen und Schreiben einzelner Einstellungen.
<br><br>
<a name="THZdefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; THZ &lt;device&gt;</code> <br>
<br>
<code>device</code> kann einige Parameter beinhalten (z.B. @baudrate, @direction,
TCP/IP, none) wie das <a href="#CULdefine">CUL</a>, z.B. 57600 baud oder 115200.<br>
Beispiel:<br>
Direkte Verbindung
<ul><code>
define Mytecalor THZ /dev/ttyUSB0@115200<br>
</code></ul>
oder vir Netzwerk (via ser2net)<br>
<ul><code>
define Myremotetecalor THZ 192.168.0.244:2323
</code></ul>
<br>
<ul><code>
define Mythz THZ /dev/ttyUSB0@115200 <br>
attr Mythz interval_allFB 300 # Internes Polling Intervall 5min <br>
attr Mythz interval_history 28800 # Internes Polling Intervall 8h <br>
attr Mythz interval_last10errors 86400 # Internes Polling Intervall 24h <br>
define FileLog_Mythz FileLog ./log/Mythz-%Y.log Mythz <br>
</code></ul>
<br>
Wenn die Attribute interval_allFB und interval_history nicht definiert sind (oder 0), ist das interne Polling deaktiviert.
Nat&uuml;rlich kann das Polling auch mit dem "at" Befehl ausserhalb des Moduls definiert werden.
<br>
<ul><code>
define Mythz THZ /dev/ttyUSB0@115200 <br>
define atMythzFB at +*00:05:00 {fhem "get Mythz allFB","1";;return()} <br>
define atMythz09 at +*08:00:00 {fhem "get Mythz history","1";;return()} <br>
define FileLog_Mythz FileLog ./log/Mythz-%Y.log Mythz <br>
</code></ul>
</ul>
<br>
</ul>
<a name="TRX"></a>
<h3>TRX</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#TRX'>TRX</a><br/>
</ul>
<a name="TRX_ELSE"></a>
<h3>TRX_ELSE</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#TRX_ELSE'>TRX_ELSE</a><br/>
</ul>
<a name="TRX_LIGHT"></a>
<h3>TRX_LIGHT</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#TRX_LIGHT'>TRX_LIGHT</a><br/>
</ul>
<a name="TRX_SECURITY"></a>
<h3>TRX_SECURITY</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#TRX_SECURITY'>TRX_SECURITY</a><br/>
</ul>
<a name="TRX_WEATHER"></a>
<h3>TRX_WEATHER</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#TRX_WEATHER'>TRX_WEATHER</a><br/>
</ul>
<a name="TUL"></a>
<h3>TUL</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#TUL'>TUL</a><br/>
</ul>
<a name="TellStick"></a>
<h3>TellStick</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#TellStick'>TellStick</a><br/>
</ul>
<a name="Text2Speech"></a>
<h3>Text2Speech</h3>
<ul>
<br>
<a name="Text2Speechdefine"></a>
<b>Define</b>
<ul>
<b>Local : </b><code>define &lt;name&gt; Text2Speech &lt;alsadevice&gt;</code><br>
<b>Remote: </b><code>define &lt;name&gt; Text2Speech &lt;host&gt;[:&lt;portnr&gt;][:SSL] [portpassword]</code>
<p>
Das Modul wandelt Text mittels verschiedener Provider/Ressourcen in Sprache um. Dabei kann das Device als
Remote oder Lokales Device konfiguriert werden.
</p>
<li>
<b>Local Device</b><br>
<ul>
Die Ausgabe erfolgt auf angeschlossenen Audiodevices, zb. Lautsprecher direkt am Ger&auml;t oder per
Bluetooth-Lautsprecher per Mplayer. Dazu ist Mplayer zu installieren.<br>
<code>apt-get install mplayer</code><br>
Das angegebene Alsadevice ist in der <code>/etc/asound.conf</code> zu konfigurieren.
<p>
<b>Special AlsaDevice: </b><i>none</i><br>
Ist als Alsa-Device <i>none</i> angegeben, so wird mplayer ohne eine Audiodevice Angabe aufgerufen.
Dementsprechend verwendet mplayer das Standard Audio Ausgabedevice.
</p>
<p>
<b>Beispiel:</b><br>
<code>define MyTTS Text2Speech hw=0.0</code><br>
<code>define MyTTS Text2Speech none</code>
</p>
</ul>
</li>
<li>
<b>Remote Device</b><br>
<ul>
Das Modul ist Client-Server f&auml;as bedeutet, das auf der Haupt-FHEM Installation eine Text2Speech-Instanz
als Remote definiert wird. Auf dem Client wird Text2Speech als Local definiert. Die Sprachausgabe erfolgt auf
der lokalen Instanz.<br>
Zu beachten ist, das die Text2Speech Instanz (Definition als local Device) auf dem Zieldevice identisch benannt ist.
<ul>
<li>Host: Angabe der IP-Adresse</li>
<li>PortNr: Angabe des TelnetPorts von FHEM; default: 7072</li>
<li>SSL: Angabe ob der der Zugriff per SSL erfolgen soll oder nicht; default: kein SSL</li>
<li>PortPassword: Angabe des in der Ziel-FHEM-Installtion angegebene Telnet Portpasswort</li>
</ul>
<p>
<b>Beispiel:</b><br>
<code>define MyTTS Text2Speech 192.168.178.10:7072 fhempasswd</code>
<code>define MyTTS Text2Speech 192.168.178.10</code>
</p>
</ul>
</li>
</ul>
</ul>
<a name="Text2Speechset"></a>
<b>Set</b>
<ul>
<li><b>tts</b>:<br>
Setzen eines Textes zur Sprachausgabe.
</li>
<li><b>volume</b>:<br>
Setzen der Ausgabe Lautst&auml;rke.<br>
Achtung: Nur bei einem lokal definierter Text2Speech Instanz m&ouml;glich!
</li>
</ul><br>
<a name="Text2Speechget"></a>
<b>Get</b>
<ul>N/A</ul><br>
<a name="Text2Speechattr"></a>
<b>Attribute</b>
<ul>
<li>TTS_Delemiter<br>
Optional: Wird ein Delemiter angegeben, so wird der Sprachbaustein an dieser Stelle geteilt.
Als Delemiter ist nur ein einzelnes Zeichen zul&auml;ssig.
Hintergrund ist die Tatsache, das die Google Sprachengine nur 100Zeichen zul&auml;sst.<br>
Im Standard wird nach jedem Satzende geteilt. Ist ein einzelner Satz l&auml;nger als 100 Zeichen,
so wird zus&auml;tzlich nach Kommata, Semikolon und dem Verbindungswort <i>und</i> geteilt.<br>
Achtung: Nur bei einem lokal definierter Text2Speech Instanz m&ouml;glich und nur Nutzung der Google Sprachengine relevant!
</li>
<li>TTS_Ressource<br>
Optional: Auswahl der Sprachengine<br>
Achtung: Nur bei einem lokal definierter Text2Speech Instanz m&ouml;glich!
<ul>
<li>Google<br>
Nutzung der GoogleSprachengine. Ein Internetzugriff ist notwendig! Aufgrund der Qualit&auml;t ist der
Einsatz diese Engine zu empfehlen und der Standard.
</li>
<li>ESpeak<br>
Nutzung der ESpeak Offline Sprachengine. Die Qualit&auml; ist schlechter als die Google Engine.
ESpeak ist vor der Nutzung zu installieren.<br>
<code>apt-get install espeak</code>
</li>
</ul>
</li>
<li>TTS_CacheFileDir<br>
Optional: Die per Google geladenen Sprachbausteine werden in diesem Verzeichnis zur Wiedeverwendung abgelegt.
Es findet zurZEit keine automatisierte L&ouml;schung statt.<br>
Default: <i>cache/</i><br>
Achtung: Nur bei einem lokal definierter Text2Speech Instanz m&ouml;glich!
</li>
<li>TTS_UseMP3Wrap<br>
Optional: F&uuml;r eine fl&uuml;ssige Sprachausgabe ist es zu empfehlen, die einzelnen vorher per Google
geladenen Sprachbausteine zu einem einzelnen Sprachbaustein zusammenfassen zu lassen bevor dieses per
Mplayer ausgegeben werden. Dazu muss Mp3Wrap installiert werden.<br>
<code>apt-get install mp3wrap</code><br>
Achtung: Nur bei einem lokal definierter Text2Speech Instanz m&ouml;glich!
</li>
<li>TTS_MplayerCall<br>
Optional: Angabe der Systemaufrufes zu Mplayer. Das folgende Beispiel ist der Standardaufruf.<br>
Beispiel: <code>sudo /usr/bin/mplayer</code>
</li>
<li>TTS_SentenceAppendix<br>
Optional: Angabe einer mp3-Datei die mit jeder Sprachausgabe am Ende ausgegeben wird.<br>
Voraussetzung ist die Nutzung von MP3Wrap. Die Sprachbausteine müssen bereits als mp3 im
CacheFileDir vorliegen.
Beispiel: <code>silence.mp3</code>
</li>
<li>TTS_FileMapping<br>
Angabe von m&ouml;glichen MP3-Dateien mit deren Templatedefinition. Getrennt duch Leerzeichen.
Die Templatedefinitionen können in den per <i>tts</i> &uuml;bergebenen Sprachbausteinen verwendet werden
und m&uuml;ssen mit einem beginnenden und endenden Doppelpunkt angegeben werden.
Die Dateien müssen im Verzeichnis <i>TTS_FIleTemplateDir</i> gespeichert sein.<br>
<code>attr myTTS TTS_FileMapping ring:ringtone.mp3 beep:MyBeep.mp3</code><br>
<code>set MyTTS tts Achtung: hier kommt mein Klingelton :ring: War der laut?</code>
</li>
<li>TTS_FileTemplateDir<br>
Verzeichnis, in dem die per <i>TTS_FileMapping</i> und <i>TTS_SentenceAppendix</i> definierten
MP3-Dateien gespeichert sind.<br>
Optional, Default: <code>cache/templates</code>
</li>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li><br>
<li><a href="#disable">disable</a><br>
If this attribute is activated, the soundoutput will be disabled.<br>
Possible values: 0 => not disabled , 1 => disabled<br>
Default Value is 0 (not disabled)<br><br>
</li>
<li><a href="#verbose">verbose</a><br>
<b>4:</b> Alle Zwischenschritte der Verarbeitung werden ausgegeben<br>
<b>5:</b> Zus&auml;tzlich werden auch die Meldungen von Mplayer und Mp3Wrap ausgegeben
</li>
</ul>
<a name="Twilight"></a>
<h3>Twilight</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#Twilight'>Twilight</a><br/>
</ul>
<a name="UNIRoll"></a>
<h3>UNIRoll</h3>
Deutsche Version der Doku nicht vorhanden. Englische Version unter
<a href='http://fhem.de/commandref.html#<UNIRoll>'>UNIRoll</a> &nbsp;
<a name="USBWX"></a>
<h3>USBWX</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#USBWX'>USBWX</a><br/>
</ul>
<a name="USF1000"></a>
<h3>USF1000</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#USF1000'>USF1000</a><br/>
</ul>
<a name="Utils"></a>
<h3>Utils</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#Utils'>Utils</a><br/>
</ul>
<a name="VIERA"></a>
<h3>VIERA</h3>
<ul>
<a name="VIERAdefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; VIERA &lt;host&gt; [&lt;interval&gt;]</code>
<br><br>
Dieses Modul steuert einen Panasonic Fernseher &uuml;ber das Netzwerk. Es ist m&ouml;glich den Fernseher
auszuschalten, die Lautst&auml;rke zu &auml;ndern oder zu muten bzw. unmuten. Dieses Modul kann zus&auml;tzlich
die Fernbedienung simulieren. Somit k&ouml;nnen also die Schaltaktionen einer Fernbedienung simuliert werden.
Getestet wurde das Modul mit einem Panasonic Plasma TV tx-p50vt30e
<br><br>
Beim definieren des Ger&auml;tes in FHEM wird ein interner Timer gestartet, welcher zyklisch alle 30 Sekunden
den Status der Lautst&auml;rke und des Mute-Zustand ausliest. Das Intervall des Timer kann &uuml;ber den Parameter &lt;interval&gt;
ge&auml;ndert werden. Wird kein Interval angegeben, liest das Modul alle 30 Sekunden die Werte aus und triggert ein notify.
<br><br>
Beispiel:
<ul><code>
define myTV1 VIERA 192.168.178.20<br><br>
define myTV1 VIERA 192.168.178.20 60 #Mit einem Interval von 60 Sekunden
</code></ul>
</ul>
<br>
<a name="VIERAset"></a>
<b>Set</b>
<ul>
<code>set &lt;name&gt; &lt;command&gt; [&lt;value&gt;]</code>
<br><br>
Zur Zeit sind die folgenden Befehle implementiert:
<ul><code>
off<br>
mute [on|off]<br>
volume [0-100]<br>
volumeUp<br>
volumeDown<br>
channel [1-9999]<br>
channelUp<br>
channelDown<br>
statusRequest<br>
remoteControl &lt;command&gt;<br>
</code></ul>
</ul>
<ul>
<br>
<u>Fernbedienung (Kann vielleicht nach Modell variieren)</u><br>
Das Modul hat die folgenden Fernbedienbefehle implementiert:<br>
<ul><code>
3D => 3D Knopf<br>
BLUE => Blau<br>
CANCEL => Cancel / Exit<br>
CHG_INPUT => AV<br>
CH_DOWN => Kanal runter<br>
CH_UP => Kanal hoch<br>
D0 => Ziffer 0<br>
D1 => Ziffer 1<br>
D2 => Ziffer 2<br>
D3 => Ziffer 3<br>
D4 => Ziffer 4<br>
D5 => Ziffer 5<br>
D6 => Ziffer 6<br>
D7 => Ziffer 7<br>
D8 => Ziffer 8<br>
D9 => Ziffer 9<br>
DISP_MODE => Anzeigemodus / Seitenverh&auml;ltnis<br>
DOWN => Navigieren runter<br>
ENTER => Navigieren enter<br>
EPG => Guide / EPG<br>
FF => Vorspulen<br>
GREEN => Gr&uuml;n<br>
HOLD => Bild einfrieren<br>
INDEX => TTV index<br>
INFO => Info<br>
INTERNET => VIERA connect<br>
LEFT => Navigieren links<br>
MENU => Men&uuml;<br>
MUTE => Mute<br>
PAUSE => Pause<br>
PLAY => Play<br>
POWER => Power off<br>
P_NR => P-NR (Ger&auml;uschreduzierung)<br>
REC => Aufnehmen<br>
RED => Rot<br>
RETURN => Enter<br>
REW => Zur&uuml;ckspulen<br>
RIGHT => Navigieren Rechts<br>
R_TUNE => Vermutlich die selbe Funktion wie INFO<br>
SD_CARD => SD-card<br>
SKIP_NEXT => Skip next<br>
SKIP_PREV => Skip previous<br>
STOP => Stop<br>
STTL => Untertitel<br>
SUBMENU => Option<br>
TEXT => TeleText<br>
TV => TV<br>
UP => Navigieren Hoch<br>
VIERA_LINK => VIERA link<br>
VOLDOWN => Lauter<br>
VOLUP => Leiser<br>
VTOOLS => VIERA tools<br>
YELLOW => Gelb<br>
</code></ul>
<br>
Beispiel:<br>
<ul><code>
set &lt;name&gt; mute on<br>
set &lt;name&gt; volume 20<br>
set &lt;name&gt; remoteControl CH_DOWN<br>
</code></ul>
<br>
Anmerkung:<br>
<ul>Aktivieren von Fernbedienung der Lautst&auml;rke per DLNA: Men&uuml; -> Setup -> Netzwerk-Setup -> Netzwerkverbindungsein. -> DLNA-Fernbed. Lautst. -> Ein</ul>
</ul>
<br>
<a name="VIERAget"></a>
<b>Get</b>
<ul>
<code>get &lt;name&gt; &lt;what&gt;</code>
<br><br>
Die folgenden Befehle sind definiert und geben den entsprechenden Wert zur&uuml;ck, der vom Fernseher zur&uuml;ckgegeben wurde.
<ul><code>
mute<br>
volume<br>
power<br>
presence<br>
</code></ul>
</ul>
<br>
<a name="VIERAattr"></a>
<b>Attribute</b>
<ul>N/A</ul>
<br>
<a name="VIERAevents"></a>
<b>Generierte events:</b>
<ul>
<li>volume</li>
<li>mute</li>
<li>presence</li>
<li>power</li>
<li>state</li>
</ul>
</ul>
<a name="VantagePro2"></a>
<h3>VantagePro2</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#VantagePro2'>VantagePro2</a><br/>
</ul>
<a name="WEBCOUNT"></a>
<h3>WEBCOUNT</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#WEBCOUNT'>WEBCOUNT</a><br/>
</ul>
<a name="WEBIO"></a>
<h3>WEBIO</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#WEBIO'>WEBIO</a><br/>
</ul>
<a name="WEBIO_12DIGITAL"></a>
<h3>WEBIO_12DIGITAL</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#WEBIO_12DIGITAL'>WEBIO_12DIGITAL</a><br/>
</ul>
<a name="WEBTHERM"></a>
<h3>WEBTHERM</h3>
<ul>
Sorry, keine deutsche Dokumentation vorhanden.<br/><br/>
Die englische Doku gibt es hier: <a href='http://fhem.de/commandref.html#WEBTHERM'>WEBTHERM</a><br/>
</ul>
<a name="WOL"></a>
<h3>WOL</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#WOL'>WOL</a><br/>
</ul>
<a name="WS2000"></a>
<h3>WS2000</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#WS2000'>WS2000</a><br/>
</ul>
<a name="WS300"></a>
<h3>WS300</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#WS300'>WS300</a><br/>
</ul>
<a name="WS3600"></a>
<h3>WS3600</h3>
<ul>
Definiert eine Wetterstation, die über ein externes Programm ausgelesen
wird. Dieses Programm wird zyklisch durch FHEM aufgerufen. Es muss die
Daten im gleichen Format wie fetch3600 (Details siehe unten) auf der
Standardausgabe liefern.<br>
<br>
<a name="WS3600define"></a> <b>Define</b>
<ul>
<code>define &lt;name&gt; WS3600 "&lt;wsreaderprog&gt;
[&lt;options&gt;]" [&lt;interval&gt;]</code> <br>
<br>
<ul>
<dl>
<dt>&lt;wsreaderprog&gt;</dt>
<dd>kompletter Pfad zum Ausleseprogramm (für Wetterstationen Typ
WS3600 fetch3600 verwenden)</dd>
<dt>&lt;options&gt;</dt>
<dd>Kommandozeilenparameter für &lt;wsreaderprog&gt;, falls
erforderlich</dd>
<dt>&lt;interval&gt;</dt>
<dd>optionaler Parameter für das Aufrufintervall [s]. Defaultwert
ist 60s.</dd>
</dl>
</ul>
<br>
&nbsp; Unterstützte Stationen sind:<br>
<ul>
<li>WS3600 Serie (Europe Supplies, technotrade, usw.; s.a. <a href="http://wiki.wetterstationen.info/index.php?title=LaCrosse_WS3600">Wetterstationen.info</a>
(deutsch) für Details) in Verbindung mit fetch3600 aus dem Paket <a
href="http://open3600.fast-mail.nl/tiki-index.php">open3600</a>).
Fetch3600 liefert die aktuellen Werte zeilenweise als
Name-Wert-Paare. Diese werden durch FHEM zyklisch eingelesen, mit
besser lesbaren Bezeichnungen versehen und als Readings zur
Verfügung gestellt. </li>
<li><a href="http://wiki.wetterstationen.info/index.php?title=LaCrosse_WS2300">WS2300</a>
Serie in Verbindung mit dem Paket <a href="http://www.lavrsen.dk/twiki/bin/view/Open2300/WebHome">open2300</a>
(ähnlich zu open3600).</li>
<li><a href="http://wiki.wetterstationen.info/index.php?title=WS1080">WS1080</a>
(und andere Stationen, die mit der Windows-Software "Easy Weather"
ausgeliefert werden) in Verbindung mit <a href="https://code.google.com/p/fowsr/">fowsr</a>
(ab Version 2.0)</li>
</ul>
<br>
Es wird vorausgesetzt, dass die Wetterstation am lokalen Computer
angeschlossen ist und &lt;wsreaderprog&gt; deshalb lokal läuft.
&lt;wsreaderprog&gt; muss grundsätzlich eine zu fetch3600 vergleichbare
Ausgabe auf der Standardausgabe liefern. <br>
Als Beispiel für das erwartete Format hier die Ausgabe von fetch3600:<br>
<div style="height: 120px; width: 215px; border: 1px solid #cccccc; overflow: auto;">
<pre>Date 14-Nov-2009
Time 10:50:22
Ti 22.8
Timin 20.8
Timax 27.9
TTimin 10:27
DTimin 15-10-2009
TTimax 23:31
DTimax 20-08-2009
To 14.2
Tomin -0.4
Tomax 35.6
TTomin 07:03
DTomin 15-10-2009
TTomax 16:52
DTomax 20-08-2009
DP 9.2
DPmin -2.2
DPmax 20.3
TDPmin 07:03
DDPmin 15-10-2009
TDPmax 11:58
DDPmax 20-08-2009
RHi 48
RHimin 32
RHimax 57
TRHimin 17:03
DRHimin 21-10-2009
TRHimax 22:24
DRHimax 07-10-2009
RHo 72
RHomin 27
RHomax 96
TRHomin 16:41
DRHomin 20-08-2009
TRHomax 06:28
DRHomax 02-11-2009
WS 0.0
DIRtext WSW
DIR0 247.5
DIR1 247.5
DIR2 247.5
DIR3 247.5
DIR4 247.5
DIR5 247.5
WC 14.2
WCmin -0.4
WCmax 35.6
TWCmin 07:03
DWCmin 15-10-2009
TWCmax 16:52
DWCmax 20-08-2009
WSmin 0.0
WSmax 25.6
TWSmin 10:44
DWSmin 14-11-2009
TWSmax 19:08
DWSmax 24-09-2009
R1h 0.00
R1hmax 24.34
TR1hmax 22:34
DR1hmax 07-10-2009
R24h 0.00
R24hmax 55.42
TR24hmax 07:11
DR24hmax 08-10-2009
R1w 29.00
R1wmax 95.83
TR1wmax 00:00
DR1wmax 12-10-2009
R1m 117.58
R1mmax 117.58
TR1mmax 00:00
DR1mmax 01-11-2009
Rtot 3028.70
TRtot 03:29
DRtot 18-09-2005
RP 992.200
AP 995.900
RPmin 970.300
RPmax 1020.000
TRPmin 05:25
DRPmin 04-11-2009
TRPmax 09:19
DRPmax 11-09-2009
Tendency Falling
Forecast Cloudy</pre>
</div>
Welche der vorgenannten Wertepaare durch &lt;wsreaderprog&gt;&nbsp;
geliefert werden, ist egal. Jedes bekannte wird übersetzt (z.B. <code>Ti</code>
nach <code>Temp-inside</code>) und als Reading angezeigt, alle
unbekannten werden kommentarlos verworfen. Mittels geeignetem Programm
oder Script sollte sich also jede beliebige Wetterstation anschließen
lassen. <br>
Anmerkung: Um die Anzahl Readings zu reduzieren, werden jetzt Date- und
Time-Wertepaare zusammengefasst. Es ist jetzt auch zulässig, dass
&lt;wsreaderprog&gt; schon kombinierte Wertepaare liefert. Diese sind
mit dem Prefix <code>DT</code> zu kennzeichnen, also z.B. <code>Date</code>
+ <code>Time</code> --&gt; <code>DTime</code>, <code>DRPmin</code> +
<code>TRPmin</code> --&gt; <code>DTRPmin</code> usw.).<br>
<em>Fetch3600 ist auch unter Windows verfügbar, ob das Zusammenspiel mit
FHEM dort auch funktioniert, wurde noch nicht getestet.</em> <br>
<br>
Beispiele:
<ul>
<code>define myWS3600 W3600 /usr/local/bin/fetch360</code><br>
<code>define myWS1080 W3600 "/usr/local/bin/fowsr -c" 300</code><br>
</ul>
<br>
</ul>
<a name="WS3600set"></a> <b>Set</b>
<ul>
N/A
</ul>
<br>
<a name="WS3600get"></a> <b>Get</b>
<ul>
N/A
</ul>
<br>
<a name="WS3600attr"></a> <b>Attributes</b>
<ul>
<li><a href="#model">model</a>&nbsp;&nbsp;&nbsp;&nbsp; WS3600, WS2300,
WS1080 (z.Zt (noch) ohne Wirkung)</li>
</ul>
<br>
</ul>
<a name="WWO"></a>
<h3>WWO</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#WWO'>WWO</a><br/>
</ul>
<a name="Weather"></a>
<h3>Weather</h3>
<ul>
<br>
<a name="Weatherdefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; Weather &lt;location&gt; [&lt;interval&gt; [&lt;language&gt;]]</code><br>
<br>
Bezechnet ein virtuelles Gerät für Wettervorhersagen.<br><br>
Eine solche virtuelle Wetterstation sammelt periodisch aktuelle und zukünftige Wetterdaten aus der Yahoo-Wetter-API.<br><br>
Der Parameter <code>location</code> entspricht der sechsstelligen WOEID (WHERE-ON-EARTH-ID). Die WOEID für den eigenen Standort kann auf <a href="http://weather.yahoo.com">http://weather.yahoo.com</a> gefunden werden.<br><br>
Der optionale Parameter <code>interval</code> gibt die Dauer in Sekunden zwischen den einzelnen Aktualisierungen der Wetterdaten an. Der Standardwert ist 3600 (1 Stunde). Wird kein Wert angegeben, gilt der Standardwert.<br><br>
Der optionale Parameter für die möglichen Sprachen darf einen der folgende Werte annehmen: <code>de</code>, <code>en</code> oder <code>nl</code>. Er bezeichnet die natürliche Sprache, in der die Wetterinformationen dargestellt werden. Der Standardwert ist <code>en</code>. Wird für die Sprache kein Wert angegeben, gilt der Standardwert. Wird allerdings der Parameter für die Sprache gesetzt, muss ebenfalls ein Wert für das Abfrageintervall gesetzt werden.<br><br>
Beispiele:
<pre>
define MyWeather Weather 673513
define Forecast Weather 673513 1800
</pre>
Das Modul unterstützt zusätzlich vier verschiedene Funktionen <code>WeatherAsHtml</code>, <code>WeatherAsHtmlV</code>, <code>WeatherAsHtmlH</code> und <code>WeatherAsHtmlD</code>. Die ersten beiden Funktionen sind identisch: sie erzeugen den HTML-Code für eine vertikale Darstellung des Wetterberichtes. Die dritte Funktion liefert den HTML-Code für eine horizontale Darstellung des Wetterberichtes. Die letztgenannte Funktion wählt automatisch eine Ausrichtung, die abhängig davon ist, ob ein Smallcreen Style ausgewählt ist (vertikale Darstellung) oder nicht (horizontale Darstellung).<br><br>
Beispiel:
<pre>
define MyWeatherWeblink weblink htmlCode { WeatherAsHtmlH("MyWeather") }
</pre>
</ul>
<br>
<a name="Weatherset"></a>
<b>Set </b>
<ul>
<code>set &lt;name&gt; update</code><br><br>
Erzwingt eine Abfrage der Wetterdaten. Die darauffolgende Abfrage wird gemäß dem eingestellten Intervall <code>interval</code> Sekunden später durchgeführt.<br><br>
</ul>
<br>
<a name="Weatherget"></a>
<b>Get</b>
<ul>
<code>get &lt;name&gt; &lt;reading&gt;</code><br><br>
Gültige ausgelesene Daten (readings) und ihre Bedeutung (das ? kann einen der Werte 1, 2, 3 , 4 oder 5 annehmen und steht für heute, morgen, übermorgen etc.):<br><br>
<table>
<tr><td>city</td><td>Name der Stadt, der aufgrund der WOEID übermittelt wird</td></tr>
<tr><td>code</td><td>Code für die aktuellen Wetterverhältnisse</td></tr>
<tr><td>condition</td><td>aktuelle Wetterverhältnisse</td></tr>
<tr><td>current_date_time</td><td>Zeitstempel der letzten Aktualisierung der Wetterdaten vom Server</td></tr>
<tr><td>fc?_code</td><td>Code für die vorhergesagten Wetterverhältnisse</td></tr>
<tr><td>fc?_condition</td><td>vorhergesagte Wetterverhältnisse</td></tr>
<tr><td>fc?_day_of_week</td><td>Wochentag des Tages, der durch ? dargestellt wird</td></tr>
<tr><td>fc?_high_c</td><td>vorhergesagte maximale Tagestemperatur in Grad Celsius</td></tr>
<tr><td>fc?_icon</td><td>Icon für Vorhersage</td></tr>
<tr><td>fc?_low_c</td><td>vorhergesagte niedrigste Tagestemperatur in Grad Celsius</td></tr>
<tr><td>humidity</td><td>gegenwärtige Luftfeuchtgkeit in %</td></tr>
<tr><td>icon</td><td>relativer Pfad für das aktuelle Icon</td></tr>
<tr><td>pressure</td><td>Luftdruck in hPa</td></tr>
<tr><td>pressure_trend</td><td>Luftdrucktendenz (0= gleichbleibend, 1= steigend, 2= fallend)</td></tr>
<tr><td>pressure_trend_txt</td><td>textliche Darstellung der Luftdrucktendenz</td></tr>
<tr><td>pressure_trend_sym</td><td>symbolische Darstellung der Luftdrucktendenz</td></tr>
<tr><td>temperature</td><td>gegenwärtige Temperatur in Grad Celsius</td></tr>
<tr><td>temp_c</td><td>gegenwärtige Temperatur in Grad Celsius</td></tr>
<tr><td>temp_f</td><td>gegenwärtige Temperatur in Grad Celsius</td></tr>
<tr><td>visibility</td><td>Sichtweite in km</td></tr>
<tr><td>wind</td><td>Windgeschwindigkeit in km/h</td></tr>
<tr><td>wind_chill</td><td>gefühlte Temperatur in Grad Celsius</td></tr>
<tr><td>wind_condition</td><td>Windrichtung und -geschwindigkeit</td></tr>
<tr><td>wind_direction</td><td>Gradangabe der Windrichtung (0 = Nordwind)</td></tr>
<tr><td>wind_speed</td><td>Windgeschwindigkeit in km/h (mit wind identisch)</td></tr>
</table>
</ul>
<br>
<a name="Weatherattr"></a>
<b>Attribute</b>
<ul>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
</ul>
<br>
</ul>
<a name="WeekdayTimer"></a>
<h3>WeekdayTimer</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#WeekdayTimer'>WeekdayTimer</a><br/>
</ul>
<a name="X10"></a>
<h3>X10</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#X10'>X10</a><br/>
</ul>
<a name="XBMC"></a>
<h3>XBMC</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#XBMC'>XBMC</a><br/>
</ul>
<a name="XmlList"></a>
<h3>XmlList</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#XmlList'>XmlList</a><br/>
</ul>
<a name="YAMAHA_AVR"></a>
<h3>YAMAHA_AVR</h3>
<ul>
<a name="YAMAHA_AVRdefine"></a>
<b>Definition</b>
<ul>
<code>define &lt;name&gt; YAMAHA_AVR &lt;IP-Addresse&gt; [&lt;Zone&gt;] [&lt;Status_Interval&gt;]
<br><br>
define &lt;name&gt; YAMAHA_AVR &lt;IP-Addresse&gt; [&lt;Zone&gt;] [&lt;Off_Interval&gt;] [&lt;On_Interval&gt;]
</code>
<br><br>
Dieses Modul steuert AV-Receiver des Herstellers Yamaha &uuml;ber die Netzwerkschnittstelle.
Es bietet die M&ouml;glichkeit den Receiver an-/auszuschalten, den Eingangskanal zu w&auml;hlen,
die Lautst&auml;rke zu &auml;ndern, den Receiver "Stumm" zu schalten, sowie den aktuellen Status abzufragen.
<br><br>
Bei der Definition eines YAMAHA_AVR-Moduls wird eine interne Routine in Gang gesetzt, welche regelm&auml;&szlig;ig
(einstellbar durch den optionalen Parameter <code>&lt;Status_Interval&gt;</code>; falls nicht gesetzt ist der Standardwert 30 Sekunden)
den Status des Receivers abfragt und entsprechende Notify-/FileLog-Ger&auml;te triggert.
<br><br>
Sofern 2 Interval-Argumente &uuml;bergeben werden, wird der erste Parameter <code>&lt;Off_Interval&gt;</code> genutzt
sofern der Receiver ausgeschaltet oder nicht erreichbar ist. Der zweiter Parameter <code>&lt;On_Interval&gt;</code>
wird verwendet, sofern der Receiver eingeschaltet ist.
<br><br>
Beispiel:<br><br>
<ul><code>
define AV_Receiver YAMAHA_AVR 192.168.0.10
<br><br>
# Mit modifiziertem Status Interval (60 Sekunden)<br>
define AV_Receiver YAMAHA_AVR 192.168.0.10 mainzone 60
<br><br>
# Mit gesetztem "Off"-Interval (60 Sekunden) und "On"-Interval (10 Sekunden)<br>
define AV_Receiver YAMAHA_AVR 192.168.0.10 mainzone 60 10
</code></ul><br><br>
</ul>
<b>Zonenauswahl</b><br>
<ul>
Wenn der zu steuernde Receiver mehrere Zonen besitzt (z.B. RX-V671, RX-V673,... sowie die AVANTAGE Modellreihe)
kann die zu steuernde Zone explizit angegeben werden. Die Modellreihen RX-V3xx und RX-V4xx als Beispiel
haben nur eine Zone (Main Zone). Je nach Receiver-Modell stehen folgende Zonen zur Verf&uuml;gung, welche mit
dem optionalen Parameter &lt;Zone&gt; angegeben werden k&ouml;nnen.<br><br>
<ul>
<li><b>mainzone</b> - Das ist die Hauptzone (Standard)</li>
<li><b>zone2</b> - Die zweite Zone (Zone 2)</li>
<li><b>zone3</b> - Die dritte Zone (Zone 3)</li>
<li><b>zone4</b> - Die vierte Zone (Zone 4)</li>
</ul>
<br>
Je nach Receiver-Modell stehen in den verschiedenen Zonen nicht immer alle Eing&auml;nge zur Verf&uuml;gung.
Dieses Modul bietet nur die tats&auml;chlich verf&uuml;gbaren Eing&auml;nge an.
<br><br>
Beispiel:<br><br>
<ul><code>
define AV_Receiver YAMAHA_AVR 192.168.0.10 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Wenn keine Zone angegeben ist, wird<br>
attr AV_Receiver YAMAHA_AVR room Wohnzimmer &nbsp;&nbsp;&nbsp;&nbsp; # standardm&auml;&szlig;ig "mainzone" verwendet<br>
<br>
# Definition der zweiten Zone<br>
define AV_Receiver_Zone2 YAMAHA_AVR 192.168.0.10 zone2<br>
attr AV_Receiver_Zone2 room Schlafzimmer<br>
</code></ul><br><br>
F&uuml;r jede Zone muss eine eigene YAMAHA_AVR Definition erzeugt werden, welche dann unterschiedlichen R&auml;umen zugeordnet werden kann.
Jede Zone kann unabh&auml;ngig von allen anderen Zonen (inkl. der Main Zone) gesteuert werden.
<br><br>
</ul>
<a name="YAMAHA_AVRset"></a>
<b>Set-Kommandos </b>
<ul>
<code>set &lt;Name&gt; &lt;Kommando&gt; [&lt;Parameter&gt;]</code>
<br><br>
Aktuell werden folgende Kommandos unterst&uuml;tzt. Die verf&uuml;gbaren Eing&auml;nge und Szenen k&ouml;nnen je nach Receiver-Modell variieren.
Die folgenden Eing&auml;nge stehen beispielhaft an einem RX-V473 Receiver zur Verf&uuml;gung.
Aktuell stehen folgende Kommandos zur Verf&uuml;gung.
<br><br>
<ul>
<li><b>on</b> &nbsp;&nbsp;-&nbsp;&nbsp; Schaltet den Receiver ein</li>
<li><b>off</b> &nbsp;&nbsp;-&nbsp;&nbsp; Schaltet den Receiver aus</li>
<li><b>input</b> hdmi1,hdmiX,... &nbsp;&nbsp;-&nbsp;&nbsp; W&auml;hlt den Eingangskanal (es werden nur die tats&auml;chlich verf&uuml;gbaren Eing&auml;nge angeboten)</li>
<li><b>scene</b> scene1,sceneX &nbsp;&nbsp;-&nbsp;&nbsp; W&auml;hlt eine vorgefertigte Szene aus</li>
<li><b>volume</b> 0...100 &nbsp;&nbsp;-&nbsp;&nbsp; Setzt die Lautst&auml;rke in Prozent (0 bis 100%)</li>
<li><b>volumeStraight</b> -87...15 &nbsp;&nbsp;-&nbsp;&nbsp; Setzt die Lautst&auml;rke in Dezibel (-80.5 bis 15.5 dB) so wie sie am Receiver auch verwendet wird.</li>
<li><b>volumeUp</b> [0...100] &nbsp;&nbsp;-&nbsp;&nbsp; Erh&ouml;ht die Lautst&auml;rke um 5% oder entsprechend dem Attribut volumeSteps (optional kann der Wert auch als Argument angehangen werden, dieser hat dann Vorang) </li>
<li><b>volumeDown</b> [0...100] &nbsp;&nbsp;-&nbsp;&nbsp; Veringert die Lautst&auml;rke um 5% oder entsprechend dem Attribut volumeSteps (optional kann der Wert auch als Argument angehangen werden, dieser hat dann Vorang) </li>
<li><b>mute</b> on,off,toggle &nbsp;&nbsp;-&nbsp;&nbsp; Schaltet den Receiver stumm</li>
<li><b>statusRequest</b> &nbsp;&nbsp;-&nbsp;&nbsp; Fragt den aktuell Status des Receivers ab</li>
<li><b>remoteControl</b> up,down,... &nbsp;&nbsp;-&nbsp;&nbsp; Sendet Fernbedienungsbefehle wie im n&auml;chsten Abschnitt beschrieben</li>
</ul>
<br><br>
</ul>
<u>Fernbedienung (je nach Modell nicht in allen Zonen verf&uuml;gbar)</u><br><br>
<ul>
In vielen Receiver-Modellen existieren Eing&auml;nge, welche nach der Auswahl keinen Sound ausgeben. Diese Eing&auml;nge
bed&uuml;rfen manueller Interaktion mit der Fernbedienung um die Wiedergabe zu starten (z.B. Internet Radio, Netzwerk Streaming, usw.).<br><br>
F&uuml;r diesen Fall gibt es folgende Befehle:<br><br>
<u>Cursor Steuerung:</u><br><br>
<ul><code>
remoteControl up<br>
remoteControl down<br>
remoteControl left<br>
remoteControl right<br>
remoteControl enter<br>
remoteControl return<br>
</code></ul><br><br>
<u>Men&uuml; Auswahl:</u><br><br>
<ul><code>
remoteControl setup<br>
remoteControl option<br>
remoteControl display<br>
</code></ul><br><br>
<u>Radio Steuerung:</u><br><br>
<ul><code>
remoteControl tunerPresetUp<br>
remoteControl tunerPresetDown<br>
</code></ul><br><br>
Die Befehlsnamen entsprechen den Tasten auf der Fernbedienung.<br><br>
Ein typisches Beispiel ist das automatische Einschalten und Abspielen eines Internet Radio Sender:<br><br>
<ul><code>
# Die Ger&auml;tedefinition<br><br>
define AV_receiver YAMAHA_AVR 192.168.0.3
</code></ul><br><br>
Und in der 99_MyUtils.pm die folgende Funktion:<br><br>
<ul><code>
sub startNetRadio<br>
{<br>
&nbsp;&nbsp;fhem "set AV_Receiver on";<br>
&nbsp;&nbsp;sleep 5;<br>
&nbsp;&nbsp;fhem "set AV_Receiver input netradio";<br>
&nbsp;&nbsp;sleep 4;<br>
&nbsp;&nbsp;fhem "set AV_Receiver remoteControl enter";<br>
&nbsp;&nbsp;sleep 2;<br>
&nbsp;&nbsp;fhem "set AV_Receiver remoteControl enter";<br>
}
</code></ul><br><br>
Die Kommandos der Fernbedienung m&uuml;ssen mit einem sleep pausiert werden, da der Receiver in der Zwischenzeit arbeitet und keine Befehle annimmt..<br><br>
Nun kann man diese Funktion in der FHEM Kommandozeile oder in notify-Definitionen wie folgt verwenden.:<br><br>
<ul><code>
{startNetRadio()}
</code></ul><br><br>
</ul>
<a name="YAMAHA_AVRget"></a>
<b>Get-Kommandos</b>
<ul>
<code>get &lt;Name&gt; &lt;Readingname&gt;</code>
<br><br>
Aktuell stehen via GET lediglich die Werte der Readings zur Verf&uuml;gung. Eine genaue Auflistung aller m&ouml;glichen Readings folgen unter "Generierte Readings/Events".
</ul>
<br><br>
<a name="YAMAHA_AVRattr"></a>
<b>Attribute</b>
<ul>
<li><a href="#do_not_notify">do_not_notify</a></li>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li><br>
<li><a name="request-timeout">request-timeout</a></li>
Optionales Attribut. Maximale Dauer einer Anfrage in Sekunden zum Receiver.
<br><br>
M&ouml;gliche Werte: 1-5 Sekunden. Standardwert ist 4 Sekunden<br><br>
<li><a name="disable">disable</a></li>
Optionales Attribut zur Deaktivierung des zyklischen Status-Updates. Ein manuelles Update via statusRequest-Befehl ist dennoch m&ouml;glich.
<br><br>
M&ouml;gliche Werte: 0 => zyklische Status-Updates, 1 => keine zyklischen Status-Updates.<br><br>
<li><a name="volume-smooth-change">volume-smooth-change</a></li>
Optionales Attribut, welches einen weichen Lautst&auml;rke&uuml;bergang aktiviert..
<br><br>
M&ouml;gliche Werte: 0 => deaktiviert , 1 => aktiviert<br><br>
<li><a name="volume-smooth-steps">volume-smooth-steps</a></li>
Optionales Attribut, welches angibt, wieviele Schritte zur weichen Lautst&auml;rkeanpassung
durchgef&uuml;hrt werden sollen. Standardwert ist 5 Anpassungschritte<br><br>
<li><a name="volumeSteps">volumeSteps</a></li>
Optionales Attribut, welches den Standardwert zur Lautst&auml;rkenerh&ouml;hung (volumeUp) und Lautst&auml;rkenveringerung (volumeDown) konfiguriert. Standardwert ist 5%<br>
<br>
</ul>
<b>Generierte Readings/Events:</b><br>
<ul>
<li><b>input</b> - Der ausgew&auml;hlte Eingang entsprechend dem FHEM-Kommando</li>
<li><b>inputName</b> - Die Eingangsbezeichnung, so wie sie am Receiver eingestellt wurde und auf dem Display erscheint</li>
<li><b>mute</b> - Der aktuelle Stumm-Status ("on" =&gt; Stumm, "off" =&gt; Laut)</li>
<li><b>power</b> - Der aktuelle Betriebsstatus ("on" =&gt; an, "off" =&gt; aus)</li>
<li><b>presence</b> - Die aktuelle Empfangsbereitschaft ("present" =&gt; empfangsbereit, "absent" =&gt; nicht empfangsbereit, z.B. Stromausfall)</li>
<li><b>volume</b> - Der aktuelle Lautst&auml;rkepegel in Prozent (zwischen 0 und 100 %)</li>
<li><b>volumeStraight</b> - Der aktuelle Lautst&auml;rkepegel in Dezibel (zwischen -80.0 und +15 dB)</li>
<li><b>state</b> - Der aktuelle Schaltzustand (power-Reading) oder die Abwesenheit des Ger&auml;tes (m&ouml;gliche Werte: "on", "off" oder "absent")</li>
<br><br><u>Eingangsabh&auml;ngige Readings/Events:</u><br>
<li><b>currentChannel</b> - Nummer des Eingangskanals (nur bei SIRIUS)</li>
<li><b>currentStation</b> - Name des Radiosenders (nur bei TUNER, NET RADIO und PANDORA)</li>
<li><b>currentAlbum</b> - Album es aktuell gespielten Titel</li>
<li><b>currentArtist</b> - Interpret des aktuell gespielten Titel</li>
<li><b>currentTitle</b> - Name des aktuell gespielten Titel</li>
<li><b>playStatus</b> - Wiedergabestatus des Eingangs</li>
</ul>
<br>
<b>Hinweise des Autors</b>
<ul>
Dieses Modul ist nur nutzbar, wenn die Option "Network Standby" am Receiver aktiviert ist. Ansonsten ist die Steuerung nur im eingeschalteten Zustand m&ouml;glich.
</ul>
<br>
</ul>
<a name="YAMAHA_BD"></a>
<h3>YAMAHA_BD</h3>
<ul>
<a name="YAMAHA_BDdefine"></a>
<b>Definition</b>
<ul>
<code>define &lt;name&gt; YAMAHA_BD &lt;IP-Addresse&gt; [&lt;Status_Interval&gt;]
<br><br>
define &lt;name&gt; YAMAHA_BD &lt;IP-Addresse&gt; [&lt;Off_Interval&gt;] [&lt;On_Interval&gt;]
</code>
<br><br>
Dieses Modul steuert Blu-Ray Player des Herstellers Yamaha &uuml;ber die Netzwerkschnittstelle.
Es bietet die M&ouml;glichkeit den Player an-/auszuschalten, die Schublade zu &ouml;ffnen und schlie&szlig;en,
die Wiedergabe beeinflussen, s&auml;mtliche Fernbedieungs-Befehle zu senden, sowie den aktuellen Status abzufragen.
<br><br>
Bei der Definition eines YAMAHA_BD-Moduls wird eine interne Routine in Gang gesetzt, welche regelm&auml;&szlig;ig
(einstellbar durch den optionalen Parameter <code>&lt;Status_Interval&gt;</code>; falls nicht gesetzt ist der Standardwert 30 Sekunden)
den Status des Players abfragt und entsprechende Notify-/FileLog-Definitionen triggert.
<br><br>
Sofern 2 Interval-Argumente &uuml;bergeben werden, wird der erste Parameter <code>&lt;Off_Interval&gt;</code> genutzt
sofern der Player ausgeschaltet oder nicht erreichbar ist. Der zweiter Parameter <code>&lt;On_Interval&gt;</code>
wird verwendet, sofern der Player eingeschaltet ist.
<br><br>
Beispiel:<br><br>
<ul><code>
define BD_Player YAMAHA_BD 192.168.0.10
<br><br>
# Mit modifiziertem Status Interval (60 Sekunden)<br>
define BD_Player YAMAHA_BD 192.168.0.10 60
<br><br>
# Mit gesetztem "Off"-Interval (60 Sekunden) und "On"-Interval (10 Sekunden)<br>
define BD_Player YAMAHA_BD 192.168.0.10 60 10
</code></ul><br><br>
</ul>
<a name="YAMAHA_BDset"></a>
<b>Set-Kommandos </b>
<ul>
<code>set &lt;Name&gt; &lt;Kommando&gt; [&lt;Parameter&gt;]</code>
<br><br>
Aktuell werden folgende Kommandos unterst&uuml;tzt.
<br><br>
<ul>
<li><b>on</b> &nbsp;&nbsp;-&nbsp;&nbsp; schaltet den Player ein</li>
<li><b>off</b> &nbsp;&nbsp;-&nbsp;&nbsp; schaltet den Player aus </li>
<li><b>tray</b> open,close &nbsp;&nbsp;-&nbsp;&nbsp; &ouml;ffnet oder schlie&szlig;t die Schublade</li>
<li><b>statusRequest</b> &nbsp;&nbsp;-&nbsp;&nbsp; fragt den aktuellen Status ab</li>
<li><b>remoteControl</b> up,down,... &nbsp;&nbsp;-&nbsp;&nbsp; sendet Fernbedienungsbefehle wie im folgenden Kapitel beschrieben.</li>
</ul><br>
<u>Wiedergabespezifische Kommandos</u>
<ul>
<li><b>play</b> &nbsp;&nbsp;-&nbsp;&nbsp; startet die Wiedergabe des aktuellen Mediums</li>
<li><b>pause</b> &nbsp;&nbsp;-&nbsp;&nbsp; pausiert die Wiedergabe</li>
<li><b>stop</b> &nbsp;&nbsp;-&nbsp;&nbsp; stoppt die Wiedergabe</li>
<li><b>skip</b> forward,reverse &nbsp;&nbsp;-&nbsp;&nbsp; &uuml;berspringt das aktuelle Kapitel oder den aktuellen Titel</li>
<li><b>fast</b> forward,reverse &nbsp;&nbsp;-&nbsp;&nbsp; schneller Vor- oder R&uuml;cklauf</li>
<li><b>slow</b> forward,reverse &nbsp;&nbsp;-&nbsp;&nbsp; langsamer Vor- oder R&uuml;cklauf</li>
</ul>
<br><br>
</ul>
<u>Fernbedienung</u><br><br>
<ul>
Es stehen folgende Befehle zur Verf&uuml;gung:<br><br>
<u>Zahlen Tasten (0-9):</u><br><br>
<ul><code>
remoteControl 0<br>
remoteControl 1<br>
remoteControl 2<br>
...<br>
remoteControl 9<br>
</code></ul><br><br>
<u>Cursor Steuerung:</u><br><br>
<ul><code>
remoteControl up<br>
remoteControl down<br>
remoteControl left<br>
remoteControl right<br>
remoteControl enter<br>
remoteControl return<br>
</code></ul><br><br>
<u>Men&uuml; Auswahl:</u><br><br>
<ul><code>
remoteControl OSDonScreen<br>
remoteControl OSDstatus<br>
remoteControl popupMenu<br>
remoteControl topMenu<br>
remoteControl setup<br>
remoteControl home<br>
remoteControl clear<br>
</code></ul><br><br>
<u>Farbtasten:</u><br><br>
<ul><code>
remoteControl red<br>
remoteControl green<br>
remoteControl yellow<br>
remoteControl blue<br>
</code></ul><br><br>
Die Befehlsnamen entsprechen den Tasten auf der Fernbedienung.<br><br>
</ul>
<a name="YAMAHA_BDget"></a>
<b>Get-Kommandos</b>
<ul>
<code>get &lt;Name&gt; &lt;Readingname&gt;</code>
<br><br>
Aktuell stehen via GET lediglich die Werte der Readings zur Verf&uuml;gung. Eine genaue Auflistung aller m&ouml;glichen Readings folgen unter "Generierte Readings/Events".
</ul>
<br><br>
<a name="YAMAHA_BDattr"></a>
<b>Attribute</b>
<ul>
<li><a href="#do_not_notify">do_not_notify</a></li>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li><br>
<li><a name="disable">disable</a></li>
Optionales Attribut zur Deaktivierung des zyklischen Status-Updates. Ein manuelles Update via statusRequest-Befehl ist dennoch m&ouml;glich.
<br><br>
M&ouml;gliche Werte: 0 => zyklische Status-Updates, 1 => keine zyklischen Status-Updates.<br><br>
<li><a name="request-timeout">request-timeout</a></li>
Optionales Attribut. Maximale Dauer einer Anfrage in Sekunden zum Player.
<br><br>
M&ouml;gliche Werte: 1-5 Sekunden. Standartwert ist 4 Sekunden<br><br>
</ul>
<b>Generierte Readings/Events:</b><br>
<ul>
<li><b>input</b> - Die aktuelle Wiedergabequelle ("DISC", "USB" oder "Network")</li>
<li><b>discType</b> - Die Art der eingelegten Disc (z.B "No Disc" => keine Disc eingelegt, "CD", "DVD", "BD",...)</li>
<li><b>error</b> - zeigt an, ob ein interner Fehler im Player vorliegt ("none" => kein Fehler, "fan error" => L&uuml;fterdefekt, "usb overcurrent" => USB Spannungsschutz)</li>
<li><b>power</b> - Der aktuelle Betriebsstatus ("on" => an, "off" => aus)</li>
<li><b>presence</b> - Die aktuelle Empfangsbereitschaft ("present" => empfangsbereit, "absent" => nicht empfangsbereit, z.B. Stromausfall)</li>
<li><b>trayStatus</b> - Der Status der Schublade("open" => ge&ouml;ffnet, "close" => geschlossen)</li>
<li><b>state</b> - Der aktuelle Schaltzustand (power-Reading) oder die Abwesenheit des Ger&auml;tes (m&ouml;gliche Werte: "on", "off" oder "absent")</li>
<br><br><u>Quellenabh&auml;ngige Readings/Events:</u><br>
<li><b>currentChapter</b> - Das aktuelle Kapitel eines DVD- oder Blu-Ray-Films</li>
<li><b>currentMedia</b> - Der Name der aktuell wiedergebenden Datei (Nur bei der Wiedergabe &uuml;ber USB)</li>
<li><b>playTimeCurrent</b> - Der aktuelle Timecode an dem sich die Wiedergabe momentan befindet.</li>
<li><b>playTimeTotal</b> - Die komplette Spieldauer des aktuellen Films (Nur bei der Wiedergabe von DVD/BD's)</li>
<li><b>playStatus</b> - Wiedergabestatus des aktuellen Mediums</li>
</ul>
<br>
<b>Hinweise des Autors</b>
<ul>
<li>Einige &auml;ltere Player-Modelle (z.B. BD-S671) k&ouml;nnen im Auslieferungszustand nicht via Netzwerk gesteuert werden. Um eine Steuerung via FHEM zu erm&ouml;glichen ist ein <u><b>Firmware-Update notwending</b></u>!</li>
<li>Dieses Modul ist nur nutzbar, wenn die Option "Netzwerksteuerung" am Player aktiviert ist. Ansonsten ist die Steuerung nicht m&ouml;glich.</li>
</ul>
<br>
</ul>
<a name="ZWDongle"></a>
<h3>ZWDongle</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#ZWDongle'>ZWDongle</a><br/>
</ul>
<a name="ZWave"></a>
<h3>ZWave</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#ZWave'>ZWave</a><br/>
</ul>
<a name="apptime"></a>
<h3>apptime</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#apptime'>apptime</a><br/>
</ul>
<a name="at"></a>
<h3>at</h3>
<ul>
Startet einen beliebigen FHEM Befehl zu einem sp&auml;teren Zeitpunkt.<br>
<br>
<a name="atdefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; at &lt;timespec&gt; &lt;command&gt;</code><br>
<br>
<code>&lt;timespec&gt;</code> Format: [+][*{N}]&lt;timedet&gt;<br>
<ul>
Das optionale <code>+</code> zeigt, dass die Angabe <i>relativ</i> ist
(also zur jetzigen Zeit dazugez&auml;hlt wird).<br>
Das optionale <code>*</code> zeigt, dass die Ausf&uuml;hrung
<i>wiederholt</i> erfolgen soll.<br>
Das optionale <code>{N}</code> nach dem * bedeutet, dass der Befehl genau
<i>N-mal</i> wiederholt werden soll.<br>
&lt;timedet&gt; ist entweder HH:MM, HH:MM:SS oder {perlfunc()}, wobei
perlfunc HH:MM or HH:MM:SS zur&uuml;ckgeben muss. Hinweis: {perlfunc()}
darf keine Leerzeichen enthalten.
</ul>
<br>
Beispiele:
<PRE>
# Absolute Beispiele:
define a1 at 17:00:00 set lamp on # fhem Befehl
define a2 at 17:00:00 { Log 1, "Teatime" } # Perl Befehl
define a3 at 17:00:00 "/bin/echo "Teatime" > /dev/console" # shell Befehl
define a4 at *17:00:00 set lamp on # Jeden Tag
# Realtive Beispiele:
define a5 at +00:00:10 set lamp on # Einschalten in 10 Sekunden
define a6 at +00:00:02 set lamp on-for-timer 1 # Einmal blinken in 2 Sekunden
define a7 at +*{3}00:00:02 set lamp on-for-timer 1 # Blinke 3 mal
# Blinke 3 mal wenn piri einen Befehl sendet
define n1 notify piri:on.* define a8 at +*{3}00:00:02 set lamp on-for-timer 1
# Lampe von Sonnenuntergang bis 23:00 Uhr einschalten
define a9 at +*{sunset_rel()} set lamp on
define a10 at *23:00:00 set lamp off
# Elegantere Version, ebenfalls von Sonnenuntergang bis 23:00 Uhr
define a11 at +*{sunset_rel()} set lamp on-till 23:00
# Nur am Wochenende ausf&uuml;hren
define a12 at +*{sunset_rel()} { fhem("set lamp on-till 23:00") if($we) }
# Schalte lamp1 und lamp2 ein von 7:00 bis 10 Minuten nach Sonnenaufgang
define a13 at *07:00 set lamp1,lamp2 on-till {sunrise(+600)}
# Schalte lamp jeden Tag 2 Minuten nach Sonnenaufgang aus
define a14 at +{sunrise(+120)} set lamp on
# Schalte lamp1 zum Sonnenuntergang ein, aber nicht vor 18:00 und nicht nach 21:00
define a15 at *{sunset(0,"18:00","21:00")} set lamp1 on
</PRE>
Hinweise:<br>
<ul>
<li>wenn kein <code>*</code> angegeben wird, wird der Befehl nur einmal
ausgef&uuml;hrt und der entsprechende <code>at</code> Eintrag danach
gel&ouml;scht. In diesem Fall wird der Befehl im Statefile gespeichert
(da er nicht statisch ist) und steht nicht im Config-File (siehe auch <a
href="#save">save</a>).</li>
<li>wenn die aktuelle Zeit gr&ouml;&szlig;er ist als die angegebene Zeit,
dann wird der Befehl am folgenden Tag ausgef&uuml;hrt.</li>
<li>F&uuml;r noch komplexere Datums- und Zeitabl&auml;ufe muss man den
Aufruf entweder per cron starten oder Datum/Zeit mit perl weiter
filtern. Siehe hierzu das letzte Beispiel und das <a href="#perl">Perl
special</a>. </li>
</ul>
<br>
</ul>
<a name="atset"></a>
<b>Set</b> <ul>N/A</ul><br>
<a name="atget"></a>
<b>Get</b> <ul>N/A</ul><br>
<a name="atattr"></a>
<b>Attribute</b>
<ul>
<a name="disable"></a>
<li>disable<br>
Deaktiviert das entsprechende Ger&aauml;t.<br>
Hinweis: Wenn angewendet auf ein <a href="#at">at</a>, dann wird der
Befehl nicht ausgef&uuml;hrt, jedoch die n&auml;chste
Ausf&uuml;hrungszeit berechnet.</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 Paaren. Falls die aktuelle Uhrzeit zwischen diesen
Werten f&auml;llt, dann wird die Ausf&uuml;hrung, wie beim disable,
ausgesetzt. Statt HH:MM kann man auch HH oder HH:MM:SS angeben.
Um einen Intervall um Mitternacht zu spezifizieren, muss man zwei
einzelne angeben, z.Bsp.:
<ul>
23:00-24:00 00:00-01:00
</ul>
</li><br>
<a name="skip_next"></a>
<li>skip_next<br>
Wird bei at Befehlen verwendet um die n&auml;chste Ausf&uuml;hrung zu
&uuml;berspringen</li><br>
<a name="alignTime"></a>
<li>alignTime<br>
Nur f&uuml;r relative Definitionen: Stellt den Zeitpunkt der
Ausf&uuml;hrung des Befehls so, dass er auch zur alignTime
ausgef&uuml;hrt wird. Dieses Argument ist ein timespec. Siehe oben
f&uuml; die Definition<br>
Beispiel:<br>
<ul>
# Stelle sicher das es gongt wenn eine neue Stunde beginnt.<br>
define at2 at +*01:00 set Chime on-for-timer 1<br>
attr at2 alignTime 00:00<br>
</ul>
</li><br>
</ul>
<br>
</ul>
<a name="autocreate"></a>
<h3>autocreate</h3>
<ul>
Erzeugt f&uuml;r noch nicht definierte fhem-Ger&auml;te automatisch die
geignete Definition (define). Diese Definition wird aus einer Nachricht
gewonnen, die von diesen neuen Ger&auml;ten empfangen wurde. Hinweis:
Ger&auml;te, die mit Polling arbeiten (wie z.B. der Zugriff auf EMEM/EMWZ
&uuml;ber EM1010PC) werden NICHT automatisch erzeugt.
<br><br>
<a name="autocreatedefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; autocreate</code><br>
<br>
<ul>
Durch die Definition dieser Instanz wird das globale Attribut <a
href="#autoload_undefined_devices">autoload_undefined_devices</a>
gesetzt, sodass die Module f&uuml;r unbekannte Ger&auml;te automatisch
nachgeladen werden. Das autocreate-Modul interpretiert das
UNDEFINED-event, welches von jedem Modul gestartet wird, erzeugt ein
Ger&auml;t (device) und bei Bedarf ein FileLog sowie
SVG-Eintr&auml;ge.<br>
<b>Hinweis 1:</b> Ger&auml;te werden mit einem eindeutigen Namen erzeugt,
der den Typ und eine individuelle ID f&uuml;r diesen Typ enth&auml;lt.
Wird ein Ger&auml;t umbenannt (<a href="#rename">rename</a>), wird
gleichzeitig das automatisch erzeugte FileLog und die SVG Ger&auml;te
unbenannt.<br>
<b>Hinweis 2:</b> Durch das Setzen des <a
href="#disable">disable</a>-Attributes kann die automatische Erzeugung
ausgeschaltet werden. In diesem Fall ist ausschlie&szlig;lich die oben
erl&auml;uterte Umbenennung aktiv. Der <a
href="#createlog">createlog</a>-Befehl kann zum Hinzuf&uuml;gen von
FileLog und SVG eines bereits definierten Ger&auml;tes benutzt werden.
<br>
<b>Hinweis 3:</b>Es macht keinen Sinn, die Instanz dieses Moduls mehrmals
zu erzeugen.
</ul>
<br>
Beispiel:<PRE>
define autocreate autocreate
attr autocreate autosave
attr autocreate device_room %TYPE
attr autocreate filelog test2/log/%NAME-%Y.log
attr autocreate weblink
attr autocreate weblink_room Plots
</PRE>
</ul>
<a name="autocreateset"></a>
<b>Set</b> <ul>N/A</ul><br>
<a name="autocreateget"></a>
<b>Get</b> <ul>N/A</ul><br>
<a name="autocreateattr"></a>
<b>Attribute</b>
<ul>
<a name="autosave"></a>
<li>autosave<br>
Nach der Erzeugung eines neuen Ger&auml;tes wird automatisch die
Konfigurationsdatei mit dem Befehl <a href="#save">save</a>
gespeichert. Der Standardwert ist 1 (d.h. aktiviert), eine 0 schaltet
die automatische Speicherung aus.</li><br>
<a name="device_room"></a>
<li>device_room<br>
"Schiebt" das neu erstellte Ger&auml;t in diesen Raum. Der Name kann
die Wildcards %NAME und %TYPE enthalten, siehe oben stehendes
Beispiel.</li><br>
<a name="filelogattr"></a>
<li>filelog<br>
Erstellt ein Filelog welches zu einem Ger&auml;t geh&ouml;rt. Der
Dateiname darf die Wildcards %NAME und %TYPE enthalten, siehe oben
stehendes Beispiel. Das Filelog wird in den gleichen Raum "geschoben"
wie das zugeh&ouml;rige Ger&auml;t.</li><br>
<a name="weblinkattr"></a>
<li>weblink<br>
Erzeugt ein SVG, welches mit dem Ger&auml;t/Filelog verkn&uuml;pft
ist.</li><br>
<a name="weblink_room"></a>
<li>weblink_room<br>
"Schiebt" das neu erstellte SVG in den bezeichneten Raum. Der Name kann
die Wildcards %NAME und %TYPE enthalten, siehe oben stehendes
Beispiel.</li><br>
<li><a href="#disable">disable</a></li>
<br>
<a name="ignoreTypes"></a>
<li>ignoreTypes<br>
Dies ist ein Regexp, um bestimmte Ger&auml;te zu ignorieren, z.b. der
Funk-Heizungsthermostat (FHT) des Nachbarn. In dem Ausdruck k&ouml;nnen
mehr als ein Ger&auml;t &uuml;ber die normale Regexp-Syntax angegeben
werden.<br>
Beispiel:<br>
<code>
attr autocreate ignoreTypes CUL_HOERMANN.*|FHT_1234|CUL_WS_7
</code>
</li>
</ul>
<br>
<a name="createlog"></a>
<b>createlog</b>
<ul>
Dieser Befehl wird f&uuml;r ein manuelles Hinzuf&uuml;gen eines Logfile
oder eines SVG zu einem vorhandenen Ger&auml;t verwendet.
<br><br>
Dieser Befehl ist Bestandteilteil des autocreate-Modules.
</ul>
<br>
<a name="usb"></a>
<b>usb</b>
<ul>
Verwendung:
<ul><code>
usb scan<br>
usb create<br>
</code></ul>
Dieser Befehl durchsucht das /dev-Verzeichnis nach angeschlossenen
USB-Ger&auml;ten und versucht gleichzeitig sie zu identifizieren. Mit dem
Argument scan wird eine Liste von ausf&uuml;hrbaren fhem-Befehlen
zur&uuml;ckgegeben. Das Argument create gibt keine Liste o.&auml;.
zur&uuml;ck, die Ger&auml;te werden stattdessen erzeugt.<br><br>
Es ist zu beachten, dass ein CUL immer noch manuell in den
HomeMatic-Modus umgeschaltet werden muss. <br><br>
Unter Linux wird gleichzeitig mit dem lsusb-befehl &uuml;berpr&uuml;ft,
ob nichtgeflashte CULs angeschlossen sind. Ist dies der Fall, ruft Linux
CULflash mit den geeigneten Parametern auf (oder zeigt den
CULflash-Befehl an, falls scan aufgef&uuml;hrt wurde).
Pro usb Befehl wird nur ein Ger&auml;t geflasht.<br><br>
Dieser Befehl ist Bestandteilteil des autocreate-Modules.
</ul>
</ul> <!-- End of autocreate -->
<br>
<a name="average"></a>
<h3>average</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#average'>average</a><br/>
</ul>
<a name="backup"></a>
<h3>backup</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#backup'>backup</a><br/>
</ul>
<a name="cloneDummy"></a>
<h3>cloneDummy</h3>
<ul>
Definiert einen Clon eines Devices oder von FHEM2FHEM im Logmodus uebergebenen Devices und uebernimmt dessen Readings.
Sinnvoll um entfernte FHEM-Installationen lesend einzubinden, zum Testen oder Programmieren.
<br><br>
<a name="cloneDummydefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; cloneDummy &lt;Quelldevice&gt; [reading]</code>
<br><br>
Aktiviert den cloneDummy, der dann an das Device &lt;Quelldevice&gt; gebunden ist. Mit dem optionalen Parameter reading
wird bestimmt, welches reading im STATE angezeigt wird, stateFormat ist auch weiterhin möglich.
<ul>
Beispiel: Der cloneDummy wird lesend an den Sensor OWX_26_09FF26010000 gebunden und zeigt im State temperature an.
</ul>
<ul>
<code>define Feuchte cloneDummy OWX_26_09FF26010000 temperature</code><br>
</ul>
</ul>
<br>
<a name="cloneDummyset"></a>
<b>Set</b> <ul>N/A</ul><br>
<a name="cloneDummyget"></a>
<b>Get</b> <ul>N/A</ul><br>
<a name="cloneDummyattr"></a>
<b>Attributes</b>
<ul>
<li>clonIgnore<br>
Eine durch Kommata getrennte Liste der readings, die cloneDummy nicht in eigene readings umwandelt
</li><br>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
</ul>
<br>
</ul>
<a name="cmdalias"></a>
<h3>cmdalias</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#cmdalias'>cmdalias</a><br/>
</ul>
<a name="configDB"></a>
<h3>configDB</h3>
<ul>
configDB ist die Funktionsbibliothek f&uuml;r die Konfiguration aus einer SQL Datenbank.<br/>
Die ausf&uuml;hrliche Dokumentation findet sich in der <a href="#configdb">configdb Befehlsbeschreibung</a>.
</ul>
<a name="configdb"></a>
<h3>configdb</h3>
<ul>
Seit version 5079 unterst&uuml;tzt fhem die Verwendung einer SQL Datenbank zum Abspeichern der kompletten Konfiguration<br/>
Dadurch kann man auf alle cfg Dateien, includes usw. verzichten und die daraus immer wieder resultierenden Probleme vermeiden.<br/>
Desweiteren gibt es damit eine Versionierung von Konfigurationen und die M&ouml;glichkeit,
jederzeit eine &auml;ltere Version wiederherstellen zu k&ouml;nnen.<br/>
Der Zugriff auf die Datenbank erfolgt &uuml;ber die perl-eigene Datenbankschnittstelle DBI.<br/>
<br/>
<b>Voraussetzungen / Installation</b><br/>
<ul><br/>
<li>Bitte das perl Paket Text::Diff installieren, falls noch nicht auf dem System vorhanden.</li><br/>
<li>Es muss eine SQL Datenbank verf&uuml;gbar sein, untsrst&uuml;tzt werden SQLITE, MYSQL und POSTGRESQLL.</li><br/>
<li>Das zum Datenbanktype geh&ouml;rende DBD Modul muss in perl installiert sein,<br/>
f&uuml;r sqlite3 auf einem Debian System z.B. das Paket libdbd-sqlite3-perl</li><br/>
<li>Eine leere Datenbank muss angelegt werden, z.B. in sqlite3:<br/>
<pre>
mba:fhem udo$ sqlite3 configDB.db
SQLite version 3.7.13 2012-07-17 17:46:21
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> pragma auto_vacuum=2;
sqlite> .quit
mba:fhem udo$
</pre></li>
<li>Die ben&ouml;tigten Datenbanktabellen werden automatisch angelegt.</li><br/>
<li>Eine Konfigurationsdatei f&uuml;r die Verbindung zur Datenbank muss angelegt werden.<br/>
<br/>
<b>WICHTIG:</b>
<ul><br/>
<li>Diese Datei <b>muss</b> den Namen "configDB.conf" haben</li>
<li>Diese Datei <b>muss</b> im fhem Verzeichnis liegen, z.B. /opt/fhem</li>
</ul>
<br/>
<pre>
## f&uuml;r MySQL
################################################################
#%dbconfig= (
# connection => "mysql:database=configDB;host=db;port=3306",
# user => "fhemuser",
# password => "fhempassword",
#);
################################################################
#
## f&uuml;r PostgreSQL
################################################################
#%dbconfig= (
# connection => "Pg:database=configDB;host=localhost",
# user => "fhemuser",
# password => "fhempassword"
#);
################################################################
#
## f&uuml;r SQLite (username and password bleiben bei SQLite leer)
################################################################
#%dbconfig= (
# connection => "SQLite:dbname=/opt/fhem/configDB.db",
# user => "",
# password => ""
#);
################################################################
</pre></li><br/>
</ul>
<b>Aufruf mit einer vollst&auml;ndig neuen fhem Installation</b><br/>
<ul><br/>
Sehr einfach... fhem muss lediglich folgendermassen gestartet werden:<br/><br/>
<ul><code>perl fhem.pl configDB</code></ul><br/>
<b>configDB</b> ist das Schl&uuml;sselwort, an dem fhem erkennt, <br/>
dass eine Datenbank f&uuml;r die Konfiguration verwendet werden soll.<br/>
<br/>
<b>Das war es schon.</b> Alle Befehle (save, rereadcfg etc) arbeiten wie gewohnt.
</ul>
<br/>
<b>oder:</b><br/>
<br/>
<b>&uuml;bertragen einer bestehenden fhem Konfiguration in die Datenbank</b><br/>
<ul><br/>
Auch sehr einfach... <br/>
<br/>
<li>fhem wird zum letzten Mal mit der fhem.cfg gestartet<br/><br/>
<ul><code>perl fhem.pl fhem.cfg</code></ul></li><br/>
<br/>
<li>Bestehende Konfiguration in die Datenbank &uuml;bertragen<br/><br/>
<ul><code>configdb migrate</code><br/>
<br/>
in die Befehlszeile der fhem-Oberfl&auml;che eingeben</ul><br/></br>
Nicht die Geduld verlieren! Die Migration eine Weile dauern, speziell bei Mini-Systemen wie<br/>
RaspberryPi or Beaglebone.<br/>
Am Ende der Migration wird eine aktuelle Datenbankstatistik angezeigt.<br/>
Die urspr&uuml;ngliche Konfigurationsdatei wird bei diesem Vorgang nicht angetastet.</li><br/>
<li>fhem beenden.</li><br/>
<li>fhem mit dem Schl&uuml;sselwort configDB starten<br/><br/>
<ul><code>perl fhem.pl configDB</code></ul></li><br/>
<b>configDB</b> ist das Schl&uuml;sselwort, an dem fhem erkennt, <br/>
dass eine Datenbank f&uuml;r die Konfiguration verwendet werden soll.<br/>
<br/>
<b>Das war es schon.</b> Alle Befehle (save, rereadcfg etc) arbeiten wie gewohnt.
</ul>
<br/><br/>
<b>Zus&auml;tzliche Funktionen</b><br/>
<ul><br/>
Es wird ein neuer Befehl <code>configdb</code> bereitgestellt,<br/>
der mit verschiedenen Parametern aufgerufen werden kann.<br/>
<br/>
<li><code>configdb attr [attribute] [value]</code></li><br/>
Hiermit lassen sich attribute setzen, die das Verhalten von Front- und Backend beeinflussen.<br/>
<br/>
<code> configdb attr private 1</code> - setzt das Attribut 'private' auf den Wert 1.<br/>
<br/>
<code> configdb attr private</code> - l&ouml;scht das Attribut 'private'<br/>
<br/>
<code> configdb attr</code> - zeigt alle gespeicherten Attribute<br/>
<br/>
Im Moment ist nur ein Attribut definiert. Wenn 'private' auf 1 gesetzt wird, werden bei 'configdb info' <br/>
keine Benutzer- und Passwortdaten angezeigt.<br/>
<br/>
<br/>
<li><code>configdb backup</code></li><br/>
Ersetzt den Standard-Backup-Befehl von fhem, da dieser bei Verwendung von configDB nicht mehr<br/>
zur Verf&uuml;gung steht.<br/>
<br/>
<b>Wichtig:</b><br/>
F&uuml;r die Sicherung der Datenbank ist der Anwender selbst verantwortlich!<br/>
Der backup Befehl kann diese Aufgabe nicht &uuml;bernehmen.<br/>
Ausnahme: Nutzer einer im fhem Verzeichnis liegenden sqlite Datenbank profitieren von der Einfachheit<br/>
dieser Datenbank, denn das fhem Verzeichnis wird ohnehin komplett gesichert.<br/>
<br/>
<li><code>configdb diff &lt;device&gt; &lt;version&gt;</code></li><br/>
Vergleicht die Konfigurationsdaten des Ger&auml;tes &lt;device&gt; aus der aktuellen Version 0 mit den Daten aus Version &lt;version&gt;<br/>
Beispielaufruf:<br/>
<br/>
<code>configdb diff telnetPort 1</code><br/>
<br/>
liefert ein Ergebnis &auml;hnlich dieser Ausgabe:
<pre>
compare device: telnetPort in current version 0 (left) to version: 1 (right)
+--+--------------------------------------+--+--------------------------------------+
| 1|define telnetPort telnet 7072 global | 1|define telnetPort telnet 7072 global |
* 2|attr telnetPort room telnet * | |
+--+--------------------------------------+--+--------------------------------------+</pre>
<li><code>configdb export &lt;zielDateiname&gt; [version];</code></li><br/>
Exportiert die angegebene Version aus der Konfigurationsdatenbank in die Datei &lt;zielDateiname&gt;<br/>
Standardversion, falls nicht angegeben = 0<br/>
Die Zieldatei kann sp&auml;ter f&uuml;r die Wiederherstellung verwendet werden.<br/>
<br/>
<li><code>configdb info</code></li><br/>
Liefert eine Datenbankstatistik<br/>
<pre>
--------------------------------------------------------------------------------
configDB Database Information
--------------------------------------------------------------------------------
dbconn: SQLite:dbname=/opt/fhem/configDB.db
dbuser:
dbpass:
dbtype: SQLITE
--------------------------------------------------------------------------------
fhemconfig: 7707 entries
Ver 0 saved: Sat Mar 1 11:37:00 2014 def: 293 attr: 1248
Ver 1 saved: Fri Feb 28 23:55:13 2014 def: 293 attr: 1248
Ver 2 saved: Fri Feb 28 23:49:01 2014 def: 293 attr: 1248
Ver 3 saved: Fri Feb 28 22:24:40 2014 def: 293 attr: 1247
Ver 4 saved: Fri Feb 28 22:14:03 2014 def: 293 attr: 1246
--------------------------------------------------------------------------------
fhemstate: 1890 entries saved: Sat Mar 1 12:05:00 2014
--------------------------------------------------------------------------------
</pre>
Ver 0 bezeichnet immer die aktuell verwendete Konfiguration.<br/>
<br/>
<li><code>configdb list [device] [version]</code></li><br/>
Sucht das Ger&auml;t [device] in der Konfiguration der Version [version]<br/>
in der Datenbank.<br/>
Standardwert f&uuml;r [device] = % um alle Ger&auml;te anzuzeigen<br/>
Standardwert f&uuml;r [version] = 0 um Ger&auml;te in der aktuellen Version anzuzeigen.<br/>
Beispiele f&uuml;r g&uuml;ltige Aufrufe:<br/>
<br/>
<code>configdb list</code><br/>
<code>configdb list global</code><br/>
<code>configdb list '' 1</code><br/>
<code>configdb list global 1</code><br/>
<br/>
<li><code>configdb recover &lt;version&gt;</code></li><br/>
Stellt eine &auml;ltere Version aus dem Datenbankarchiv wieder her.<br/>
<code>set configDB recover 3</code> <b>kopiert</b> die Version #3 aus der Datenbank
zur Version #0.<br/>
Die urspr&uuml;ngliche Version #0 wird dabei gel&ouml;scht.<br/><br/>
<b>Wichtig!</b><br/>
Die zur&uuml;ckgeholte Version wird <b>NICHT</b> automatisch aktiviert!<br/>
Ein <code>rereadcfg</code> oder - besser - <code>shutdown restart</code> muss manuell erfolgen.<br/>
</ul>
<br/>
<br/>
<li><code>configdb reorg [keep]</code></li><br/>
L&ouml;scht alle gespeicherten Konfigurationen mit Versionsnummern gr&ouml;&szlig;er als [keep].<br/>
Standardwert f&uuml;r den optionalen Parameter keep = 3.<br/>
Mit dieser Funktion l&auml;&szlig;t sich eine n&auml;chtliche Reorganisation per at umsetzen.<br/>
<br/>
<li><code>configdb uuid</code></li><br/>
Liefert eine uuid, die man f&uuml;r eigene Zwecke verwenden kann.<br/>
<br/>
<b>Hinweise</b><br/>
<br/>
<ul>
<li>Im Verzeichnis contrib/configDB befinden sich zwei Vorlagen f&uuml;r Datenbank und Konfiguration,<br/>
die durch einfaches Kopieren in das fhem Verzeichnis sofort verwendet werden k&ouml;nnen (Nur f&uuml;r sqlite!).</li>
<br/>
<li>Der Men&uuml;punkt "Edit files"-&gt;"config file" wird bei Verwendung von configDB nicht mehr angezeigt.</li>
<br/>
<li>Beim Speichern einer Konfiguration nicht ungeduldig werden (egal ob manuell oder durch Klicken auf "save config")<br/>
Durch das Schreiben der Versionsinformationen dauert das ein paar Sekunden.<br/>
Der Abschluss des Speichern wird durch eine entsprechende Meldung angezeigt.</li>
<br/>
<li>Diese Erweiterung wird laufend weiterentwickelt. Speziell an der Verbesserung der Performance wird gearbeitet.</li>
<br/>
<li>Viel Spass!</li>
</ul>
</ul>
<a name="dewpoint"></a>
<h3>dewpoint</h3>
<ul>
Berechnungen des Taupunkts. Es gibt drei Varianten, das Modul dewpoint zu verwenden: <br>
<ul>
<li><b>dewpoint</b>: Taupunkt<br>
Erzeugt ein zus&auml;tzliches Ereignis "dewpoint" aus Temperatur- und Luftfeuchtewerten eines F&uuml;hlers.</li>
<li><b>fan</b>: L&uuml;fter<br>
Erzeugt ein Ereignis, um einen L&uuml;fter einzuschalten, wenn die Au&szlig;enluft
weniger Wasser als die Raumluft enth&auml;lt.</li>
<li><b>alarm</b>: Alarm<br>
Erzeugt einen Schimmel-Alarm, wenn eine Referenz-Temperatur unter den Taupunkt f&auml;llt.</li>
</ul>
<br/>
<a name="dewpointdefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; dewpoint dewpoint &lt;devicename-regex&gt; [&lt;temp_name&gt;
&lt;hum_name&gt; &lt;new_name&gt;]</code><br>
<br/>
Berechnet den Taupunkt des Ger&auml;ts &lt;devicename-regex&gt; basierend auf Temperatur
und Luftfeuchte und erzeugt daraus ein neues Reading namens dewpoint.<br/>
Wenn &lt;temp_name&gt;, &lt;hum_name&gt; und &lt;new_name&gt; angegeben sind,
werden die Temperatur aus dem Reading &lt;temp_name&gt;, die Luftfeuchte aus dem
Reading &lt;hum_name&gt; gelesen und als berechneter Taupunkt ins Reading &lt;new_name&gt; geschrieben.<br>
Wenn &lt;temp_name&gt; T lautet, wird die Temperatur aus state T: H: benutzt
und &lt;new_name&gt; zu state hinzugef&uuml;gt.
<br/>
Beispiele:
<pre>
# Berechnet den Taupunkt aufgrund von Temperatur und Luftfeuchte
# in Ereignissen, die vom Ger&auml;t temp1 erzeugt wurden und erzeugt ein Reading dewpoint.
define dew_temp1 dewpoint dewpoint temp1
define dew_temp1 dewpoint dewpoint temp1 temperature humidity dewpoint
# Berechnet den Taupunkt aufgrund von Temperatur und Luftfeuchte
# in Ereignissen, die von allen Ger&auml;ten erzeugt wurden die diese Werte ausgeben
# und erzeugt ein Reading dewpoint.
define dew_all dewpoint dewpoint .*
define dew_all dewpoint dewpoint .* temperature humidity dewpoint
# Berechnet den Taupunkt aufgrund von Temperatur und Luftfeuchte
# in Ereignissen, die vom Ger&auml;t Aussen_1 erzeugt wurden und erg&auml;nzt
# mit diesem Wert den Status STATE.
define dew_state dewpoint dewpoint Aussen_1 T H D
# Berechnet den Taupunkt aufgrund von Temperatur und Luftfeuchte
# in Ereignissen, die von allen Ger&auml;ten erzeugt wurden die diese Werte ausgeben
# und erg&auml;nzt mit diesem Wert den Status STATE.
# Beispiel STATE: "T: 10 H: 62.5" wird ver&auml;ndert nach
# "T: 10 H: 62.5 D: 3.2"
define dew_state dewpoint dewpoint .* T H D
</pre>
<br/>
<br/>
<code>define &lt;name&gt; dewpoint fan &lt;devicename-regex&gt; &lt;devicename-outside&gt; &lt;min-temp&gt; [&lt;diff_temp&gt;]</code><br>
<br>
<ul>
<li>Erzeugt ein Ereignis, um einen L&uuml;fter einzuschalten, wenn die Au&szlig;enluft
weniger Wasser als die Raumluft enth&auml;lt.</li>
<li>Erzeugt das Ereignis "fan: on" wenn (Taupunkt von &lt;devicename-outside&gt;) +
&lt;diff_temp&gt; ist niedriger als der Taupunkt von &lt;devicename&gt; und die Temperatur
von &lt;devicename-outside&gt; &gt;= min-temp ist. Das Ereignis wird nur erzeugt wenn das
Reading "fan" nicht schon "on" war. Das Ereignis wird f&uuml;r das Ger&auml;t &lt;devicename&gt; erzeugt.
Der Parameter &lt;diff-temp&gt; ist optional.</li>
<li>Andernfalls wird das Ereignis "fan: off" erzeugt, wenn das Reading von "fan" nicht bereits "off" war.</li>
</ul>
<br>
Beispiel:
<pre>
# Erzeugt das Ereignis "fan: on", wenn der Taupunkt des Ger&auml;ts Aussen_1 zum ersten Mal
# niedriger ist als der Taupunkt des Ger&auml;ts basement_tempsensor und die
# Au&szlig;entemperatur &gt;= 0 ist und wechselt nach "fan: off" wenn diese Bedingungen nicht
# mehr zutreffen.
# Schaltet den Schalter fan_switch abh&auml;ngig vom Zustand ein oder aus.
define dew_fan1 dewpoint fan basement_tempsensor Aussen_1 0
define dew_fan1_on notify basement_tempsensor.*fan:.*on set fan_switch on
define dew_fan1_off notify basement_tempsensor.*fan:.*off set fan_switch off
</pre>
<code>define &lt;name&gt; dewpoint alarm &lt;devicename-regex&gt; &lt;devicename-reference&gt; &lt;diff-temp&gt;</code><br>
<br>
<ul>
<li>Erzeugt einen Schimmel-Alarm, wenn eine Referenz-Temperatur unter den Taupunkt f&auml;llt.</li>
<li>Erzeugt ein Reading/Ereignis "alarm: on" wenn die Temperatur von
&lt;devicename-reference&gt; - &lt;diff-temp&gt; unter den Taupunkt von
&lt;devicename&gt; f&auml;llt und das Reading "alarm" nicht bereits "on" ist.
Das Ereignis wird f&uuml;r &lt;devicename&gt; erzeugt.</li>
<li>Erzeugt ein Reading/Ereignis "alarm: off" wenn die Temperatur von
&lt;devicename-reference&gt; - &lt;diff-temp&gt; &uuml;ber den Taupunkt
von &lt;devicename&gt; steigt und das Reading "alarm" nicht bereits "off" ist.</li>
</ul>
<br>
Beispiel:
<pre>
# Es wird ein Anlegef&uuml;hler (Wandsensor) und ein Thermo-/Hygrometer (Raumf&uuml;hler)
# verwendet, um einen Alarm zu erzeugen, wenn die Wandtemperatur
# unter den Taupunkt der Luft f&auml;llt. In diesem Fall w&uuml;rde sich Wasser an der Wand
# niederschlagen (kondensieren), weil die Wand zu kalt ist.
# Der Schalter einer Sirene (alarm_siren) wird &uuml;ber ein notify geschaltet.
define dew_alarm1 dewpoint alarm roomsensor wallsensor 0
define roomsensor_alarm_on notify roomsensor.*alarm:.*on set alarm_siren on
define roomsensor_alarm_off notify roomsensor.*alarm:.*off set alarm_siren off
# Ohne Wandsensor l&auml;sst sich auch der Taupunkt eines Raums mit der Temperatur desselben
# (oder eines anderen) F&uuml;hlers vergleichen.
# Die Alarmtemperatur ist 5 Grad niedriger gesetzt als die des Vergleichsthermostats.
define dev_alarm2 dewpoint alarm roomsensor roomsensor 5
</pre>
</ul>
<a name="dewpointset"></a>
<b>Set</b> <ul>N/A</ul><br>
<a name="dewpointget"></a>
<b>Get</b> <ul>N/A</ul><br>
<a name="dewpointattr"></a>
<b>Attributes</b>
<ul>
<li><a href="#disable">disable</a></li>
<li>max_timediff</li><br>
<ul>
Maximale erlaubter Zeitunterschied in Sekunden zwischen den Temperatur- und Luftfeuchtewerten eines
Ger&auml;ts. dewpoint verwendet Readings von Temperatur oder Luftfeuchte wenn sie nicht im Ereignis
mitgeliefert werden. Das ist sowohl f&uuml;r den Betrieb mit event-on-change-reading n&ouml;tig
als auch bei Sensoren die Temperatur und Luftfeuchte in getrennten Ereignissen kommunizieren
(z.B. Technoline Sensoren TX3TH).<br/>
Der Standardwert ist 1 Sekunde.
<br><br>
Beispiel:
<pre>
# Maximal erlaubter Zeitunterschied soll 60 Sekunden sein
define dew_all dewpoint dewpoint .*
attr dew_all max_timediff 60
</pre>
</ul>
</ul>
</ul>
<a name="dummy"></a>
<h3>dummy</h3>
<ul>
Definiert eine Pseudovariable, der mit <a href="#set">set</a> jeder beliebige
Wert zugewiesen werden kann. Sinnvoll zum Programmieren.
<br><br>
<a name="dummydefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; dummy</code>
<br><br>
Beispiel:
<ul>
<code>define myvar dummy</code><br>
<code>set myvar 7</code><br>
</ul>
</ul>
<br>
<a name="dummyset"></a>
<b>Set</b>
<ul>
<code>set &lt;name&gt; &lt;value&gt</code><br>
Weist einen Wert zu.
</ul>
<br>
<a name="dummyget"></a>
<b>Get</b> <ul>N/A</ul><br>
<a name="dummyattr"></a>
<b>Attributes</b>
<ul>
<li><a name="setList">setList</a><br>
Liste mit Werten durch Leerzeichen getrennt. Diese Liste wird mit "set
name ?" ausgegeben. Damit kann das FHEMWEB-Frontend Auswahl-Men&uuml;s
oder Schalter erzeugen.<br>
Beispiel: attr dummyName setList on off
</li>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
</ul>
<br>
</ul>
<a name="eventTypes"></a>
<h3>eventTypes</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#eventTypes'>eventTypes</a><br/>
</ul>
<a name="fheminfo"></a>
<h3>fheminfo</h3>
<ul>
<code>fheminfo [send]</code>
<br>
<br>
fheminfo zeigt Informationen &uuml;ber das System und FHEM Definitionen an.
<br>
<br>
Der optionale Parameter <code>send</code> &uuml;bertr&auml;gt die Informationen
an einen zentralen Server um die Entwicklung von FHEM zu unterst&uuml;tzen.
Die &uuml;bermittelten Daten werden grafisch aufbereitet und k&ouml;nnen auf
<a href="http://fhem.de/stats/statistics.cgi">http://fhem.de/stats/statistics.cgi</a>
abgerufen werden. Anhand der IP-Adresse wird der ungef&auml;hre Standort mit
einer Genauigkeit von ca. 40-80 km ermittelt. Die IP-Adresse wird nicht gespeichert.
<br>
<br>
Eigenschaften:<br>
<ul>
<li>Eingesetztes Betriebssystem</li>
<li>Hardware Architektur</li>
<li>Installierte Perl Version</li>
<li>Installierte FHEM release und "branch"</li>
<li>Definierte Module (nur offizielle FHEM Module werden ermittelt)</li>
<li>Definierte Modelle je Modul</li>
</ul>
<br>
Beispiel:
<pre>
fhem&gt; fheminfo
Fhem info:
Release : 5.3
Branch : DEVELOPMENT
OS : linux
Arch : i686-linux-gnu-thread-multi-64int
Perl : v5.14.2
uniqueID : 87c5cca38dc75a4f388ef87bdcbfbf6f
Defined modules:
ACU : 1
CUL : 1
CUL_FHTTK : 12
CUL_HM : 66
CUL_WS : 3
FHEM2FHEM : 1
FHEMWEB : 3
FHT : 9
[...]
at : 4
autocreate : 1
dummy : 23
notify : 54
structure : 3
telnet : 2
watchdog : 9
weblink : 17
Defined models per module:
CUL : CUN
CUL_FHTTK : FHT80TF
CUL_HM : HM-CC-TC,HM-CC-VD,HM-LC-DIM1T-CV,HM-LC-DIM1T-FM,HM-LC-SW1-PL,[...]
CUL_WS : S555TH
FHT : fht80b
FS20 : fs20pira,fs20s16,fs20s4a,fs20sd,fs20st
HMS : hms100-mg,hms100-tf,hms100-wd
KS300 : ks300
OWSWITCH : DS2413
</pre>
<br>
<a name="fheminfoattr"></a>
<b>Attribute</b>
<br>
<br>
Die folgenden Attribute werden nur in Verbindung mit dem Parameter
<code>send</code> genutzt. Sie werden über <code>attr global</code> gesetzt.
<br>
<br>
<ul>
<li>uniqueID<br>
Eine zuf&auml;llig generierte ID (16 Paare aus Hash Werten), z.B.
<code>87c5cca38dc75a4f388ef87bdcbfbf6f</code> welche den &uuml;bertragenen Daten
zur Vermeidung von doppelten Eintr&auml;ge zugewiesen wird.
<br>
Die <code>uniqueID</code> wird automatisch in einer Datei namens <code>FHemUtils/uniqueID</code>
im FHEM Modulverzeichnis gespeichert.
<br>
<strong>WICHTIGER HINWEIS:</strong>
<br>
Jede Installation von FHEM sollte seine eigene eindeutige ID haben.
<br>
Bitte diese Datei nicht ver&auml;ndern, verschieben oder l&ouml;schen! Diese Datei sollte
immer gesichert (wird normalerweise automatisch durch den <code>update</code> Befehl
erledigt) und bei einer Neuinstallation auf der gleichen Hardware im gleichen Verzeichnis
(<code>FhemtUtils</code> im FHEM Modulverzeichnis) wieder hergestellt werden. Dies verhindert
doppelte Eintr&auml;ge identischer Installationen auf der gleichen Hardware in der Statistik.
<br>
Anderfalls, sollten bitte f&uuml;r jede Installation auf unterschiedlicher Hardware eigene
IDs genutzt werden, z.B. eine zuf&auml;llig erzeugte ID f&uuml;r FRITZ!Box, eine weitere f&uuml;r
den ersten Raspberry Pi, eine weitere f&uuml;r einen zweiten Raspberry Pi, usw.
<br>
Vielen Dank f&uuml;r die Unterst&uuml;tzung!
</li>
<br>
<li>sendStatistics<br>
Dieses Attribut wird in Verbindung mit dem <code>update</code> Befehl verwendet.
<br>
<code>onUpdate</code>: &Uuml;bertr&auml;gt die Daten bei jedem Update (empfohlene Einstellung).
<br>
<code>manually</code>: Manuelle &Uuml;bertr&auml;gung der Daten &uuml;ber <code>fheminfo send</code>.
<br>
<code>never</code>: Verhindert die &Uuml;bertr&auml;gung der Daten.
</li>
<br>
</ul>
</ul>
<a name="geodata"></a>
<h3>geodata</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#geodata'>geodata</a><br/>
</ul>
<a name="holiday"></a>
<h3>holiday</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#holiday'>holiday</a><br/>
</ul>
<a name="mailcheck"></a>
<h3>mailcheck</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#mailcheck'>mailcheck</a><br/>
</ul>
<a name="netatmo"></a>
<h3>netatmo</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#netatmo'>netatmo</a><br/>
</ul>
<a name="notice"></a>
<h3>notice</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#notice'>notice</a><br/>
</ul>
<a name="notify"></a>
<h3>notify</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#notify'>notify</a><br/>
</ul>
<a name="openweathermap"></a>
<h3>openweathermap</h3>
<ul>
Sorry, keine deutsche Dokumentation vorhanden.<br/><br/>
Die englische Doku gibt es hier: <a href='http://fhem.de/commandref.html#openweathermap'>openweathermap</a><br/>
</ul>
<a name="panStamp"></a>
<h3>panStamp</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#panStamp'>panStamp</a><br/>
</ul>
<a name="pilight"></a>
<h3>pilight</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#pilight'>pilight</a><br/>
</ul>
<a name="rain"></a>
<h3>rain</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#rain'>rain</a><br/>
</ul>
<a name="readingsGroup"></a>
<h3>readingsGroup</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#readingsGroup'>readingsGroup</a><br/>
</ul>
<a name="readingsProxy"></a>
<h3>readingsProxy</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#readingsProxy'>readingsProxy</a><br/>
</ul>
<a name="remotecontrol"></a>
<h3>remotecontrol</h3>
<ul>
Erzeugt eine graphische Fernbedienung. Buttons (=icons) können frei ausgewählt und angeordnet werden. Vordefinierte layouts sind verfügbar für z.B. Samsung-TV und iTunes.
Jeder "Knopfdruck" kann an das entsprechende fhem-Gerät weitergegeben werden.<br>
Weitere Erklaerungen finden sich im <a href="http://www.fhemwiki.de/wiki/Remotecontrol">Wiki-Eintrag</<>.<br>
<a name="remotecontroldefine"></a><br>
<b>Define</b>
<ul>
<code>define &lt;rc-name&gt; remotecontrol</code><br><br>
Typische Schritte zur Einrichtung:<br>
<table>
<tr><td><code>define rc1 remotecontrol</code></td><td><code># erzeugt eine "leere" remotecontrol</code></td></tr>
<tr><td><code>get rc1 layout</code></td><td><code># zeigt alle vorhandenen vordefinierten layouts an</code></td></tr>
<tr><td><code>set rc1 layout samsung</code></td><td><code># laedt das layout für SamsungTV</code></td></tr>
<tr><td><code>set rc1 makenotify myTV</code></td><td><code># erzeugt notify_rc1, das jeden Tastendruck an myTV weitergibt</code></td></tr>
<tr><td colspan="2"><b>Hinweis:</b>die Tastenbelegung kann jederzeit geaendert werden, ohne dass der weblink erneut erzeugt werden muss.</td></tr>
<tr><td><code>attr rc1 row15 VOLUP,VOLDOWN</code></td></tr>
</table>
</ul>
<a name="remotecontrolset"></a><br>
<b>Set</b>
<ul>
<li><code>set &lt;rc-name&gt; layout [delete|&lt;layoutname&gt;]</code><br>
<code>layout delete</code> loescht alle rowXX-Attribute<br>
<code>layout &lt;layoutname&gt;</code> laedt das vordefinierte layout in die rowXX-Attribute</li>
<li><code>set &lt;rc-name&gt; makeweblink [&lt;name&gt;]</code><br>
erzeugt einen weblink zur Anzeige der remotecontrol in FHEMWEB oder FLOORPLAN. Default-Name ist weblink_&lt;rc-name&gt; .</li>
<li><code>set rc1 makenotify mySamsungTV</code><br>
erzeugt <code>notify_rc1</code> das jeden Tastendruck an mySamsungTV zur Ausfuehrung weitergibt</li>
</ul>
<a name="remotecontrolattr"></a><br>
<b>Attribute</b>
<ul>
<li><a href="#loglevel">loglevel</a></li>
<li><a name="rc_iconpath">rc_iconpath</a><br>
Pfad für icons, default ist "icons" . Der Attribut-Wert wird für alle icon-Dateien verwendet ausser .svg .</li>
<li><a name="rc_iconprefix">rc_iconprefix</a><br>
Prefix für icon-Dateien, default ist "" . Der Attribut-Wert wird für alle icon-Dateien verwendet ausser .svg .</li>
<li>Note: Icon-Namen (Tasten-Bild-Datei-Namen) werden zusammengesetzt als fhem/&lt;rc_iconpath&gt;/&lt;rc_iconprefix&gt;&lt;command|image&gt;<br>
Fuer .svg -icons ist die Zugriffsfolge gemaess dem FHEMWEB-Attribut iconPath, default ist openautomation:fhemSVG:default .
</li>
<li><a name="rc_devStateIcon">rc_devStateIcon</a><br>
Zeigt das button-layout auf dem remotecontrol-device selbst in der FHEMWEB-Raumansicht an. Default ist 1, durch setzen auf 0 erscheint in der FHEMWEB-Raumansciht nicht das layout, sondern nur der Status "Initialized".</li>
<br>
<li><a href="#rowXX">rowXX</a><br>
<code>attr &lt;rc-name&gt; rowXX &lt;command&gt;[:&lt;image&gt;]</code><br>
Komma-separarierte Liste von Tasten/Icons je Tastaturzeile. Eine Tastaturzeile kann beliebig viele Tasten enthalten.</li><br>
<li>&lt;command&gt; ist der event, der bei Tastendruck ausgelöst wird. Gross/Kleinschreibung beachten.</li>
<li>&lt;image&gt; ist der Dateiname des als Taste angezeigten icons</li>
<li>Verwenden Sie je Taste</li>
<li>&lt;command&gt; wobei als Taste/icon <code><rc_iconprefix>&lt;command&gt;</code> angezeigt wird<br>
Beispiel:<br>
<code>attr rc1 rc_iconprefix black_btn_ # gilt für alle Tasten/icons</code><br>
<code>attr rc1 row00 VOLUP</code><br>
-> icon ist <code>black_btn_VOLUP</code>, ein Tastendruck erzeugt den event <code>VOLUP</code>
</li><br>
oder
<li>&lt;command&gt;:&lt;image&gt; wobei als Taste/icon &lt;rc_iconprefix&gt;&lt;image&gt; angezeigt wird.<br>
Beispiel:<br>
<code>attr rc1 row00 LOUDER:VOLUP</code><br>
icon ist black_btn_VOLUP, ein Tastendruck erzeugt den event LOUDER<br>
Beispiele:
<code>attr rc1 row00 1,2,3,TV,HDMI</code><br>
<code>attr rc2 row00 play:PLAY,pause:PAUSE,louder:VOLUP,quieter:VOLDOWN</code><br>
</li>
<li><b>Hinweis:</b> verwenden Sie :blank für eine 'leere Taste', oder z.B. :blank,:blank,:blank für eine Abstands-Leerzeile.</li>
</ul>
</ul>
<a name="sequence"></a>
<h3>sequence</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#sequence'>sequence</a><br/>
</ul>
<a name="speedtest"></a>
<h3>speedtest</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#speedtest'>speedtest</a><br/>
</ul>
<a name="structure"></a>
<h3>structure</h3>
<ul>
<br>
<a name="structuredefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; structure &lt;struct_type&gt; &lt;dev1&gt;
&lt;dev2&gt; ...</code> <br><br>
Mit dem Device "Structure" werden Strukturen/Zusammenstellungen von anderen
Devices erstellt um sie zu Gruppen zusammenzufassen. (Beispiel: im Haus
alles ausschalten) <br>
Die Liste der Devices die einer Struktur zugeordnet sind kann duch das
Kommando <code>addstruct / delstruct</code> im laufenden Betrieb
ver&auml;ndert werden. Es k&ouml;nnen sowohl einzelne Devices als auch
Gruppen von Devices (TYPE=FS20) zugef&uuml;gt werden. Jedes zugef&uuml;gt
Device erh&auml;lt zwei neue Attribute &lt;struct_type&gt;=&lt;name&gt;
sowie &lt;struct_type&gt;_map wenn es zu einer Struktur zugef&uuml;gt
wurde. Diese Attribute werden wieder automatisch entfernt, sobald das
Device von der Struktur entfernt wird.<br>
Eine Struktur kann ebenfalls zu einer anderen Struktur zugef&uuml;gt
werden. Somit k&ouml;nnen z b. kaskadierende Strukturen erstellt werden.
(Z.b. KG,EG,OG, Haus)
Beispiel:<br>
<ul>
<li>define Kueche structure room lampe1 lampe2</li>
<li>addstruct Kueche TYPE=FS20</li>
<li>delstruct Kueche lampe1</li>
<li>define house structure building kitchen living</li>
<li>set house off</li>
</ul>
<br>
</ul>
<br>
<a name="structureset"></a>
<b>Set</b>
<ul>
Jedes set Kommando wird an alle Devices dieser Struktur weitergegeben.<br>
Aussnahme: das Attribut structexclude ist in einem Device definiert und
dessen Attributwert matched als Regexp zum Namen der aktuellen Struktur.<br>
Wenn das set Kommando diese Form hat <code>set &lt;structure&gt; [FILTER=&lt;filter&gt;] &lt;type-specific&gt;</code>
wird :FILTER=&lt;filter&gt; bei der Weitergebe der set an jeden Devicenamen wie folgt angehängt:
<code>set <devN>:FILTER=&lt;filter&gt; &lt;type-specific&gt;</code>
</ul>
<br>
<a name="structureget"></a>
<b>Get</b>
<ul>
Get wird im Structur-Device nicht unterst&uuml;tzt.
</ul>
<br>
<a name="structureattr"></a>
<b>Attribute</b>
<ul>
<a name="clientstate_behavior"></a>
<li>clientstate_behavior<br>
Der Status einer Struktur h&auml;ngt von den Stati der zugef&uuml;gten
Devices ab. Dabei wird das propagieren der Stati der Devices in zwei
Gruppen klassifiziert und mittels diesem Attribut definiert:
<ul>
<li>absolute<br>
Die Struktur wird erst dann den Status der zugef&uuml;gten Devices
annehmen, wenn alle Devices einen identischen Status vorweisen. Bei
unterschiedlichen Devictypen kann dies per Attribut
&lt;struct_type&gt;_map pro Device beinflusst werden. Andernfalls hat
die Struktur den Status "undefined".
</li>
<li>relative<br>
S.u. clientstate_priority.
</li>
<li>relativeKnown<br>
wie relative, reagiert aber nicht auf unbekannte, in
clientstate_priority nicht beschriebene Ereignisse. Wird f&uuml;r
HomeMatic Ger&auml;te ben&ouml;tigt.
</li>
<li>last<br>
Die Struktur &uuml;bernimmt den Status des zuletzt ge&auml;nderten
Ger&auml;tes.
</li>
</ul>
</li>
<a name="clientstate_priority"></a>
<li>clientstate_priority<br>
Wird die Struktur auf ein relatives Verhalten eingestellt, so wird die
Priorit&auml;t der Devicestati &uuml;ber das Attribut
<code>clientstate_priority</code> beinflusst. Die Priorit&auml;ten sind
in absteigender Reihenfolge anzugeben. Dabei k&ouml;nnen Gruppen mit
identischer Priorit&auml;t angegeben werden, um zb. unterschiedliche
Devicetypen zusammenfassen zu k&ouml;nnen. Jede Gruppe wird durch
Leerzeichen oder /, jeder Eintrag pro Gruppe durch Pipe getrennt. Der
Status der Struktur ist der erste Eintrag in der entsprechenden Gruppe.
<br>Beispiel:
<ul>
<li>attr kueche clientstate_behavior relative</li>
<li>attr kueche clientstate_priority An|On|on Aus|Off|off</li>
<li>attr haus clientstate_priority Any_On|An All_Off|Aus</li>
</ul>
In diesem Beipiel nimmt die Struktur <code>kueche</code>entweder den
Status <code>An</code> oder <code>Aus</code> an. Die Struktur
<code>haus</code> nimmt entweder den Status <code>Any_on</code> oder
<code>All_off</code> an. Sobald ein Device der Struktur
<code>haus</code> den Status <code>An</code> hat nimmt die Struktur den
Status <code>Any_On</code> an. Um dagegen den Status <code>All_off</code>
anzunehmen, m&uuml;ssen alle Devices dieser Struktur auf <code>off</code>
stehen.
</li>
<li>&lt;struct_type&gt;_map<br>
Mit diesem Attribut, das dem Struktur-<b>Mitglied</b> zugewiesen werden
muss, koennen die Werte, die die einzelnen Struktur- Mitglieder melden,
umdefiniert werden, damit man unterschiedliche Geraeteklassen
zusammenfassen kann. Es existieren drei Varianten:
<ul>
<li>readingName<br>
nehme den Wert von readingName anstatt von state
</li>
<li>oldVal:newVal<br>
falls der Wert der state Reading oldVal (als regex) ist, dann ersetze
diesen mit newVal.
</li>
<li>readingName:oldVal:newVal<br>
falls der Wert der readingName oldVal (als regex) ist, dann ersetze
diesen mit newVal.
</li>
</ul>
Beispiel:<br>
<ul>
<li>define tuer OWSWITCH &lt;ROMID&gt</li>
<li>define lampe1 dummy</li>
<li>attr lampe1 cmdlist on off</li>
<li>define kueche structure struct_kitchen lamp1 door</li>
<li>attr kueche clientstate_priority An|on OK|Aus|off</li>
<li>attr lampe1 struct_kitchen_map on:An off:Aus</li>
<li>attr tuer struct_kitchen_map A:open:on A:closed:off</li>
<li>attr tuer2 struct_kitchen_map A</li>
</ul>
</li>
<li>structexclude<br>
Bei gesetztem Attribut wird set, attr/deleteattr ignoriert. Dies
trifft ebenfalls auf die Weitergabe des Devicestatus an die Struktur zu.
Fuer set und fuer die Status-Weitergabe muss der Wert den Strukturnamen
matchen, bei einem Attribut-Befehl die Kombination
Strukturname:Attributname.
Beispiel:
<ul>
<code>
define kitchen structure room lamp1 lamp2<br>
attr lamp1 structexclude kitchen<br>
attr lamp1 structexclude kitchen:stateFormat<br>
</code>
</ul>
</li>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
</ul>
<br>
</ul>
<a name="telnet"></a>
<h3>telnet</h3>
<ul>
<br>
<a name="telnetdefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; telnet &lt;portNumber&gt; [global]</code><br>
oder<br>
<code>define &lt;name&gt; telnet &lt;servername&gt:&lt;portNummer&gt;</code>
<br><br>
Erste Form, <b>Server</b>-mode:<br>
&Uuml;berwacht den TCP/IP-Port <code>&lt;portNummer&gt;</code> auf
ankommende Verbindungen. Wenn der zweite Parameter gobal <b>nicht</b>
angegeben wird, wird der Server nur auf Verbindungen von localhost achten.
<br>
F&uuml;r den Gebrauch von IPV6 muss die Portnummer als IPV6:&lt;nummer&gt;
angegeben werden, in diesem Fall wird das Perl-Modul IO::Socket:INET6
angesprochen. Unter Linux kann es sein, dass dieses Modul mittels cpan -i
IO::Socket::INET6 oder apt-get libio-socket-inet6-perl nachinstalliert werden
muss; OSX und Fritzbox-7390 enthalten bereits dieses Modul.<br>
Beispiele:
<ul>
<code>define tPort telnet 7072 global</code><br>
<code>attr tPort globalpassword mySecret</code><br>
<code>attr tPort SSL</code><br>
</ul>
Hinweis: Das alte (pre 5.3) "global attribute port" wird automatisch in
eine telnet-Instanz mit dem Namen telnetPort umgewandelt. Im Rahmen dieser
Umwandlung geht das globale Attribut allowfrom verloren.
<br><br>
Zweite Form, <b>Client</b>-mode:<br>
Verbindet zu einem angegebenen Server-Port und f&uuml;hrt die von dort aus
empfangenen Anweisungen - genau wie im Server-mode - aus. Dies kann
verwendet werden, um sich mit einer fhem-Instanz, die sich hinter einer
Firewall befindet, zu verbinden, f&uuml;r den Fall, wenn das Installieren
von Ausnahmen in der Firewall nicht erw&uuml;nscht oder nicht m&ouml;glich
sind. Hinweis: Dieser Client-mode unterst&uuml;tzt zwar SSL, aber nicht
IPV6.<br>
Beispiel:
<ul>
Starten von tcptee auf einem &ouml;ffentlich erreichbaren Host ausserhalb
der Firewall:<ul>
<code>perl contrib/tcptee.pl --bidi 3000</code></ul>
Konfigurieren von fhem innerhalb der Firewall:<ul>
<code>define tClient telnet &lt;tcptee_host&gt;:3000</code></ul>
Verbinden mit fhem (hinter der Firewall) von ausserhalb der Firewall:<ul>
<code>telnet &lt;tcptee_host&gt; 3000</code></ul>
</ul>
</ul>
<br>
<a name="telnetset"></a>
<b>Set</b> <ul>N/A</ul><br>
<a name="telnetget"></a>
<b>Get</b> <ul>N/A</ul><br>
<a name="telnetattr"></a>
<b>Attribute</b>
<ul>
<a name="password"></a>
<li>password<br>
Bezeichnet ein Passwort, welches als allererster String eingegeben
werden muss, nachdem die Verbindung aufgebaut wurde. Wenn das Argument
in {} eingebettet ist, dann wird es als Perl-Ausdruck ausgewertet, und
die Variable $password mit dem eingegebenen Passwort verglichen. Ist
der zur&uuml;ckgegebene Wert wahr (true), wurde das Passwort
akzeptiert. Falls dieser Parameter gesetzt wird, sendet fhem
telnet IAC Requests, um ein Echo w&auml;hrend der Passworteingabe zu
unterdr&uuml;cken. Ebenso werden alle zur&uuml;ckgegebenen Zeilen mit
\r\n abgeschlossen.
Beispiel:<br>
<ul>
<code>
attr tPort password secret<br>
attr tPort password {"$password" eq "secret"}
</code>
</ul>
Hinweis: Falls dieses Attribut gesetzt wird, muss als erstes Argument
ein Passwort angegeben werden, wenn fhem.pl im Client-mode betrieben
wird:
<ul>
<code>
perl fhem.pl localhost:7072 secret "set lamp on"
</code>
</ul>
</li><br>
<a name="globalpassword"></a>
<li>globalpassword<br>
Entspricht dem Attribut password; ein Passwort wird aber
ausschlie&szlig;lich f&uuml;r nicht-lokale Verbindungen verlangt.
</li><br>
<a name="SSL"></a>
<li>SSL<br>
SSL-Verschl&uuml;sselung f&uuml;r eine Verbindung aktivieren. <a
href="#HTTPS">Hier</a> gibt es eine Beschreibung, wie das erforderliche
SSL-Zertifikat generiert werden kann. Um eine Verbindung mit solch
einem Port herzustellen, sind folgende Befehle m&ouml;glich:
<ul>
<code>
socat openssl:fhemhost:fhemport,verify=0 readline<br>
ncat --ssl fhemhost fhemport<br>
openssl s_client -connect fhemhost:fhemport<br>
</code>
</ul>
</li><br>
<a name="allowfrom"></a>
<li>allowfrom<br>
Regexp der erlaubten IP-Adressen oder Hostnamen. Wenn dieses Attribut
gesetzt wurde, werden ausschlie&szlig;lich Verbindungen von diesen
Adressen akzeptiert.
</li><br>
<a name="connectTimeout"></a>
<li>connectTimeout<br>
Gibt die maximale Wartezeit in Sekunden an, in der die Verbindung
aufgebaut sein muss. Standardwert ist 2.
</li><br>
<a name="connectInterval"></a>
<li>connectInterval<br>
Gibt die Dauer an, die entweder nach Schlie&szlig;en einer Verbindung
oder f&uuml;r den Fall, dass die Verbindung nicht zustande kommt,
gewartet werden muss, bis ein erneuter Verbindungsversuch gestartet
werden soll. Standardwert ist 60.
</li><br>
<a name="encoding"></a>
<li>encoding<br>
Bezeichnet die Zeichentabelle f&uuml;r die zum Client gesendeten Daten.
M&ouml;gliche Werte sind utf8 und latin1. Standardwert ist utf8.
</li><br>
</ul>
</ul>
<a name="update"></a>
<h3>update</h3>
<ul>
<strong>FHEM aktualisieren / auf Aktualisierungen pr&uuml;fen:</strong>
<br>
<code>update [development|stable] [&lt;Date|Paket&gt;] [force]</code><br>
<code>update [development|stable] check</code><br>
<code>update housekeeping</code><br><br>
<strong>Aktualisierung eines Fremdpaketes / Fremdpaket auf Aktualisierungen pr&uuml;fen:</strong>
<br>
<code>update thirdparty &lt;url&gt; &lt;Paketname&gt; [force]</code><br>
<code>update thirdparty &lt;url&gt; &lt;Paketname&gt; check</code><br>
<br>
Die installierte FHEM Distribution und deren Erweiterungen (z.B. das Web-Interface
PGM2 (FHEMWEB)) werden mit diesem Befehl &uuml;ber ein Online Repository aktualisiert.
Enth&auml;lt das Repository neuere Dateien oder Dateiversionen als die lokale
Installation, werden die aktualisierten Dateien aus dem Repository installiert.
<br>
<br>
Die Update-Funktion unterst&uuml;tzt erweiterte Distributions Informationen sowie
die Steuerung &uuml;ber spezielle Befehle zum aktualisieren, verschieben oder
umbenennen von bestehenden Dateien. Neue Verzeichnisstrukturen k&ouml;nnen ebenfalls
&uuml;ber die Aktualisierung erzeugt werden. Die Aktualisierung erfolgt exklusiv
im Verzeichnispfad der &uuml;ber das globale Attribut "modpath" gesetzt wurde
(Ausnahme: fhem.pl). Der Anwender kann die Aktualisierung wahlweise
aus dem stabilen (stable) oder Entwicklungs-Zweig (development) vornehmen lassen.
<strong>Ein Aktualisierung erfolgt zur Zeit ausschliesslich nur &uuml;ber den
Entwicklungs-Zweig (development).</strong>
<br>
<br>
Weiterhin unterst&uuml;tzt der update Befehl die manuelle Installation von Paketen
die Bestandteil der FHEM Distribution sind. Aktuell werden noch keine erweiterten FHEM
Pakete bereitgestellt.
<br>
<br>
Der update Befehl unterst&uuml;tzt auch die Installation von Paketen die kein Bestandteil
der FHEM Distribution sind. Diese Pakete k&ouml;nnen z.B. von Entwicklern angebotene
Module oder Benutzerinterfaces beinhalten.
<br>
<br>
<i>Hinweis f&uuml;r Anbieter von zus&auml;tzlichen Paketen:</i>
<br>
<i>Weiterf&uuml;hrende Informationen zur Bereitstellung von Paketen sind der Datei
'docs/LIESMICH.update-thirdparty' zu entnehmen.</i>
<br>
<br>
Beispiele:
<blockquote>Auf neue Aktualisierungen pr&uuml;fen:<code><pre>
fhem&gt; update check
</pre></code></blockquote>
<blockquote>FHEM aktualisieren:<code><pre>
fhem&gt; update
</pre></code></blockquote>
<blockquote>FHEM Aktualisierung erzwingen (alle Dateien werden aktualisiert!):<code><pre>
fhem&gt; update force
</pre></code></blockquote>
<blockquote>Eine einzelne Datei aktualisieren:<code><pre>
fhem&gt; update 98_foobar.pm
</pre></code></blockquote>
<blockquote>Nach einem Dateinamen suchen:<code><pre>
fhem&gt; update backup
'backup' not found. Did you mean:
==&gt; 98_backup.pm
nothing to do...
</pre></code></blockquote>
<blockquote>Aktualisierung oder Installation eines Fremdpaketes:<code><pre>
fhem&gt; update thirdparty http://domain.tld/path paketname
</pre></code></blockquote>
<blockquote>Fremdpaket auf neue Aktualisierungen pr&uuml;fen:<code><pre>
fhem&gt; update thirdparty http://domain.tld/path paketname check
</pre></code></blockquote>
<a name="updateattr"></a>
<b>Attribute</b>
<ul>
<li><a href="#backup_before_update">backup_before_update</a></li><br>
<li><a href="#exclude_from_update">exclude_from_update</a></li><br>
<li><a href="#updatebranch">updatebranch</a></li><br>
</ul>
</ul>
<a name="watchdog"></a>
<h3>watchdog</h3>
<ul>
<br>
<a name="watchdogdefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; watchdog &lt;regexp1&gt; &lt;timespec&gt;
&lt;regexp2&gt; &lt;command&gt;</code><br>
<br>
Startet einen beliebigen fhem.pl Befehl wenn nach dem Empfang des
Ereignisses &lt;regexp1&gt; nicht innerhalb von &lt;timespec&gt; ein
&lt;regexp2&gt; Ereignis empfangen wird.<br>
Der Syntax f&uuml;r &lt;regexp1&gt; und &lt;regexp2&gt; ist der gleiche wie
regexp f&uuml;r <a href="#notify">notify</a>.<br>
&lt;timespec&gt; ist HH:MM[:SS]<br>
&lt;command&gt; ist ein gew&ouml;hnlicher fhem Befehl wie z.B. in <a
href="#at">at</a> oderr <a href="#notify">notify</a>
<br><br>
Beispiele:
<code><ul>
# Frage Daten vom FHT80 _einmalig_ ab, wenn wir keine Nachricht f&uuml;r<br>
# 15 Minuten erhalten haben.<br>
define w watchdog FHT80 00:15:00 SAME set FHT80 date<br><br>
# Frage Daten vom FHT80 jedes Mal ab, wenn keine Nachricht f&uuml;r<br>
# 15 Minuten emfpangen wurde, d.h. reaktiviere den Watchdog nachdem er
getriggert wurde.<br>
# Kann gef&auml;hrlich sein, da er so in einer Schleife getriggert werden
kann.<br>
define w watchdog FHT80 00:15:00 SAME set FHT80 date;; trigger w .<br><br>
# Alarmiere einmalig wenn vom FHT80 f&uuml;r 15 Minuten keine Nachricht
# emfpangen wurde.<br>
define w watchdog HMS100-FIT 01:00:00 SAME "alarm-fit.sh"<br><br>
# Sende eine Mail wenn das Fenster offen gelassen wurde<br>
define w watchdog contact1:open 00:15 contact1:closed "mail_me close
window1"<br>
attr w regexp1WontReactivate<br><br>
</ul></code>
Hinweise:<br>
<ul>
<li>Wenn &lt;regexp1&gt; . (Punkt) ist, dann aktiviere den Watchdog zur
definierten Zeit. Sonst wird er durch den Empfang des ersten passenden
Events aktiviert.</li>
<li>&lt;regexp1&gt; Resetet den Timer eines laufenden Watchdogs. Um das
zu verhindern wird das regexp1WontReactivate Attribut gesetzt.</li>
<li>Wenn &lt;regexp2&gt; SAME ist , dann ist es das gleiche wie das erste
regexp, und wird reaktiviert wenn es empfangen wird. </li>
<li>trigger &lt;watchdogname&gt; . aktiviert den Trigger wenn dessen
Status defined ist und setzt ihn in den Status defined wenn sein status
triggered ist.<br>
Der Watchdog musst immer mit diesem Befehl reaktiviert werden wenn er
getriggert wurde.</li>
<li>Ein generischer Watchdog (ein Watchdog, verantwortlich f&uuml;r
mehrere Devices) ist derzeit nicht m&ouml;glich.</li>
</ul>
<br>
</ul>
<a name="watchdogset"></a>
<b>Set</b> <ul>N/A</ul><br>
<a name="watchdogget"></a>
<b>Get</b> <ul>N/A</ul><br>
<a name="watchdogattr"></a>
<b>Attributes</b>
<ul>
<li><a href="#disable">disable</a></li>
<li><a href="#disabledForIntervals">disabledForIntervals</a></li>
<li><a name="regexp1WontReactivate">regexp1WontReactivate</a><br>
Wenn ein Watchdog aktiv ist, wird ein zweites Ereignis das auf regexp1
passt normalerweise den Timer zur&uuml;cksetzen. Dieses Attribut wird
das verhindern.
</li>
</ul>
<br>
</ul>
=end html
=cut
<a name="weblink"></a>
<h3>weblink</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#weblink'>weblink</a><br/>
</ul>
<a name="withings"></a>
<h3>withings</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#withings'>withings</a><br/>
</ul>
<a name="xxLG7000"></a>
<h3>xxLG7000</h3>
<ul>
Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es
hier: <a href='commandref.html#xxLG7000'>xxLG7000</a><br/>
</ul>
<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>
<br>
</li><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...".
<br>
<br>
</li>
<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>
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>
<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;ßenparameter.<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.&nbsp;
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.
</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>