<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://wiki.fhem.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=LHBL2003</id>
	<title>FHEMWiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.fhem.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=LHBL2003"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/LHBL2003"/>
	<updated>2026-04-11T07:04:05Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=VELUX_Rolladen_steuern&amp;diff=40919</id>
		<title>VELUX Rolladen steuern</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=VELUX_Rolladen_steuern&amp;diff=40919"/>
		<updated>2026-04-04T07:28:56Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: Link zu einem YouTube Video, wo gezeigt wird wie man Mehrere Rollos ansteuern kann mit wenig Hardware. Passend zum Thema.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Achtung, Seite ist total veraltet&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Unbedingt lesen: [[KLF200]]&lt;br /&gt;
&lt;br /&gt;
==Vorwort==&lt;br /&gt;
Wird ein VELUX Rollladen neu eingebaut und man hat die Absicht diesen mit FHEM zu steuern so sollte zwingend darauf geachtet werden KEINE Steuerbox (zb. KLF-100) anzuschließen. Auch nicht mal zu testen. Hat der Rollen einmal solche Steuerbox erkannt, schaltet er intern auf diesen Steuerbox-Modus um und ist nicht mehr per Polumschaltung steuerbar! &lt;br /&gt;
&lt;br /&gt;
Ist der Rollladen noch per Polumschaltung steuerbar, so kann hier weitergelesen werden&lt;br /&gt;
&lt;br /&gt;
Es gibt mehrere Möglichkeiten einen VELUX Rollladen mit einem Homematic Rollladenaktor zu schalten, um diesen damit in FHEM zu integrieren &lt;br /&gt;
==Homematic HM-LC-Bl1PBU-FM auf 24VDC umbauen==&lt;br /&gt;
Diese Modifikation ist [https://forum.fhem.de/index.php/topic,35802 hier] sehr gut erklärt.&lt;br /&gt;
&lt;br /&gt;
==Homematic HM-LC-Bl1PBU-FM In Verbindung mit Relais==&lt;br /&gt;
Möchte mal keine Lötaktionen am Rollladenaktor vornehmen, so ist evtl. diese Variante interessant. Allerdings benötigt man zusätzlichen Platz für einen Unterputz Schaltschrank.&lt;br /&gt;
Es wird ein 24VDC Hutschienennetzteil mit entsprechender Leistung benötigt. Es muss mindestens 1A pro Rollladen bereitstellen. Z.B. bei 3 Rollläden eignet sich das 4,2A 24DVC Modul sehr gut. Es belegt 6TE im Schaltschrank. Pro Rollladen benötigt man zwei 230V 4fach Wechsler Koppelrelais. Von diesen 4 Wechslern je Relais werden 3 benötigt: 2 Stück für +/- Pol, 1 Stück für die Steuerung des 24VDC Netzteils&lt;br /&gt;
&lt;br /&gt;
Beim Einbau in eine Unterputzverteilung bietet sich folgendes Relais aufgrund geringer Tiefe an:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Phoenix Contact 2903304 RIF Monostabiles Relais für DIN-Schienen, 230Vac Spule, 4-poliger Wechsler 5 A / 250Vdc&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die 2 Phasen des Rollladenaktors steuern nun je ein Relais an. &lt;br /&gt;
Die Wechsler Ausgänge Relais werden nun wie folgt verdrahtet:&lt;br /&gt;
&lt;br /&gt;
Relais für Hochfahrt&lt;br /&gt;
* Wechsler 1: IN: + Pol Netzteil, OUT: Pol 1 des Rollladens&lt;br /&gt;
* Wechsler 2: IN: - Pol Netzteil, OUT: Pol 2 des Rollladens&lt;br /&gt;
* Wechsler 3: IN: 230V Phase, OUT: 230V Stromzufuhr des Netzteils&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Relais für Runterfahrt&lt;br /&gt;
* Wechsler 1: IN: + Pol Netzteil, OUT: Pol 2 des Rollladens&lt;br /&gt;
* Wechsler 2: IN: - Pol Netzteil, OUT: Pol 1 des Rollladens&lt;br /&gt;
* Wechsler 3: IN: 230V Phase, OUT: 230V Stromzufuhr des Netzteils&lt;br /&gt;
&lt;br /&gt;
Man sieht, es sind lediglich die Ausgänge des Rollladen vertauscht.&lt;br /&gt;
Wichtig ist, dass beide Relais NICHT gleichzeitig angezogen sind. Das verursacht einen 24V Kurzschluss.&lt;br /&gt;
Der HM Rollladenaktor stellt dies aber sicher. Er wird NIE eine Hoch- und Runterfahrt initiieren.&lt;br /&gt;
&lt;br /&gt;
Hat man mehrere Rollläden, so ist pro Rollladen identisch zu verfahren.&lt;br /&gt;
&lt;br /&gt;
==Lernfahrt initiieren==&lt;br /&gt;
Fährt der Rollladen nicht komplett herunter oder hoch, so hilft ev. eine erneute Lernfahrt. Diese kann wie folgt initiiert werden:&lt;br /&gt;
* Rollladen komplett herunter fahren&lt;br /&gt;
* 3x kurzen Runterfahr-Impuls geben&lt;br /&gt;
* Jetzt Dauerstrom zum Herunterfahren geben&lt;br /&gt;
&lt;br /&gt;
Nun sollte der Rollladen erst hoch, dann wieder herunterfahren, jetzt aber bis zum Anschlag - der eigentlichen und korrekten Endposition.&lt;br /&gt;
&lt;br /&gt;
Je nach Ausgangslage kann es erforderlich sein, den dreifachen Runterfahr-Impuls sowie den anschließenden Dauerstrom zum Herunterfahren nicht bei ganz geschlossenem Rollladen abzusetzen, sondern beispielsweise auf halber Strecke.&lt;br /&gt;
&lt;br /&gt;
==Mögliche Probleme bei Nutzung von mehreren Rollläden an einem Netzteil==&lt;br /&gt;
Es besteht der Verdacht, das die Rollläden untereinander kommunizieren. Wurden weitere Rollläden erkannt, so kann es zu Störungen kommen bis dahin, das die Rollläden die Fahrt verweigern.&lt;br /&gt;
Dazu ist lediglich jeweils dicht am Rollladen ein zb. 220uF Elko an beiden Polen parallel anzuschließen. &lt;br /&gt;
&lt;br /&gt;
Siehe auch: Mehrere VLUX SML Rollo mit einem 24 Volt Hutschienen Netzteil Ansteuern https://youtu.be/LGG70vniB9g&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [https://forum.fhem.de/index.php/topic,60451.15/ FHEM Thread zur Initiierung einer Lernfahrt]&lt;br /&gt;
* [https://forum.fhem.de/index.php/topic,35802 FHEM Thread zur Modifikation eines HM-LC-Bl1PBU-FM für 24VDC]&lt;br /&gt;
* [http://www.chrysophylax.de/prj/W010/W010.htm Eine Bauanleitung &amp;quot;from Scratch&amp;quot; mit ein paar nützlichen Erklärungen]&lt;br /&gt;
[[Kategorie:Rollladensteuerung]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHEM_Connector_f%C3%BCr_Amazon_Alexa&amp;diff=37926</id>
		<title>FHEM Connector für Amazon Alexa</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FHEM_Connector_f%C3%BCr_Amazon_Alexa&amp;diff=37926"/>
		<updated>2023-01-07T22:01:44Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: Alexa Namen durch Komma trennen statt Strichpunkt.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
&#039;&#039;&#039;Alexa FHEMlazy&#039;&#039;&#039; war historisch ein Fork des Original [[Alexa-Fhem|alexa-fhem]], der im Januar 2019 mit dem Original zusammengeführt wurde und nun als &#039;&#039;&#039;FHEM Connector&#039;&#039;&#039; verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
Er ermöglicht innerhalb von Minuten die Verknüpfung von FHEM mit einem Amazon Echo Gerät. Auch Geräte anderer Hersteller mit verbauten Mikrofonen und Alexa-Sprachassistenten-Unterstützung sollten problemlos funktionieren. Für folgende Geräte ist dies bspw. der Fall (Falls Ihr andere/weitere Gerätemodelle bzw. Hersteller in Verwendung habt, bitte hier pflegen):&lt;br /&gt;
&lt;br /&gt;
* SONOS Beam und SONOS One   &lt;br /&gt;
&lt;br /&gt;
Gegenüber dem klassischen Ansatz ergeben sich Einschränkungen, so läuft die Software normalerweise unter dem gleichen Benutzer wie FHEM auf dem gleichen Server, und es wird z.Zt. nur der Smarthome-Skill unterstützt (die Variante, bei der die Möglichkeiten der Interaktion von Amazon festgelegt wurden).&lt;br /&gt;
Dafür ist weder ein Developer-Account bei Amazon, eigene Lambda- und Skillfunktionen, noch das Öffnen eines eingehenden Ports aus dem Internet nötig. &lt;br /&gt;
* Die Software integriert einen Installer, der die Erstkonfiguration und Anmeldung übernimmt&lt;br /&gt;
* Die Kommunikation zur Software auf dem heimischen Rechner und dann zu FHEM verläuft über SSH und einen vom FHEM-Verein gehosteten Server&lt;br /&gt;
* Funktioniert mit IPv4, IPv6, echtem Dual Stack und DS-Lite&lt;br /&gt;
* Als Skill bei Amazon wird der Skill &amp;quot;FHEM Connector&amp;quot; verwendet.&lt;br /&gt;
&lt;br /&gt;
Der Thread im Forum zur Software ist hier: {{Link2Forum|Topic=94817}}.&lt;br /&gt;
&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Einfache Anbindung von FHEM an Amazon Assistent Alexa&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=alexa&lt;br /&gt;
|ModTechName=39_alexa.pm / alexa-fhem&lt;br /&gt;
|ModForumArea=Frontends/Sprachsteuerung&lt;br /&gt;
|ModOwner=gvzdus, André/ justme1968 ({{Link2FU|430|Forum}} / [[Benutzer Diskussion:Justme|Wiki]])&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Einführung==&lt;br /&gt;
&lt;br /&gt;
===Arbeitsweise und Datenfluss===&lt;br /&gt;
Vorläufig ist alexa-fhem im &amp;quot;FHEM Connector-Modus&amp;quot; ein reiner [https://developer.amazon.com/de/docs/smarthome/understand-the-smart-home-skill-api.html SmartHome-Skill].&lt;br /&gt;
SmartHome-Skills erhalten weder die Sprachdaten selber noch das, was Amazon in Textform verstanden hat, sondern vielmehr extrahiert Amazon aus dem verstandenen Text Anweisungen und Abfragen für Geräte, die dann an den Skill übermittelt werden. Charmant ist dabei, dass unmittelbar gefragt werden kann &amp;quot;Alexa, wie ist die Temperatur im Wohnzimmer?&amp;quot;, während andere Skills zunächst explizit angesprochen werden müssen (&amp;quot;Alexa, frage FHEM nach der Temperatur im Wohnzimmer&amp;quot;). Außerdem kann der Nutzer mehrere Smarthome-Skills installieren, und die Geräte werden zu einer Gesamtmenge zusammengefasst.&lt;br /&gt;
&lt;br /&gt;
Gehen wir den Datenfluss bei der konkreten Frage &amp;quot;Wie ist die Temperatur im Wohnzimmer?&amp;quot; durch:&lt;br /&gt;
* Alexa hat bei der Skillinstallation gelernt, dass &amp;quot;FHEM Connector&amp;quot; bei Dir einen Thermostaten im Raum Wohnzimmer kennt. Dadurch wird bei der Sprachanalyse von &amp;quot;Alexa Voice Service&amp;quot; in der Cloud erkannt, dass eine Abfrage an &amp;quot;FHEM Connector&amp;quot; erfolgversprechend ist.&lt;br /&gt;
* Zunächst wird die zentrale &amp;quot;Lambda-Funktion&amp;quot; von &amp;quot;FHEM Connector&amp;quot; aufgerufen. Die Funktion leitet aber im Kern nur den Request unverändert an den vom Verein bereitgestellten Server weiter. Im Request enthalten ist ein Token, das sogenannte &amp;quot;Bearer-Token&amp;quot;.&lt;br /&gt;
* Der &amp;quot;Vereinsserver&amp;quot; prüft anhand dieses Tokens, ob es überhaupt bekannt ist, und zu welchem Nutzer es gehört. Ist dieser Nutzer verbunden, wird der Request wiederum quasi unverändert an den Nutzer weitergeleitet.&lt;br /&gt;
* Diese Weiterleitung passiert über einen sogenannten SSH-Reverse-Tunnel, der von Deiner Seite und der Software auf dem FHEM-Tunnel automatisch aufgebaut wird.&lt;br /&gt;
* Auf Deiner Seite läuft die eigentliche Software, und zwar unter nodeJS. nodeJS ist ein Javascript ausführender Miniserver, der lokal auf einem Zufallsport auf Requests &amp;quot;lauscht&amp;quot;. In der Original-Version  [[Alexa-Fhem|Alexa FHEM]] kommen die Requests aus dem Internet (hoffentlich von der eigenen Lambda-Funktion), hier bei &amp;quot;FHEM Connector&amp;quot; kommen sie ausschließlich aus dem SSH-Tunnel von lokal.&lt;br /&gt;
* Die Software validiert nun diesen Request anhand des Bearer-Tokens. Konkret wird dabei das bei der Installation generierte Token, dass bei der Skill-Aktivierung an Amazon übertragen wurde, mit dem lokal gespeicherten Wert verglichen. Stimmt das Token, wird der Befehl verarbeitet, üblicherweise wird hierbei ein Aufruf an die Webschnittstelle von FHEM abgesetzt.&lt;br /&gt;
* FHEM führt den Befehl aus&lt;br /&gt;
&lt;br /&gt;
Hört sich langsam und kompliziert an? Kompliziert: Okay. Langsam eher nicht, in etlichen Fällen liegt die Gesamtantwortszeit unter 200 ms.&lt;br /&gt;
&lt;br /&gt;
Soweit ein erster Überblick über die Datenflüsse. Im Abschnitt Sicherheit ist das Konzept der Absicherung deutlich genauer und ausführlicher beschrieben.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
Du wirst bei der Installation zuerst auf der Kommandozeile auf Deinem Raspberry (o.ä.) unterwegs sein, anschließend im Webfrontend von FHEM, und zum Schluss auf der Alexa-Konsole im Web.&lt;br /&gt;
&lt;br /&gt;
===node.js installieren===&lt;br /&gt;
&lt;br /&gt;
Ab Jessy liegt NodeJS bereits in einer ausreichend aktuellen Version vor (Stretch und Buster funktionieren ebenfalls). Mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install nodejs npm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kannst Du es installieren. Mit &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
node --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
erfährst Du die aktuelle Version - wenn hier etwas mit &amp;quot;8&amp;quot; oder höher vorneweg erscheint, ist alles gut.&lt;br /&gt;
Ansonsten suche Dir bitte eine Anleitung im Web, wie Du NodeJS auf Deinem System auf einen aktuellen Stand bringen kannst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung:&#039;&#039;&#039; diese Aussage bzgl. node-Version (und Jessie/Stretch) stimmt wohl für alexa-fhem Stand heute (12.06.2020) nicht mehr, siehe https://forum.fhem.de/index.php/topic,112025.msg1063218.html#msg1063218&lt;br /&gt;
&lt;br /&gt;
=== Alexa-FHEM installieren ===&lt;br /&gt;
&lt;br /&gt;
Nun installieren wir Alexa-fhem aus dem offiziellen Repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install -g alexa-fhem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Vorgang benötigt etwas Zeit.&lt;br /&gt;
&lt;br /&gt;
=== Alexa-FHEM aktivieren ===&lt;br /&gt;
&lt;br /&gt;
Wechsele jetzt in FHEM-Web!&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, dass das Alexa-Modul in der Version ab Januar 2019 vorliegt. Dafür bitte einmal FHEM aktualisieren:&lt;br /&gt;
Speichern der Config nicht vergessen, und&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
update&lt;br /&gt;
shutdown restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alles, was jetzt noch nötig ist, ist das Anlegen eines Alexa-Devices. Gib dafür in der FHEM-Web-Kommandozeile&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
define alexa alexa&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
an. Nun läuft, während Du bereits das neu angelegte Alexa-Devices siehst, ein komplexer Prozess im Hintergrund:&lt;br /&gt;
&lt;br /&gt;
* Falls noch kein SSH-Key für den Benutzer, unter dem FHEM läuft, existiert, wird einer generiert&lt;br /&gt;
* Es wird ein Secret-Key im Prozess generiert, dass den Server nicht verlässt, und der Skillanmeldung dient.&lt;br /&gt;
* Du wirst auf dem Server &amp;quot;va-fhem.fhem.de&amp;quot; des FHEM-Vereins mit dem SSH-Key angemeldet, und der Hash-Wert Deines Secret-Key dort abgelegt.&lt;br /&gt;
&lt;br /&gt;
Und wenn Du diese Sätze gelesen hast, sollte inzwischen sich das Alexa-Device in FHEM-Web aktualisiert haben, und &lt;br /&gt;
ungefähr so aussehen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Alexa-Device-2.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Neben dem Status für alexa-fhem und der Proxyverbindung ist wichtig, dass diese beiden Zeilen beim Reload aufgetaucht sind:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
alexaFHEM.bearerToken crypt:...&lt;br /&gt;
alexaFHEM.skillRegKey crypt:...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ja, und diesen Schlüssel benötigst Du wirklich! Also am besten schon einmal mit &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
get &amp;lt;alexa&amp;gt; proxyKey&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in Klartext anzeigen lassen und in ein Editor-Fenster dauerhaft wegsichern.&lt;br /&gt;
&lt;br /&gt;
Jetzt solltest Du Dein Alexa-Device nicht mehr löschen, denn das im Reading angezeigte &amp;quot;bearerToken&amp;quot; zu löschen bedeutet, dass die Software die Zugriffe von nicht mehr überprüfen kann und keine Kommandos mehr funktionieren. In diesem Fall hilft nur die Neuinstallation des Skills.&lt;br /&gt;
&lt;br /&gt;
==== Fehler bei der Aktivierung ====&lt;br /&gt;
&lt;br /&gt;
Während kompliziertere Fehlerfälle im Abschnitt &amp;quot;Mögliche Probleme und Lösungen&amp;quot; behandelt werden, hier häufige Fälle, warum die kryptischen Zeilen nicht auftauchen:&lt;br /&gt;
&lt;br /&gt;
* Zuerst bitte einfach einmal die Seite neu laden.&lt;br /&gt;
&lt;br /&gt;
===== 401: Authorization Required =====&lt;br /&gt;
&lt;br /&gt;
Wenn Du FHEM-Web mit einem User/Passwort-Schutz versehen hast, wirst du folgende Fehlermeldung sehen: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
alexaFHEM stopped; failed to connect to fhem: 401: Authorization Required&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Regel musst du die Angaben User/Passwort noch einmal explizit setzen. Im Attribute-Abschnitt &amp;quot;alexaFHEM-auth&amp;quot; auswählen, User/Passwort mit &amp;quot;:&amp;quot; getrennt angeben und &amp;quot;attr&amp;quot; anklicken. alexa-fhem wird automatisch neu gestartet. Hier das Ganze in der Text-Variante:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
attr alexa alexaFHEM-auth user:pass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Permission denied =====&lt;br /&gt;
&lt;br /&gt;
Wenn du folgende Fehlermeldungen im Alexa Logfile siehst, wurde das Verzeichnis &amp;quot;/opt/fhem/.ssh/&amp;quot; von dir bei der Arbeit mit &amp;quot;root&amp;quot; oder &amp;quot;sudo&amp;quot; mit den falschen Berechtigungen versehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
[2019-7-25 11:59:12] sshautoconf: aborted with ssh-keygen returned error - key_save_private: Permission denied&lt;br /&gt;
[2019-7-25 11:59:12] *** SSH: proxy configuration failed: ssh-keygen returned error - key_save_private: Permission denied&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prüfen kannst du die Berechtigungen mit folgendem Befehl auf der Shell-Konsole: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
ls -l /opt/fhem/.ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Du solltest dann folgende Ausgabe erhalten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
insgesamt 12&lt;br /&gt;
-rw------- 1 fhem dialout 1675 Jul 12 13:10 id_rsa&lt;br /&gt;
-rw-r--r-- 1 fhem dialout  391 Jul 12 13:10 id_rsa.pub&lt;br /&gt;
-rw-r--r-- 1 fhem dialout  884 Jul 12 13:10 known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Steht in der Ausgabe nicht &amp;quot;fhem dialout&amp;quot; (dein fhem User), sondern bspw. &amp;quot;root root&amp;quot;, dann bspw. mit folgendem Befehl an deinen fhem User anpassen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
chown fhem:dialout /opt/fhem/.ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem ersten Befehl &amp;quot;ls -l ...&amp;quot; kannst du dann nochmal prüfen, ob die Berechtigungen korrekt übernommen wurden. &lt;br /&gt;
&lt;br /&gt;
===== weitere Prüfungen =====&lt;br /&gt;
&lt;br /&gt;
Hast Du noch die Shell-Konsole offen? Dann prüfe bitte noch einmal auf der Konsole, ob nun zwei Prozesse laufen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
ps -ef | egrep &#039;(alexa|ssh)&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sollte Dir idealerweise so etwas anzeigen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
fhem     31322     1 99 13:56 ?        00:00:03 alexa                              &lt;br /&gt;
fhem     31332 31322  8 13:56 ?        00:00:00 /usr/bin/ssh -R 1234:127.0.0.1:&amp;lt;zufälliger port&amp;gt; -oServerAliveInterval=90 -p 58824 fhem-va.fhem.de&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;alexa&amp;quot; ist dabei der Node-JS-Prozess, der ssh-Prozess ist die aufgebaute Verbindung zum Vereinsserver.&lt;br /&gt;
&lt;br /&gt;
Wenn Du diese Prozesse &#039;&#039;&#039;nicht&#039;&#039;&#039; siehst oder das Alexa-Device keinen Registrierungskey anzeigt, dann ist leider der Start nicht glatt verlaufen.&lt;br /&gt;
&lt;br /&gt;
Im Logfile (über den link &amp;lt;code&amp;gt;Logfile&amp;lt;/code&amp;gt; in der Detail-Ansicht über &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;, oder über den Namen bei &#039;&#039;currentlogfile&#039;&#039; in den Internals) findest Du idealerweise selber Hinweise, wo es hakt, oder kannst im Forum nachfragen.&lt;br /&gt;
&lt;br /&gt;
=== Geräte im FHEM-Webfrontend zuweisen ===&lt;br /&gt;
Um das Aha-Erlebnis zu vergrößern, ist jetzt ein guter Zeitpunkt, 1 oder besser mind. 2 Geräte für den Alexa-Dienst zuzuweisen. Von Haus aus wird keines Deiner FHEM-Geräte automatisch Alexa zugewiesen!&lt;br /&gt;
&lt;br /&gt;
Wähle die Geräte aus, rufe sie auf und setze das Attribut &amp;quot;alexaName&amp;quot;. Hierbei in Kürze nur der Hinweis:&lt;br /&gt;
* Keine Angst vor Leerzeichen und Umlauten, funktioniert.&lt;br /&gt;
* Große Angst vor Rechtschreibfehlern (Terrasse, Rollladen) oder komplizierten Wörtern &amp;quot;handgebastelte Martinslaterne im Kinderzimmer Iphigenie-Chantal&amp;quot;.&lt;br /&gt;
* Mehrere Namen für dasselbe Gerät/Device in fhem werden unterstützt. Mehrere Namen werden durch &amp;lt;s&amp;gt;Strichpunkt&amp;lt;/s&amp;gt; Komma getrennt&amp;lt;ref&amp;gt;Feature nicht dokumentiert {{Link2Forum|Topic=74041|LinkText=Forumsthread}}&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* Das Attribut &amp;quot;alexaRoom&amp;quot; ist NUR FÜR DEN CUSTOM SKILL relevant. Ausnahme: structure und LightScene Devices, siehe: [[FHEM_Connector_f%C3%BCr_Amazon_Alexa#Was_geht_alles_.3F]].&lt;br /&gt;
&lt;br /&gt;
Lade die Geräte neu in die Software, indem Du &amp;lt;code&amp;gt;set &amp;lt;alexa&amp;gt; restart&amp;lt;/code&amp;gt; ausführst!&lt;br /&gt;
[[Datei:HowToSet alexaName.png|alternativtext=How to set alexaName|ohne|mini|Wie setzt man das Attribut alexaName]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkungen (weil oft gestellte Fragen im Forum) bzgl. Erkennung von Geräten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Wichtig ist, dass die Filtereinstellung in der alexa-fhem.cfg (zu finden unter &amp;quot;Edit Files&amp;quot;) passt.&lt;br /&gt;
Das, was dort eingetragen ist (Standard: alexaName=..* / also es ist ein alexaName vergeben) auch an den entsprechenden Devices in fhem vorhanden ist.&lt;br /&gt;
Stimmt das nicht überein, kann alexa-fhem keine Devices von fhem abfragen/finden.&lt;br /&gt;
Ob der Filter entsprechend funktioniert kann man wie folgt testen: &#039;&#039;list Filtereinstellung&#039;&#039; beispiel mit Standardfilter: &#039;&#039;list alexaName=..*&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Hat alexa-fhem per Filter Devices aus fhem &amp;quot;gefunden&amp;quot;, geht es weiter mit der &amp;quot;Erkennung&amp;quot;. Also um welches Device (Typ und &amp;quot;Fähigkeiten&amp;quot;) handelt es sich. Dazu gilt folgendes:&lt;br /&gt;
** sind entsprechende Readings beim Device vorhanden (z.B. temperature, state mit on/off, ...) erkennt das alexa-fhem automatisch. Die Liste der automatisch erkannten Readings wächst ständig. Daher erst mal schauen ob das Device bereits entsprechend erkannt (typisiert) wurde. Das kann durch prüfen des alexa-fhem-Logs geschehen (NICHT fhem-log!).&lt;br /&gt;
** sind entsprechende &amp;quot;set-Befehle&amp;quot; erkennbar (oft auch durch Readings). Also ist beispielsweise (wie beim Dummy nötig) ein &#039;&#039;setList&#039;&#039; mit entsprechenden Einträgen vorhanden oder entsprechende Readings, z.B. desired-temp zum Stellen der Temperatur etc.&lt;br /&gt;
** wird das Device nicht richtig oder &amp;quot;unvollständig&amp;quot; erkannt helfen folgende Attribute:&lt;br /&gt;
*** genericDeviceType: hiermit kann alexa-fhem in die gewünschte Richtung &amp;quot;geschubbst&amp;quot; werden. Anmerkung: man kann nicht alles erzwingen, Readings bzw. set-Befehle müssen passen (oder per homebridgeMapping passend gemacht werden). Wenn ein genericDeviceType nicht per &amp;quot;Drop-Down&amp;quot; erscheint, dann kann er auch (wenn bekannt) einfach per WEB-cmd eingegeben werden: &#039;&#039;attr Devicename genericDeviceType media&#039;&#039;&lt;br /&gt;
*** homebridgeMapping: hierdurch kann alexa-fhem bei der Erkennung von Zuständen und möglichen Einstellungen (also WAS kann das Device) unterstützt werden. Mittels homebridgeMapping können vorhandene Readings (Zustände) auf für alexa-fhem bekannte Zustände gemappt werden. Ebenso können damit Standard-fhem-Kommandos von alexa-fhem auf Device-spezifische gemappt werden. Beispiel: on/off auf Ein/Aus (falls das Device statt on/off eben ein Ein/Aus erwartet). Zum Beispiel: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;thermostat&amp;gt; homebridgeMapping TargetTemperature=target::target,minValue=18,maxValue=25,minStep=0.5 CurrentTemperature=myTemp:temperature&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; [https://github.com/justme-1968/homebridge-fhem/blob/master/README.md weitere Beispiele]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&#039;&#039;&#039;Mehrere Namen für dasselbe Gerät/Device in fhem sind möglich.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Die Namen werden durch &amp;lt;s&amp;gt;Strichpunkt&amp;lt;/s&amp;gt; Komma getrennt.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;attr dmLampe alexaName Lichtkuppel,Lichtkugel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung bzgl. genericDeviceType und homebridgeMapping:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* diese Attribute werden von verschiedenen &amp;quot;Sprachsteuerungsmodulen&amp;quot; in fhem verwendet (homebridge [dort wurde es &amp;quot;erfunden&amp;quot;], alexa-fhem, gassistant, ...). Daher ist nicht jedes Mapping für alle &amp;quot;Dienste&amp;quot; verwendbar. Ausprobieren schadet aber nicht.&lt;br /&gt;
* ebenso kann man mit diesen Attributen (homebridgeMapping wird gerne so &amp;quot;missbraucht&amp;quot;) nichts erzwingen, was seitens Amazon/Alexa nicht unterstützt bzw. verstanden wird! D.h. zunächst ist zu prüfen, ob ein bestimmter (gewünschter) Sprachbefehl seitens Amazon/Alexa unterstützt wird! Aktuelles Beispiel (Stand Jan 2020): &amp;quot;Alexa, fahre den Rollo hoch/runter&amp;quot;. Da ist Amazon/Alexa gerade dabei etwas zu tun. Bislang wird das nicht unterstützt, also ist das auch mit einem entsprechenden homebridgeMapping nicht zu erzwingen! Was unterstützt wird kann man bei Amazon nachlesen: [https://developer.amazon.com/es-ES/docs/alexa/device-apis/list-of-interfaces.html]&lt;br /&gt;
&lt;br /&gt;
== Finale: Skill verknüpfen ==&lt;br /&gt;
Suche im WebFrontend oder der Alexa-App den Skill &amp;quot;FHEM Connector&amp;quot;. Für nicht-Mac/iOS Anwerder empfiehlt das WebFrontend (https://alexa.amazon.de) statt die App, damit Du den Anmeldeschlüssel auch bequem kopieren kannst.&lt;br /&gt;
&lt;br /&gt;
Wenn du noch nicht bei Amazon angemeldet bist, erwartet Amazon zunächst, dass Du Dich normal bei Amazon anmeldest.&lt;br /&gt;
&lt;br /&gt;
Sobald Du &amp;quot;FHEM Connector&amp;quot; aktivierst, öffnet sich ein Browser-Tab mit folgender Maske:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Datei:FHEMlazy_login.png|240px]]&lt;br /&gt;
&lt;br /&gt;
Hier kopierst Du Deinen Anmeldeschlüssel (im Klartext!) hinein und klickst auf Check. Als glücklicher Mensch ist auf der folgenden Statusseite alles grün:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Datei:FHEMlazy_check.png|240px]]&lt;br /&gt;
&lt;br /&gt;
Im Einzelnen wird hier geprüft, ob Du per SSH verbunden bist (und auch Deine IP zur Sicherheit angezeigt), ob der Reverse-Tunnel steht, ob nodeJS erreichbar ist und wie viele Geräte Alexa gleich finden sollte (in meinem Fall 22).&lt;br /&gt;
&lt;br /&gt;
Sollte etwas nicht grün sein und Du eine Idee zum Fixen haben, kannst Du mit &amp;quot;Retry&amp;quot; neue Versuche auslösen.&lt;br /&gt;
&lt;br /&gt;
Ist alles okay, klicke rechts den Button &amp;quot;Activate Skill&amp;quot;. Du springst damit wieder zurück zu Amazon, die Dir hoffentlich zur erfolgreichen Verknüpfung gratulieren.&lt;br /&gt;
&lt;br /&gt;
Amazon möchte nun unmittelbar die Gerätesuche starten, und unter SmartHome-Geräte sollten diese nun auftauchen.&lt;br /&gt;
&lt;br /&gt;
== Was geht alles ? ==&lt;br /&gt;
&lt;br /&gt;
* Geräte, die sich ein- und ausschalten lassen:&lt;br /&gt;
** Automatisch: Müssen &amp;lt;code&amp;gt;set on&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set off&amp;lt;/code&amp;gt; Kommandos haben&lt;br /&gt;
** dummys müssen &amp;lt;code&amp;gt;setList&amp;lt;/code&amp;gt; mit on und off haben&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; switch bzw. light kann bestimmt werden ob es in alexa als Schalter oder Licht behandelt wird.&lt;br /&gt;
** Wenn die Set-Kommandos im FHEM Device anders benannt sind: homebridgeMapping On:cmdOn=&amp;lt;ein&amp;gt;,cmdOff=&amp;lt;aus&amp;gt; setzen&lt;br /&gt;
** Kommandos:&lt;br /&gt;
***Alexa, schalte &amp;lt;name&amp;gt; ein/aus&lt;br /&gt;
***Alexa, Licht an/aus&lt;br /&gt;
***Alexa, schalte &amp;lt;gruppe&amp;gt; ein/aus&lt;br /&gt;
* Geräte, die eine Temperatur messen&lt;br /&gt;
** Automatisch: Es muss ein Reading &amp;lt;code&amp;gt;temperature&amp;lt;/code&amp;gt; geben&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; thermometer&lt;br /&gt;
** Sonst: homebridgeMapping CurrentTemperature:reading=&amp;lt;reading&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Helligkeit sich ändern lässt&lt;br /&gt;
** Automatisch: wenn &amp;lt;code&amp;gt;dim&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;pct&amp;lt;/code&amp;gt; Kommandos erkannt werden&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; light&lt;br /&gt;
** Über homebridgeMapping: Wenn &amp;lt;code&amp;gt;helligkeit&amp;lt;/code&amp;gt; das Reading für die aktuelle Helligkeit enthält und die Helligkeit mit &amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; prozent xxx&amp;lt;/code&amp;gt; gesetzt wird, sieht das homebridgeMapping wie folgt aus: homebridgeMapping Brightness=helligkeit::prozent,minValue=0,maxValue=&amp;lt;maximalwert&amp;gt;&lt;br /&gt;
** Kommandos:&lt;br /&gt;
*** Alexa, mache &amp;lt;name&amp;gt; heller/dunkler&lt;br /&gt;
*** Alexa, Licht heller/dunkler&lt;br /&gt;
* Geräte, deren Farbe sich ändern lässt&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Farbtemperatur sich ändern lässt&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, bei denen sich eine Lautstärke einstellen lässt&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, bei denen sich ein prozentualer Wert einstellen lässt&lt;br /&gt;
** Automatisch: wenn &amp;lt;code&amp;gt;dim&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;pct&amp;lt;/code&amp;gt; Kommandos erkannt werden&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* elektrische Türschlösser&lt;br /&gt;
** &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt;: lock&lt;br /&gt;
** homebridgeMapping mit LockCurrentState und LockTargetState&lt;br /&gt;
&lt;br /&gt;
* Thermostate&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; thermostate&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* structure Devices aus FHEM (ab alexa-fhem version 0.5.7)&lt;br /&gt;
** können mit &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; scene als Szene eingebunden werden&lt;br /&gt;
** über &amp;lt;code&amp;gt;alexaRoom&amp;lt;/code&amp;gt; kann der name um einen Ort ergänzt werden&lt;br /&gt;
** Szenen aus einer structure lassen sich ein- und ausschalten&lt;br /&gt;
** Wichtig:&lt;br /&gt;
*** Ein Skill darf nur 12 Szenen automatisch erkennen und einbinden.&lt;br /&gt;
&lt;br /&gt;
* LightScene Devices aus FHEM (ab alexa-fhem version 0.5.8)&lt;br /&gt;
** können mit &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; scene als Szenen eingebunden werden&lt;br /&gt;
** über &amp;lt;code&amp;gt;alexaRoom&amp;lt;/code&amp;gt; kann der name um einen Ort ergänzt werden&lt;br /&gt;
** Szenen aus einer LightScene lassen sich nur einschalten&lt;br /&gt;
** Wichtig:&lt;br /&gt;
*** Ein Skill darf nur 12 Szenen automatisch erkennen und einbinden.&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Kanal sich umschalten lässt (ab alexa-fhem version 0.5.13)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; media&lt;br /&gt;
** homebridgeMapping ChannelController:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt;&lt;br /&gt;
** Erlaubte Werte siehe hier: https://developer.amazon.com/de/docs/device-apis/alexa-channelcontroller.html#changechannel&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Playback status sich schalten lässt (ab alexa-fhem version 0.5.13)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; media&lt;br /&gt;
** homebridgeMapping PlaybackController:playback,values=Play;Pause;Stop;Previous;Next&lt;br /&gt;
** Erlaubte Werte siehe hier: https://developer.amazon.com/de/docs/device-apis/alexa-playbackcontroller.html#discovery&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Eingang sich umschalten lässt (ab alexa-fhem version 0.5.13)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; media&lt;br /&gt;
** homebridgeMapping InputController:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt;,values=HDMI+1;HDMI+2;XBOX&lt;br /&gt;
** Erlaubte Werte siehe hier: https://developer.amazon.com/de/docs/device-apis/alexa-property-schemas.html#input&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Kontaktsensoren (ab alexa-fhem version 0.5.15)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; contact&lt;br /&gt;
** homebridgeMapping ContactSensorState:reading=&amp;lt;reading&amp;gt; oder CurrentDoorState:reading=&amp;lt;reading&amp;gt;&lt;br /&gt;
** Die Anzeige in der Alexa-App funktioniert sofort, die Abfrage per Sprache erst ab Version 0.5.27.&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Lautstärke sich ändern lässt (ab alexa-fhem version 0.5.24)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; speaker&lt;br /&gt;
** Automatisch: es muss ein Reading &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; und/oder &amp;lt;code&amp;gt;mute&amp;lt;/code&amp;gt; geben&lt;br /&gt;
** homebridgeMapping Volume:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt; Mute:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt;&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, die sich ein- (und optional) ausschalten lassen als Szene (ab alexa-fhem version 0.5.26)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; scene&lt;br /&gt;
** Automatisch: Müssen &amp;lt;code&amp;gt;set on&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set off&amp;lt;/code&amp;gt; Kommandos haben&lt;br /&gt;
** homebridgeMapping On:reading=&amp;lt;reading&amp;gt;,cmdOn=&amp;lt;cmd&amp;gt;[,cmdOff=&amp;lt;cmd&amp;gt;]&lt;br /&gt;
** Hinweis: Fehlende Kommandos lassen sich mit cmdalias erzeugen&lt;br /&gt;
** Wichtig:&lt;br /&gt;
*** Ein Skill darf nur 12 Szenen automatisch erkennen und einbinden.&lt;br /&gt;
* Rollläden. Lange ein Problemthema, das nur mit &amp;quot;Schalte auf 0%, schalte auf 100% lief&amp;quot;. Wichtig: &amp;quot;alexa-fhem&amp;quot; ab Version 0.5.39 einsetzen. GenericDevice-Type auf &amp;quot;blind&amp;quot; setzen. Nach Restart von alexa-fhem und neuer Gerätesuche sollte folgendes funktionieren:&lt;br /&gt;
** &amp;quot;..., öffne &amp;lt;Name&amp;gt; ganz&amp;quot;&lt;br /&gt;
** &amp;quot;..., schließe &amp;lt;Name&amp;gt; komplett&amp;quot;&lt;br /&gt;
** &amp;quot;hoch&amp;quot; und &amp;quot;runter&amp;quot; (ohne &amp;quot;ganz&amp;quot; oder &amp;quot;komplett&amp;quot;) schalten jeweils nur einen bestimmten Prozentsatz hoch oder runter. Dieser kann mit &amp;lt;code&amp;gt;attr &amp;lt;name&amp;gt; homebridgeMapping TargetPosition:minStep=&amp;lt;wert&amp;gt;&amp;lt;/code&amp;gt;geändert werden. Aber Achtung: In diesem Intervall kann dann auch nur noch ein absoluter Prozentwert per Sprache oder Slider eingestellt werden! Bei z.B. 25% würden 13% zu 25% aufgerundet, 12% zu 0% abgerundet werden.&lt;br /&gt;
* Kontaktsensoren (ab alexa-fhem version 0.5.47)&lt;br /&gt;
** Automatisch wenn ein Reading &amp;lt;code&amp;gt;motion&amp;lt;/code&amp;gt; vorhanden ist oder es sich um einen Zigbee bewgungsmelder an einer HUE oder deCONZ Bridge handelt&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; MotionSensor&lt;br /&gt;
** homebridgeMapping MotionDetected:reading=&amp;lt;reading&amp;gt;,values=&amp;lt;wert für bewgung&amp;gt;:1;&amp;lt;wert für keine bewegung&amp;gt;:0&lt;br /&gt;
&lt;br /&gt;
* Alarmmelder (noch nicht in Deutschland):&lt;br /&gt;
** genericDeviceType Security&lt;br /&gt;
** homebridgeMapping Alarm=&amp;lt;reading&amp;gt;[,type=[fireAlarm|waterAlarm|burglaryAlarm|carbonMonoxideAlarm]]&lt;br /&gt;
** wenn der type nicht angegeben wird ist fireAlarm der default&lt;br /&gt;
** automatisch werden 0, ok und alles was mit no anfängt als OK erkannt. alles andere gilt als ALARM.&lt;br /&gt;
*Geräte mit mehrstufigen Modi:&lt;br /&gt;
**siehe den zugehörigen Thread im Forum: {{Link2Forum|Topic= 125604}}&lt;br /&gt;
&lt;br /&gt;
Es werden noch einige andere häufig verwendete Geräte (Homematic, hue,...) automatisch erkannt.&lt;br /&gt;
&lt;br /&gt;
to be continued ...&lt;br /&gt;
&lt;br /&gt;
In der [https://developer.amazon.com/docs/device-apis/list-of-interfaces.html List of Capability Interfaces] bei Amazon kann man sehen, welche Möglichkeiten das Smart Home Skill API aktuell in einzelnen Ländern bietet. Leider ohne die jeweiligen landessprachlichen Kommandos.&lt;br /&gt;
&lt;br /&gt;
=== Aktiv Routinen starten ===&lt;br /&gt;
Routinen (eine Funktionalität, die rein - genauso wie &amp;quot;Räume&amp;quot; - bei Amazon liegt und nicht von FHEM Connector beeinflusst wird) waren lange die ewige Antwort auf die Frage: &amp;quot;Meine Frau möchte aber &#039;&#039;&#039;Öffne Rollläden&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; sagen&amp;quot;: In der Alexa-App gibt es im Menü den Punkt &amp;quot;Routinen&amp;quot;, und hier lässt sich eine gewisse Anzahl von Aktionen (unter optionalen Bedingungen) an ein Sprachkommando knüpfen.&lt;br /&gt;
&lt;br /&gt;
Neu: Routinen können inzwischen auch von Skills getriggert werden, und seit Version 0.5.47 (Februar 2020) auch von FHEM Connector. Das braucht niemand, um die Rollläden hochzufahren, denn das kann FHEM ja selber, aber um z.B. eine Ansage auf einem Alexa-Gerät zu triggern. Dafür gibt es auch das FHEM-Modul &amp;quot;echodevice&amp;quot;, aber es erfordert ein paar Klimmzüge. Mit dem aktiven Triggern von Routinen kann FHEM auslösen, dass Alexa ungefragt (!) Dinge wie &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;Die Temperatur in der Tiefkühltruhe hat -16 Grad überschritten&amp;quot;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
in den Raum sagt. Also eine Alternative bzw. Ergänzung zu Alarmen / Erinnerungen per Telegram o.ä.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorgeschichte&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Die Smarthome-Skill-API von Amazon sah schon lange das &amp;quot;proactiveReporting&amp;quot; vor: Also z.B. die gemessene Temperatur nicht erst auf Anfrage hin zu übermitteln, sondern laufend aktiv zu pushen. Aber warum Daten an Amazon senden, wenn es dafür keinen Mehrwert gibt? Beim Öffnen z.B. des Thermostaten in der Alexa-App kommen ohnehin laufend Statusabfragen. Warum also einen Datenpool bei Amazon über die Haustemperatur aufbauen und Änderungen pushen, wenn es keinen Mehrwert dafür gibt? &lt;br /&gt;
&lt;br /&gt;
Inzwischen lassen sich (reale oder vermeintliche) Änderungen von &#039;&#039;Bewegungssensoren&#039;&#039; und &#039;&#039;Fensterkontakten&#039;&#039; als Startbedingung an Alexa-Routinen koppeln. Man kann in der Alexa-App (ggf. fiktive) Öffnen eines Fensterkontaktes an das Aufsagen eines freien Textes durch die Hausbutlerin knüpfen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Umsetzung&#039;&#039;&#039;:&lt;br /&gt;
* Jedes Alexa-Device, dessen Status aktiv zu Amazon gepusht werden soll, im Attribut &amp;quot;alexaProactiveEvents&amp;quot; mit einer &amp;quot;1&amp;quot; versehen. Per Default wird &#039;&#039;kein&#039;&#039; Gerät laufend aktiv zu Amazon gepusht!&lt;br /&gt;
* das geänderte Device einmal zu Amazon pushen &amp;quot;set &amp;lt;alexa&amp;gt; add &amp;lt;device&amp;gt;&amp;quot; (oder &#039;Alexa, suche neue Geräte&#039; murmeln)&lt;br /&gt;
* Das Gerät sollte jetzt beim Anlegen einer neuen Routine (&amp;quot;Neue Routine&amp;quot;, &amp;quot;Wenn Folgendes passiert&amp;quot;, &amp;quot;Smart Home&amp;quot;) als möglicher Triggerpunkt erscheinen.&lt;br /&gt;
&lt;br /&gt;
==== Dummygeräte: ====&lt;br /&gt;
Ein Dummydevice sollte einen Kontaktschalter oder Bewegungssensor simulieren, um dann in FHEM eine beliebige Bedingung als Trigger zu definieren, und eine freie Ansage in Alexa als Routine zu definieren. Hier ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
define voicetrigger1 dummy&lt;br /&gt;
attr voicetrigger1 alexaName alle Fenster&lt;br /&gt;
attr voicetrigger1 alexaProactiveEvents 1&lt;br /&gt;
attr voicetrigger1 genericDeviceType contact&lt;br /&gt;
attr voicetrigger1 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED&lt;br /&gt;
attr voicetrigger1 setList open closed&lt;br /&gt;
&lt;br /&gt;
set alexa add voicetrigger1&lt;br /&gt;
set alexa restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fehlersuche:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Push setzt ein intaktes Push-Token voraus. Sollte im Alexa-Logfile Folgendes erscheinen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;failed to refresh token: invalid_grant: &#039;The request has an invalid grant parameter : refresh_token&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
so ist das Push-Token nicht aktuell. Weil die Auswirkung lange nur war, dass Geräteänderungen nicht aktiv an Amazon gemeldet wurden, gibt es noch keine umfassende Analyse des Problems. Es lässt sich lösen, indem eine oder beide folgenden Aktionen ausgeführt werden:&lt;br /&gt;
* Löschen des &amp;quot;.eventToken&amp;quot; im Alexa-Device über &amp;quot;deletereading&amp;quot;&lt;br /&gt;
* &amp;quot;FHEM-Connector&amp;quot;-Skill auf &amp;quot;alexa.amazon.de&amp;quot; einmal deaktivieren und dann neu verbinden&lt;br /&gt;
&lt;br /&gt;
== Mögliche Probleme und Lösungen ==&lt;br /&gt;
&lt;br /&gt;
Es kann vorkommen, dass Geräte zwar korrekt erkannt werden, aber das durch Alexa erkannte Kommando nicht richtig umgesetzt wird (Beispiel - mittlerweile behoben: {{Link2Forum|Topic=96766}}). Neben dem FHEM-Log gibt es noch das Logfile, welches von alexa-fhem angelegt wird. &lt;br /&gt;
&lt;br /&gt;
=== Fehlersuche über die FHEM-Oberfläche ===&lt;br /&gt;
&lt;br /&gt;
* alexa-fhem Logfile anschauen (Detail-Ansicht des &amp;lt;alexa&amp;gt;-Device aufrufen, klick auf &#039;&#039;&#039;Logfile&#039;&#039;&#039; oben)&lt;br /&gt;
* alexa-fhem im Debug-Modus aufrufen:&lt;br /&gt;
** -D zum alexaFHEM-params attribut hinzufügen&lt;br /&gt;
** Alexa-Befehl auslösen&lt;br /&gt;
** -D aus dem alexaFHEM-params attribut entfernen&lt;br /&gt;
* Die notwendigen Informationen finden sich in dem alexa-Logfile (siehe oben)&lt;br /&gt;
&lt;br /&gt;
=== Fehlersuche über Kommandozeile (lies: Shell) + FHEM-Oberfläche ===&lt;br /&gt;
&lt;br /&gt;
:* set &amp;lt;alexa&amp;gt; stop (FHEM-Oberfläche)&lt;br /&gt;
:* Auf der Kommandozeile &amp;lt;code&amp;gt;alexa-fhem -D -c /opt/fhem/alexa-fhem.cfg &amp;gt; debug.log&amp;lt;/code&amp;gt; starten (dadurch wird die Datei debug.log erzeugt im aktuellen Verzeichnis)&lt;br /&gt;
:* Alexa-Befehl auslösen&lt;br /&gt;
:* alexa-fhem auf der Kommandozeile wieder stoppen (CTRL-C)&lt;br /&gt;
:* set &amp;lt;alexa&amp;gt; start (FHEM-Oberfläche)&lt;br /&gt;
&lt;br /&gt;
Die Datei debug.log sollte Hinweise enthalten, wie das Problem zu lösen ist oder Dich zumindest in die richtige Richtung schieben.&lt;br /&gt;
&lt;br /&gt;
Im Beispiel aus dem Forum fand sich in dem Logfile der Hinweis darauf, dass das Device mit falschen min/max-Werten unterwegs war.&lt;br /&gt;
&lt;br /&gt;
=== Registrierungskey vergessen, Registrierung zurücksetzen ===&lt;br /&gt;
&lt;br /&gt;
Auf der Kommandoshell:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
pi@raspberrypi:~# sudo -u fhem ssh -p 58824 fhem-va.fhem.de status&lt;br /&gt;
Registered.&lt;br /&gt;
Registered on 2019-01-13T15:38:13Z.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
heisst, das der Vereinsserver eigentlich alles hat, was er will. Es wird kein neuer Schlüssel generiert.&lt;br /&gt;
Wenn Du die Situation zurücksetzen möchtest, wäre die hässliche Methode, Deinen SSH-Key zu löschen. Eleganter ist, die Registrierung auf Vereinsseite zu löschen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
pi@raspberrypi:~# sudo -u fhem ssh -p 58824 fhem-va.fhem.de unregister&lt;br /&gt;
Your registration has been removed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
löscht Deinen Schlüssel mitsamt allen dort gespeicherten Daten auf Vereinsseite. Bei Restart von alexa-fhem in FHEM-WEB wird jetzt ein neuer Registrierungskey angefordert.&lt;br /&gt;
&lt;br /&gt;
== Sicherheitskonzept und Secrets ==&lt;br /&gt;
&lt;br /&gt;
Um diesen Abschnitt zu verstehen, solltest Du den Abschnitt &amp;quot;Arbeitsweise&amp;quot; im Kopf haben. Einerseits ist Dir vermutlich einleuchtend, dass ein Server, der per SSH rückwärts nur ausgewählte Kommandos in den Tunnel, den Du aufgebaut hast, leitet, &amp;quot;irgendwie sicherer&amp;quot; ist. Andererseits möchte man nicht blind vertrauen.&lt;br /&gt;
&lt;br /&gt;
=== SSH ===&lt;br /&gt;
==== SSH - macht das nichts Gefährliches? ====&lt;br /&gt;
SSH ist ein Veteran des Internet und entstand, um sich sicher (verschlüsselt) und schnell auf Servern einzuloggen. Schon früh wurde dabei der sogenannte &amp;quot;Reverse-Tunnel&amp;quot; implementiert: Also der vom Client (Deinem Rechner) geäußerte Wunsch: &amp;quot;Bitte leite mir Requests, die bei Dir, Server, auf Port xy eingehen, an meinen lokalen Port yz weiter.&amp;quot;. Dieses Verfahren implementiert der Reverseproxy, wobei tatsächlich auf dem Server für Dich kein echter Port geöffnet wird.&lt;br /&gt;
&lt;br /&gt;
Wie Dir ggf. sicher der Unix-Guru Deines Vertrauens bestätigen wird: Die Kombination&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
ssh -R 1234:localhost:&amp;lt;zufälliger port&amp;gt; zielserver &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
erlaubt keine Ausführung von Shell-Kommandos auf Deinem Server, sondern einzig, dass vom SSH-Programm Verbindungen zu einem lokalen Port auf Deinem Server auf dem alexa-fhem lauscht aufgebaut werden. Du kannst also z.B. mit einem&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
sudo /usr/sbin/tcpdump -X -s 0 -i lo port &amp;lt;zufälliger port&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
vollständig überwachen (oder ggf. permanent aufzeichen), was auf Deinem Server von außen gesteuert passiert.&lt;br /&gt;
&lt;br /&gt;
==== Wie wird bei SSH verschlüsselt? ====&lt;br /&gt;
Im Prinzip wie im Web auf SSL-Seiten, teils mit den gleichen Verschlüsselungsverfahren. Allerdings arbeitet SSH eher wie das im Web recht seltene Verfahren: Bei jeder Verbindung übermitteln sowohl Server wie auch Client den öffentlichen Teil ihres Schlüssels. Anders als im Web wird der Schlüssel aber nicht von einer öffentlichen Zertifizierungsstelle wie &amp;quot;LetsEncrypt&amp;quot; unterschrieben. Stattdessen entscheiden Server wie Client beim ersten Verbindungsaufbau typischerweise per manueller Frage: &amp;quot;Willst Du jetzt und künftig diesem Schlüssel vertrauen?&amp;quot; Bei der Installation wird diese Frage für Deine Seite bejaht, und fortan wird der öffentliche Schlüssel des FHEM-Servers auf Deinem Rechner gespeichert. Ab da bist Du z.B. davor sicher, dass jemand den DNS-Eintrag verbiegt oder sich in den Datenfluss Deines Providers einhängt: Ein geänderter Serverschlüssel würde bemerkt werden.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Soweit klar? Aus Deinem öffentlichen Schlüssel wiederum leitet der Server her: &amp;quot;Das ist definitiv wieder derjenige, der sich damals &amp;quot;registriert&amp;quot; hat&amp;quot;. Und an dieser Stelle kann ich auch den &amp;lt;b&amp;gt;ersten Teil des 3-teiligen Registrierungskeys&amp;lt;/b&amp;gt; erläutern: Die typischerweise 6-stellige Hex-Zahl am Anfang ist der Java-Hashcode Deines öffentlichen Schlüssel. Sie ist damit sozusagen Deine aus Deinem öffentlichen Schlüssel abgeleitete Benutzer-ID.&lt;br /&gt;
&lt;br /&gt;
=== Die Rolle der Secrets ===&lt;br /&gt;
Wenn jetzt klar ist, dass die Verbindung zum Vereinsserver sicher und vertauschungsfrei funktioniert, bleiben noch 2 Probleme zu lösen:&lt;br /&gt;
1) Im Web bei der Skill-Aktivierung musst Du beweisen, dass Du der Mensch am Browser bist, dem der SSH-Tunnel von IP xy mit dem öffentlichen Schlüssel X gehört. Bei der automatischen Registrierung werden lokal auf Deinem Rechner zwei 64-Bit-Secrets generiert:&lt;br /&gt;
* Das &amp;lt;b&amp;gt;Anmelde&amp;lt;/b&amp;gt;-Secret&lt;br /&gt;
* Das &amp;lt;b&amp;gt;Bearer&amp;lt;/b&amp;gt;-Token&lt;br /&gt;
Beim Anmelden des SSH-Keys auf dem öffentlichen Server wird nun der &amp;lt;b&amp;gt;Hashwert&amp;lt;/b&amp;gt; des ersten Secrets übertragen und dort in Verbindung mit Deinem öffentlichen Schlüssel gespeichert. Ein Hashwert bedeutet, dass (sofern das Verfahren, hier SHA256, funktioniert), niemand aus dem Hash das Secret zurückrechnen kann. Ein Datenbankklau auf dem Server gefährdet also nicht die Sicherheit Deines Passwortes.&lt;br /&gt;
&lt;br /&gt;
Wenn Du nun beim Skill-Aktivieren den Registrierungskey eingibst, dann &amp;quot;sieht&amp;quot; der Server zum ersten Mal Dein ausgewürfeltes Secret, vergleicht es mit dem Hashwert und wird es anschließend wieder umgehend vergessen. Anhand des Hashwertes kann der Server aber entscheiden, dass Du der legitime Nutzer zum öffentlichen Schlüssel XY bist.&lt;br /&gt;
&lt;br /&gt;
2) Das zweite Problem ist: Wie soll Amazon &amp;quot;beweisen&amp;quot;, dass sie der legitime Aufrufer sind? Amazon erhält binnen wenigen Sekunden nach dem Klick auf &amp;quot;Activate Skill&amp;quot; den &amp;lt;b&amp;gt;dritten Teil&amp;lt;/b&amp;gt; des Registrierungskeys als sogenanntes Bearer-Token. Zwar läuft er durch den Registrierungsserver, er wird dort, auf dem Registrierungs/Vereinsserver aber nicht gespeichert. Das Bearer-Token wird von Amazon bei allen Requests zu Deinem Server mitgesendet. Da es am Anfang zusätzlich Deine &amp;quot;User-ID&amp;quot; enthält, weiß der Vereinsserver, zu welchem SSH-Tunnel der Request zu senden ist. Aber lokal auf Deinem Rechner wird ausgewertet, ob das Token &amp;quot;stimmt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== alexa-fhem Updaten bzw. &amp;quot;Upgraden&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updaten einer &amp;quot;Connector&amp;quot; Installation:&#039;&#039;&#039;&lt;br /&gt;
* alexa-fhem über FHEM anhalten (Name des Alexa-Device: alexa):&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;set alexa stop&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Auf der Konsole wie anfangs bei der Installation:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;sudo npm update -g alexa-fhem&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Manchmal hat npm Probleme mit einem Update. Dann einfach die aktuelle Version noch mal drüber Installieren: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;sudo npm install -g alexa-fhem&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*alexa-fhem über FHEM wieder starten:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;set alexa start&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Upgraden von einer &amp;quot;Nicht-Connector&amp;quot; Installation (z.B. manuelle Installation per pm-Download):&#039;&#039;&#039;&lt;br /&gt;
* Daten der aktuellen Installation sichern (v.a. config.json / man weiß ja nie)&lt;br /&gt;
* Autostart der aktuellen alexa-fhem Installation deaktivieren:&lt;br /&gt;
** Bei initd: Service deaktivieren mittels: &amp;lt;code&amp;gt;sudo update-rc.d -f alexa remove&amp;lt;/code&amp;gt; Vorher mittels stoppen: &amp;lt;code&amp;gt;sudo service alexa stop&amp;lt;/code&amp;gt; Startscript unter /etc/init.d/ löschen.&lt;br /&gt;
** Bei systemd: Service deaktivieren mittels: &amp;lt;code&amp;gt;sudo systemctl disable alexa&amp;lt;/code&amp;gt; Vorher mittels stoppen: &amp;lt;code&amp;gt;sudo systemctl alexa stop&amp;lt;/code&amp;gt; Startscript unter /etc/systemd/system/ löschen.&lt;br /&gt;
* ALLE vorhandenen alexa-fhem Daten LÖSCHEN! Bleiben Dinge zurück und wird dann laut Connector installiert kann es zu Problemen kommen!&lt;br /&gt;
* (reboot)&lt;br /&gt;
* Installation von alexa-fhem laut Anleitung (Beginn dieses Wiki)&lt;br /&gt;
* Falls eigene Dinge von früher genutzt werden wollen/sollen (z.B. Custom Skill), dann die entsprechenden Einträge aus der gesicherten config.json in die neu angelegte alexa-fhem.cfg (zu finden unter &amp;quot;Edit files&amp;quot;) übernehmen.&lt;br /&gt;
* Werden keine eigenen Dinge verwendet, dann kann der Port (Standard: 3000) geschlossen werden und auch die Daten unter Amazon-Developer können gelöscht werden.&lt;br /&gt;
&lt;br /&gt;
== Bug- und Wunschliste ==&lt;br /&gt;
* Ist beim Start keine Internetverbindung vorhanden, erfolgt kein Retry -- alexa-fhem muss restartet werden (ssh_autoconfig wertet keine temporären Fehler aus)&lt;br /&gt;
&lt;br /&gt;
==Weitergehende Informationen==&lt;br /&gt;
*[[Alexa und Mappings]]&lt;br /&gt;
*[[Alexa Tipps und Kniffe]]&lt;br /&gt;
*[[FHEM Connector for Amazon Alexa]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Sprachsteuerung]]&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=EnOcean-FSR14-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromsto%C3%9F-Schaltrelais&amp;diff=37598</id>
		<title>EnOcean-FSR14-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromstoß-Schaltrelais</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=EnOcean-FSR14-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromsto%C3%9F-Schaltrelais&amp;diff=37598"/>
		<updated>2022-10-23T16:20:09Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: Hinweis das die Konfiguration auch für das FSR14SSR Model funktioniert, hierzu gibt es aktuell keinen eigenen Wiki Beitrag, da dieses Modul auch nicht recht günstig und gebraucht selten zu bekommen ist.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=platzHalter.png&lt;br /&gt;
|Bildbeschreibung=todo&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Empfänger, Aktor und Sender, Sensor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=Eltako RS485-Bus&lt;br /&gt;
|HWChannels=4 Schaltkanäle (bidirektional)&lt;br /&gt;
|HWVoltage=230V~&lt;br /&gt;
|HWPowerConsumption=Standby: 0,1W, alle Kanäle geschlossen: 0,7W&lt;br /&gt;
|HWPoweredBy=12VDC&lt;br /&gt;
|HWSize=1 Teilungseinheit = 18mm breit, 58mm tief&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=Eltako&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-FSR14-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromstoß-Schaltrelais&#039;&#039;&#039; (FSR14) ist ein Aktor &lt;br /&gt;
* für:&lt;br /&gt;
** Montage auf Hutschiene&lt;br /&gt;
* angesteuert (bidirektional) über&lt;br /&gt;
** den Eltako RS485-Bus&lt;br /&gt;
***Anschlussklemmen RSA und RSB&lt;br /&gt;
* für&lt;br /&gt;
** 4 Schalt-Kanäle mit je 4A maximaler Schaltstrom (1000W Glühlampen)&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Schaltrelais (bidirektional)&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
siehe auch [[EnOcean-Eltako-RS485-Bus]]&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
Der Aktor kann nicht vollautomatisch per autocreate in FHEM angelegt werden. &lt;br /&gt;
Die Einbindung in FHEM kann entweder über die Nutzung der inoffiziellen, gerätespezifischen EEP (empfohlen) &#039;&#039;&#039;oder&#039;&#039;&#039; über die manuelle Vorgehensweise erfolgen.  &lt;br /&gt;
&lt;br /&gt;
===== Nutzung der inoffziellen EEP =====&lt;br /&gt;
Im nachfolgenden wird 1 Aktor Ausgang eingelernt und muss für Ausgang 2 bis 4 wiederholt werden. Zudem Funktioniert dieses vorgehen auch beim FSR14SSR Model.&lt;br /&gt;
&lt;br /&gt;
* Beim Definieren wird zunächst der FHEM-Device &amp;lt;name&amp;gt; (hier: EnOcean_switch_FSR14_A01) für Ausgang 1 mit dem inoffiziellen EEP für den FSR14 (M5-38-08) erstellt. Die Beispielhafte HEX Adresse (hier: 00000016) ist die Adresse des FSR14-Kanals welche z.B. über die Software PCT14 vergeben wurde. Z.B. &amp;quot;Adr. 16-19, V1.1, Beschreibung&amp;quot; Bei einem FSR-14-4x werden bei der Adressvergabe 4 aufeinanderfolgende Adressen vergeben. z.B. Adresse 16-19. Die Definition des Devices erfolgt über die Eingabe in das [[Konfiguration#Befehl-Eingabefeld|Befehls-Eingabefeld]] definieren. Beipiel für alle vier Devices  Device 1-4 für Ausgang 1-4 erstellen:&lt;br /&gt;
: &amp;lt;code&amp;gt;define EnOcean_switch_FSR14_A01 EnOcean 00000016 M5-38-08&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;define EnOcean_switch_FSR14_A02 EnOcean 00000017 M5-38-08&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;define EnOcean_switch_FSR14_A03 EnOcean 00000018 M5-38-08&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;define EnOcean_switch_FSR14_A04 EnOcean 00000019 M5-38-08&amp;lt;/code&amp;gt;&lt;br /&gt;
: Hierdurch wird jeweis ein FHEM-Device mit fast allen notwendigen Attributen für den FSR14 angelegt. &lt;br /&gt;
: Folgende Attribute werden der folständigkeit noch je Device benötigt (für A01-A04):&lt;br /&gt;
: Verhindert das massige Schreiben in Logfiles:&lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A01 event-on-change-reading .*&amp;lt;/code&amp;gt; &lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A02 event-on-change-reading .*&amp;lt;/code&amp;gt; &lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A03 event-on-change-reading .*&amp;lt;/code&amp;gt; &lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A04 event-on-change-reading .*&amp;lt;/code&amp;gt; &lt;br /&gt;
:   Adresse definieren, mit welcher FHEM seine anforderung für on/off Befehle sendet:&lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A01 subDef FF000016&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A02 subDef FF000017&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A03 subDef FF000018&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A04 subDef FF000019&amp;lt;/code&amp;gt;&lt;br /&gt;
: &lt;br /&gt;
: Die Adresse &amp;lt;code&amp;gt;FF000016 bis FF000019&amp;lt;/code&amp;gt; muss ebenso angepasst werden, es handelt sich um die Adresse mit welche sich FHEM beim EnOcean System authentifiziert. Siehe auch PTC14 -&amp;gt; ID-Zuordnungsbereich --&amp;gt; Spalte ID. Beispielsweise kann man hier die Hex ID mit FF beginnen lasse zur besseren Erennung und endet mit der Adress ID welche für die Kanäle 1 bis 4 vergeben wurden. z.B. 16 bis 19.   &lt;br /&gt;
:  &lt;br /&gt;
: Theach Method RPS festlegen, da man andernfalls die Rückmeldung / den Status in FHEM nicht erhält. &lt;br /&gt;
:&amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A01 teachMethod RPS&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A02 teachMethod RPS&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A03 teachMethod RPS&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A04 teachMethod RPS&amp;lt;/code&amp;gt;&lt;br /&gt;
:&lt;br /&gt;
:Ebenso muss das Attribut &amp;lt;code&amp;gt;comMode = confirm&amp;lt;/code&amp;gt;gelöscht werden.&lt;br /&gt;
:&amp;lt;code&amp;gt;deleteattr EnOcean_switch_FSR14_A01 comMode&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;deleteattr EnOcean_switch_FSR14_A02 comMode&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;deleteattr EnOcean_switch_FSR14_A03 comMode&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;deleteattr EnOcean_switch_FSR14_A04 comMode&amp;lt;/code&amp;gt;&lt;br /&gt;
* Nun muss der Aktor (der Ausgan 1 bis 4 eingelernt werden) &lt;br /&gt;
** Mittlerer Funktions-Drehschalter: auf LRN&lt;br /&gt;
** Unteren Funktions-Drehschalter auf Kanal 1 stellen.&lt;br /&gt;
* FHEM Eingabefeld: &amp;lt;code&amp;gt;set EnOcean_switch_FSR14_A01 teach&amp;lt;/code&amp;gt; die LEDs am Aktor hören auf zu blinken. &lt;br /&gt;
* Am Aktor nach dem Einlernen beide Drehschalter in die ursprüngliche Position zurückstellen. (z.B. Mitte&amp;amp;Unten auf Auto)&lt;br /&gt;
* Den Vorgang für Kanal 2-4 wiederholen.&lt;br /&gt;
* Fertig&lt;br /&gt;
&lt;br /&gt;
===== Alternative: manuelle Vorgehensweise =====&lt;br /&gt;
Der Aktor kann nicht vollautomatisch per autocreate in FHEM angelegt werden. &lt;br /&gt;
Folgende Schritte sind für jeden Kanal durchzuführen:&lt;br /&gt;
* EnOcean-FHEM-Device &amp;lt;name&amp;gt; mit der Sender-ID des FSR14-Aktors definieren&lt;br /&gt;
* Die Attribute subType, gwCmd und manufID wie nachfolgend im Config-Auszug anlegen&lt;br /&gt;
* Das Attribut subDef mit einer freien Sender-ID des TCMs anlegen ODER falls keine freie Sender-ID bekannt ist, das Attribut komplett weglassen, damit die Vergabe automatisch durch FHEM erfolgt&lt;br /&gt;
* Am Aktor anlernen&lt;br /&gt;
** Mittlerer Funktions-Drehschalter: auf LRN&lt;br /&gt;
** Unteren Funktions-Drehschalter den korrekten Kanal einstellen&lt;br /&gt;
** FHEM Eingabefeld: &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; teach&amp;lt;/code&amp;gt;&lt;br /&gt;
* Am Aktor nach dem Einlernen beide Drehschalter in die ursprüngliche Position&lt;br /&gt;
&lt;br /&gt;
=== FHEM Config-Auszug ===&lt;br /&gt;
Ein exemplarischer Auszug aus der [[Konfiguration]]:&lt;br /&gt;
 define EnOcean_switch_FSR14_A01 EnOcean 00000001  &amp;lt;- SenderID eines FSR14-Kanals (Aktor)&lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 subDef FF834381     &amp;lt;--- FF834381 ist eine der 127 Sender-ID&#039;s des TCM&lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 eep A5-38-08&lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 manufID 00D&lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 webCmd on:off        &lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 gwCmd switching     # Wichtig für FSR14&lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 subType gateway     # Wichtig für FSR14&lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 event-on-change-reading .*     # Verhindert das massige Schreiben in Logfiles&lt;br /&gt;
 define FileLog_EnOcean_switch_FSR14_A01 FileLog ./log/EnOcean_switch_FSR14_A01-%Y.log EnOcean_switch_FSR14_A01&lt;br /&gt;
 attr FileLog_EnOcean_switch_FSR14_A01 logtype text&lt;br /&gt;
&lt;br /&gt;
=== Logbeispiel ===&lt;br /&gt;
&lt;br /&gt;
== Einsatzbeispiel ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Datenblatt: [http://www.eltako.com/fileadmin/downloads/de/Datenblatt/BR14_datenblatt_FSR14-4x.pdf PDF]&lt;br /&gt;
* Anleitung: [http://www.eltako.com/fileadmin/downloads/de/_bedienung/FSR14-4x_30014001-2_dt.pdf PDF]&lt;br /&gt;
* Forum: {{Link2Forum|Topic=25068|Message=181966}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Schalter (Empfänger)]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Hue&amp;diff=36712</id>
		<title>Hue</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Hue&amp;diff=36712"/>
		<updated>2021-12-28T21:51:37Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: Verständlichkeit verbessert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right&amp;quot;&amp;gt;{{Infobox Modul&lt;br /&gt;
|Name=HUEBridge&lt;br /&gt;
|ModPurpose=Anbindung Bridge des Philips Hue Lighting System&lt;br /&gt;
|ModType=d&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
|ModCmdRef=HUEBridge&lt;br /&gt;
|ModForumArea=Zigbee&lt;br /&gt;
|ModTechName=30_HUEBridge.pm&lt;br /&gt;
|ModOwner=Andre ([http://forum.fhem.de/index.php?action=profile;u=430 Forum] / [[Benutzer Diskussion:justme|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|Name=HUEDevice&lt;br /&gt;
|ModPurpose=Ansteuerung Geräte des Philips Hue Lighting System über HUEBridge&lt;br /&gt;
|ModType=d&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
|ModCmdRef=HUEDevice&lt;br /&gt;
|ModForumArea=Zigbee&lt;br /&gt;
|ModTechName=31_HUEDevice.pm&lt;br /&gt;
|ModOwner=Andre ([http://forum.fhem.de/index.php?action=profile;u=430 Forum] / [[Benutzer Diskussion:justme|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HUE-Bridge ==&lt;br /&gt;
=== Einrichtung in FHEM ===&lt;br /&gt;
Die Einrichtung ist wirklich einfach. Mit&lt;br /&gt;
:&amp;lt;code&amp;gt;define Wiesollesheißen HUEBridge 192.168.0.123&amp;lt;/code&amp;gt;&lt;br /&gt;
wird die Bridge eingebunden. (Die IP-Adresse gegen die der HUE Bridge ersetzen oder den DNS Namen.) Dann einfach auf den runden Knopf in der Mitte der Bridge drücken und sie wird von FHEM erkannt. Die drei Lampen des Starterkits werden automatisch erkannt und sind ansteuerbar -&amp;gt; fertig!&lt;br /&gt;
&lt;br /&gt;
WICHTIG: danach in FHEM einmal die Konfiguration speichern damit der Pairing-Key gesichert wird. Sonst muss beim nächsten FHEM-Neustart das Pairing erneut durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Falls die Hue Bridge resetet wurde bleibt der Status auf &amp;quot;paired&amp;quot; und geht nicht mehr auf connected. Um das pairing erneut durchzuführen, muss das Attribut &amp;quot;key&amp;quot; gelöscht werden.&lt;br /&gt;
&lt;br /&gt;
=== Nonblocking ===&lt;br /&gt;
Wenn man möchte, dass die Versuche, die HUEBridge zu kontaktieren, FHEM nicht blockieren, sollte man &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;HUEBridge_Name&amp;gt; httpUtils 1&amp;lt;/code&amp;gt;&lt;br /&gt;
setzen.&lt;br /&gt;
&lt;br /&gt;
== HUE-Device ==&lt;br /&gt;
Als Gerät können alle Hue und LightLink kompatiblen Modelle verwendet werden, die sich an der Bridge anlernen lassen. Dies sind unter anderem:&lt;br /&gt;
*HueBulbs (E27, GU10, Lux, White, ...)&lt;br /&gt;
*Hue Beyond und Phoenix&lt;br /&gt;
*Friends of Hue LightStrips und LivingColors Bloom&lt;br /&gt;
*LivingColors ab gen2&lt;br /&gt;
*LivingColors Bloom, Iris und Aura&lt;br /&gt;
*LivingWhites Energiesparlampen&lt;br /&gt;
*LivingWhites Leuchtenadapter&lt;br /&gt;
*LivingWhites Bulbs&lt;br /&gt;
*[[HUE_Dimmer_Switch|Hue Tap und Hue Dimmer]] (mit Einschränkungen)&lt;br /&gt;
*dresden elektronik Vorschaltgeräte&lt;br /&gt;
*OSRAM LIGHTIFY Lampen (an der Hue Bridge angelernt)&lt;br /&gt;
*Müller Licht tint&lt;br /&gt;
*...&lt;br /&gt;
&lt;br /&gt;
Diese sind jeweils über eine Bridge (HueBridge) steuerbar. Die LivingColors und LivingWhites Geräte sind vorher mit Hilfe einer LivingColors oder LivingWhites Fernbedienung an der Bridge anzulernen.&lt;br /&gt;
&lt;br /&gt;
Es werden auch alle HUE Sensoren (Taster, Bewegungsmelder) unterstützt. Diese werden aber nicht per [[autocreate]] angelegt, sondern müssen manuell definiert werden. Hier ist auf ein passendes Polling-Intervall zu achten (siehe: [[HUE_Dimmer_Switch|HUE Dimmer Switch]]). &lt;br /&gt;
&lt;br /&gt;
Sensoren (und Aktoren) lassen sich Konfigurieren (parameter Einstellen) und eigene Set- und Get- Kommandos im definieren.&lt;br /&gt;
&lt;br /&gt;
=== Mögliche andere Gateways ===&lt;br /&gt;
HUEDevice Client-Devices können (mit leicht unterschiedlichem Funktionsumfang) auch mit den folgenden Gateways anderer Hersteller und dem zugehörigen Bridge-Device verwendet werden:&lt;br /&gt;
*[[Hue#RaspBee_.26_ConBee|RaspBee &amp;amp; ConBee mit deCONZ]] von Dresden Elektronik&lt;br /&gt;
** inklusive Push-API Erweiterung und Szenen &lt;br /&gt;
*[[TRÅDFRI| TRÅDFRI bzw. IKEA Home smart]] &lt;br /&gt;
** inklusive Rollos&lt;br /&gt;
*[https://github.com/bwssytems/ha-bridge HA-Bridge]&lt;br /&gt;
** inklusive aller [https://github.com/dresden-elektronik/deconz-rest-plugin/wiki/Supported-Devices unterstützten Geräte] (Lampen, Sensoren, Thermostate, Rollos, ...)&lt;br /&gt;
** inklusive Update des HA-Bridge internen Gerätestatus per &amp;lt;code&amp;gt;habridgeupdate&amp;lt;/code&amp;gt; Kommando&lt;br /&gt;
*[[ZigBee#Lightify_von_Osram|OSRAM LIGHTIFY Gateway]]&lt;br /&gt;
&lt;br /&gt;
Das HUEBridge Modul erkennt, wenn ein Leuchtmittel zwischen einer Hue und einer deCONZ Bridge (oder umgekehrt) wechselt und verschiebt das zugehörige HUEDevice in FHEM jeweils zum richtigen Bridge-Device. D.h. wenn z.B. zum Firmwareupdate die Bridge gewechselt wird, ist auf FHEM Seite nichts weiter zu tun.&lt;br /&gt;
&lt;br /&gt;
=== Grundlagen - Farbmodelle ===&lt;br /&gt;
Ein HueDevice kann per set-Befehl über unterschiedliche Farbmodelle gesteuert werden. In der folgenden Tabelle ist dargestellt, welche Werte-Kombinationen sinnvoll sind:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Farbmodell !! Bestandteile !! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| xyY || x- und y-Koordinate im Farbraum, Y ist die Helligkeit || &amp;lt;code&amp;gt; set bulb1 xy 0.4595,0.4105 : bri 220 &amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| hue,sat,bri || Farbwert, Sättigung und Helligkeit || &amp;lt;code&amp;gt; set bulb1 hue 14922 : sat 144 : bri 220 &amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ct || Farbwert über Farbtemperatur || &amp;lt;code&amp;gt; set bulb1 color 2600 &amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rgb || Farbbestandteile rot, grün und blau || &amp;lt;code&amp;gt; set bulb1 rgb FFC698 &amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Zur Regelung der Helligkeit sind die Befehle &#039;&#039;bri&#039;&#039; und &#039;&#039;pct&#039;&#039; gleichwertig. &#039;&#039;bri&#039;&#039; hat den Bereich 0..254, &#039;&#039;pct&#039;&#039; 0..100 .&lt;br /&gt;
&lt;br /&gt;
Das Modul lässt die Mischung von Angaben aus unterschiedlichen Farbmodellen technisch zu, jedoch sind diese nicht immer sinnvoll.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HA-Bridge:&#039;&#039;&#039; In der HA-Bridge können virtuelle Devices definiert werden, welche in FHEM als &#039;&#039;Dimmable light&#039;&#039; eingebunden und verwendet werden können.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zu den bereits beschriebenen set-Befehlen kann der Zustand der HA-Bridge-Devices mit Hilfe von &#039;&#039;habridgeupdate&#039;&#039; in Kombination mit &#039;&#039;on&#039;&#039;, &#039;&#039;off&#039;&#039;, &#039;&#039;pct&#039;&#039; und &#039;&#039;bri&#039;&#039; aktualisiert werden, ohne dass die HA-Bridge einen Schaltbefehl versendet. Beispiel: &amp;lt;code&amp;gt;set bulb1 habridgeupdate : on : pct 50&amp;lt;/code&amp;gt; Details siehe: [https://github.com/bwssytems/ha-bridge#update-bridge-internal-light-state].&lt;br /&gt;
&lt;br /&gt;
=== Darstellung im Webfrontend ===&lt;br /&gt;
Wenn man die SVG Icons verwendet, ist es sinnvoll, das Attribut color-icons zu setzen. Mit &lt;br /&gt;
:&amp;lt;code&amp;gt;attr HUEDevice1 color-icons 2&amp;lt;/code&amp;gt; &lt;br /&gt;
werden z.B. die Farben und der Dimmzustand der Lampe als Icon dargestellt. Damit das ganze funktioniert, muss noch &lt;br /&gt;
:&amp;lt;code&amp;gt;attr WEB iconPath fhemSVG:openautomation:default&amp;lt;/code&amp;gt; &lt;br /&gt;
gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Spezielle Konfigurationsmöglichkeiten ===&lt;br /&gt;
Zur Syntax der nachfolgenden Attribute (für widgets) siehe {{Link2Forum|Topic=119298|LinkText=&lt;br /&gt;
Patchvorschlag im Forum}}&lt;br /&gt;
==== setList ==== &lt;br /&gt;
Ermöglicht einen indirekten Zugriff auf den Befehl &#039;&#039;setsensor&#039;&#039; der HUEBridge.&lt;br /&gt;
&lt;br /&gt;
Beispiele &lt;br /&gt;
* {{Link2Forum|Topic=118788|LinkText=	&lt;br /&gt;
Eurotonics Spirit bzw. MOES Thermostat}} &lt;br /&gt;
* [https://forum.fhem.de/index.php/topic,11020.msg1192888.html#msg1192888 HueLabs Scene aus FHEM über die HUEBridge ein- und ausschalten] &lt;br /&gt;
&lt;br /&gt;
==== configList ====&lt;br /&gt;
Ermöglicht einen indirekten Zugriff auf den Befehl &#039;&#039;configsensor&#039;&#039; der HUEBridge.&lt;br /&gt;
&lt;br /&gt;
Beispiele &lt;br /&gt;
* {{Link2Forum|Topic=115102|Message=1093876|LinkText=Aqara motion sensor - duration}} &lt;br /&gt;
* {{Link2Forum|Topic=111887|Message=1064164|LinkText=Aqara vibration sensor - sensitivity}}&lt;br /&gt;
&lt;br /&gt;
== RaspBee &amp;amp; ConBee ==&lt;br /&gt;
Das HUEBridge Modul unterstützt auch die ZigBee Gateway Module RaspBee und ConBee von Dresden Elektronik über die zugehörige deCONZ Software und die Wireless Light Control WebApp und die Phoscon WebApp (kommt zusammen mit deConz). Die hierzu erhältlichen Funk-Vorschaltgeräte sind noch nicht getestet, sollten aber auch funktionieren.&lt;br /&gt;
&lt;br /&gt;
Im diesem {{Link2Forum|Topic=80985|LinkText=Forenbeitrag}} wird über Details der HUE Module diskutiert, die das deCONZ PushAPI über Websockets unterstützen (die entsprechenden Modulversionen sind mittlerweile regulär verfügbar). Sensoren müssen hier nicht mehr gepollt werden.&lt;br /&gt;
&lt;br /&gt;
Mittlerweile funktioniert die Einbindung der RaspBee und ConBee Module auf einem sehr einfachen Weg. Dieser ist in diesem {{Link2Forum|Topic=95288|LinkText=Forenbeitrag}} zusammengefasst. Zusätzliche Plugins sind nicht mehr nötig.&lt;br /&gt;
&lt;br /&gt;
=== Installation von deCONZ unter Proxmox auf einem Intel Nuc ===&lt;br /&gt;
Folgende Schritte sind notwendig, um unter Proxmox zu installieren:&lt;br /&gt;
&lt;br /&gt;
* Installation einer Ubuntu oder Debian VM:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /var/lib/vz/template/iso/&lt;br /&gt;
wget http://releases.ubuntu.com/18.04/ubuntu-18.04.2-desktop-amd64.iso&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:oder&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /var/lib/vz/template/iso/&lt;br /&gt;
wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-9.8.0-amd64-xfce-CD-1.iso&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Weiterreichen des USB Devices in die VM:&lt;br /&gt;
: Auflistung der verfügbaren USB Geräte:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@node1:~# lsusb&lt;br /&gt;
Bus 002 Device 004: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub&lt;br /&gt;
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;br /&gt;
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub&lt;br /&gt;
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:Der Conbee meldet sich als &amp;quot;Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&amp;quot;, hier ist die ID wichtig (0403:6015).&lt;br /&gt;
:Anschließend kann das USB Gerät an die VM weitergeleitet werden. Der Wert 804 ist durch die ID der VM zu ersetzen. &lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
qm set 804 -usb0 host=0403:6015&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Installation von deCONZ: &lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get update &amp;amp;&amp;amp; apt-get upgrade -y&lt;br /&gt;
wget http://www.dresden-elektronik.de/deconz/ubuntu/beta/deconz-2.05.60-qt5.deb&lt;br /&gt;
sudo dpkg -i deconz-2.05.60-qt5.deb &lt;br /&gt;
sudo apt install -f&lt;br /&gt;
sudo systemctl enable deconz&lt;br /&gt;
reboot now&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installation von deCONZ unter Docker ===&lt;br /&gt;
https://hub.docker.com/r/marthoc/deconz/&lt;br /&gt;
&lt;br /&gt;
=== Installation von deCONZ auf einem RaspberryPI ===&lt;br /&gt;
Für den ConBee2 [https://phoscon.de/en/conbee2/install#raspbian kann der guten Installation von Phoscon gefolgt werden]. Entweder ihr installiert deCONZ direkt (wie hier beschrieben) oder über einen Docker Container. Der Docker Container hat ein paar Einschränkungen bzgl. Firmware Updates.&lt;br /&gt;
&lt;br /&gt;
Der ausführende Benutzer muss dialout Rechte haben um auf /dev/tty* zugreifen zu dürfen:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo gpasswd -a pi dialout&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Im Standard wird deCONZ mit dem pi-Benutzer (user id 1000) ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Das deCONZ Repository bei APT hinzufügen (Vorteil davon ist dass später ganz normal mit sudo apt update/upgrade deCONZ aktualisieren könnt):&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -O - http://phoscon.de/apt/deconz.pub.key | \&lt;br /&gt;
           sudo apt-key add -;&lt;br /&gt;
sudo sh -c &amp;quot;echo &#039;deb http://phoscon.de/apt/deconz \&lt;br /&gt;
            $(lsb_release -cs) main&#039; &amp;gt; \&lt;br /&gt;
            /etc/apt/sources.list.d/deconz.list&amp;quot;;&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit der Einführung des Raspberry Pi 3 sind noch weitere Einstellungen notwendig. Diese sind hier: [[Raspberry Pi 3: GPIO-Port Module und Bluetooth|Raspberry Pi 3: GPIO-Port Module und Bluetooth – FHEMWiki]] ausführlich beschrieben.&lt;br /&gt;
&lt;br /&gt;
deCONZ installieren:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install deconz&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wenn ihr euren RaspberryPI mit UI betreibt, kann deCONZ über &#039;&#039;Menu &amp;gt; Programming &amp;gt; deCONZ&#039;&#039; aufgerufen werden. Es gibt aber auch den Service-Modus, der ohne X11 funktionert. Hierfür die Datei &#039;&#039;/lib/systemd/system/deconz.service&#039;&#039; anpassen (ich habe z.B. den Port des Webservers geändert) und den Service wie folgt aktivieren:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable deconz.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HUE auf der Fritzbox ==&lt;br /&gt;
Da auf der FB standardmäßig kein JSON installiert ist, muss dies nachinstalliert werden:  Man lädt das JSON-Paket http://search.cpan.org/CPAN/authors/id/M/MA/MAKAMAKA/JSON-2.53.tar.gz, packt es aus und kopiert den Inhalt vom &amp;lt;b&amp;gt;lib-Verzeichnis&amp;lt;/b&amp;gt; nach \fhem\lib\perl5\site_perl\5.12.2&lt;br /&gt;
&lt;br /&gt;
== HUE auf der Synology Diskstation ==&lt;br /&gt;
Da auf der DS standardmäßig kein JSON installiert ist, muss dies nachinstalliert werden, die Anleitung dazu {{Link2Forum|Topic=19093|Message=224641|LinkText=in diesem Forenbeitrag}}.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:ZigBee]]&lt;br /&gt;
[[Kategorie:Lichteffektgeräte]]&lt;br /&gt;
[[Kategorie:IP Components]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=E-Mail_senden&amp;diff=36558</id>
		<title>E-Mail senden</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=E-Mail_senden&amp;diff=36558"/>
		<updated>2021-12-11T15:44:35Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: Beispiel für Mailversand mit Gmail über Terminal&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Um aus FHEM heraus &#039;&#039;&#039;E-Mail senden&#039;&#039;&#039; zu können, sind abhängig von der verwendeten Platform unterschiedliche Vorgehensweisen erforderlich.&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Anleitung zur Einrichtung von Exim4 auf Debian mit GMX als Smarthost:[[Media:Anleitung_Exim4_Debian_GMX.pdf|PDF]]}}&lt;br /&gt;
== Linux ==&lt;br /&gt;
=== FritzBox 7170 (non-chroot) oder &amp;quot;reine&amp;quot; Linuxe ===&lt;br /&gt;
Datei 99_email.pm im Modul-Verzeichnis mit folgender Funktion anlegen (oder in bestehende 99_irgendwas.pm kopieren):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub fb_mail {&lt;br /&gt;
 my $rcpt = $_[0];&lt;br /&gt;
 my $subject = $_[1];&lt;br /&gt;
 my $text = $_[2];&lt;br /&gt;
 system(&amp;amp;quot;/bin/echo \&amp;amp;quot;$text\&amp;amp;quot; | /usr/bin/mail send -i - -s \&amp;amp;quot;$subject\&amp;amp;quot; -t \&amp;amp;quot;$rcpt\&amp;amp;quot;&amp;amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Aufruf dann mittels &lt;br /&gt;
:&amp;lt;code&amp;gt;{ fb_mail(&#039;empfaenger@mail.de&#039;,&#039;Subject&#039;,&#039;text 123&#039;) }&amp;lt;/code&amp;gt;&lt;br /&gt;
Darauf achten, dass der fhem-User Mails senden darf (in richtige Gruppe eintragen. Ggf. vorher einmal su fhem und probieren).&lt;br /&gt;
&lt;br /&gt;
=== Fritz!Box 7390 ===&lt;br /&gt;
Auf der [[AVM Fritz!Box|FritzBox 7390]] ist diese Funktion seit 10/2012 Bestandteil der FHEM Standardauslieferung. Sie ist untergebracht in FritzBoxUtils.pm und heisst dort FB_mail($$$) (Groß-Kleinschreibung beachten).&lt;br /&gt;
&lt;br /&gt;
Da der Dateiname von FritzBoxUtils.pm nicht mit 99_ beginnt, wird diese Programmdatei nicht automatisch beim Start von FHEM geladen. FHEM muss zum Laden dieser Programmdatei aufgefordert werden. Dazu (z.&amp;amp;nbsp;B. in 99_myUtils.pm) die Zeile &#039;&#039;use FritzBoxUtils;&#039;&#039; einfügen.&lt;br /&gt;
&lt;br /&gt;
Mit dem Install von AVM.de wird fhem in einer chroot-Umgebung ausgeführt, die den Zugriff auf die Mailfunktion der Fritzbox nicht zulässt. Daher muss FHEM in der [http://fhem.de/fhem.html#Download Version von fhem.de] installiert sein. Sollte Ihre Fritzbox bisher mit dem install von AVM laufen, kann (nach einem backup!) das image von fhem.de einfach drüberinstalliert werden. Es sollten dabei alle Einstellungen erhalten bleiben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub fb_mail {&lt;br /&gt;
 my $rcpt = $_[0];&lt;br /&gt;
 my $subject = $_[1];&lt;br /&gt;
 my $text = $_[2];&lt;br /&gt;
 system(&amp;amp;quot;/bin/echo \&amp;amp;quot;$text\&amp;amp;quot; &amp;amp;gt; /var/tmp/fhem_nachricht.txt&amp;amp;quot;);&lt;br /&gt;
 system(&amp;amp;quot;/sbin/mailer send -i &#039;/var/tmp/fhem_nachricht.txt&#039; -s \&amp;amp;quot;$subject\&amp;amp;quot; -t \&amp;amp;quot;$rcpt\&amp;amp;quot;&amp;amp;quot;);&lt;br /&gt;
 system(&amp;amp;quot;rm /var/tmp/fhem_nachricht.txt&amp;amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aufruf dann mittels &lt;br /&gt;
:&amp;lt;code&amp;gt;{ fb_mail(&#039;empfaenger@mail.de&#039;,&#039;Subject&#039;,&#039;text 123&#039;) }&amp;lt;/code&amp;gt;&lt;br /&gt;
bzw. &lt;br /&gt;
:&amp;lt;code&amp;gt;{ FB_mail(&#039;empfaenger@mail.de&#039;,&#039;Subject&#039;,&#039;text 123&#039;) }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dem Mailer können noch weitere Parameter hinzugefügt werden. Mehr dazu siehe: [http://www.wehavemorefun.de/fritzbox/Mailer Mailer]&lt;br /&gt;
&lt;br /&gt;
=== OpenWRT  ===&lt;br /&gt;
Die Anleitung wurde mit einer frühen Beta von Barrier Breaker (r391xx) mit einem TP_Lind WDR 4900 getestet. Da &amp;quot;sendEmail&amp;quot; nicht als Package vorliegt wird in dieser Anleitung &amp;quot;ssmtp&amp;quot; verwendet.&lt;br /&gt;
Die Installation erfolgt mittels:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg update&lt;br /&gt;
opkg install ssmtp_2.64-4_mpc85xx.ipk  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei werden die Pakete libopenssl und zlib mit installiert. Damit ssmtp funktioniert müssen die Dateien /etc/ssmtp/ssmtp.conf und /etc/ssmtp/revaliases angepasst werden.&lt;br /&gt;
&lt;br /&gt;
/etc/ssmtp/ssmtp.conf &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 root=arnold@gmx.net&lt;br /&gt;
 mailhub=mail.gmx.net:465&lt;br /&gt;
 rewriteDomain=gmx.net&lt;br /&gt;
 hostname=gmx.net&lt;br /&gt;
 FromLineOverride=YES&lt;br /&gt;
 UseTLS=YES&lt;br /&gt;
 #UseSTARTTLS=YES&lt;br /&gt;
 AuthUser=arnold@gmx.net&lt;br /&gt;
 AuthPass=Passwort_von_arnold@gmx.net&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/etc/ssmtp/revaliases&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 root:arnold@gmx.net:mail.gmx.net:465&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der [[99_myUtils_anlegen|99_myUtils]] folgende Unterroutine einfügen (von der RPi-Anleitung übernommen):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub OpenWRTMail &lt;br /&gt;
{ &lt;br /&gt;
 my $rcpt = shift;&lt;br /&gt;
 my $subject = shift; &lt;br /&gt;
 my $text = shift; &lt;br /&gt;
 my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
 my $sender = &amp;quot;dockstar\@heye-tammo.de&amp;quot;; &lt;br /&gt;
 Log 1, &amp;quot;sendEmail RCP: $rcpt, Subject: $subject, Text: $text&amp;quot;;&lt;br /&gt;
 $ret .= qx(echo -e &#039;to:$rcpt\n from:$sender\nsubject:$subject\n$text\n&#039; | ssmtp $rcpt);&lt;br /&gt;
 $ret =~ s,[\r\n]*,,g;    # remove CR from return-string &lt;br /&gt;
 Log 1, &amp;quot;sendEmail returned: $ret&amp;quot;; &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ab hier den entsprechenden Abschnitt unter &amp;quot;Raspberry Pi&amp;quot; lesen.&lt;br /&gt;
&lt;br /&gt;
=== Synology DiskStation ===&lt;br /&gt;
Beim DSM 3.2 gab es keinen &amp;lt;code&amp;gt;sendmail&amp;lt;/code&amp;gt;-Befehl, sondern nur eine Funktion für den Versand der System-Benachrichtigungen. Interessanterweise funktionierte aber der &amp;lt;code&amp;gt;php-mail&amp;lt;/code&amp;gt;-Befehl, so dass man mittels folgendem Modul Mails frei versenden kann:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub sendmail($$$) {&lt;br /&gt;
 my($empf, $subj, $nachricht) = @_;&lt;br /&gt;
 system(&amp;amp;quot;php -r &#039;mail(\&amp;amp;quot;$empf\&amp;amp;quot;,\&amp;amp;quot;$subj\&amp;amp;quot;,\&amp;amp;quot;$nachricht\&amp;amp;quot;);&#039;&amp;amp;quot;);&lt;br /&gt;
 undef;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Raspberry Pi ===&lt;br /&gt;
{{Randnotiz|RNTyp=o|RNText=In früheren Distributionen wurde das Paket sowie der Aufruf uU. mit großem &amp;quot;E&amp;quot; geschrieben: &#039;&#039;sendEmail&#039;&#039;.}}Auf einem [[Raspberry Pi]] muß noch sendemail nachinstalliert werden. Diese Anleitung funktioniert ab der Stretch-Version von Raspbian bzw. &#039;&#039;&#039;Debian&#039;&#039;&#039; sowie unter &#039;&#039;&#039;Ubuntu&#039;&#039;&#039; seit ca. Version 16.04.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install sendemail libio-socket-ssl-perl libnet-ssleay-perl perl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man kann die korrekte Funktion im Terminal (ohne &amp;lt;code&amp;gt;{qx()}&amp;lt;/code&amp;gt; ) oder auch in der FHEM Kommandozeile testen (Hinweis: manche Provider (z.B. gmail) lassen diesen Zugang erst nach Freischaltung zu!).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{qx(sendemail -f &#039;Ab\@send.er&#039; -t &#039;Emp\@faeng.er&#039; -u &#039;subject&#039; -m &#039;text&#039; -a &#039;DateinameOderLeer&#039; -s &#039;smtpFQDN:port&#039; -xu &#039;MailUser&#039; -xp &#039;PasswortOhneKlammeraffen&#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel mit Gmail über Linux Terminalfenster:&lt;br /&gt;
(PS: Zusätzlich muss der &amp;quot;Zugriff durch weniger sichere Apps&amp;quot; in Gmail aktiviert werden. https://myaccount.google.com/lesssecureapps)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sendemail -f &#039;Der.Absender@gmail.com&#039; -t &#039;Der.Empfaenger@gmail.com&#039; -u &#039;subject&#039; -m &#039;text&#039; -a &#039;&#039; -s &#039;smtp.gmail.com:587&#039; -xu &#039;Der.Absender&#039; -xp DASSUPERGEHEIMEPASSW0RT&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der [[99_myUtils_anlegen|99_myUtils]] folgende Unterroutine einfügen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
######## DebianMail  Mail auf dem RPi versenden ############ &lt;br /&gt;
# $provider für SMTP Server anpassen. &lt;br /&gt;
# Einmal in der FHEM Kommandozeile, user und password anpassen:&lt;br /&gt;
# {setKeyValue(&amp;quot;myEmailKonto&amp;quot;,&#039;user@domain&#039;);;setKeyValue(&amp;quot;myEmailPasswrd&amp;quot;,&#039;password&#039;)}&lt;br /&gt;
sub DebianMail &lt;br /&gt;
{ &lt;br /&gt;
 my $rcpt = shift;&lt;br /&gt;
 my $subject = shift; &lt;br /&gt;
 my $text = shift; &lt;br /&gt;
 my $attach = shift; &lt;br /&gt;
 my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
 my $error;&lt;br /&gt;
 my $konto = getKeyValue(&amp;quot;myEmailKonto&amp;quot;); &lt;br /&gt;
 my $passwrd = getKeyValue(&amp;quot;myEmailPasswrd&amp;quot;); &lt;br /&gt;
 my $from = $konto; # or use different KeyValue if konto is not the from email address&lt;br /&gt;
 my $provider = &amp;quot;smtp.1und1.de&amp;quot;; # smtp.domain.tld:port see provider documentation&lt;br /&gt;
 #Log 1, &amp;quot;sendEmail RCP: $rcpt&amp;quot;;&lt;br /&gt;
 #Log 1, &amp;quot;sendEmail Subject: $subject&amp;quot;;&lt;br /&gt;
 #Log 1, &amp;quot;sendEmail Text: $text&amp;quot;;&lt;br /&gt;
 #Log 1, &amp;quot;sendEmail Anhang: $attach&amp;quot;;&lt;br /&gt;
 if (not defined($attach)){$attach=&#039;&#039;}&lt;br /&gt;
 $ret .= qx(sendemail -f &#039;$from&#039; -t &#039;$rcpt&#039; -u &#039;$subject&#039; -m &#039;$text&#039; -a &#039;$attach&#039; -s &#039;$provider&#039; -xu &#039;$konto&#039; -xp &#039;$passwrd&#039; -o tls=auto -o message-charset=utf-8);&lt;br /&gt;
 $ret =~ s,[\r\n]*,,g;    # remove CR from return-string &lt;br /&gt;
 Log 1, &amp;quot;sendemail returned: $ret&amp;quot;; &lt;br /&gt;
}&lt;br /&gt;
###############################################################################&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Zugangsdaten für den Email-Account müssen dabei FHEM-intern gespeichert werden. Dazu gibt man einmalig über die Kommandozeile folgendes ein (user@domain und password müssen auf den Email Account geändert werden):&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;  {setKeyValue(&amp;quot;myEmailKonto&amp;quot;,&#039;user@domain&#039;);;setKeyValue(&amp;quot;myEmailPasswrd&amp;quot;,&#039;password&#039;)}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die TLS Verschlüsselung (ehem. SSL) nicht zu nutzen, muss in der viertletzten Zeile tls=no verwendet und der Port des Mailproviders auf 25 eigetragen werden. Sollte anschließend keine Mail verschickt werden, siehe Probleme.&lt;br /&gt;
&lt;br /&gt;
Falls der Body-Text in einem (Android-)Mailer auf dem Handy nicht gezeigt wird, kann der Parameter &#039;&#039;&#039;-o message-content-type=html&#039;&#039;&#039; helfen.&lt;br /&gt;
&lt;br /&gt;
Die Funktion kann beispielsweise folgendermaßen aufgerufen werden:&lt;br /&gt;
{{Randnotiz|RNTyp=g|RNText=Bei allen Feldern können generell doppelte &amp;quot; oder einfache &#039; Anführungszeichen verwendet werden. Innerhalb von &amp;quot;&amp;quot; müssen Sonderzeichen wie @ aber maskiert werden, da sie sonst als Steuerzeichen interpretiert werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;email\@email.domain&amp;quot; oder &#039;email@email.domain&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Direkt in der FHEM Kommandozeile (ohne Anhang)&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{DebianMail(&amp;quot;email\@email.domain&amp;quot;,&amp;quot;Subject&amp;quot;,&amp;quot;Text&amp;quot;)}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Die ordnungsgemäße Ausführung wird mit 71 quittiert.&lt;br /&gt;
Oder im notify mit mehreren Anhängen&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;define Sonstiges notify Fenster:Window:.*,.*Low.Batt*. {\  DebianMail(&amp;quot;email\@email.domain&amp;quot;,&amp;quot;Subject&amp;quot;,&amp;quot;Text&amp;quot;,&amp;quot;&#039;Anhang1&#039; &#039;Anhang2&#039; ...&amp;quot;);;\ }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder (mehr als einen Empfänger, diese können durch Leerzeichen, Semikolon oder Komma getrennt sein)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
define Sonstiges at *01:00:00 {\&lt;br /&gt;
DebianMail(&#039;email@email.domain,email2@email.domain&#039;,&amp;quot;Subject&amp;quot;,&amp;quot;Text&amp;quot;,&amp;quot;&#039;Anhang1&#039; &#039;Anhang2&#039; ...&amp;quot;);;\&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Eine erweiterte - nicht blockierende - Version des Scripts ist [[SSCAM_-_Steuerung_von_Kameras_in_Synology_Surveillance_Station#Mail mit Snapshot im Anhang und Aufnahmelink versenden (sendEmail)|hier]] zu finden}}&lt;br /&gt;
Es ist wichtig, die Dateinamen mit &#039; &#039; zu klammern, da hierdurch auch Leerzeichen im Pfad/Dateinamen möglich sind.&lt;br /&gt;
&lt;br /&gt;
=== BeagleBoard-xM ===&lt;br /&gt;
Auf einem [[:Kategorie:BeagleBoard-xM|BeagleBoard-xM]] mit einem [http://en.opensuse.org/HCL:BeagleBoard-xM OpenSUSE 12.2] kann man ebenfalls das Perl-Programm &#039;&#039;sendEmail&#039;&#039; wie beim RPi nutzen. Dies gibt es aber nicht in den Repositories von openSUSE, sondern man muss sich &#039;&#039;sendEmail&#039;&#039; als Source herunterladen. Das geht am einfachsten per &#039;&#039;wget&#039;&#039;, welches man ebenfalls erst installieren muss (aber aus einem Repository).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ zypper in wget&lt;br /&gt;
$ cd /opt&lt;br /&gt;
$ wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz&lt;br /&gt;
$ tar xvfz sendEmail-v1.56.tar.gz&lt;br /&gt;
$ cd sendEmail-v1.56&lt;br /&gt;
$ cp sendMail /usr/local/bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dann geht man weiter vor wie unter RPi beschrieben (anlegen der SUB-Routine in 99_myUtils usw.).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Die Version 1.56 von &#039;&#039;sendEmail&#039;&#039; ist Stand Januar 2013 die aktuelle. Da diese Programmversion von 2009 stammt, ist mit neuen Versionen selten zu rechnen. Vielleicht schauen Sie trotzdem vorher auf der [http://caspian.dotconf.net/menu/Software/SendEmail/ Homepage von sendEmail] nach.&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
# Kopiere die Datei sendEmail.exe* in Dein FHEM Verzeichnis (hier c:\fhem-5.0\); Quelle: [http://caspian.dotconf.net/menu/Software/SendEmail/ Homepage von sendEmail]&lt;br /&gt;
# Erstelle im FHEM Verzeichnis die Datei wmail.bat mit folgendem Inhalt (eine Zeile):&lt;br /&gt;
:&amp;lt;code&amp;gt;sendEmail -f absender@domain.de -u &amp;quot;%1&amp;quot; -m &amp;quot; &amp;quot; -s SMTP-SERVERAdresse -xu SMTP_USERNAME -xp SMTP_PASSWORT -t empfänger@domain.de -o message-header=&amp;quot;X-Message-Flag: FHEM&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Beispiel fhem.cfg&lt;br /&gt;
## Mail wenn sich der Status von Heizung.* oder Hzg.* ändert &amp;lt;br&amp;gt;&amp;lt;code&amp;gt;define Mail_Heizung notify Heizung.*|Hzg.* { system(&amp;quot;wmail $NAME:$EVENT&amp;quot;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
## Mail bei Signal Aussentemperatur (für dieses Beispiel wird [http://fhem.de/commandref.html#getstate http://fhem.de/commandref.html#getstate getstate] benötigt) &amp;lt;br&amp;gt;&amp;lt;code&amp;gt;define Mail_Aussentemperatur notify Aussentemperatur {\&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;my ($val);;\&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;$val = fhem &amp;quot;getstate $NAME&amp;quot;;;\&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;system(&amp;quot;wmail \&amp;quot;$NAME: $val\&amp;quot;&amp;quot;);;\&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
=== sendEmail / sendemail (Schreibweise alt / neu )  ===&lt;br /&gt;
Erhält man Fehler bez. TLS (&#039;&#039;ERROR =&amp;gt; TLS setup failed: SSL connect attempt failed error: ...&#039;&#039; ), sind eventuell die ca-certificates veraltet oder nicht installiert. Prüfung:&lt;br /&gt;
:&amp;lt;code&amp;gt;apt-cache policy ca-certificates&amp;lt;/code&amp;gt;&lt;br /&gt;
Falls man keine E-Mails verschicken kann, kann man in einem ersten Test prüfen, ob sendEmail als solches funktioniert und die Konfiguration (Benutzer, Passwort, Server-Name usw.) des Mail-Kontos, über das die Mails abgesetzt werden sollen, richtig ist.&lt;br /&gt;
&lt;br /&gt;
Hierzu setzt man in der FHEM-Befehlszeile die folgende Anweisung ab:&lt;br /&gt;
:&amp;lt;code&amp;gt;{ SUB-Routinen-Name(&#039;EMailAdresse@Mail.Domain&#039;,&#039;Test&#039;,&#039;Test-Text&#039;);; }&amp;lt;/code&amp;gt;&lt;br /&gt;
und ersetzt &#039;&#039;SUB-Routinen-Name&#039;&#039; durch den Namen der in 99_myUtils erzeugten Prozedur. Statt &#039;&#039;EMailAdresse@Mail.Domain&#039;&#039; trägt man noch eine gültige E-Mail-Adresse ein und bestätigt den Befehl dann mittels &amp;amp;lt;Enter&amp;amp;gt; (nicht &amp;quot;save&amp;quot;). Empfangen Sie nicht kurzfristig eine entsprechende E-Mail, ist sehr wahrscheinlich an den Zugangsdaten etwas verkehrt. &lt;br /&gt;
&lt;br /&gt;
Vor dem testen der Routine oben kann sendEmail auch über die Konsole (z.&amp;amp;nbsp;B. via ssh) getestet werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;sendEmail -vv -f &#039;Absender@AbsDomain.de&#039; -t &#039;Empfänger@EmpfDomain.de&#039; -u &#039;subject&#039; -m &#039;body&#039; -s &#039;smtp.AbsDomain.de&#039; -xu &#039;AbsenderBenutzername&#039; -xp &#039;AbsenderPasswort&#039; -o tls=yes&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Keine Mail mit TLS Verschlüsselung ===&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Diese Information trifft nur auf alte Systeme zu, aktuell (2021) befindet sich in Zeile 1933 der korrekte Code}}&lt;br /&gt;
Prüfung mit &amp;lt;code&amp;gt;grep -n SSLv /usr/bin/sendEmail&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den Test über die Konsole durchführen. Erhält man folgende Fehlermeldung:&lt;br /&gt;
&#039;&#039;invalid SSL_version specified at /usr/share/perl5/IO/Socket/SSL.pm line 332&#039;&#039;&lt;br /&gt;
muss auf dem Raspberry folgende Datei angepasst werden: &#039;&#039;/usr/bin/sendEmail&#039;&#039;.&lt;br /&gt;
In Zeile 1907 muss&lt;br /&gt;
 if (! IO::Socket::SSL-&amp;gt;start_SSL($SERVER, SSL_version =&amp;gt; &#039;SSLv3 TLSv1&#039;)) {&lt;br /&gt;
&lt;br /&gt;
in folgendes geändert werden&lt;br /&gt;
  if (! IO::Socket::SSL-&amp;gt;start_SSL($SERVER, SSL_version =&amp;gt; &#039;SSLv23:!SSLv2&#039;)) {&lt;br /&gt;
&lt;br /&gt;
Der frühere Tipp, direkt in der SSL.pm Datei zu editieren, führt zu Problemen, wenn man auf FHEM per HTTPS zugreifen will und ist daher nicht zu empfehlen.&lt;br /&gt;
&lt;br /&gt;
=== Email laut Log gesendet aber nicht angekommen? ===&lt;br /&gt;
Dann bitte in der Fritzbox Oberfläche überpüfen, ob unter &amp;quot;System&amp;quot; -&amp;gt; &amp;quot;Push Service&amp;quot; selbiger eingerichtet und aktiviert wurde. &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:FritzBox]]&lt;br /&gt;
[[Kategorie:BeagleBoard-xM]]&lt;br /&gt;
[[Kategorie:Raspberry Pi]]&lt;br /&gt;
[[Kategorie:E-Mail]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=EnOcean-FSR14-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromsto%C3%9F-Schaltrelais&amp;diff=34318</id>
		<title>EnOcean-FSR14-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromstoß-Schaltrelais</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=EnOcean-FSR14-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromsto%C3%9F-Schaltrelais&amp;diff=34318"/>
		<updated>2020-11-29T15:39:08Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Nutzung der inoffziellen EEP */ etwas vergessen du dem vorherigen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=platzHalter.png&lt;br /&gt;
|Bildbeschreibung=todo&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Empfänger, Aktor und Sender, Sensor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=Eltako RS485-Bus&lt;br /&gt;
|HWChannels=4 Schaltkanäle (bidirektional)&lt;br /&gt;
|HWVoltage=230V~&lt;br /&gt;
|HWPowerConsumption=Standby: 0,1W, alle Kanäle geschlossen: 0,7W&lt;br /&gt;
|HWPoweredBy=12VDC&lt;br /&gt;
|HWSize=1 Teilungseinheit = 18mm breit, 58mm tief&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=Eltako&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-FSR14-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromstoß-Schaltrelais&#039;&#039;&#039; (FSR14) ist ein Aktor &lt;br /&gt;
* für:&lt;br /&gt;
** Montage auf Hutschiene&lt;br /&gt;
* angesteuert (bidirektional) über&lt;br /&gt;
** den Eltako RS485-Bus&lt;br /&gt;
***Anschlussklemmen RSA und RSB&lt;br /&gt;
* für&lt;br /&gt;
** 4 Schalt-Kanäle mit je 4A maximaler Schaltstrom (1000W Glühlampen)&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Schaltrelais (bidirektional)&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
siehe auch [[EnOcean-Eltako-RS485-Bus]]&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
Der Aktor kann nicht vollautomatisch per autocreate in FHEM angelegt werden. &lt;br /&gt;
Die Einbindung in FHEM kann entweder über die Nutzung der inoffiziellen, gerätespezifischen EEP (empfohlen) &#039;&#039;&#039;oder&#039;&#039;&#039; über die manuelle Vorgehensweise erfolgen.  &lt;br /&gt;
&lt;br /&gt;
===== Nutzung der inoffziellen EEP =====&lt;br /&gt;
Im nachfolgenden wird 1 Aktor Ausgang eingelernt und muss für Ausgang 2 bis 4 wiederholt werden:&lt;br /&gt;
* Beim Definieren wird zunächst der FHEM-Device &amp;lt;name&amp;gt; (hier: EnOcean_switch_FSR14_A01) für Ausgang 1 mit dem inoffiziellen EEP für den FSR14 (M5-38-08) erstellt. Die Beispielhafte HEX Adresse (hier: 00000016) ist die Adresse des FSR14-Kanals welche z.B. über die Software PCT14 vergeben wurde. Z.B. &amp;quot;Adr. 16-19, V1.1, Beschreibung&amp;quot; Bei einem FSR-14-4x werden bei der Adressvergabe 4 aufeinanderfolgende Adressen vergeben. z.B. Adresse 16-19. Die Definition des Devices erfolgt über die Eingabe in das [[Konfiguration#Befehl-Eingabefeld|Befehls-Eingabefeld]] definieren. Beipiel für alle vier Devices  Device 1-4 für Ausgang 1-4 erstellen:&lt;br /&gt;
: &amp;lt;code&amp;gt;define EnOcean_switch_FSR14_A01 EnOcean 00000016 M5-38-08&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;define EnOcean_switch_FSR14_A02 EnOcean 00000017 M5-38-08&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;define EnOcean_switch_FSR14_A03 EnOcean 00000018 M5-38-08&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;define EnOcean_switch_FSR14_A04 EnOcean 00000019 M5-38-08&amp;lt;/code&amp;gt;&lt;br /&gt;
: Hierdurch wird jeweis ein FHEM-Device mit fast allen notwendigen Attributen für den FSR14 angelegt. &lt;br /&gt;
: Folgende Attribute werden der folständigkeit noch je Device benötigt (für A01-A04):&lt;br /&gt;
: Verhindert das massige Schreiben in Logfiles:&lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A01 event-on-change-reading .*&amp;lt;/code&amp;gt; &lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A02 event-on-change-reading .*&amp;lt;/code&amp;gt; &lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A03 event-on-change-reading .*&amp;lt;/code&amp;gt; &lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A04 event-on-change-reading .*&amp;lt;/code&amp;gt; &lt;br /&gt;
:   Adresse definieren, mit welcher FHEM seine anforderung für on/off Befehle sendet:&lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A01 subDef FF000016&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A02 subDef FF000017&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A03 subDef FF000018&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A04 subDef FF000019&amp;lt;/code&amp;gt;&lt;br /&gt;
: &lt;br /&gt;
: Die Adresse &amp;lt;code&amp;gt;FF000016 bis FF000019&amp;lt;/code&amp;gt; muss ebenso angepasst werden, es handelt sich um die Adresse mit welche sich FHEM beim EnOcean System authentifiziert. Siehe auch PTC14 -&amp;gt; ID-Zuordnungsbereich --&amp;gt; Spalte ID. Beispielsweise kann man hier die Hex ID mit FF beginnen lasse zur besseren Erennung und endet mit der Adress ID welche für die Kanäle 1 bis 4 vergeben wurden. z.B. 16 bis 19.   &lt;br /&gt;
:  &lt;br /&gt;
: Theach Method RPS festlegen, da man andernfalls die Rückmeldung / den Status in FHEM nicht erhält. &lt;br /&gt;
:&amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A01 teachMethod RPS&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A02 teachMethod RPS&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A03 teachMethod RPS&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A04 teachMethod RPS&amp;lt;/code&amp;gt;&lt;br /&gt;
:&lt;br /&gt;
:Ebenso muss das Attribut &amp;lt;code&amp;gt;comMode = confirm&amp;lt;/code&amp;gt;gelöscht werden.&lt;br /&gt;
:&amp;lt;code&amp;gt;deleteattr EnOcean_switch_FSR14_A01 comMode&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;deleteattr EnOcean_switch_FSR14_A02 comMode&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;deleteattr EnOcean_switch_FSR14_A03 comMode&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;deleteattr EnOcean_switch_FSR14_A04 comMode&amp;lt;/code&amp;gt;&lt;br /&gt;
* Nun muss der Aktor (der Ausgan 1 bis 4 eingelernt werden) &lt;br /&gt;
** Mittlerer Funktions-Drehschalter: auf LRN&lt;br /&gt;
** Unteren Funktions-Drehschalter auf Kanal 1 stellen.&lt;br /&gt;
* FHEM Eingabefeld: &amp;lt;code&amp;gt;set EnOcean_switch_FSR14_A01 teach&amp;lt;/code&amp;gt; die LEDs am Aktor hören auf zu blinken. &lt;br /&gt;
* Am Aktor nach dem Einlernen beide Drehschalter in die ursprüngliche Position zurückstellen. (z.B. Mitte&amp;amp;Unten auf Auto)&lt;br /&gt;
* Den Vorgang für Kanal 2-4 wiederholen.&lt;br /&gt;
* Fertig&lt;br /&gt;
&lt;br /&gt;
===== Alternative: manuelle Vorgehensweise =====&lt;br /&gt;
Der Aktor kann nicht vollautomatisch per autocreate in FHEM angelegt werden. &lt;br /&gt;
Folgende Schritte sind für jeden Kanal durchzuführen:&lt;br /&gt;
* EnOcean-FHEM-Device &amp;lt;name&amp;gt; mit der Sender-ID des FSR14-Aktors definieren&lt;br /&gt;
* Die Attribute subType, gwCmd und manufID wie nachfolgend im Config-Auszug anlegen&lt;br /&gt;
* Das Attribut subDef mit einer freien Sender-ID des TCMs anlegen ODER falls keine freie Sender-ID bekannt ist, das Attribut komplett weglassen, damit die Vergabe automatisch durch FHEM erfolgt&lt;br /&gt;
* Am Aktor anlernen&lt;br /&gt;
** Mittlerer Funktions-Drehschalter: auf LRN&lt;br /&gt;
** Unteren Funktions-Drehschalter den korrekten Kanal einstellen&lt;br /&gt;
** FHEM Eingabefeld: &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; teach&amp;lt;/code&amp;gt;&lt;br /&gt;
* Am Aktor nach dem Einlernen beide Drehschalter in die ursprüngliche Position&lt;br /&gt;
&lt;br /&gt;
=== FHEM Config-Auszug ===&lt;br /&gt;
Ein exemplarischer Auszug aus der [[Konfiguration]]:&lt;br /&gt;
 define EnOcean_switch_FSR14_A01 EnOcean 00000001  &amp;lt;- SenderID eines FSR14-Kanals (Aktor)&lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 subDef FF834381     &amp;lt;--- FF834381 ist eine der 127 Sender-ID&#039;s des TCM&lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 eep A5-38-08&lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 manufID 00D&lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 webCmd on:off        &lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 gwCmd switching     # Wichtig für FSR14&lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 subType gateway     # Wichtig für FSR14&lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 event-on-change-reading .*     # Verhindert das massige Schreiben in Logfiles&lt;br /&gt;
 define FileLog_EnOcean_switch_FSR14_A01 FileLog ./log/EnOcean_switch_FSR14_A01-%Y.log EnOcean_switch_FSR14_A01&lt;br /&gt;
 attr FileLog_EnOcean_switch_FSR14_A01 logtype text&lt;br /&gt;
&lt;br /&gt;
=== Logbeispiel ===&lt;br /&gt;
&lt;br /&gt;
== Einsatzbeispiel ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Datenblatt: [http://www.eltako.com/fileadmin/downloads/de/Datenblatt/BR14_datenblatt_FSR14-4x.pdf PDF]&lt;br /&gt;
* Anleitung: [http://www.eltako.com/fileadmin/downloads/de/_bedienung/FSR14-4x_30014001-2_dt.pdf PDF]&lt;br /&gt;
* Forum: {{Link2Forum|Topic=25068|Message=181966}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Schalter (Empfänger)]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=EnOcean-FSR14-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromsto%C3%9F-Schaltrelais&amp;diff=34317</id>
		<title>EnOcean-FSR14-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromstoß-Schaltrelais</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=EnOcean-FSR14-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromsto%C3%9F-Schaltrelais&amp;diff=34317"/>
		<updated>2020-11-29T15:32:46Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Alternative: manuelle Vorgehensweise */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=platzHalter.png&lt;br /&gt;
|Bildbeschreibung=todo&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Empfänger, Aktor und Sender, Sensor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=Eltako RS485-Bus&lt;br /&gt;
|HWChannels=4 Schaltkanäle (bidirektional)&lt;br /&gt;
|HWVoltage=230V~&lt;br /&gt;
|HWPowerConsumption=Standby: 0,1W, alle Kanäle geschlossen: 0,7W&lt;br /&gt;
|HWPoweredBy=12VDC&lt;br /&gt;
|HWSize=1 Teilungseinheit = 18mm breit, 58mm tief&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=Eltako&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-FSR14-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromstoß-Schaltrelais&#039;&#039;&#039; (FSR14) ist ein Aktor &lt;br /&gt;
* für:&lt;br /&gt;
** Montage auf Hutschiene&lt;br /&gt;
* angesteuert (bidirektional) über&lt;br /&gt;
** den Eltako RS485-Bus&lt;br /&gt;
***Anschlussklemmen RSA und RSB&lt;br /&gt;
* für&lt;br /&gt;
** 4 Schalt-Kanäle mit je 4A maximaler Schaltstrom (1000W Glühlampen)&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Schaltrelais (bidirektional)&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
siehe auch [[EnOcean-Eltako-RS485-Bus]]&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
Der Aktor kann nicht vollautomatisch per autocreate in FHEM angelegt werden. &lt;br /&gt;
Die Einbindung in FHEM kann entweder über die Nutzung der inoffiziellen, gerätespezifischen EEP (empfohlen) &#039;&#039;&#039;oder&#039;&#039;&#039; über die manuelle Vorgehensweise erfolgen.  &lt;br /&gt;
&lt;br /&gt;
===== Nutzung der inoffziellen EEP =====&lt;br /&gt;
Im nachfolgenden wird 1 Aktor Ausgang eingelernt und muss für Ausgang 2 bis 4 wiederholt werden:&lt;br /&gt;
* Beim Definieren wird zunächst der FHEM-Device &amp;lt;name&amp;gt; (hier: EnOcean_switch_FSR14_A01) für Ausgang 1 mit dem inoffiziellen EEP für den FSR14 (M5-38-08) erstellt. Die Beispielhafte HEX Adresse (hier: 00000016) ist die Adresse des FSR14-Kanals welche z.B. über die Software PCT14 vergeben wurde. Z.B. &amp;quot;Adr. 16-19, V1.1, Beschreibung&amp;quot; Bei einem FSR-14-4x werden bei der Adressvergabe 4 aufeinanderfolgende Adressen vergeben. z.B. Adresse 16-19. Die Definition des Devices erfolgt über die Eingabe in das [[Konfiguration#Befehl-Eingabefeld|Befehls-Eingabefeld]] definieren. Beipiel für alle vier Devices  Device 1-4 für Ausgang 1-4 erstellen:&lt;br /&gt;
: &amp;lt;code&amp;gt;define EnOcean_switch_FSR14_A01 EnOcean 00000016 M5-38-08&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;define EnOcean_switch_FSR14_A02 EnOcean 00000017 M5-38-08&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;define EnOcean_switch_FSR14_A03 EnOcean 00000018 M5-38-08&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;define EnOcean_switch_FSR14_A04 EnOcean 00000019 M5-38-08&amp;lt;/code&amp;gt;&lt;br /&gt;
: Hierdurch wird jeweis ein FHEM-Device mit fast allen notwendigen Attributen für den FSR14 angelegt. &lt;br /&gt;
: Folgende Attribute werden der folständigkeit noch je Device benötigt (für A01-A04):&lt;br /&gt;
: Verhindert das massige Schreiben in Logfiles:&lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A01 event-on-change-reading .*&amp;lt;/code&amp;gt; &lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A02 event-on-change-reading .*&amp;lt;/code&amp;gt; &lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A03 event-on-change-reading .*&amp;lt;/code&amp;gt; &lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A04 event-on-change-reading .*&amp;lt;/code&amp;gt; &lt;br /&gt;
:   Adresse definieren, mit welcher FHEM seine anforderung für on/off Befehle sendet:&lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A01 subDef FF000016&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A02 subDef FF000017&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A03 subDef FF000018&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A04 subDef FF000019&amp;lt;/code&amp;gt;&lt;br /&gt;
: &lt;br /&gt;
: Die Adresse &amp;lt;code&amp;gt;FF000016 bis FF000019&amp;lt;/code&amp;gt; muss ebenso angepasst werden, es handelt sich um die Adresse mit welche sich FHEM beim EnOcean System authentifiziert. Siehe auch PTC14 -&amp;gt; ID-Zuordnungsbereich --&amp;gt; Spalte ID. Beispielsweise kann man hier die Hex ID mit FF beginnen lasse zur besseren Erennung und endet mit der Adress ID welche für die Kanäle 1 bis 4 vergeben wurden. z.B. 16 bis 19.  Theach Method RPS festlegen, da man andernfalls die Rückmeldung / den Status in FHEM nicht erhält. &lt;br /&gt;
:&amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A01 teachMethod RPS&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A02 teachMethod RPS&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A03 teachMethod RPS&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A04 teachMethod RPS&amp;lt;/code&amp;gt;&lt;br /&gt;
* Nun muss der Aktor (der Ausgan 1 bis 4 eingelernt werden) &lt;br /&gt;
** Mittlerer Funktions-Drehschalter: auf LRN&lt;br /&gt;
** Unteren Funktions-Drehschalter auf Kanal 1 stellen.&lt;br /&gt;
* FHEM Eingabefeld: &amp;lt;code&amp;gt;set EnOcean_switch_FSR14_A01 teach&amp;lt;/code&amp;gt; die LEDs am Aktor hören auf zu blinken. &lt;br /&gt;
* Am Aktor nach dem Einlernen beide Drehschalter in die ursprüngliche Position zurückstellen. (z.B. Mitte&amp;amp;Unten auf Auto)&lt;br /&gt;
* Den Vorgang für Kanal 2-4 wiederholen.&lt;br /&gt;
* Fertig&lt;br /&gt;
&lt;br /&gt;
===== Alternative: manuelle Vorgehensweise =====&lt;br /&gt;
Der Aktor kann nicht vollautomatisch per autocreate in FHEM angelegt werden. &lt;br /&gt;
Folgende Schritte sind für jeden Kanal durchzuführen:&lt;br /&gt;
* EnOcean-FHEM-Device &amp;lt;name&amp;gt; mit der Sender-ID des FSR14-Aktors definieren&lt;br /&gt;
* Die Attribute subType, gwCmd und manufID wie nachfolgend im Config-Auszug anlegen&lt;br /&gt;
* Das Attribut subDef mit einer freien Sender-ID des TCMs anlegen ODER falls keine freie Sender-ID bekannt ist, das Attribut komplett weglassen, damit die Vergabe automatisch durch FHEM erfolgt&lt;br /&gt;
* Am Aktor anlernen&lt;br /&gt;
** Mittlerer Funktions-Drehschalter: auf LRN&lt;br /&gt;
** Unteren Funktions-Drehschalter den korrekten Kanal einstellen&lt;br /&gt;
** FHEM Eingabefeld: &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; teach&amp;lt;/code&amp;gt;&lt;br /&gt;
* Am Aktor nach dem Einlernen beide Drehschalter in die ursprüngliche Position&lt;br /&gt;
&lt;br /&gt;
=== FHEM Config-Auszug ===&lt;br /&gt;
Ein exemplarischer Auszug aus der [[Konfiguration]]:&lt;br /&gt;
 define EnOcean_switch_FSR14_A01 EnOcean 00000001  &amp;lt;- SenderID eines FSR14-Kanals (Aktor)&lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 subDef FF834381     &amp;lt;--- FF834381 ist eine der 127 Sender-ID&#039;s des TCM&lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 eep A5-38-08&lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 manufID 00D&lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 webCmd on:off        &lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 gwCmd switching     # Wichtig für FSR14&lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 subType gateway     # Wichtig für FSR14&lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 event-on-change-reading .*     # Verhindert das massige Schreiben in Logfiles&lt;br /&gt;
 define FileLog_EnOcean_switch_FSR14_A01 FileLog ./log/EnOcean_switch_FSR14_A01-%Y.log EnOcean_switch_FSR14_A01&lt;br /&gt;
 attr FileLog_EnOcean_switch_FSR14_A01 logtype text&lt;br /&gt;
&lt;br /&gt;
=== Logbeispiel ===&lt;br /&gt;
&lt;br /&gt;
== Einsatzbeispiel ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Datenblatt: [http://www.eltako.com/fileadmin/downloads/de/Datenblatt/BR14_datenblatt_FSR14-4x.pdf PDF]&lt;br /&gt;
* Anleitung: [http://www.eltako.com/fileadmin/downloads/de/_bedienung/FSR14-4x_30014001-2_dt.pdf PDF]&lt;br /&gt;
* Forum: {{Link2Forum|Topic=25068|Message=181966}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Schalter (Empfänger)]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=EnOcean-FSR14-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromsto%C3%9F-Schaltrelais&amp;diff=34316</id>
		<title>EnOcean-FSR14-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromstoß-Schaltrelais</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=EnOcean-FSR14-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromsto%C3%9F-Schaltrelais&amp;diff=34316"/>
		<updated>2020-11-29T15:29:41Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Nutzung der inoffziellen EEP */  Anpassung der Beschreibung, da der beschriebene Vorgang zu keinen vollständigen erfolg fürte. Zudem ist nicht auf anhieb ersichtlich, dass dieser Vorgang für alle Kanäle wiederholt werden muss.Device Name erweitert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=platzHalter.png&lt;br /&gt;
|Bildbeschreibung=todo&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Empfänger, Aktor und Sender, Sensor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=Eltako RS485-Bus&lt;br /&gt;
|HWChannels=4 Schaltkanäle (bidirektional)&lt;br /&gt;
|HWVoltage=230V~&lt;br /&gt;
|HWPowerConsumption=Standby: 0,1W, alle Kanäle geschlossen: 0,7W&lt;br /&gt;
|HWPoweredBy=12VDC&lt;br /&gt;
|HWSize=1 Teilungseinheit = 18mm breit, 58mm tief&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=Eltako&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-FSR14-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromstoß-Schaltrelais&#039;&#039;&#039; (FSR14) ist ein Aktor &lt;br /&gt;
* für:&lt;br /&gt;
** Montage auf Hutschiene&lt;br /&gt;
* angesteuert (bidirektional) über&lt;br /&gt;
** den Eltako RS485-Bus&lt;br /&gt;
***Anschlussklemmen RSA und RSB&lt;br /&gt;
* für&lt;br /&gt;
** 4 Schalt-Kanäle mit je 4A maximaler Schaltstrom (1000W Glühlampen)&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Schaltrelais (bidirektional)&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
siehe auch [[EnOcean-Eltako-RS485-Bus]]&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
Der Aktor kann nicht vollautomatisch per autocreate in FHEM angelegt werden. &lt;br /&gt;
Die Einbindung in FHEM kann entweder über die Nutzung der inoffiziellen, gerätespezifischen EEP (empfohlen) &#039;&#039;&#039;oder&#039;&#039;&#039; über die manuelle Vorgehensweise erfolgen.  &lt;br /&gt;
&lt;br /&gt;
===== Nutzung der inoffziellen EEP =====&lt;br /&gt;
Im nachfolgenden wird 1 Aktor Ausgang eingelernt und muss für Ausgang 2 bis 4 wiederholt werden:&lt;br /&gt;
* Beim Definieren wird zunächst der FHEM-Device &amp;lt;name&amp;gt; (hier: EnOcean_switch_FSR14_A01) für Ausgang 1 mit dem inoffiziellen EEP für den FSR14 (M5-38-08) erstellt. Die Beispielhafte HEX Adresse (hier: 00000016) ist die Adresse des FSR14-Kanals welche z.B. über die Software PCT14 vergeben wurde. Z.B. &amp;quot;Adr. 16-19, V1.1, Beschreibung&amp;quot; Bei einem FSR-14-4x werden bei der Adressvergabe 4 aufeinanderfolgende Adressen vergeben. z.B. Adresse 16-19. Die Definition des Devices erfolgt über die Eingabe in das [[Konfiguration#Befehl-Eingabefeld|Befehls-Eingabefeld]] definieren. Beipiel für alle vier Devices  Device 1-4 für Ausgang 1-4 erstellen:&lt;br /&gt;
: &amp;lt;code&amp;gt;define EnOcean_switch_FSR14_A01 EnOcean 00000016 M5-38-08&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;define EnOcean_switch_FSR14_A02 EnOcean 00000017 M5-38-08&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;define EnOcean_switch_FSR14_A03 EnOcean 00000018 M5-38-08&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;define EnOcean_switch_FSR14_A04 EnOcean 00000019 M5-38-08&amp;lt;/code&amp;gt;&lt;br /&gt;
: Hierdurch wird jeweis ein FHEM-Device mit fast allen notwendigen Attributen für den FSR14 angelegt. &lt;br /&gt;
: Folgende Attribute werden der folständigkeit noch je Device benötigt (für A01-A04):&lt;br /&gt;
: Verhindert das massige Schreiben in Logfiles:&lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A01 event-on-change-reading .*&amp;lt;/code&amp;gt; &lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A02 event-on-change-reading .*&amp;lt;/code&amp;gt; &lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A03 event-on-change-reading .*&amp;lt;/code&amp;gt; &lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A04 event-on-change-reading .*&amp;lt;/code&amp;gt; &lt;br /&gt;
:   Adresse definieren, mit welcher FHEM seine anforderung für on/off Befehle sendet:&lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A01 subDef FF000016&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A02 subDef FF000017&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A03 subDef FF000018&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A04 subDef FF000019&amp;lt;/code&amp;gt;&lt;br /&gt;
: &lt;br /&gt;
: Die Adresse &amp;lt;code&amp;gt;FF000016 bis FF000019&amp;lt;/code&amp;gt; muss ebenso angepasst werden, es handelt sich um die Adresse mit welche sich FHEM beim EnOcean System authentifiziert. Siehe auch PTC14 -&amp;gt; ID-Zuordnungsbereich --&amp;gt; Spalte ID. Beispielsweise kann man hier die Hex ID mit FF beginnen lasse zur besseren Erennung und endet mit der Adress ID welche für die Kanäle 1 bis 4 vergeben wurden. z.B. 16 bis 19.  Theach Method RPS festlegen, da man andernfalls die Rückmeldung / den Status in FHEM nicht erhält. &lt;br /&gt;
:&amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A01 teachMethod RPS&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A02 teachMethod RPS&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A03 teachMethod RPS&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr EnOcean_switch_FSR14_A04 teachMethod RPS&amp;lt;/code&amp;gt;&lt;br /&gt;
* Nun muss der Aktor (der Ausgan 1 bis 4 eingelernt werden) &lt;br /&gt;
** Mittlerer Funktions-Drehschalter: auf LRN&lt;br /&gt;
** Unteren Funktions-Drehschalter auf Kanal 1 stellen.&lt;br /&gt;
* FHEM Eingabefeld: &amp;lt;code&amp;gt;set EnOcean_switch_FSR14_A01 teach&amp;lt;/code&amp;gt; die LEDs am Aktor hören auf zu blinken. &lt;br /&gt;
* Am Aktor nach dem Einlernen beide Drehschalter in die ursprüngliche Position zurückstellen.&lt;br /&gt;
* Den Vorgang für Kanal 2-4 wiederholen.&lt;br /&gt;
* Fertig&lt;br /&gt;
&lt;br /&gt;
===== Alternative: manuelle Vorgehensweise =====&lt;br /&gt;
Der Aktor kann nicht vollautomatisch per autocreate in FHEM angelegt werden. &lt;br /&gt;
Folgende Schritte sind für jeden Kanal durchzuführen:&lt;br /&gt;
* EnOcean-FHEM-Device &amp;lt;name&amp;gt; mit der Sender-ID des FSR14-Aktors definieren&lt;br /&gt;
* Die Attribute subType, gwCmd und manufID wie nachfolgend im Config-Auszug anlegen&lt;br /&gt;
* Das Attribut subDef mit einer freien Sender-ID des TCMs anlegen ODER falls keine freie Sender-ID bekannt ist, das Attribut komplett weglassen, damit die Vergabe automatisch durch FHEM erfolgt&lt;br /&gt;
* Am Aktor anlernen&lt;br /&gt;
** Mittlerer Funktions-Drehschalter: auf LRN&lt;br /&gt;
** Unteren Funktions-Drehschalter den korrekten Kanal einstellen&lt;br /&gt;
** FHEM Eingabefeld: &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; teach&amp;lt;/code&amp;gt;&lt;br /&gt;
* Am Aktor nach dem Einlernen beide Drehschalter in die ursprüngliche Position&lt;br /&gt;
&lt;br /&gt;
=== FHEM Config-Auszug ===&lt;br /&gt;
Ein exemplarischer Auszug aus der [[Konfiguration]]:&lt;br /&gt;
 define EnOcean_switch_FSR14_A01 EnOcean 00000001  &amp;lt;- SenderID eines FSR14-Kanals (Aktor)&lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 subDef FF834381     &amp;lt;--- FF834381 ist eine der 127 Sender-ID&#039;s des TCM&lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 eep A5-38-08&lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 manufID 00D&lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 webCmd on:off        &lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 gwCmd switching     # Wichtig für FSR14&lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 subType gateway     # Wichtig für FSR14&lt;br /&gt;
 attr EnOcean_switch_FSR14_A01 event-on-change-reading .*     # Verhindert das massige Schreiben in Logfiles&lt;br /&gt;
 define FileLog_EnOcean_switch_FSR14_A01 FileLog ./log/EnOcean_switch_FSR14_A01-%Y.log EnOcean_switch_FSR14_A01&lt;br /&gt;
 attr FileLog_EnOcean_switch_FSR14_A01 logtype text&lt;br /&gt;
&lt;br /&gt;
=== Logbeispiel ===&lt;br /&gt;
&lt;br /&gt;
== Einsatzbeispiel ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Datenblatt: [http://www.eltako.com/fileadmin/downloads/de/Datenblatt/BR14_datenblatt_FSR14-4x.pdf PDF]&lt;br /&gt;
* Anleitung: [http://www.eltako.com/fileadmin/downloads/de/_bedienung/FSR14-4x_30014001-2_dt.pdf PDF]&lt;br /&gt;
* Forum: {{Link2Forum|Topic=25068|Message=181966}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Schalter (Empfänger)]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-TC-IT-WM-W-EU_Funk-Wandthermostat_AP&amp;diff=32153</id>
		<title>HM-TC-IT-WM-W-EU Funk-Wandthermostat AP</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-TC-IT-WM-W-EU_Funk-Wandthermostat_AP&amp;diff=32153"/>
		<updated>2019-12-29T14:34:29Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Channel (Kanal) 01 _Weather */  Hinweis zum CMDs_pending / CMDs_done&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-TC-IT-WM-W-EU.jpg&lt;br /&gt;
|Bildbeschreibung=HM-TC-IT-WM-W-EU mit Standard-Einstellungen&lt;br /&gt;
|HWProtocol=[[HomeMatic]]&lt;br /&gt;
|HWType=[[HomeMatic Type Thermostat|thermostat]]&lt;br /&gt;
|HWCategory=[[:Kategorie:Temperatursensoren|Temperatursensoren]] [[:Kategorie:Feuchtesensoren|Feuchtesensoren]]&lt;br /&gt;
|HWComm=868,3 MHz&lt;br /&gt;
|HWChannels=7&lt;br /&gt;
|HWVoltage=3 V&lt;br /&gt;
|HWPowerConsumption=40 mA (max)&lt;br /&gt;
|HWPoweredBy=2 x LR6/Mignon/AA&lt;br /&gt;
|HWSize=ohne Rahmen: 55&amp;amp;#8239;x&amp;amp;#8239;55&amp;amp;#8239;x&amp;amp;#8239;20&amp;amp;nbsp;mm&amp;lt;br /&amp;gt;mit Rahmen: 86&amp;amp;#8239;x&amp;amp;#8239;86&amp;amp;#8239;x&amp;amp;#8239;21,5&amp;amp;nbsp;mm&lt;br /&gt;
|HWDeviceFHEM=[[CUL_HM]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=ELV / eQ-3&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;HM-TC-IT-WM-W-EU Funk-Wandthermostat AP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
HomeMatic-Wandthermostat Aufputz. Verfügbar seit Februar 2014. Nachfolger des [[HM-CC-TC_Funk-Wandthermostat|HM-CC-TC]].&lt;br /&gt;
&lt;br /&gt;
== Vorbemerkungen ==&lt;br /&gt;
: &#039;&#039;→ Allgemeine Informationen, die alle HomeMatic Thermostate betreffen, sind unter [[HomeMatic Type Thermostat]] zu finden.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;&#039;HM-TC-IT-WM-W-EU Funk-Wandthermostat&#039;&#039;&#039; misst die Raumtemperatur und Luftfeuchtigkeit. Er verfügt über individuell einstellbare Wochenprogramme und Programmierung direkt am Gerät. Zusätzlich ist auch eine Boost-Funktion vorhanden (ermöglicht ein schnelles, kurzzeitiges Aufheizen des Heizkörpers). Er verfügt über ein eigenes Anzeigedisplay für Soll- und Isttemperatur sowie Luftfeuchtigkeit. Er kann mittels Klebestreifen irgendwo aufgeklebt werden, soll aber auch in Mehrfachrahmen von Berker, ELSO, Gira, Merten und JUNG passen.&lt;br /&gt;
&lt;br /&gt;
Der Hauptnutzen gegenüber den Heizkörperthermostaten besteht neben einer weitaus bequemeren Bedienung und der möglichen Anzeige von Istwerten von Temperatur und Luftfeuchte auch in einer Entkopplung der Raumtemperaturreglung aus der räumlichen Nähe des Heizkörpers. Zusätzlich oder alternativ zur Heizkörpersteuerung ist auch die Anbindung von Fußbodenheizung oder anderen Wärmequellen über einen funkgesteuerten Schaltaktor durch einen separaten Schaltkanal möglich.&lt;br /&gt;
&lt;br /&gt;
== Technische Daten ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technische Daten:&#039;&#039;&#039;&lt;br /&gt;
* Versorgungsspannung: 2 Stck. 1,5 V LR03/Micro/AAA&lt;br /&gt;
* Stromaufnahme (max.): 40 mA&lt;br /&gt;
* Schutzart: IP20&lt;br /&gt;
* Schutzklasse: III&lt;br /&gt;
* Abmessungen (BxHxT ohne Rahmen): 55 x 55 x 20 mm&lt;br /&gt;
* Abmessungen (BxHxT mit Rahmen): 86 x 86 x 21,5 mm&lt;br /&gt;
* Gewicht (ohne Batterien): 74 g&lt;br /&gt;
* Temperaturwahl in Schritten von: 0,5 °C&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zum HM-CC-TC kann der HM-TC-IT-WM-W-EU auch andere HomeMatic-Schaltaktoren (z.B. [[HM-LC-SW1-FM_Schaltaktor_1-fach_UP|HM-LC-SW1-FM]]) über den Channel 07 SwitchTr direkt anlernen, womit z.B. die Steuerung elektrischer Heizungen möglich wird. Der HM-CC-TC konnte direkt nur die HM-CC-VD steuern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Betrieb mit FHEM ==&lt;br /&gt;
Grundsätzlich sind speziell bei der Ansteuerung von [[HM-CC-RT-DN Funk-Heizkörperthermostat]] zwei Betriebsarten mit FHEM denkbar.&lt;br /&gt;
&lt;br /&gt;
=== Steuerung nur über den Wandthermostat ===&lt;br /&gt;
&lt;br /&gt;
In diesem Fall werden zunächst alle [[HM-CC-RT-DN Funk-Heizkörperthermostat]]e mit dem HM-TC-IT-WM-W-EU Funk-Wandthermostat verbunden wie in den Handbüchern beschrieben (dort &amp;quot;verknüpfen&amp;quot; genannt, technisch handelt es sich um eine peering).&lt;br /&gt;
Dazu muss die mittlere Taste der Heizkörper Ventile länger als 3 Sekunden gedrückt werden, ebenso das Einstellrad am Wandthermostat. Die &amp;quot;Verknüpfung&amp;quot; war erfolgreich, wenn beide Geräte &amp;quot;ACK&amp;quot; im Display zeigen. &lt;br /&gt;
&lt;br /&gt;
Wichtig ist, dass keines der Geräte vorher mit einer Zentrale (u.B. VCCU) gepairt sein darf. Im Zweifel vorher unpairen.&lt;br /&gt;
&lt;br /&gt;
Wenn alle Heizkörperthermostat gepeert (&amp;quot;verknüpft&amp;quot;) sind, dann wird das HM-TC-IT-WM-W-EU Funk-Wandthermostat mit FHEM wie in [[HomeMatic Devices pairen]] beschrieben gepairt.&lt;br /&gt;
&lt;br /&gt;
Anschliessend kann per FHEM mit dem Befehl&lt;br /&gt;
 set myTC desired-temp 22&lt;br /&gt;
die Zieltemperatur an den Wandthermostat übermittelt werden. Dieser verteilt diese Temperatur und seine gemessene Ist-Temperatur an die Heizkörperthermostate weiter, die dann entsprechend das Ventil öffnen oder schliessen. Die Wunschtemperatur kann auch lokal an &#039;&#039;&#039;allen&#039;&#039;&#039; Geräten (also auch an einem der Heizkörperthermostate) per Drehregler geändert werden und wird anschliessend an alle anderen Geräte und FHEM weiterübertragen. Kommunikationspartner für FHEM ist aber immer nur das gepairte HM-TC-IT-WM-W-EU Funk-Wandthermostat.&lt;br /&gt;
&lt;br /&gt;
Vorteile dieser Methode:&lt;br /&gt;
* schnell eingerichtet - weniger Komplex, keine Channel peering notwendig.&lt;br /&gt;
* weniger Geräte in FHEM, weniger Daten, weniger Defs, weniger Prozessorlast, geringer Verbrauch des Funkkontingents an FHEMs Funkschnittstelle etc. (Es ist allerdings fraglich, ob in normalen Installationen diese Effekte überhaupt spürbar sind)&lt;br /&gt;
* Heizung kann am HM-TC-IT-WM-W-EU Funk-Wandthermostat auch bei Ausfall von FHEM eingestellt werden.&lt;br /&gt;
* eventuelles Wochenprogramm muss nur an einer Stelle eingespielt werden (nämlich in den Wandthmermostaten)&lt;br /&gt;
&lt;br /&gt;
Nachteile dieser Methode:&lt;br /&gt;
* keine direkte Kontrolle über die Heizkörperthermostate, weniger Daten. Z.B. ist der Valevöffnungsgrad FHEM unbekannt, ebenso Batteriewarnungen, auch lassen sich diverse Dinge nicht konfigurieren wie Button lock, boost-time, remote Kanal zur Abschaltung, temp-offset, maximale Ventilöffnung etc.&lt;br /&gt;
* leichte Verzögerung in der Übermittlung der Zieltemperatur, da diese zuerst an den Wandthermostaten übermittelt wird und dieser erst mit etwas Verzögerung die Daten an die Heizkörperthermostaten weiterreicht.&lt;br /&gt;
* eventuelles Wochenprogramm kann nur an einer Stelle eingespielt werden (nämlich in den Wandthmermostaten), man kann also nicht einzelnen Heizkörpern abweichende Programme geben. Da man einen Wandthermostat wohl in der Praxis nur mit Heizkörperthermostaten &#039;&#039;&#039;eines&#039;&#039;&#039; einzelnen Raumes peeren wird, ist dieser Nachteil ggf eher theoretischern Natur.&lt;br /&gt;
&lt;br /&gt;
=== Steuerung aller Komponenten durch FHEM ===&lt;br /&gt;
&lt;br /&gt;
Diese Methode wird zumindest von den meisten Nutzern des Forums favorisiert, weil sie mehr Kontrolle auch über Details und Geräte ermöglicht.&lt;br /&gt;
&lt;br /&gt;
In diesem Fall werden zunächst alle Geräte - also die Heizkörperthermostate und der Wandthermostat - wie in [[HomeMatic Devices pairen]] beschrieben mit FHEM (also i.d.R. der VCCU) gepairt.&lt;br /&gt;
&lt;br /&gt;
Danach kann das [[Peering (HomeMatic)|Peering]] mit den Heizkörperthermostaten des betreffenden Raumes stattfinden. Je nach Funktion sind dazu einer oder mehrer Channels zu peeren, Details weiter unten.&lt;br /&gt;
&lt;br /&gt;
Vorteile dieser Methode:&lt;br /&gt;
* direkte Kontrolle über die Heizkörperthermostate, Verfügbarkeit Daten wie z.B  Valevöffnungsgrad FHEM, Batteriestatus, am jedem Heizkörper gemessene Temperatur etc.; diverse Paramter am Heizkörperthermostat konfigurierbar, wie Button lock, boost-time, remote Kanal zur Abschaltung, temp-offset, maximale Ventilöffnung etc.&lt;br /&gt;
* schneller Übermittlung der Zieltemperatur (und sonstiger Daten), da diese zugleich an alle gepeerten Thermostaten übermittelt wird.&lt;br /&gt;
* Wochenprogramm frei in alle Geräte übertragbar, dadurch in grossen Räumen gezieltes Ansteuern einzelner Heizkörper möglich etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nachteile dieser Methode:&lt;br /&gt;
* deutlich komplexer in der Einrichtung&lt;br /&gt;
* mehr Geräte in FHEM, mehr Daten, mehr Defs notwendig, höhere Prozessorlast, höhere Auslastung des Funkkontingents an der HM Funkschnittstelle von FHEM (zumindest für &#039;&#039;normale&#039;&#039; Anzahl von Thermostaten eher theoretischer Natur)&lt;br /&gt;
* Zieltemperatur kann ohne FHEM nicht mehr am HM-TC-IT-WM-W-EU Funk-Wandthermostat eingestellt werden, sondern müsste an jedem Heizkörper einzeln eingestellt werden.&lt;br /&gt;
* Wochenprogramm muss ggf auf mehrere Geräte verteilt werden.&lt;br /&gt;
&lt;br /&gt;
Bei der Steuerung aller Komponenten über FHEM müssen je nach Anwendungsfall bestimmte Channels gepeert werden.&lt;br /&gt;
&lt;br /&gt;
==== Channels (Kanäle) ====&lt;br /&gt;
&lt;br /&gt;
===== Channel (Kanal) 01 _Weather =====&lt;br /&gt;
Damit das [[HM-CC-RT-DN Funk-Heizkörperthermostat]] die Temperatur des Wandthermostats übernimmt, muss der Weather Kanal gepeert werden:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-TC-IT-WM-W-EU-Gerät&amp;gt;_Weather peerChan 0 &amp;lt;HM-CC-RT-DN-Gerät&amp;gt;_Weather single set&lt;br /&gt;
&lt;br /&gt;
Hinweis: Nach jeden dieser peer Aufgaben, sollte am Thermostat sowie am Wandthermostat die Status-Meldung CMDs_pending abgewartet werden, bis wieder CMDs_done ausgegeben wird. Andernfalls bekommt man ggf. unerwartete Probleme oder es wird ggf. beim Thermostat oder beim Wandthermostat das peer nicht sauber durchgeführt.&lt;br /&gt;
&lt;br /&gt;
===== Channel (Kanal) 02 _Climate =====&lt;br /&gt;
Damit der Heizkörperthermostat vom Wandthermostat auch eingestellt werden kann (Soll-Temperatur, Mode etc.), muss der Climate Kanal gepeert werden:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-TC-IT-WM-W-EU-Gerät&amp;gt;_Climate peerChan 0 &amp;lt;HM-CC-RT-DN-Gerät&amp;gt;_Climate single set&lt;br /&gt;
Dies muss für jedes zu steuernde Heizkörperthermostat wiederholt werden.&lt;br /&gt;
&lt;br /&gt;
===== Channel (Kanal) 03 _WindowRec =====&lt;br /&gt;
Mit diesem Kanal lassen sich Fensterkontakte (HM-SEC-SC oder HM-SEC-RHS) peeren, die ihren Fensterstatus (geöffnet/gekippt) an ein oder mehrere Thermostate senden. Die Thermostate stellen anschließend die entsprechende (konfigurierbare) Temperatur ein. Der Temperaturwert kann je Fenster-Sensor unterschiedlich definiert werden. Sind mehrere Fenster gleichzeitig geöffnet, so wird der Thermostat auf die Temperatur des Sensors mit dem geringsten Temperaturwert eingestellt. &lt;br /&gt;
&lt;br /&gt;
Damit der Tür-Fensterkontakt den Thermostat aufwecken kann, muss zuerst der Burst-Modus aktiviert werden, siehe dazu [[HM-SEC-SC_Tür-Fensterkontakt#Problembehebung]].&lt;br /&gt;
&lt;br /&gt;
Das eigentliche Peering mit einem Tür-Fensterkontakt läuft wie folgt ab:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-Sec-SC&amp;gt; peerChan 0 &amp;lt;HM-TC-IT-WM-W-EU-Gerät&amp;gt;_WindowRec single set&lt;br /&gt;
&lt;br /&gt;
Der Befehl zur Temperatureinstellung des Heizkörperthermostaten für den Zustand &amp;quot;Fenster offen&amp;quot; lautet, wobei &amp;lt;fensterSensor&amp;gt; die FHEM-Kanalbezeichnung für den Fensterkontakt ist und &amp;lt;tc_WindowRec&amp;gt; die Kanalbezeichnung für den entsprechenden Kanal des Heizkörperthermostates, sowie &amp;lt;Temp&amp;gt; die einzustellende Temperatur (ganzzahliger Wert):&lt;br /&gt;
 set &amp;lt;tc_WindowRec&amp;gt; regSet winOpnTemp &amp;lt;Temp&amp;gt; &amp;lt;fensterSensor&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Channel (Kanal) 06 _remote =====&lt;br /&gt;
Dieser Kanal kann an eine Fernbedienung gekoppelt werden. Per Tastendruck kann man einen bestimmten Mode und/oder eine bestimmte Temperatur wählen. Dabei kann die Reaktion auf einen langen oder kurzen Tastendruck gesondert eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Der Befehl zum peeren lautet, wobei &amp;lt;button&amp;gt; die Kanalbezeichnung der Fernbedienung und &amp;lt;tc-remote&amp;gt; die Kanalbezeichnung des Heizkörperthermostates ist:&lt;br /&gt;
&amp;lt;pre&amp;gt;set &amp;lt;button&amp;gt; peerChan 0 &amp;lt;rt-remote&amp;gt; single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Channel (Kanal) 07 _SwitchTr =====&lt;br /&gt;
Dieser Kanal kann direkt mit einem HomeMatic-Schaltaktor verknüpft (gepeert) werden, um temperaturgesteuerte Schaltvorgänge auszulösen. Eine direkte Nutzung als Feuchtigkeitssensor zur Lüftungssteuerung ist hingegen nicht möglich. Geeignete Aktoren sind alle dauerhaft mit Klein- oder Netzspannung versorgten Aktoren, die zum Betrieb keinen sog. Burst benötigen (Hutschienen-, Unterputz- und Wandmontage). Nicht geeignet sind demnach die batterieversorgten ein- oder vierkanaligen HM-LC-Sw(x)-BA-PCB-Aktoren oder das Empfangsmodul HM-MOD-Re-8, weil der Thermostat den zum &amp;quot;Aufwecken&amp;quot; dieser Geräte nötigen Burst nicht senden kann. &lt;br /&gt;
&lt;br /&gt;
Das Peering mit einem Schaltaktor läuft z.B. wie folgt ab:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-TC-IT-WM-W-EU_SwitchTr&amp;gt; peerChan 0 &amp;lt;HM-LC-SW1-FM&amp;gt; single set&lt;br /&gt;
&lt;br /&gt;
Dies allein ist nicht ausreichend, da der so gepeerte Aktor sich bei jedem Heizbefehl abwechselnd ein- und ausschaltet, da er die Ausschaltbefehle des Thermostaten (short trigger mit Wert 0) ignoriert. Um das zu korrigieren, wird er so programmiert, dass er, wenn eingeschaltet, auf den Ausschaltbefehl reagiert (und ihn ansonsten ignoriert):&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-LC-SW1-FM&amp;gt; regSet shCtOn ltLo &amp;lt;HM-TC-IT-WM-W-EU_SwitchTr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Möchte man mit dem Aktor ein inverses Verhalten erreichen (etwa beim Einsatz als Kühlthermostat oder für stromlos offene Ventilsteuerköpfe von Fußbodenheizungen), so setzt man &#039;&#039;&#039;stattdessen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-LC-SW1-FM&amp;gt; regSet shCtOff ltLo &amp;lt;HM-TC-IT-WM-W-EU_SwitchTr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Einstellungen ==&lt;br /&gt;
&lt;br /&gt;
Die folgenden Einstellungen werden in **Registern** des HM-TC-IT-WM-W-EU vorgenommen. Das heißt, dass diese Einstellungen im Gerät selbst gespeichert werden, nicht in der Konfigurations-Datei von FHEM.&lt;br /&gt;
&lt;br /&gt;
=== Anzeige ===&lt;br /&gt;
&lt;br /&gt;
Register im Kanal&amp;amp;nbsp;2 &#039;&#039;(_Climate)&#039;&#039; erlauben es zu konfigurieren, welche Daten der HM-TC-IT-WM-W-EU in seinem LC-Display anzeigt.&lt;br /&gt;
&lt;br /&gt;
==== showInfo time|date ====&lt;br /&gt;
&lt;br /&gt;
Wählt aus, ob die &#039;&#039;Uhrzeit&#039;&#039; (&amp;lt;code&amp;gt;time&amp;lt;/code&amp;gt;, Standard-Einstellung) oder das &#039;&#039;Datum&#039;&#039; (&amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt;) angezeigt wird. Der folgende Befehl erlaubt es das Datum anzeigen zu lassen:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt;_Climate regSet showInfo date&lt;br /&gt;
&lt;br /&gt;
==== showSetTemp actTemp|setTemp ====&lt;br /&gt;
&lt;br /&gt;
Wählt aus, ob die &#039;&#039;Ist-Temperatur&#039;&#039; (&amp;lt;code&amp;gt;actTemp&amp;lt;/code&amp;gt;, Standard-Einstellung) oder die &#039;&#039;Soll-Temperatur&#039;&#039; (&amp;lt;code&amp;gt;setTemp&amp;lt;/code&amp;gt;) im Display angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt;_Climate regSet showSetTemp setTemp&lt;br /&gt;
&lt;br /&gt;
==== showHumidity temp|tempHum ====&lt;br /&gt;
&lt;br /&gt;
Wählt aus, ob dauerhaft die &#039;&#039;Temperatur&#039;&#039; (&amp;lt;code&amp;gt;temp&amp;lt;/code&amp;gt;, Standard-Einstellung) oder &#039;&#039;Temperatur und Luftfeuchtigkeit&#039;&#039; im Wechsel (&amp;lt;code&amp;gt;tempHum&amp;lt;/code&amp;gt;) im Display angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt;_Climate regSet showHumidity tempHum&lt;br /&gt;
&lt;br /&gt;
=== Tastensperre ===&lt;br /&gt;
&lt;br /&gt;
Um zu verhindern, dass der Modus oder die Temperatur per Tasten bzw. Drehrad am HM-TC-IT-WM-W-EU verändert wird, kann eine Tastensperre gesetzt werden. Dies erfolgt mittels des Befehls:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt; regSet btnLock on&lt;br /&gt;
&lt;br /&gt;
Rückgängig machen geht per:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt; regSet btnLock off&lt;br /&gt;
&lt;br /&gt;
Diese Tastensperre kann man aber am Thermostat durch eine Tastenkombination wieder zurücksetzen. Um sie nur per FHEM rücksetzen zu können, muss&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt; regSet globalBtnLock on&lt;br /&gt;
&lt;br /&gt;
abgesetzt werden. Rückgängig wieder per:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt; regSet globalBtnLock off&lt;br /&gt;
&lt;br /&gt;
=== Temperaturlisten ===&lt;br /&gt;
&lt;br /&gt;
Die Temperaturlisten des HM-TC-IT-WM-W-EU werden identisch zu anderern HomeMatic Thermostaten verwaltet, siehe [[HomeMatic Type Thermostat#Temperaturlisten|HomeMatic Type Thermostat]]. Beim HM-TC-IT-WM-W-EU ist der Kanal&amp;amp;nbsp;2 &#039;&#039;(_Climate)&#039;&#039; für die Temperaturlisten zuständig.&lt;br /&gt;
&lt;br /&gt;
=== Luftfeuchtigkeit in SVG Plot ===&lt;br /&gt;
&lt;br /&gt;
Um die Luftfeuchtigkeit im Plot darzustellen benötigt man im Logfile folgenden Eintrag:&lt;br /&gt;
&lt;br /&gt;
 2017-10-24_22:03:12 WANDTHERMOSTAT_Weather humidity: 61&lt;br /&gt;
&lt;br /&gt;
Um diesen zu erhalten muss man in der Logfile Konfiguration evtl. das DEF um die Weather Information erweitern:&lt;br /&gt;
&lt;br /&gt;
Standardbeispiel:&lt;br /&gt;
 ./log/WANDTHERMOSTAT-%Y.log WANDTHERMOSTAT&lt;br /&gt;
&lt;br /&gt;
Erweiterung:&lt;br /&gt;
 ./log/WANDTHERMOSTAT-%Y.log WANDTHERMOSTAT|WANDTHERMOSTAT_Weather:.*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach einer Weile, sollte der Eintrag &amp;quot;WANDTHERMOSTAT_Weather humidity:&amp;quot; im SVG Plot zur Auswahl zur Verfügung stehen.&lt;br /&gt;
&lt;br /&gt;
== FHEM-Log ==&lt;br /&gt;
=== Event monitor ===&lt;br /&gt;
&lt;br /&gt;
Hier habe ich einmal die Wunschtemperatur erhöht, damit auch was passiert:&lt;br /&gt;
&lt;br /&gt;
  2014-04-09 09:35:11 CUL_HM KH_Bad_Therm CMDs_pending&lt;br /&gt;
  2014-04-09 09:35:11 CUL_HM KH_Bad_Therm_Climate set_desired-temp 18.0&lt;br /&gt;
  2014-04-09 09:35:11 CUL_HM KH_Bad_Therm CMDs_done&lt;br /&gt;
&lt;br /&gt;
Bei mir ist es so, das der SwitchTr Kanal nur mit dem gepeerten Device spricht, hier ein HM-LC-SW1-FM:&lt;br /&gt;
&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung trig_KH_Bad_Therm_SwitchTr: 200&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung trigLast: KH_Bad_Therm_SwitchTr :200&lt;br /&gt;
&lt;br /&gt;
Der hat auch prompt reagiert und die Heizung eingeschaltet:&lt;br /&gt;
&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung level: 100&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung pct: 100&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung deviceMsg: on (to KH_Bad_Therm)&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung on&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung timedOn: off&lt;br /&gt;
&lt;br /&gt;
und noch ein wenig Geplauder der vorhandenen Kanäle:&lt;br /&gt;
&lt;br /&gt;
  2014-04-09 09:36:39 CUL_HM KH_Bad_Therm_Climate measured-temp: 16.0&lt;br /&gt;
  2014-04-09 09:36:39 CUL_HM KH_Bad_Therm_Climate desired-temp: 18.0&lt;br /&gt;
  2014-04-09 09:36:39 CUL_HM KH_Bad_Therm_Climate humidity: 50&lt;br /&gt;
  2014-04-09 09:36:39 CUL_HM KH_Bad_Therm_Climate T: 16.0 desired: 18.0&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm battery: ok&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm batteryLevel: 3&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm measured-temp: 16.0&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm desired-temp: 18.0&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm_Climate measured-temp: 16.0&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm_Climate desired-temp: 18.0&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm_Climate mode: auto&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm_Climate T: 16.0 desired: 18.0&lt;br /&gt;
  2014-04-09 09:36:59 CUL_HM KH_Bad_Therm_Weather temperature: 16.0&lt;br /&gt;
  2014-04-09 09:36:59 CUL_HM KH_Bad_Therm_Weather humidity: 50&lt;br /&gt;
  2014-04-09 09:36:59 CUL_HM KH_Bad_Therm_Weather T: 16.0 H: 50&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Firmware Update ==&lt;br /&gt;
Updates für den HM-TC-IT-WM-W-EU können von der eQ-3 Webseite heruntergeladen werden. Genauere Informationen gibt es unter [[HomeMatic_Firmware_Update]]. Das Thermostat wird in den Updatemodus gebracht, indem beide äußeren Tasten gedrückt werden, während die Batterien eingesetzt werden. Das Display zeigt &amp;quot;FUP&amp;quot; an.&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
* Bei der Firmware 1.2 und dem Kanal Climate funktioniert die Einstellung der Hysterese über das Register hyst2point nicht. Der Eintrag wird ignoriert. &lt;br /&gt;
&lt;br /&gt;
Siehe auch Bericht im [https://de.elv.com/forum/hm-tc-it-wm-w-eu-hystereseeinstellung-hat-keine-funktion-10076 Forum von ELV]&lt;br /&gt;
&lt;br /&gt;
* Der Sensor sollte nur innerhalb seiner Spezifikationen (0° - 50°C) betrieben werden; bei kleineren Temperaturen werden überhöhte Temperaturen gesendet, siehe {{Link2Forum|Topic=80383|LinkText=dieser Forumsbeitrag}}.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/pdf_produkte/HM-TC-IT-WM-W-EU_UM_GE_eQ-3_web.pdf Manual]&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/pdf_produkte/Funk-Wandthermostat_132030A0_Produktdatenblatt_V1.2.pdf Produktdatenblatt] &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Feuchtesensoren]]&lt;br /&gt;
[[Kategorie:Temperatursensoren]]&lt;br /&gt;
[[Kategorie:868MHz]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-CC-RT-DN_Funk-Heizk%C3%B6rperthermostat&amp;diff=32137</id>
		<title>HM-CC-RT-DN Funk-Heizkörperthermostat</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-CC-RT-DN_Funk-Heizk%C3%B6rperthermostat&amp;diff=32137"/>
		<updated>2019-12-27T10:55:21Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Auflistung und Beschreibung der Readings Beispiel Änderung der Einstellung von Readings*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-CC-RT-DN.jpg&lt;br /&gt;
|Bildbeschreibung=HM-CC-RT-DN an Heizkörper montiert&lt;br /&gt;
|HWProtocol=[[HomeMatic]]&lt;br /&gt;
|HWType=[[HomeMatic Type Thermostat|thermostat]]&lt;br /&gt;
|HWCategory=[[:Kategorie:Heizungsventile|Heizungsventile]]&lt;br /&gt;
|HWComm=868 MHz&lt;br /&gt;
|HWChannels=6&lt;br /&gt;
|HWVoltage=3&amp;amp;nbsp;V&lt;br /&gt;
|HWPowerConsumption=180&amp;amp;nbsp;mA&lt;br /&gt;
|HWPoweredBy=2x LR6/Mignon/AA&lt;br /&gt;
|HWSize=54x65x93 mm (BxHxT)&lt;br /&gt;
|HWDeviceFHEM=[[CUL_HM]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=ELV / eQ-3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HM-CC-RT-DN&#039;&#039;&#039; (häufig einfach &#039;&#039;&#039;RT&#039;&#039;&#039; genannt) ist ein Funk-&#039;&#039;Heizkörperthermostate&#039;&#039; mit integriertem &#039;&#039;Stellantrieb&#039;&#039;. Das Thermostat ist seit September&amp;amp;nbsp;2013 verfügbar und ist der Nachfolger des [[HM-CC-VD Funk-Stellantrieb]]s.&lt;br /&gt;
&lt;br /&gt;
== Vorbemerkungen ==&lt;br /&gt;
: &#039;&#039;→ Einstellungen und Informationen, die alle [[HomeMatic]] Thermostate betreffen, sind unter [[HomeMatic Type Thermostat#Temperaturlisten|HomeMatic Type Thermostat]] zu finden.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der HM-CC-RT-DN kann die Temperatur selbst messen (im Gegensatz zum [[HM-CC-VD Funk-Stellantrieb|Vorgänger]]) und verfügt über eine Fenster-Offen-Erkennung sowie eine Boost-Funktion. Der HM-CC-RT-DN &#039;&#039;kann&#039;&#039; von einem [[HM-TC-IT-WM-W-EU Funk-Wandthermostat AP]] gesteuert werden, das ist aber &#039;&#039;optional&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Das Gerät wird seit Anfang Oktober 2013 von FHEM unterstützt (siehe Diskussion im {{Link2Forum|Topic=14738|LinkText=Forum}}).&lt;br /&gt;
&lt;br /&gt;
Der HM-CC-RT-DN scheint das erste HomeMatic-Device zu sein, bei dem ein Update der Firmware auch vom Anwender durchgeführt werden kann. Ein Firmware-Update erfordert einen [[HM-CFG-USB_USB_Konfigurations-Adapter|USB Konfigurations-Adapter]] und eine auf der eQ-3 Webseite herunterladbare Firmwareupdate-Software. Weitere Details sind unter [[#Firmware Update|Firmware Update]] beschrieben.&lt;br /&gt;
{{Hinweis|Die Solltemperaturen eines HM-CC-RT-DN lassen sich &#039;&#039;nicht&#039;&#039; durch einen [[HM-CC-TC Funk-Wandthermostat]] &#039;&#039;steuern&#039;&#039;. Dieser kann nur die Ist-Temperatur an den HM-CC-RT-DN weitergeben, damit nicht die am HM-CC-RT-DN direkt gemessene Raumtemperatur zur Regelung verwendet wird.}}&lt;br /&gt;
Mit einem HM-CC-RT-DN können maximal (neben der Zentrale/FHEM):&lt;br /&gt;
* 7 HomeMatic Heizkörperthermostate&lt;br /&gt;
* 8 HomeMatic Tür-Fensterkontakte / Fenster-Drehgriffkontakte&lt;br /&gt;
* 8 Tastenpaare von HomeMatic Fernbedienungen bzw. Display-Wandtaster&lt;br /&gt;
* 1 HomeMatic Innen-Temperatur-Sensor&lt;br /&gt;
[[Peering (HomeMatic)|gepeert]] werden.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Wird für Wartungs-/Umbaumaßnahmen das Wasser der Heizung abgelassen bzw. diese neubefüllt, sind alle Stellantriebe manuell dauerhaft auf &#039;&#039;&#039;on&#039;&#039;&#039; zu setzen: set &amp;lt;HM_Stellantrieb&amp;gt;_Clima controlManu on. Beim Einsatz eines Wandthermostaten ist der Wandthermostat entsprechend einzustellen.}}&lt;br /&gt;
&lt;br /&gt;
== Technische Daten ==&lt;br /&gt;
* Betriebsspannung: 2 Stck. 1,5V LR6/Mignon/AA&lt;br /&gt;
* Stromaufnahme: 180 mA max.&lt;br /&gt;
* Abmessungen (B x H x T): 54 x 65 x 93 mm&lt;br /&gt;
* Gewicht: 180 g (ohne Batterien)&lt;br /&gt;
* Ventilanschluss: M30 x 1,5 mm&lt;br /&gt;
&lt;br /&gt;
Aktuelle Firmware: 1.4 (2018)&lt;br /&gt;
&lt;br /&gt;
== Betrieb mit FHEM ==&lt;br /&gt;
Der Funk-Heizkörperthermostat muss zuerst mit FHEM [[Pairing (HomeMatic)|gepairt]] werden. Stellen Sie sicher, dass FHEM aktuell ist ([[update]] durchführen)&lt;br /&gt;
&lt;br /&gt;
Das Pairing sollte wie in [[HomeMatic Devices pairen]] beschrieben durchgeführt werden &lt;br /&gt;
&lt;br /&gt;
=== Channels (Kanäle) ===&lt;br /&gt;
==== Channel (Kanal) 01 _Weather ====&lt;br /&gt;
&lt;br /&gt;
Dieser Kanal dient zur Einspeisung der (gemessenen) &#039;&#039;Ist-Temperatur&#039;&#039;. Als Sensor können zum Beispiel das [[HM-TC-IT-WM-W-EU Funk-Wandthermostat AP|HM-TC-IT-WM-W-EU Funk-Wandthermostat]] oder ein [[HM-WDS40-TH-I Funk-Temperatur-/Feuchtesensor innen (IT)|HM-WDS40-TH-I Funk-Temperatur-/Feuchtesensor]] dienen.&lt;br /&gt;
&lt;br /&gt;
Ein Temperatur-Sensor &#039;&#039;tempSensor&#039;&#039; kann mit dem &#039;&#039;_Weather&#039;&#039;-Kanal wie folgt [[Peering (HomeMatic)|gepeert]] werden: &lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt;_Weather peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_Weather single set&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
  set EG_Buero_WANDTHERMOSTAT_Weather peerChan 0 EG_Buero_THERMOSTAT_Weather single set&lt;br /&gt;
&lt;br /&gt;
ACHTUNG: Das Wandthermostat sowie das Thermostat Ventil (Beispiel &amp;quot;EG_Buero_WANDTHERMOSTAT&amp;quot; und EG_Buero_THERMOSTAT) werden vorher in FHEM den Status &amp;quot;CMDs_done&amp;quot; anzeigen.&lt;br /&gt;
Beim peerChan wird dann bei beiden &amp;quot;CMDs_pending&amp;quot; stehen. Wobei das Wandthermostat sehr schnell wieder auf CMDs_done zurück springt.&lt;br /&gt;
Allerdings ist dringend darauf zu achten, dass das Thermostat Ventil auch wieder auf  &amp;quot;CMDs_done&amp;quot; wechselt, bevor man den nächsten Befehl absendet.&lt;br /&gt;
Das Heizkörper Ventil kann unter Umständen 3 bis 5 min benötigen bis wieder &amp;quot;CMDs_done&amp;quot; steht. Evtl. kann man dies durch die BOOST Taste beschleunigen. Da das Ventil etwa alle 3 min aufwacht, prüft und Daten sendet / empfängt. Sollte man mit dem Befehlen weiter gemacht haben, so kann es zu dem Problem führen, dass einer nicht mehr mit dem Pending aufhört. In dem Fall empfiehlt es sich beide Devices von FHEM abzumelden und auf Werkseinstellung zu resetten. &lt;br /&gt;
&lt;br /&gt;
Zum Test haucht man das Wandthermostat an oder hält es einige Zeit in der Hand bis die Temperatur steigt, nach etwa 3 Minuten sollte man auch am Thermostat Ventil einen Temperaturanstieg sehen.&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 02 _Climate ====&lt;br /&gt;
Dieser Kanal erlaubt es dem [[HM-TC-IT-WM-W-EU Funk-Wandthermostat AP|HM-TC-IT-WM-W-EU Funk-Wandthermostat]] den HM-CC-RT-DN zu steuern. Dazu müssen die beiden Geräte gepeert werden:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt;_Climate peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_Climate single set&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 03 _WindowRec ====&lt;br /&gt;
Mit diesem Kanal können Fensterkontakte ([[HM-SEC-SC Tür-Fensterkontakt|HM-SEC-SC]] und [[HM-Sec-RHS Funk-Fenster-Drehgriffkontakt|HM-SEC-RHS]]) ihren Fensterstatus (geöffnet / gekippt) an ein oder mehrere Thermostate senden. Die Thermostate stellen anschließend die entsprechende (konfigurierbare) Temperatur ein. Der Temperaturwert kann je Fenster-Sensor unterschiedlich definiert werden. Sind mehrere Fenster gleichzeitig geöffnet, so wird der Thermostat auf die Temperatur des Sensors mit dem geringsten Temperaturwert eingestellt. &lt;br /&gt;
Ferner wird empfohlen, bei Einsatz von externen Sensoren, die interne „Fenster auf Erkennung“ zu deaktivieren (weitere Details sind im [[HM-CC-RT-DN Funk-Heizkörperthermostat#Channel .28Kanal.29 04 _Clima|Channel (Kanal) 04 _Clima]] beschrieben).&lt;br /&gt;
&lt;br /&gt;
Der Befehl zum Peeren lautet, wobei &amp;lt;fensterSensor&amp;gt; die FHEM-Kanalbezeichnung für den Fensterkontakt ist und &amp;lt;rt_WindowRec&amp;gt; die Kanalbezeichnung für den entsprechenden Kanal des Heizkörperthermostates:&lt;br /&gt;
 set &amp;lt;fensterSensor&amp;gt; peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_WindowRec single set&lt;br /&gt;
&lt;br /&gt;
Zum Löschen (=unpeeren) dieser Kopplung:&lt;br /&gt;
 set &amp;lt;fensterSensor&amp;gt; peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_WindowRec single unset&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung&#039;&#039;&#039;: Der Peer-(Lösch-)Vorgang muss erst am Fensterkontakt durch Drücken der Anlerntaste ausgelöst werden, und zwar auch dann, wenn der Fensterkontakt schon vorher mit FHEM gepairt wurde. Dann kann der oben genannte Befehl in FHEM abgesetzt werden. Wichtig scheint auch, dass der Fensterkontakt geschlossen ist wenn man die Anlerntaste drückt.&lt;br /&gt;
&lt;br /&gt;
Der Befehl zur Temperatureinstellung des Heizkörperthermostaten für den Zustand &amp;quot;Fenster offen&amp;quot; lautet, wobei &amp;lt;fensterSensor&amp;gt; die FHEM-Kanalbezeichnung für den Fensterkontakt ist und &amp;lt;rt_WindowRec&amp;gt; die Kanalbezeichnung für den entsprechenden Kanal des Heizkörperthermostates, sowie &amp;lt;Temp&amp;gt; die einzustellende Temperatur (ganzzahliger Wert):&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt;_WindowRec regSet winOpnTemp &amp;lt;Temp&amp;gt; &amp;lt;fensterSensor&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Hinweise im Forum, siehe {{Link2Forum|Topic=41541|Message=348044|LinkText=FHEM Forum-Beitrag]&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 04 _Clima ====&lt;br /&gt;
Dieser Kanal dient zum Einstellen der Betriebsparameter, auch [[#Temperaturlisten|Temperaturlisten]] sind hierauf zu übertragen.&lt;br /&gt;
Mit dem Modul [[Weekprofile|Wochenplan / Weekprofile]] können die Wochenpläne komfortabel in FHEM erstellt und an die Thermostate übertragen werden.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|In älteren Versionen von FHEM wurde dieser Kanal durch &#039;&#039;autocreate&#039;&#039; als &amp;lt;code&amp;gt;_ClimRT_tr&amp;lt;/code&amp;gt; angelegt. Der Hersteller hat hier offenbar die internen Bezeichnungen geändert, denn beim Vorläufermodell HM-CC-TC mussten Temperaturlisten auf den Kanal &#039;&#039;Climate&#039;&#039; übertragen werden.}}&lt;br /&gt;
&lt;br /&gt;
Die maximale Öffnung des Ventils kann mittels folgendem Befehl eingestellt werden (hier auf 80 %):&lt;br /&gt;
  set &amp;lt;HM-CC-RT-DN&amp;gt;_Clima regSet valveMaxPos 80&lt;br /&gt;
&lt;br /&gt;
Die interne &amp;quot;Fenster-auf&amp;quot;-Erkennung kann man wie folgt abschalten:&lt;br /&gt;
  set &amp;lt;HM-CC-RT-DN&amp;gt;_Clima regSet winOpnMode off&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 05 _ClimaTeam ====&lt;br /&gt;
Dieser Kanal erlaubt es mehrere HM-CC-RT-DN zu einem &amp;quot;Team&amp;quot; zu gruppieren. Ein Mitglied des Teams meldet&lt;br /&gt;
* Änderungen der Temperatur am Handrad&lt;br /&gt;
* Einschalten des Boost-Modus am Taster&lt;br /&gt;
an seine &amp;quot;Teamkollegen&amp;quot; weiter. Folgende Änderungen werden &#039;&#039;&#039;nicht&#039;&#039;&#039; weitergegeben:&lt;br /&gt;
* Status der Fensterkontakte&lt;br /&gt;
* Temperaturlisten/Wochenplan und daraus folgende Änderungen&lt;br /&gt;
* Änderungen durch Fernbedienungen&lt;br /&gt;
* Änderungen durch eine HomeMatic-Zentrale&lt;br /&gt;
&lt;br /&gt;
Befehl zum Peeren, wobei &#039;&#039;&amp;lt;HM-CC-RT-DN#1&amp;gt;_ClimaTeam&#039;&#039;, &#039;&#039;&amp;lt;HM-CC-RT-DN#2&amp;gt;_ClimaTeam&#039;&#039;, ..., &#039;&#039;&amp;lt;HM-CC-RT-DN#8&amp;gt;_ClimaTeam&#039;&#039; die Kanalbezeichnungen der jeweiligen ClimaTeam-Kanäle sind:&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN#1&amp;gt;_ClimaTeam peerChan 0 &amp;lt;HM-CC-RT-DN#2&amp;gt;_ClimaTeam single&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN#1&amp;gt;_ClimaTeam peerChan 0 &amp;lt;HM-CC-RT-DN#3&amp;gt;_ClimaTeam single&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN#2&amp;gt;_ClimaTeam peerChan 0 &amp;lt;HM-CC-RT-DN#3&amp;gt;_ClimaTeam single&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 06 _remote ====&lt;br /&gt;
Dieser Kanal kann an eine Fernbedienung gekoppelt werden. Per Tastendruck kann man einen bestimmten Mode und/oder eine bestimmte Temperatur wählen. Dabei kann die Reaktion auf einen langen oder kurzen Tastendruck gesondert eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Der Befehl zum Peeren lautet, wobei &amp;lt;button&amp;gt; die Kanalbezeichnung der Fernbedienung und &amp;lt;rt-remote&amp;gt; die Kanalbezeichnung des Heizkörperthermostates ist:&lt;br /&gt;
  set &amp;lt;button&amp;gt; peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_remote single&lt;br /&gt;
&lt;br /&gt;
=== Betriebsmodus Auto, Manu, Party (Urlaub) ===&lt;br /&gt;
&lt;br /&gt;
Der HM-CC-RT-DN verfügt über drei Betriebsmodus: Auto, Manu (Manuell) und Party (Urlaub). &lt;br /&gt;
&lt;br /&gt;
==== Modus Auto ====&lt;br /&gt;
Das Gerät arbeitet gemäß des gespeicherten Wochenprogramms. Manuelle Änderungen sind möglich, werden aber beim nächsten Schaltpunkt überschrieben.&lt;br /&gt;
&lt;br /&gt;
==== Modus Manu ====&lt;br /&gt;
Die Temperatur wird manuell eingestellt, das Wochenprogramm wird nicht abgearbeitet. &amp;quot;Manuell Einstellen&amp;quot; bedeutet entweder am Handrad oder durch Übermittlung eines &amp;quot;set desired temp&amp;quot;-Befehls von FHEM (oder equivalent von einer CCU).&lt;br /&gt;
&lt;br /&gt;
==== Modus Party (Urlaub) ====&lt;br /&gt;
Die eingestellte Temperatur gilt bis zu einem gegebenen Endzeitpunkt, anschließend wechselt das Thermostat in den &#039;&#039;Auto&#039;&#039;-Modus. &lt;br /&gt;
&lt;br /&gt;
==== Welchen Modus nutzen? ====&lt;br /&gt;
Im Umfeld von FHEM sind alle drei Modi einsetzbar. Betrieb in &amp;quot;Auto&amp;quot; hat den Vorteil, dass bei Ausfall der FHEM-Instanz der Thermostat trotzdem noch die eingespeicherten Wochenprogramme abarbeitet. Nachteilig ist aber, dass die Steuerung komplexer wird, weil sowohl die Einstellungen am Thermostat als auch Schaltbefehle von FHEM das Verhalten beeinflussen. Vielfach wird daher im Umfeld von FHEM der Modus &amp;quot;Manu&amp;quot; benutzt, hier wird die Temperatur nur per einzelnem FHEM Schaltbefehl gesteuert, ausgelöst z.b. durch &amp;quot;at&amp;quot; Kommandos, Anwesenheitserkennung oder Bewegungsmelder. Sollte FHEM (oder die Funkverbindung) ausfallen, bleibt der Thermostat allerdings auf der letzten eingestellten Temperatur stehen.&lt;br /&gt;
&lt;br /&gt;
Denkbar ist auch, den Modus &amp;quot;Auto&amp;quot; zu verwenden und dann die Steuerung per FHEM dadurch durchzuführen, dass durch FHEM die Wochenprogramme verändert werden. Dies verbindet zwar die Vorteil der vorgenannten Methoden, ist aber am Aufwendigsten in der Programmierung und erzeugt die höchste Funklast.&lt;br /&gt;
&lt;br /&gt;
Auch der Urlaubsmodus ist einsetzbar, so kann beispielsweise bei Abwesenheit ein niedrigeres Temperaturprofil eingestellt werden, ohne dass eventuell vorhandene Temperaturlisten verändert werden müssen.&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-CC-RT-DN&amp;gt;_Clima controlParty 16 06.12.13 16:30 09.12.13 05:00&lt;br /&gt;
&lt;br /&gt;
Dadurch wird &lt;br /&gt;
* von 06.12.2013, 16:30 Uhr&lt;br /&gt;
* bis 09.12.2013, 05:00 Uhr &lt;br /&gt;
* die gewünschte Raumtemperatur auf 16 °C eingestellt.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&lt;br /&gt;
* Der Befehl muss auf dem Kanal 4 &#039;&#039;(_Clima)&#039;&#039; erfolgen.&lt;br /&gt;
* Es werden nur Uhrzeiten zu jeder vollen oder halben Stunde angenommen (Minuten also 00 oder 30).}}&lt;br /&gt;
&lt;br /&gt;
Mit der folgenden Funktion &amp;lt;code&amp;gt;Urlaub()&amp;lt;/code&amp;gt; kann man eine ganze Wohnung (also mehrere RTs) mit nur einem Befehl in den Party-Modus versetzen. Im Beispiel werden zwei Heizkörper (&amp;quot;Treppenhaus&amp;quot; und &amp;quot;Kammer&amp;quot;) angesteuert.&lt;br /&gt;
&lt;br /&gt;
Zu beachten sind folgende Dinge:&lt;br /&gt;
# Aktuelle Dateien (z.B. &amp;lt;code&amp;gt;10_CUL_HM&amp;lt;/code&amp;gt;) verwenden!&lt;br /&gt;
# Bei dem &#039;&#039;controlParty&#039;&#039;-Befehl &#039;&#039;kein&#039;&#039; Komma zwischen den Parametern.&lt;br /&gt;
# Bei der Funktion die Parameterübergabe definieren &amp;lt;code&amp;gt;($$$$$)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Aufruf:&#039;&#039;&#039;&lt;br /&gt;
:&amp;lt;code&amp;gt;{Urlaub (&amp;quot;16&amp;quot;, &amp;quot;06.12.13&amp;quot;, &amp;quot;16:30&amp;quot;, &amp;quot;09.12.13&amp;quot; ,&amp;quot;05:00&amp;quot;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Funktion:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=perl&amp;gt;&lt;br /&gt;
my $Urlaub;&lt;br /&gt;
sub&lt;br /&gt;
Urlaub($$$$$)&lt;br /&gt;
  {&lt;br /&gt;
    my ($temp, $startDate, $startTime, $endDate, $endTime) = @_;&lt;br /&gt;
 &lt;br /&gt;
    # HM-CC-RT-DN akzeptiert nur Zeiten, die auf Minute 00 oder 30 enden.&lt;br /&gt;
    # Daher $startTime und $endTime abrunden&lt;br /&gt;
    $startTime =~ s/\:[0-2].$/:00/;&lt;br /&gt;
    $startTime =~ s/\:[3-5].$/:30/;&lt;br /&gt;
    $endTime =~ s/\:[0-2].$/:00/;&lt;br /&gt;
    $endTime =~ s/\:[3-5].$/:30/;&lt;br /&gt;
&lt;br /&gt;
    # controlParty bei jedem HM-CC-RT-DN setzen.&lt;br /&gt;
    for my $rt (qw(Kammer Treppenhaus)) {&lt;br /&gt;
      fhem (&amp;quot;set $rt controlParty $temp $startDate $startTime $endDate $endTime&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tastensperre ===&lt;br /&gt;
&lt;br /&gt;
Um zu verhindern, dass der Modus oder die Temperatur per Tasten bzw. Drehrad am HM-CC-RT-DN verändert wird, kann eine Tastensperre gesetzt werden. Dies erfolgt mittels des Befehls:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet btnLock on&lt;br /&gt;
&lt;br /&gt;
Rückgängig machen geht per:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet btnLock off&lt;br /&gt;
&lt;br /&gt;
Diese Tastensperre kann man aber am HM-CC-RT-DN durch eine Tastenkombination wieder zurücksetzen. Um sie nur per FHEM rücksetzen zu können, muss&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet globalBtnLock on&lt;br /&gt;
&lt;br /&gt;
eingegeben werden. Rückgängig geht wieder per:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet globalBtnLock off&lt;br /&gt;
&lt;br /&gt;
Es gibt auch eine Tastensperre die nur das Umschalten des Modus (Auto, Manuell, Urlaub) am Gerät verhindert. Diese wird mit&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet modusBtnLock on&lt;br /&gt;
&lt;br /&gt;
eingeschaltet. Abschalten geht mit:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet modusBtnLock off&lt;br /&gt;
&lt;br /&gt;
=== Burst-Modus ===&lt;br /&gt;
Das ist ein &#039;&#039;&#039;Übertragungs&#039;&#039;&#039;modus für Nachrichten zwischen HM-Geräten und der Zentrale. Der RT erwacht alle 2,5 Minuten und dann überträgt die Zentrale die Kommandos. Wenn man einen Fensterkontakt oder eine Fernsteuerung nutzt, muss der RT sofort reagieren - dann muss man den Burst &#039;&#039;enablen&#039;&#039;. Der RT kann in diesem Fall sofort aufgeweckt werden und bearbeitet die Anforderung (Request). Das kann man auch von der Zentrale aus nutzen (so man möchte). Das ist der &#039;&#039;&#039;Vorteil&#039;&#039;&#039; des eingeschalteten Burst-Modus.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteil:&#039;&#039;&#039; Der Burst-Modus benötigt mehr Leistung, das heißt die Batterien müssen häufiger gewechselt werden: Der RT muss den Receiver ständig empfangsbereit halten. Außerdem wachen bei jedem Burst &#039;&#039;alle&#039;&#039; Burst-Empfänger auf – egal an wen die Kommunikation gerichtet war.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Burst – wie es funktioniert&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Schickt ein Sender eine burst Sequenz, wachen alle burst-Empfänger auf und prüfen die Message. &lt;br /&gt;
Wenn sie betroffen sind bleiben sie eine Zeit lang wach, ansonsten schlafen sie wieder ein. &lt;br /&gt;
Man beachte also, dass Senden eines Burst  Energie in ALLEN burst-Empfängern verbraucht, egal ob sie angesprochen sind.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HMLAN und burst&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[HMLAN]] hat ein Sendebudget das über eine Stunde berechnet wird. Burst belastet dieses Konto deutlich - so können nicht mehr als 100 bursts /h gesendet werden - dann geht HMLAN in overload. Wenn zusätzliche Nachrichten gesendet werden sind es entsprechend weniger. &lt;br /&gt;
Es ist nicht vorteilhaft, unnötig bursts zu senden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Burst devices&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es gibt Devices, die immer auf burst reagieren und solche bei denen es abgeschaltet werden kann. So reagiert ein Rauchmelder immer auf Burst damit er seine Team-Kollegen hören kann. &lt;br /&gt;
Ein TC oder RT hingegen hat diese Funktion abschaltbar. &#039;Per default ist dies ausgeschaltet um Batterie zu sparen&#039;. Wenn ein VD gesteuert wird ist der TC ja selbst wach.  Wird er aber mit einem Fensterkontakt gekoppelt muss es eingeschaltet werden – sonst verpasst er die Nachricht. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ConditionalBurst devices&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Devices mit abschaltbarem Burst wie z.B. der &#039;&#039;HM-CC-RT-DN&#039;&#039; haben ein Register, &#039;&#039;burstRx&#039;&#039;, mit dem das burst-Erwachen eingestellt werden kann. &lt;br /&gt;
Sendern, die einen burst-Aktor erwecken sollen, muss man sagen, welcher Peer Burst benötigt. Hier kann ggf. das Register &#039;&#039;peerNeedsBurst&#039;&#039; nach dem Peeren gesetzt werden. FHEM versucht dies automatisch beim Peeren zu erledigen. Siehe [[HomeMatic HMInfo|HMinfo]] Befehl &#039;&#039;models&#039;&#039; um herauszufinden, welche Devices welchen Modus unterstützen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Attribut burstAccess&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Devices, die abschaltbaren burst haben kann man ein attribut burstAccess 1_auto setzen. Es wird beim Abschicken eines Kommandos versucht, das Device mit burst zu wecken. Sollte es nicht funktionieren wird gewartet, bis das Device aufwacht (meist reagieren solche Devices auch auf wakeup). Das Setzen des Attributs ist angenehm – es werden aber ggf. viele bursts gesendet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kommando burstXmit&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Mit diesem Kommando, das bei Devices mit conditional-Burst zu Verfügung steht, wird der burst gezielt vom User angestoßen.&lt;br /&gt;
&lt;br /&gt;
Der User schickt erst seine Kommandos an das device. Die Kommandos werden im Command-stack gesammelt. &lt;br /&gt;
&lt;br /&gt;
Dann sendet der User ein set burstXmit.&lt;br /&gt;
&lt;br /&gt;
Es passiert das gleiche wie bei burstAccess.&lt;br /&gt;
&lt;br /&gt;
FHEM versucht mittels burst zu wecken und sendet bei Erfolg die Messages aus dem Kommandostack. &lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu burstAccess ist burstXmit gezielt einsetzbar und kann sparsamer verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; FHEM und burst devices&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
FHEM sendet eine burst automatisch mit Kommandos zu Devices, die nur burst unterstützen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So aktiviert man den burst-Betrieb am HM-CC-RT-DN&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Burst Mode einschalten&#039;&#039; (der Kanal 4 des Device WZ1 heisst hier WZ1_4)&lt;br /&gt;
:&amp;lt;code&amp;gt;set WZ1_4 regSet burstRx on &amp;lt;/code&amp;gt;&lt;br /&gt;
prüfen mit:&lt;br /&gt;
:&amp;lt;code&amp;gt;get WZ1_4 reg burstRx &amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;Nun in FHEM den Burst mode einschalten (sofern nicht burstXmit verwendet wird)&#039;&#039;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr WZ1 burstAccess 1_auto&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis: Das Attribut im Device und nicht im Kanal setzen, ansonsten gibt es eine Fehlermeldung.&lt;br /&gt;
&lt;br /&gt;
=== Temperaturlisten ===&lt;br /&gt;
Die Temperaturlisten des HM-CC-RT-DN werden identisch mit denen anderer HomeMatic Thermostate verwaltet (siehe [[HomeMatic Type Thermostat#Temperaturlisten|HomeMatic Type Thermostat]]). Beim HM-CC-RT-DN ist der Kanal 4 (_Clima) für die Temperaturlisten zuständig.&lt;br /&gt;
&lt;br /&gt;
==FHEM-Log==&lt;br /&gt;
In den folgenden Logs heißt Kanal 4 noch &amp;quot;_ClimRT_tr&amp;quot;. Inzwischen würde man dort &amp;quot;_Clima&amp;quot; sehen.&lt;br /&gt;
&lt;br /&gt;
=== Device-Log ===&lt;br /&gt;
 2013.10.10 20:03:24 3: CUL_HM Unknown device CUL_HM_HM_CC_RT_DN_2212BC, please define it&lt;br /&gt;
 2013.10.10 20:03:24 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC CUL_HM 2212BC A1A0184002212BC0000001000954B4551303531303031375900FFFF&lt;br /&gt;
 2013.10.10 20:03:24 3: Device CUL_HM_HM_CC_RT_DN_2212BC added to ActionDetector with 000:10 time&lt;br /&gt;
 2013.10.10 20:03:24 3: CUL_HM pair: CUL_HM_HM_CC_RT_DN_2212BC thermostat, model HM-CC-RT-DN serialNr KEQ0510017&lt;br /&gt;
 2013.10.10 20:03:24 3: LANCUL pairing (hmPairForSec) not enabled&lt;br /&gt;
 2013.10.10 20:03:24 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC-%Y.log CUL_HM_HM_CC_RT_DN_2212BC&lt;br /&gt;
 2013.10.10 20:03:24 3: Device Heizung_Wohnzimmer added to ActionDetector with 000:10 time&lt;br /&gt;
 2013.10.10 20:03:24 3: CUL_HM pair: Heizung_Wohnzimmer thermostat, model HM-CC-TC serialNr JEQ0044286&lt;br /&gt;
 2013.10.10 20:03:24 3: Device CUL_HM_HM_CC_RT_DN_2212BC added to ActionDetector with 000:10 time&lt;br /&gt;
 2013.10.10 20:03:24 3: CUL_HM pair: CUL_HM_HM_CC_RT_DN_2212BC thermostat, model HM-CC-RT-DN serialNr KEQ0510017&lt;br /&gt;
 2013.10.10 20:03:25 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_Weather CUL_HM 2212BC01&lt;br /&gt;
 2013.10.10 20:03:25 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_Weather FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_Weather-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_Weather&lt;br /&gt;
 2013.10.10 20:03:25 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_Weather FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_Weather-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_Weather&lt;br /&gt;
 2013.10.10 20:03:26 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_Climate CUL_HM 2212BC02&lt;br /&gt;
 2013.10.10 20:03:26 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_Climate FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_Climate-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_Climate&lt;br /&gt;
 2013.10.10 20:03:26 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_Climate FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_Climate-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_Climate&lt;br /&gt;
 2013.10.10 20:03:27 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_WindowRec CUL_HM 2212BC03&lt;br /&gt;
 2013.10.10 20:03:27 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_WindowRec FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_WindowRec-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_WindowRec&lt;br /&gt;
 2013.10.10 20:03:27 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_WindowRec FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_WindowRec-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_WindowRec&lt;br /&gt;
 2013.10.10 20:03:28 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr CUL_HM 2212BC04&lt;br /&gt;
 2013.10.10 20:03:28 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr&lt;br /&gt;
 2013.10.10 20:03:28 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr&lt;br /&gt;
 2013.10.10 20:03:29 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam CUL_HM 2212BC05&lt;br /&gt;
 2013.10.10 20:03:29 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam&lt;br /&gt;
 2013.10.10 20:03:29 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam&lt;br /&gt;
 2013.10.10 20:03:30 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_remote CUL_HM 2212BC06&lt;br /&gt;
 2013.10.10 20:03:30 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_remote FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_remote-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_remote&lt;br /&gt;
 2013.10.10 20:03:30 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_remote FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_remote-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_remote&lt;br /&gt;
 2013.10.10 20:03:35 3: Device CUL_HM_HM_CC_RT_DN_2212BC added to ActionDetector with 000:10 time&lt;br /&gt;
 2013.10.10 20:03:40 2: CUL_HM set CUL_HM_HM_CC_RT_DN_2212BC getSerial&lt;br /&gt;
 2013.10.10 20:03:40 2: CUL_HM set CUL_HM_HM_CC_RT_DN_2212BC getConfig&lt;br /&gt;
 2013.10.10 20:03:54 3: Device CUL_HM_HM_CC_RT_DN_2212BC added to ActionDetector with 000:10 time&lt;br /&gt;
&lt;br /&gt;
=== Event monitor ===&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr motorErr: ok&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr measured-temp: 18.4&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr desired-temp: 18&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr ValvePosition: 3 %&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr mode: manu&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr unknown0: 24&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr T: 18.4 desired: 18 valve: 3 %&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC battery: ok&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC batteryLevel: 3.1 V&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC measured-temp: 18.4&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC desired-temp: 18&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC actuator: 3 %&lt;br /&gt;
&lt;br /&gt;
== Firmware Update ==&lt;br /&gt;
Seit 24.10.2014 gibt es für den HM-CC-RT-DN die neue Firmware Version 1.4. Diese kann von der eQ-3 Webseite heruntergeladen werden. Genauere Informationen gibt es unter [[HomeMatic Firmware Update]].&lt;br /&gt;
&lt;br /&gt;
=== HM-CC-RT-DN spezifische Update Informationen ===&lt;br /&gt;
Durch gleichzeitiges Drücken der &amp;quot;Auto-/Manu&amp;quot;-Taste und der &amp;quot;Comfort-/Eco&amp;quot;-Taste am HM-CC-RT-DN während man die Batterien wieder einlegt wird der updatemodus gestartet. Während des Updates steht &amp;quot;FUP&amp;quot; im Display. Nach erfolgreichem Update erscheint &amp;quot;Ins&amp;quot; im Display und es muss eine erneute Adaptierfahrt durch Drücken der Boost-Taste ausgelöst werden. Anschließend sollte der HM-CC-RT-DN wieder normal funktionieren. Die eingestellten Parameter und das Pairing mit FHEM gehen beim Update nicht verloren. Sollte das Update fehlschlagen, erscheint &amp;quot;Err&amp;quot; bzw. &amp;quot;CrC&amp;quot; im Display.&lt;br /&gt;
&lt;br /&gt;
Normalerweise sollte dann durch erneutes Starten der Prozedur am PC und HM-CC-RT-DN das ganze erneut durchführbar sein.&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Readings, die nicht durch ein einfaches &#039;&#039;getConfig&#039;&#039; aktualisiert werden, z.B. &amp;quot;battery&amp;quot;(nicht batteryLevel). Um diese Readings zu bekommen, ist ein &lt;br /&gt;
:&amp;lt;code&amp;gt;set Device_Channel04 controlMode auto &amp;lt;/code&amp;gt;&lt;br /&gt;
notwendig. Daraufhin werden die Readings übertragen/aktualisiert.&lt;br /&gt;
&lt;br /&gt;
== Simulation von Fensterkontakten und externen Temperatursensoren ==&lt;br /&gt;
{{Randnotiz|RNTyp=r|RNText=* Für jeden separat zu steuernden HM-CC-RT-DN kann nur je ein Kanal eines virtuellen Devices als Temperatur- bzw. Fensterkontakt genutzt werden. Insbesondere die virtuellen Kanäle der VCCU eignen sich nicht dazu, mehrere HM-CC-RT-DN unabhängig voneinander anzusteuern!&lt;br /&gt;
* Die folgenden Beispiele sind nicht für Anfänger und Unwissende geeignet! Es gibt zahlreiche Stolpersteine:&lt;br /&gt;
# Die HMId für virtuelle Geräte muss einmalig im System sein. Sie muss selbst gewählt werden und es darf &#039;&#039;&#039;keine&#039;&#039;&#039; vorhandene ID verwendet werden!&lt;br /&gt;
# Es kann vorkommen, das beim Anlegen eines virtual Gerätes kein attr IODev gesetzt wird. Das Attribute ist aber notwendig, sonst arbeitet das Gerät nicht! Bitte kontrollieren und gegebenenfalls per Hand setzen&lt;br /&gt;
}}&lt;br /&gt;
grober Ablauf:&lt;br /&gt;
* erstelle ein virtuelles Device&lt;br /&gt;
* erstelle dazu einen virtuellen Kanal&lt;br /&gt;
* peere den Kanal mit dem RT (als Fenster-Kontakt oder als remote, wenn du willst)&lt;br /&gt;
* sende ein postEvent&lt;br /&gt;
&lt;br /&gt;
=== Fensterkontakte ===&lt;br /&gt;
&#039;&#039;Entnommen aus diesem {{Link2Forum|Topic=31078|Message=236245|LinkText=Forenbeitrag}}&#039;&#039;&lt;br /&gt;
 define virSC CUL_HM 221133&lt;br /&gt;
 attr virSC autoReadReg 4_reqStatus&lt;br /&gt;
 attr virSC expert 2_full&lt;br /&gt;
 attr virSC model virtual_1&lt;br /&gt;
 attr virSC peerIDs &lt;br /&gt;
 attr virSC subType virtual&lt;br /&gt;
 attr virSC webCmd press short:press long&lt;br /&gt;
 &lt;br /&gt;
 define virtualKitchenDoor CUL_HM 22113301&lt;br /&gt;
 attr virtualKitchenDoor dummy 1&lt;br /&gt;
 attr virtualKitchenDoor expert 1&lt;br /&gt;
 attr virtualKitchenDoor group Virtual&lt;br /&gt;
 attr virtualKitchenDoor model virtual_1&lt;br /&gt;
 attr virtualKitchenDoor webCmd postEvent open:postEvent closed &lt;br /&gt;
&lt;br /&gt;
Anschließend peeren und Temperatur festlegen mit:&lt;br /&gt;
 set virtualKitchenDoor peerChan 0 &amp;lt;Thermostat_Window_Rec&amp;gt; single set&lt;br /&gt;
 set &amp;lt;Thermostat_Window_Rec&amp;gt; regSet winOpnTemp 5 virtualKitchenDoor&lt;br /&gt;
&lt;br /&gt;
Ggf noch interne &amp;quot;Fenster-auf&amp;quot; Erkennung abschalten&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt;_Clima regSet winOpnMode off&lt;br /&gt;
&lt;br /&gt;
Die virtuelle Tür wird dann entsprechend über ein Notify getriggert:&lt;br /&gt;
 define notify_virtualKitchenDoor notify (Fensterkontakt_1|Fensterkontakt_2) {if($EVENT eq &amp;quot;open&amp;quot; and Value(&amp;quot;virtualKitchenDoor&amp;quot;) eq &amp;quot;set_postEvent closed&amp;quot;){fhem(&amp;quot;set virtualKitchenDoor postEvent open&amp;quot;)} elsif (Value(&amp;quot;Fensterkontakt&amp;quot;) eq &amp;quot;closed&amp;quot; &amp;amp;&amp;amp; Value(&amp;quot;Fensterkontakt_2&amp;quot;) eq &amp;quot;closed&amp;quot;) {fhem(&amp;quot;set virtualKitchenDoor postEvent closed&amp;quot;)}}&lt;br /&gt;
&lt;br /&gt;
=== Temperatursensoren ===&lt;br /&gt;
&#039;&#039;Entnommen aus diesem {{Link2Forum|Topic=19686|Message=233788|LinkText=Forenbeitrag}}&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Virtuelles HomeMatic Device mit _deiner_ HM Id definieren:&lt;br /&gt;
 define wz_vT CUL_HM &amp;lt;hmId&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Dem Device einen virtuellen Kanal (Default ist ein virtueller Button) hinzufügen:&lt;br /&gt;
 set wz_vT virtual 1&lt;br /&gt;
&lt;br /&gt;
3. Es ist kein virtueller Button sondern ein virtueller Temperatursensor - darum rename:&lt;br /&gt;
 rename wz_vT_Btn1 wz_vT_Sensor1&lt;br /&gt;
&lt;br /&gt;
4. Virtuellen Peer Sensor mit dem Weather Channel des RT-DN peeren:&lt;br /&gt;
 set wz_vT_Sensor1 peerChan 0 &amp;lt;RT_DN&amp;gt;_Weather single&lt;br /&gt;
&lt;br /&gt;
5. Peering kontrollieren (Voraussetzung: Device &#039;&#039;hm&#039;&#039; vom Typ [[HomeMatic HMInfo|HMinfo]] existiert):&lt;br /&gt;
:&amp;lt;code&amp;gt;set hm peerXref&amp;lt;/code&amp;gt;&lt;br /&gt;
Beispiel-Ausgabe:&lt;br /&gt;
 peerXref done: &lt;br /&gt;
 x-ref list &lt;br /&gt;
    wz_Thermostat_Weather =&amp;gt; wz_vT_Sensor1 &lt;br /&gt;
    wz_vT_Sensor1 =&amp;gt; wz_Thermostat_Weather&lt;br /&gt;
&lt;br /&gt;
6. Gemessene Temperatur vom z.B. 1-Wire DS1820 dem virtuellen HM Sensor übergeben. Z.B. alle zwei Minuten per at:&lt;br /&gt;
 define at_wz_vT at +*00:02 { my $T=(ReadingsVal(&amp;quot;&amp;lt;DS1820B&amp;gt;&amp;quot;,&amp;quot;temperature&amp;quot;,20.0));; fhem &amp;quot;set wz_vT_Sensor1 virtTemp $T&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
Fertig.&lt;br /&gt;
&lt;br /&gt;
Sollte es Probleme geben, dass der RT des Öfteren wieder auf seine eigenen Messwerte wechselt, so sollte das Attr cyclicMsgOffset im Virtuellen Kanal beachtet werden. Näheres dazu ist ca. ab {{Link2Forum|Topic=45735|Message=572806|LinkText=hier}} im Forum zu finden.&lt;br /&gt;
&lt;br /&gt;
== Auflistung und Beschreibung der Readings ==&lt;br /&gt;
&lt;br /&gt;
Einige der Readings können via &amp;quot;regSet&amp;quot; parametriert werden.&lt;br /&gt;
Wobei der Registername etwas anders geschrieben wird als der Reading Name (ohne R-).&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;name&amp;gt; regSet &amp;lt;register&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
Beispiel für Reading R-winOpnPeriod erhöhen auf 60 Minuten: &lt;br /&gt;
  set EG_Buero_THERMOSTAT_Clima regSet winOpnPeriod 60&lt;br /&gt;
&lt;br /&gt;
Eine vollständige Liste erhält man auch, wenn man einen Falschen Register Namen angibt.&lt;br /&gt;
  supported register are backOnTime boostPeriod boostPos btnLock btnNoBckLight burstRx cyclicInfoMsg cyclicInfoMsgDis dayTemp daylightSaveTime decalcTime decalcWeekday globalBtnLock localResDis lowBatLimitRT modePrioManu modePrioParty modusBtnLock nightTemp noMinMax4Manu pairCentral regAdaptive reguExtI reguExtP reguExtPstart reguIntI reguIntP reguIntPstart showInfo showWeekday sign tempMax tempMin tempOffset valveErrPos valveMaxPos valveOffsetRt winOpnBoost winOpnDetFall winOpnMode winOpnPeriod winOpnTempI&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-top: 2px solid #ffffff; border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#A6A6A6&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#0D0D0D&amp;quot;&amp;gt;Reading&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-top: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#A6A6A6&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#0D0D0D&amp;quot;&amp;gt;Beispielwert&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-top: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#A6A6A6&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#0D0D0D&amp;quot;&amp;gt;M&amp;amp;ouml;gliche Werte&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-top: 2px solid #ffffff; border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#A6A6A6&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#0D0D0D&amp;quot;&amp;gt;Beschreibung&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;CommandAccepted&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;yes&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;yes; no&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Letztes Kommando akzeptiert (yes/ No)&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-boostPeriod&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;5 min&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;1 min bis x min&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Zeit wie lange das Ventil im Boost Modus sein soll.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-boostPos&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot; sdval=&amp;quot;0.8&amp;quot; sdnum=&amp;quot;1033;0;0%&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;80%&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot; sdnum=&amp;quot;1033;0;0%&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;0 bis 100&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Ventilposition die im Boost Modus gesetzt wird.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-btnNoBckLight&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;on; off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;35&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-dayTemp&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;21 C&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R-tempMin bis R-tempMax&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Solltemperatur die gesetzt werden soll, wenn das Sonnensymbol am Thermostat gedr&amp;amp;uuml;ckt wird.  Ebenso wird bei dieser Solltemperatur das Sonnensymbol im Display angezeigt.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-daylightSaveTime&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;on&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;on; off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-decalcTime&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot; sdval=&amp;quot;0.458333333333333&amp;quot; sdnum=&amp;quot;1033;1033;H:MM&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;11:00&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot; sdnum=&amp;quot;1033;1033;H:MM&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;00:00 bis 23:59&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Uhrzeit wann die Entkalkungsfahrt durchgef&amp;amp;uuml;hrt werden soll. &amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-decalcWeekday&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Sat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Mon; Tue; Wed; Thu; Fri; Sat; Sun&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Tag an dem die Entkalkungsfahrt durchgef&amp;amp;uuml;hrt werden soll.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-modePrioManu&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;all&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;all; ???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-modePrioParty&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;all&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;all; ???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;35&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-nightTemp&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;17 C&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R-tempMin bis R-tempMax&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Solltemperatur die gesetzt werden soll, wenn das Mondsymbol am Thermostat gedr&amp;amp;uuml;ckt wird.  Ebenso wird bei dieser Solltemperatur das Mondsymbol im Display angezeigt.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-noMinMax4Manu&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;on; off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-regAdaptive&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;on&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;on; off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-reguExtI&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot; sdval=&amp;quot;15&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;15&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-reguExtP&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot; sdval=&amp;quot;30&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;30&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-reguExtPstart&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot; sdval=&amp;quot;30&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;30&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-reguIntI&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot; sdval=&amp;quot;18&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;18&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-reguIntP&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot; sdval=&amp;quot;33&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;33&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-reguIntPstart&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot; sdval=&amp;quot;44&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;44&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-showInfo&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;time&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;date; time&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Zeige Datum oder Uhrzeit im Display an&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-showWeekday&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;on; off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Zeige den Wochentag im Display an&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-sign&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;on; off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-tempMax&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;30.5 C&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Gr&amp;amp;ouml;&amp;amp;szlig;te einstellbare Temperatur&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-tempMin&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;4.5 C&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Kleinste einstellbare Temperatur&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-tempOffset&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;0.0K&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;0.0 bis ???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Temperaturabweichung gemessene Temperatur vs. realer Temperatur in Grad Kelvin. Angabe in 0.5-Schritten ohne Einheitenzeichen, z.B. 0.5 oder -1.0&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-valveErrPos&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot; sdval=&amp;quot;0.15&amp;quot; sdnum=&amp;quot;1033;0;0%&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;15%&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot; sdnum=&amp;quot;1033;0;0%&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-valveMaxPos&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;0;0%&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;100%&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot; sdnum=&amp;quot;1033;0;0%&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;0 bis 100&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Maximale Ventilstellung die das Thermostat fahren darf.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-valveOffsetRt&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot; sdval=&amp;quot;0&amp;quot; sdnum=&amp;quot;1033;0;0%&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;0%&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot; sdnum=&amp;quot;1033;0;0%&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;0 Bis 100&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;52&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-winOpnBoost&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;on; off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Startet nach dem Fensterschlie&amp;amp;szlig;en die Boostfunktion um unabh&amp;amp;auml;ngig von der Raumtemperatur den Heizk&amp;amp;ouml;rper eine Zeit x aufzuheizen. (Siehe R-boostPeriod &amp;amp;amp; R-boostPos)&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-winOpnDetFall&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;1.4 K&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;0.5 bis 2.5&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Temperatur Sturz zwischen zwei Messungen, die als Fenster offen erkannt werden.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;35&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-winOpnMode&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;on; off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Thermostat soll anhand eines schnellen Temperaturabfalls erkennen, dass das Fenster ge&amp;amp;ouml;ffnet ist.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-winOpnPeriod&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;15 min&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;1 bis 60 Minuten&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Dauer bis das Signal Fenster offen wieder entfernt wird.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-winOpnTemp&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;12 C&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R-tempMin bis R-tempMax&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Temperatur die eingestellt werden soll, wenn das Fenster als offen erkannt wird.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;104&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;07:00 20.0 22:30 22.0 24:00 20.0&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;incomplete = Daten werden mit Thermostat abgeglichen&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Zeit/Temperaturangaben siehe Beispiel&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Tages Solltemperaturen abh&amp;amp;auml;ngig von der Uhrzeit. &amp;lt;br&amp;gt;- Der Beginn um 00:00 ist nicht einzutragen. &amp;lt;br&amp;gt;- Es sind immer Paare einzutragen (Uhrzeit Temperatur). &amp;lt;br&amp;gt;- Der letzte Eintrag muss an jedem Tag 24:00 sein.&amp;lt;br&amp;gt;- Uhrzeiten sind auf halbe Stunden beschr&amp;amp;auml;nkt. Eintr&amp;amp;auml;ge 08:00 und 08:30 sind g&amp;amp;uuml;ltig. 08:20 ist ung&amp;amp;uuml;ltig.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R_1_tempListSun&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;07:00 20.0 22:00 22.0 24:00 20.0&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R_2_tempListMon&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;04:30 20.0 07:00 22.0 12:45 20.0 22:00 22.0 24:00 20.0&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R_3_tempListTue&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;04:30 20.0 07:00 22.0 12:45 20.0 22:00 22.0 24:00 20.0&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R_4_tempListWed&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;04:30 20.0 07:00 22.0 12:45 20.0 22:00 22.0 24:00 20.0&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R_5_tempListThu&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;04:30 20.0 07:00 22.0 12:45 20.0 22:00 22.0 24:00 20.0&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R_6_tempListFri&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;04:30 20.0 07:00 22.0 12:45 20.0 22:00 22.0 24:00 20.0&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;35&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R_tempList_State&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;verified&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;incomplete = Daten werden mit Thermostat abgeglichen&amp;lt;br&amp;gt;verified = Daten sind mit Thermostat abgeglichen&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Aktualisierungsstatus der Wochen Temperatur Einstellungen&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;ValvePosition&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot; sdval=&amp;quot;36&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;36&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;0 bis 100&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;aktuelle Ventilstellung&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;35&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;boostTime&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;-&amp;lt;br&amp;gt;1 min bis n min&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Zeit wie lange der Boostmodus noch aktiv ist.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;121&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;controlMode&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;auto&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;auto = Thermostat wird nach der TempListe gesteuert&amp;lt;br&amp;gt;manual = Die eingestellte Temperatur am Thermostat wird nicht ver&amp;amp;auml;ndert, au&amp;amp;szlig;er bei Verwendung von WinOpn; &amp;lt;br&amp;gt;boost = Thermostat wird in den Boost Modus gesetzt. Siehe R-boostPeriod/Pos&amp;lt;br&amp;gt;day = Thermostat wird auf die eingestellte Tag Temperatur gesetzt (R-dayTemp).&amp;lt;br&amp;gt;night = Thermostat wird auf die eingestellte Nacht Temperatur gesetzt (R-nightTemp).&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Setzt das Thermostat in einen bestimmten Modus&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;desired-temp&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot; sdval=&amp;quot;22&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;22&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;N/A&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Solltemperatur&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;measured-temp&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot; sdval=&amp;quot;23.2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;23.2&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;N/A&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Isttemperatur&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;partyEnd&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Ende Datum/Zeit in dem die Party Temperatur (partyTemp) gesetzt sein soll.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;partyStart&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Start Datum/Zeit in dem die Party Temperatur (partyTemp) gesetzt sein soll.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;partyTemp&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;-; 20.0&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Party Temperatur&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;recentStateType&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;ack&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot; sdnum=&amp;quot;1033;1033;M/D/YYYY H:MM&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-bottom: 2px solid #ffffff; border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;23&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;state&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-bottom: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;T: 23.2 desired: 22.0 valve: 36&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-bottom: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-bottom: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Aktuelle Statusinformation&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
=== TempList: Bad format ... ===&lt;br /&gt;
Wenn Sie beim Setzen einer Temperaturliste nach dem o.a. Schema (&amp;quot;SetTempList...&amp;quot;) die Meldung&lt;br /&gt;
&lt;br /&gt;
 Bad format, use HH:MM TEMP ......&lt;br /&gt;
&lt;br /&gt;
erhalten, sollten Sie zunächst ein [[update]] von FHEM durchführen.&lt;br /&gt;
&lt;br /&gt;
=== Der Thermostat heizt über die Solltemperatur hinaus ===&lt;br /&gt;
In der Regel ist das ein ganz normales Verhalten, wenn der Thermostat nicht mit einem externen Temperaturfühler oder einem Wandthermostat gepeert ist. In dem Fall muss sich der Thermostat auf den eingebauten Temperatursensor verlassen, der sehr nahe an der Heizung selbst sitzt. Dadurch ist die gemessene Temperatur höher, als sie z.B. in der Raummitte wäre. Der Hersteller hat hier einen mehr oder weniger intelligenten Algorithmus eingebaut, um diesen Effekt zu kompensieren. Das sieht dann so aus, als ob der Thermostat nicht richtig regelt.&lt;br /&gt;
Dieses Verhalten kann man im Prinzip nur verhindern, indem man einen externen Temperatursensor oder einen Wandthermostat peert. Wie das geht ist hier beschrieben: [[#Channel (Kanal) 01 _Weather]]. Normalerweise regelt der Thermostat dann genau auf die Solltemperatur. &lt;br /&gt;
Ansonsten sollte man sich auch fragen, ob das gezeigte Verhalten vielleicht doch gut genug ist. Dazu platziert man irgendein Thermometer möglichst in der Mitte des Raums und beobachtet den Temperaturverlauf eine Weile. Wenn man dann noch eine Abweichung feststellt, kann es sinnvoll sein, diese mittels des Registers R-tempOffset zu beheben.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.eq-3.de/produkt-detail-aktoren/items/homematic-funk-heizkoerperthermostat.html Produktinfo bei EQ-3]&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/downloads_produktkatalog/homematic/bda/HM-CC-RT-DN_UM_GE_eQ-3_web.pdf Bedienungsanleitung bei EQ-3 (PDF)]&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/downloads_produktkatalog/homematic/pdb/Funk-Heizkoerperthermostat_105155_Produktdatenblatt_V2.3.pdf Datenblatt bei EQ-3 (PDF)]&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/downloads/Ventilkompatibilitaeten.pdf Ventil-Kompatibilitätsliste bei EQ-3 (zur Zeit nicht verfügbar)]&lt;br /&gt;
* {{Link2Forum|Topic=14738|LinkText=Forenthema zum Thermostat}}&lt;br /&gt;
* {{Link2Forum|Topic=64446|LinkText=Reparatur einer durch mechanischen Stoß von außen abgerissenen Lichtschranke}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;br /&gt;
[[Kategorie:868MHz]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SONOS&amp;diff=32133</id>
		<title>SONOS</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SONOS&amp;diff=32133"/>
		<updated>2019-12-26T15:54:47Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Zusammenfassung der Spracheinrichtung */  Kurzanleitung für Sprachanleitung zusammengefasst&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right&amp;quot;&amp;gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Anbindung des Sonos-Systems via UPnP&lt;br /&gt;
|ModType=d&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
|ModCmdRef=&lt;br /&gt;
|ModForumArea=Multimedia&lt;br /&gt;
|ModTechName=00_SONOS.pm&lt;br /&gt;
|ModOwner=Reinerlein&lt;br /&gt;
}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|Name=SONOSPLAYER&lt;br /&gt;
|ModPurpose=Steuerung eines Sonos Zoneplayer&lt;br /&gt;
|ModType=d&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
|ModCmdRef=SONOSPLAYER&lt;br /&gt;
|ModForumArea=Multimedia&lt;br /&gt;
|ModTechName=21_SONOSPLAYER.pm&lt;br /&gt;
|ModOwner=Reinerlein&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sonos ist ein Multiroom-Musiksystem der kalifornischen Firma [http://www.sonos.com Sonos].&lt;br /&gt;
Es bietet die Möglichkeit der verteilten Musikabspielung und Steuerung, sowie der Verknüpfung von mehreren Playern, um diese dasselbe abspielen zu lassen. Hierfür gibt es verschiedene Abspiel-Komponenten, die in einem eigenen Netzwerk miteinander kommunizieren und für verschiedene Anwendungsfälle konzipiert wurden.&lt;br /&gt;
&lt;br /&gt;
Diese Beschreibung soll den Einstieg in die Steuerung der heimischen Zoneplayer erleichtern. Es werden die Verwendung und Einrichtung der dazugehörenden FHEM-Module &#039;&#039;&#039;SONOS&#039;&#039;&#039; und &#039;&#039;&#039;SONOSPLAYER&#039;&#039;&#039; beschrieben, und einige Beispiele für eine mehr oder weniger sinnvolle Nutzung von Events und Steuerungsmöglichkeiten gegeben.&lt;br /&gt;
&lt;br /&gt;
Sollte etwas fehlen oder unklar sein, dann einfach eine kurze Nachricht an den Autor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0; margin-top:10px; margin-right: 315px; border: 1px solid #dfdfdf; padding: 0 1em 0.3em 1em; background-color:#fff0e0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;! Achtung !&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
Obwohl die Module in FHEM mitgeliefert werden, sind trotzdem die Vorbedingungen bzgl. der Perl-Installation unter [[#Softwarevoraussetzungen|Softwarevoraussetzungen]] einzuhalten, da das Modul sonst nicht lauffähig ist.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kurzüberblick ==&lt;br /&gt;
Hier soll nur ein kurzer Überblick über die mittlerweile doch recht umfangreichen Möglichkeiten geboten werden:&lt;br /&gt;
*Automatisches Erkennen aller ZonePlayer im lokalen Netzwerk. Dabei werden alle Player einer Paarung zusammengehörig benannt und gruppiert&lt;br /&gt;
*Automatische Aktualisierung aller aktuellen (und wenn verfügbar: der nächsten) Titelinformationen innerhalb von FHEM&lt;br /&gt;
**Dabei wird für jede veränderte Information ein Event erzeugt, man kann also dediziert darauf reagieren&lt;br /&gt;
**Bei normalen Abspiellisten werden auch die Informationen zum nächsten Titel ermittelt und angezeigt&lt;br /&gt;
**Es können auch verschiedene Zusammenfassungen der bestehenden Informationen zusammengestellt werden&lt;br /&gt;
*Anzeige des aktuellen (oder auch nächsten) Covers als Weblink oder [[readingsGroup]]&lt;br /&gt;
*Steuern der ZonePlayer: Play, Pause, Nächster Titel, Vorheriger Titel, Lautstärke Lauter/Leiser (auch als vordefinierte Rampe), Stummschalten&lt;br /&gt;
*Alle Player auf einen Befehl hin stoppen, pausieren oder stummschalten lassen&lt;br /&gt;
*Einstellen und Abfragen der Abspielparameter Repeat, RepeatOne, Shuffle, CrossfadeMode, Loudness, Bass und Treble&lt;br /&gt;
*Festlegen einer minimalen und maximalen Lautstärke für jeden ZonePlayer (getrennt zwischen Normalbetrieb und Kopfhörernutzung)&lt;br /&gt;
*Laden, Speichern und Löschen von Playlisten (Laden und Speichern: auch M3U-Dateien aus dem Filesystem)&lt;br /&gt;
*Abspielen eines Sonos-Favoriten (z.B. Playlist, Spotify-Playlist, Titel, Radiosender, usw.)&lt;br /&gt;
*Abspielen beliebiger Titel (auch von Freigaben, die nicht von Sonos indiziert wurden)&lt;br /&gt;
*Abspielen beliebiger Radiostationen über deren HTTP-Link&lt;br /&gt;
*Hinzufügen beliebiger Titel und Radiostationen zur aktuellen Abspielliste&lt;br /&gt;
*Temporäres Abspielen von Dateien, mit nachfolgender Wiederherstellung des vorherigen Titels inkl. genauer Position im vorherigen Titel und der Lautstärke&lt;br /&gt;
*Füllen der aktuellen Abspielliste mit nach diversen Kriterien zusammengesuchten Titeln aus der Sonos Bibliothek&lt;br /&gt;
*Erzeugen und temporäres Abspielen von Sprachdurchsagen auf Basis von eingegebenen Texten und vorhandenen MP3-Dateien&lt;br /&gt;
**Wird standardmäßig über die Google-Übersetzungsmaschine realisiert&lt;br /&gt;
**Kann auch über eine eigenständige, lokale Installation eines Text2Speech-Tools realisiert werden&lt;br /&gt;
*Auslesen und Setzen/Starten der verfügbaren gespeicherten Playlisten, Radiofavoriten und Sonos-Favoriten&lt;br /&gt;
*Erzeugung und Bearbeitung von Alarmen, sowie Event bei Veränderung der Alarme duch andere Controller&lt;br /&gt;
*Setzen des Sleeptimer inkl. FHEM-Event bei Veränderung durch andere Controller und Ablauf des Timers&lt;br /&gt;
*Setzen und Auslesen der Gruppierungskonfiguration, sowie einzelnes Hinzufügen und Entfernen von Gruppenmitgliedern&lt;br /&gt;
*Bildung und Trennung von Stereopaaren&lt;br /&gt;
*Erzeugen von Events nach festgelegten Tastensequenzen (am Player)&lt;br /&gt;
*Umbenennen der Zonen und festlegen der Zonenicons&lt;br /&gt;
*Standardanzeige eines Player als ReadingsGroup mit automatischem Titel- und Coverwechsel sowie einer RemoteControl zum Steuern&lt;br /&gt;
*Anzeigemöglichkeit einer Vollbilddarstellung ähnlich dem Original-Controller&lt;br /&gt;
*Definitionsmöglichkeit von automatischen Bookmarks, die beim Aufrufen derselben Playliste oder Titel die gespeicherte Position anspringen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kurze Anmerkungen zur Sonos-Landschaftsgestaltung ==&lt;br /&gt;
Es ist im allgemeinen besser, die Sonos-Landschaft mit allen Paarungen vor dem Einrichten des Moduls zu erzeugen. &lt;br /&gt;
Dieses Modul benennt die FHEM-Playerdevices nach den Zonennamen und der jeweiligen Funktion des Players innerhalb der Paarung.&lt;br /&gt;
&lt;br /&gt;
Das bedeutet aber auch, dass in diesem Augenblick möglichst keine Player gruppiert sein sollten (mehrere Zonen spielen dasselbe ab), da diese sonst komische Namen erhalten könnten (es geht hier ausschliesslich um die FHEM-interne Device-Benennung, natürlich bleiben die Zoneplayer selbst wie sie sind).&amp;lt;br /&amp;gt;Insbesondere gilt das für temporäre Stereopaare. Diese nicht ständigen Paare sollten erst getrennt werden, bis das Modul alle Player erkannt und angelegt hat.&lt;br /&gt;
&lt;br /&gt;
Damit man nun eine einigermaßen passende Bezeichnung in FHEM erhält, sollte also die Gestaltung der Sonos-Player abgeschlossen sein. Natürlich funktioniert das System nach einer FHEM-Einrichtung und anschließender Sonos-Umbenennung immer noch, da intern alles mittels der eindeutigen Bezeichner gehandhabt wird, allerdings wird es u.U. etwas unübersichtlich bzgl. der FHEM-Device-Namen. Diese passen dann nicht mehr zu den Zonennamen (die entsprechenden Readings werden aber natürlich korrekt besetzt), was man aber natürlich auch nachträglich wieder anpassen kann.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Man kann das Attribut &#039;&#039;disable&#039;&#039; am Sonos-Device setzen, um den Subprozess zu beenden. Damit kann man seine Zonenlandschaft später erweitern, ohne FHEM komplett abschalten zu müssen.&lt;br /&gt;
Nachdem die Einrichtung des neuen Zoneplayers abgeschlossen ist, löscht man das Attribut &#039;&#039;disable&#039;&#039; einfach wieder - der Subprozess startet und beginnt mit der Erkennung der neuen Komponenten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Einbindung von Sonos in FHEM ==&lt;br /&gt;
Die Einbindung erfolgt über die beiden Module &#039;&#039;&#039;SONOS&#039;&#039;&#039; und &#039;&#039;&#039;SONOSPLAYER&#039;&#039;&#039;. Dabei ist Hauptsächlich das Modul &#039;&#039;&#039;SONOS&#039;&#039;&#039; einzurichten. Alle Zoneplayer werden automatisch erkannt, und dann entsprechend angelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;define &amp;lt;Devicename&amp;gt; SONOS [&amp;lt;Hostname:Port&amp;gt; [Prüfintervall [WaitTime [DelayTime]]]]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiele für die Einbindung ===&lt;br /&gt;
Einfachste Einbindung mit Standardwerten:&lt;br /&gt;
&amp;lt;pre&amp;gt;define Sonos SONOS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Einbindung mit Kontrolle über den verwendeten Port und das IsAlive Prüfintervall:&lt;br /&gt;
&amp;lt;pre&amp;gt;define Sonos SONOS localhost:4711 45&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Name dieses Devices ist automatisch das Namensprefix beim Anlegen der SonosPlayer. In diesem Fall werden alle erkannten Zoneplayer mit dem Prefix &amp;quot;&amp;lt;code&amp;gt;Sonos_&amp;lt;/code&amp;gt;&amp;quot; anfangen. Natürlich kann man das nach dem Anlegen einfach umbenennen.&amp;lt;br /&amp;gt;Als Prüfintervall wurde hier 45s angegeben. Wenn kein Intervall angegeben wird, dann werden 30s verwendet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;define Sonos SONOS localhost:4711 30 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wurde eine verkürzte Wartezeit für den Subprozess von einer Sekunde angegeben. Bei schnellen Systemen wird dadurch der gesamte Startmechanismus schneller verarbeitet.&amp;lt;br /&amp;gt;Wenn nichts angegeben wird, dann wird 8s verwendet, was einen guten Wert für einen Raspberry Pi darstellt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;define Sonos SONOS localhost:4711 30 1 5&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wurde noch eine zusätzliche Verzögerung von 5s eingebaut, da manche Systeme bei einem FHEM-Restart oder ähnlichem die belegten Ports nicht schnell genug wieder freigeben.&amp;lt;br /&amp;gt;Hier kann diese Verzögerung helfen, da erst nach Ablauf dieser Zeitspanne ein Verbindungsversuch zum SubProzess unternommen wird (und auch erst dann der Versuch einen eigenen Prozess zu Starten unternommen wird).&amp;lt;br /&amp;gt;Wenn nichts angegeben wird, dann wird keine Verzögerung durchgeführt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Namensvergabe der automatischen Erkennung ===&lt;br /&gt;
Der automatische Erkennungsmechanismus vergibt Devicenamen auf Basis der Zonennamen und der Funktion eines Players innerhalb eines Stereopaares oder einer Surroundkonstellation.&lt;br /&gt;
Dabei wird immer ein Player (der Master dieser Konstellationen) nur den Namen der Zone erhalten (ohne Anhängekürzel) und die anderen werden mit Kürzel versehen. Dadurch ist der Master der Zone automatisch dasjenige Playerdevice, welches gesteuert werden muss. Alle anderen Player leiten Steueranfragen automatisch an den Master weiter.&lt;br /&gt;
Besteht eine Zone nur aus einem Player, so gibt es natürlich auch nur diesen einen als Master.&lt;br /&gt;
&lt;br /&gt;
Als Anhängekürzel wird immer der Inhalt des Readings &#039;&#039;&#039;fieldType&#039;&#039;&#039; verwendet.&lt;br /&gt;
&lt;br /&gt;
Bei der Funktion gibt es später dann zwei Fälle zu unterscheiden:&lt;br /&gt;
*Stereopaare werden von Sonos intern als Gruppe behandelt. Das bedeutet, dass der zweite Player (der nicht-Master) immer &#039;&#039;PLAYING&#039;&#039; als Status anzeigt, und nur der Master den korrekten Wert. Stereopaare haben, wie normale Gruppen oder Einzelplayer auch, eine Verzögerung von 70ms zu einem Eingangssignal.&lt;br /&gt;
*Surroundsysteme werden als Satelliten angebunden, und werden vom Modul nur mit &#039;&#039;intialized&#039;&#039; angegeben, da Sonos für diese nie eine Statusmeldung sendet. Diese Playersysteme haben eine verkürzte Verzögerung von 30ms zu einem Eingangssignal.&lt;br /&gt;
&lt;br /&gt;
Dabei ist ein Eingangsignal so etwas wie ein Line-In- oder SPDIF-Eingang.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Beispiel für eine Zonenlandschaft ====&lt;br /&gt;
Folgende Landschaft mit Status könnte es geben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Sonos_Schlafzimmer      (STOPPED =&amp;gt; [Keine Musikdatei])&lt;br /&gt;
Sonos_Schlafzimmer_RF   (PLAYING =&amp;gt;  &#039;Keine Titelinformation bei Gruppenwiedergabe&#039;)&lt;br /&gt;
Sonos_Kinderzimmer      (PAUSED_PLAYBACK =&amp;gt;  &#039;Titelinformation&#039;)&lt;br /&gt;
Sonos_Gaestezimmer      (STOPPED =&amp;gt; [Keine Musikdatei])&lt;br /&gt;
Sonos_Wohnzimmer        (STOPPED =&amp;gt; [Keine Musikdatei])&lt;br /&gt;
Sonos_Wohnzimmer_LR     (initialized)&lt;br /&gt;
Sonos_Wohnzimmer_RR     (initialized)&lt;br /&gt;
Sonos_Wohnzimmer_SW     (initialized)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dabei wäre Schlafzimmer ein Stereopaar, Kinder- und Gästezimmer jeweils ein einzelner Player und Wohnzimmer z.B. eine Playbar mit zwei Rear-Lautsprechern und Subwoofer. In keiner Zone läuft eine aktive Wiedergabe.&lt;br /&gt;
Hier kann man schön die einzelnen Zustände und die erzeugten Namen erkennen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zusammenfassung der Spracheinrichtung ===&lt;br /&gt;
Um die Sprachausgabe des Moduls nutzen zu können, müssen einige Grundvoraussetzungen geschaffen werden.&lt;br /&gt;
Hier soll nur eine kurze Übersicht geschaffen werden, was alles getan werden muss. Die einzelnen Themen selbst sind in diesem Wiki-Artikel bereits beschrieben.&lt;br /&gt;
*Es muss einen Speicherplatz für Dateien geben, wo das Sonos-Modul (also FHEM) schreibend zugreifen kann, und das Sonos-System selbst lesend zugreifen kann. Das Sonos-System versucht immer ohne Passwort zuzugreifen, FHEM mit seinem Benutzerkontext&lt;br /&gt;
**Dafür kann man sich z.B. auf dem lokalen Debian-System (sofern FHEM darauf läuft) eine Samba-Freigabe einrichten. Das ist unter &amp;quot;[[#Einrichtung von Samba für Sprachausgabemöglichkeit|Einrichtung von Samba für Sprachausgabemöglichkeit]]&amp;quot; beschrieben.&lt;br /&gt;
**Man kann sich auch auf einem bestehenden NAS-System einen Ordner extra für diesen Zweck anlegen und entsprechend freigeben&lt;br /&gt;
**Bei Problemen bitte die Datei-/Ordnerrechte genauestens prüfen, notfalls mit einem Windows-/Macrechner einen direkten Zugriffstest durchführen. Hier sind die häufigsten Fehlerquellen zu suchen.&lt;br /&gt;
*Es müssen mindestens die Attribute &#039;&#039;&#039;targetSpeakDir&#039;&#039;&#039; und &#039;&#039;&#039;targetSpeakURL&#039;&#039;&#039; am FHEM-Sonos-Device gesetzt werden. Diese Attribute werden bei den &amp;quot;[[#Sprachattribute|Sonos Sprachattributen]]&amp;quot; beschrieben.&lt;br /&gt;
*Empfehlenswert ist auch das Setzen eines der Attribute &#039;&#039;&#039;targetSpeakFileTimestamp&#039;&#039;&#039; oder &#039;&#039;&#039;targetSpeakFileHashCache&#039;&#039;&#039; am FHEM-Sonos-Device. Damit werden Indizierungsprobleme des Sonos-Systems umgangen. Es ist nicht sinnvoll beide Attribute gleichzeitig zu setzen. Auch diese Attribute werden bei den &amp;quot;[[#Sprachattribute|Sonos Sprachattributen]]&amp;quot; beschrieben.&lt;br /&gt;
*Wenn man die Möglichkeit der in den Text eingebetteten MP3-Dateien nutzen möchte, ist es empfehlenswert, das Attribut &#039;&#039;&#039;targetSpeakMP3FileDir&#039;&#039;&#039; für den Standardpfad der Jingles zu setzen. Damit werden die einzugebenden Texte deutlich übersichtlicher.&lt;br /&gt;
*Bei Bedarf kann man sich ein lokales Programm installieren und dem Modul angeben, welches die Sprachausgabedatei erzeugt.&amp;lt;br /&amp;gt;Das sollte man nicht als Anfänger tun!&lt;br /&gt;
**Unter [[#Beispiel für einen Offline-Sprachsynthetisierer|Beispiel für einen Offline-Sprachsynthetisierer]] ist das am Beispiel von &#039;&#039;espeak&#039;&#039; beschrieben.&lt;br /&gt;
**Das Programm kann man dem Modul mit den Attributen &#039;&#039;Speak1&#039;&#039;, &#039;&#039;Speak2&#039;&#039;, &#039;&#039;Speak3&#039;&#039; und &#039;&#039;Speak4&#039;&#039; einstellen. Also bis zu vier verschiedene. Diese Attribute werden ebenfalls bei den &amp;quot;[[#Sprachattribute|Sonos Sprachattributen]]&amp;quot; beschrieben.&lt;br /&gt;
*Mit einem Shell-Skript kann man den Cacheordner für die Sprachausgabe bereinigen lassen. Unter [[#Beispiel für ein Shell-Skript zum Aufräumen eines Speak-Verzeichnisses|Beispiel für ein Shell-Skript zum Aufräumen eines Speak-Verzeichnisses]] gibt es den Code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schnelleinrichtung einer Sprachausgabe ===&lt;br /&gt;
Siehe auch: &amp;quot;[[#Einrichtung von Samba für Sprachausgabemöglichkeit|Einrichtung von Samba für Sprachausgabemöglichkeit]]&amp;quot;, &amp;quot;[[#Sprachattribute|Sonos Sprachattributen]]&amp;quot;, &amp;quot;[[#Beispiel für eine Sprachdurchsage auf Basis eines Notify|Beispiel für eine Sprachdurchsage auf Basis eines Notify]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-FHEM Befehl zum Aktualisieren auslösen:&lt;br /&gt;
  update&lt;br /&gt;
-Raspberry PI neustarten (SSH):&lt;br /&gt;
  shutdown restart&lt;br /&gt;
-Software nachinstallieren mit User root (SSH):&lt;br /&gt;
  sudo apt-get update &amp;amp;&amp;amp; sudo apt-get -y install libwww-perl libsoap-lite-perl libxml-parser-lite-perl&lt;br /&gt;
-Samba Installieren (SSH):&lt;br /&gt;
  sudo apt-get update &amp;amp;&amp;amp; sudo apt-get -y install samba samba-common-bin&lt;br /&gt;
-Ordner Anlegen (SSH):&lt;br /&gt;
  sudo mkdir -p /opt/fhem/SonosSpeak&lt;br /&gt;
-Ordner Rechte geben (SSH):&lt;br /&gt;
  sudo chmod 777 /opt/fhem/SonosSpeak&lt;br /&gt;
-SMB Konfigurationsdatei öffnen:&lt;br /&gt;
  sudo nano /etc/samba/smb.conf&lt;br /&gt;
&lt;br /&gt;
-Folgenden Eintrag ergenzen:&lt;br /&gt;
  [global]&lt;br /&gt;
    security = user&lt;br /&gt;
    map to guest = bad user&lt;br /&gt;
&lt;br /&gt;
-Folgenden Eintrag am Ende hinzufügen:&lt;br /&gt;
  [SonosSpeak]&lt;br /&gt;
    comment = Audio-Files for SonosPlayer to Speak&lt;br /&gt;
    read only = false&lt;br /&gt;
    path = /opt/fhem/SonosSpeak&lt;br /&gt;
    guest ok = yes&lt;br /&gt;
&lt;br /&gt;
-Neustart Samba (SSH):&lt;br /&gt;
  sudo /etc/init.d/samba restart&lt;br /&gt;
&lt;br /&gt;
-Sonos Schnittstelle in FHEM anlegen:&lt;br /&gt;
  define Sonos SONOS&lt;br /&gt;
Hinweis: Es wird ein Raum Sonos angelegt indem Automatisch die Sonos Lautsprecher bedienelemente importiert werden.&lt;br /&gt;
Ebenso werden unter undefine weitere Elemente angelegt.&lt;br /&gt;
&lt;br /&gt;
Via FHEM Befehl weitere Einstellungen in der Schnittstelle vornehmen:&lt;br /&gt;
-Pfad in dem FHEM die mp3 Datei ablegt:&lt;br /&gt;
  attr Sonos targetSpeakDir /opt/fhem/SonosSpeak&lt;br /&gt;
-Pfad für den Sonos lautsprecher:&lt;br /&gt;
  attr Sonos targetSpeakURL \\&amp;lt;ip-Adresse-oder-der-Name-des-raspberry&amp;gt;\SonosSpeak&lt;br /&gt;
-Zeitstempel an Dateinamen anhängen, damit Sonos keine alten Daten aus dem Cash nutzt:&lt;br /&gt;
  attr Sonos targetSpeakFileTimestamp 1&lt;br /&gt;
-Für eingebettete MP3 Dateien:&lt;br /&gt;
  attr Sonos targetSpeakMP3FileDir /opt/fhem/SonosSpeak&lt;br /&gt;
-FHEM Befehl Konfiguration speichern: &lt;br /&gt;
  Save config&lt;br /&gt;
-Raspberry PI neustarten (SSH):&lt;br /&gt;
  shutdown restart&lt;br /&gt;
-Sprachausgabe Testen:&lt;br /&gt;
  set NameDesAngelegtenLautsprechersImSonosRaum Speak 30 de Der auszugebene Text.&lt;br /&gt;
&lt;br /&gt;
=== Zusammenfassung der Bookmarkeinrichtung ===&lt;br /&gt;
Da die Möglichkeiten mit den Bookmarks sehr vielfältig sind, soll in dieser kleinen Zusammenfassung ein Überblick gegeben werden.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich muss zwischen den beiden Grundbereichen für Bookmarks unterschieden werden. Diese können unabhängig voneinander verwendet werden:&lt;br /&gt;
*Bookmarks für die aktuelle Abspielliste/Playlisten&lt;br /&gt;
*Bookmarks für Titel&lt;br /&gt;
&lt;br /&gt;
Bei den Listen wird über die aktuelle Abspielliste (also alle Titel die gerade so abgespielt werden sollen) ein Hashwert gebildet, und mit diesem der aktuelle Titel (genauer: die Tracknummer) zusammen mit einem Zeitstempel gespeichert.&lt;br /&gt;
&lt;br /&gt;
Bei den Titeln wird für jeden Titel die genaue Position im Titel zusammen mit einem Zeitstempel gespeichert, wenn der Titel gewechselt wird.&lt;br /&gt;
&lt;br /&gt;
Beide Bereiche behandeln also getrennte Situationen und können jeder für sich, aber auch gemeinsam, sinnvoll eingesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration der Bookmarks wird erst bei einem Neustart des SubProzesses (also durch einen FHEM-Neustart (vorher Speichern nicht vergessen) oder dem Setzen/Zurücksetzen des Attributs &#039;&#039;&#039;disable&#039;&#039;&#039; am Sonos-Device) berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
Mit den Befehlen &#039;&#039;DisableBookmark&#039;&#039; und &#039;&#039;EnableBookmark&#039;&#039; können Bookmark-Gruppen (temporär) deaktiviert bzw. wieder aktiviert werden.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Achtung&#039;&#039;&#039;: Diese Änderung gilt nur bis zum nächsten FHEM Neustart, da dieser Zustand nicht in die Definition (also das Attribut) zurückgeschrieben wird.&lt;br /&gt;
&lt;br /&gt;
Die im Arbeitsspeicher gehaltenen Bookmarks werden beim Starten des SubProzesses aus den vorhandenen Dateien geladen, und beim Beenden entsprechend dort gespeichert.&lt;br /&gt;
Man kann mit dem Befehl &#039;&#039;&#039;SaveBookmarks&#039;&#039;&#039; (oder entsprechend &#039;&#039;&#039;LoadBookmarks&#039;&#039;&#039;) diesen Vorgang selber anstossen.&lt;br /&gt;
Bei einem globalen Save-Aufruf (also dem FHEM-Befehl &#039;&#039;&#039;&#039;save&#039;&#039;&#039;&#039;) werden die Bookmark-Daten ebenfalls gesichert.&lt;br /&gt;
&lt;br /&gt;
Die komplette Verarbeitung der Bookmarks erfolgt im SubProzess (zunächst mal ohne FHEM-Interaktion) und damit sehr nah an den Ereignissen des Players.&lt;br /&gt;
Im Normalfall hört man z.B. beim Sprung innerhalb eines Titel (nach einem Wechsel des Titels) gerade mal ein kurzes Zucken des Titels, bevor dieser schon &#039;&#039;vorgespult&#039;&#039; wird.&lt;br /&gt;
Beim Anspringen eines Titels in der aktuellen Abspielliste (wegen der Hash-Berechnung, je nach Länge der aktuellen Abspielliste) etwas länger, aber bei mir deutlich unter einer Sekunde.&lt;br /&gt;
FHEM ist nur insoweit involviert, da die Sprungaktionen abschließend als &#039;&#039;&#039;LastActionResult&#039;&#039;&#039;-Aktualisierungen gemeldet werden.&lt;br /&gt;
&lt;br /&gt;
==== Attribute für Bookmarks am Sonos-Device ====&lt;br /&gt;
*&amp;lt;code&amp;gt;bookmarkSaveDir&amp;lt;/code&amp;gt;: Verzeichnis, wo die Bookmarkdateien abgelegt und geladen werden sollen&lt;br /&gt;
*&amp;lt;code&amp;gt;bookmarkPlaylistDefinition&amp;lt;/code&amp;gt;: Definition für Playlist-Bookmarks&lt;br /&gt;
*&amp;lt;code&amp;gt;bookmarkTitleDefinition&amp;lt;/code&amp;gt;: Definition für Titel-Bookmarks&lt;br /&gt;
&lt;br /&gt;
==== Readings für Bookmarks am Sonosplayer-Device ====&lt;br /&gt;
*&amp;lt;code&amp;gt;QueueHash&amp;lt;/code&amp;gt;: Der Hash-Wert für die aktuelle Abspielliste. Damit kann man in eigenen Events bei Bedarf Dinge selber entsprechend verarbeiten.&lt;br /&gt;
&lt;br /&gt;
==== Bookmarks für die aktuelle Abspielliste/Playlisten ====&lt;br /&gt;
Attributname am Sonos-Device:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;bookmarkPlaylistDefinition&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definition:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;Groupname&amp;gt;:&amp;lt;PlayerDeviceRegEx&amp;gt;:&amp;lt;MinListLength&amp;gt;:&amp;lt;MaxListLength&amp;gt;:&amp;lt;MaxAge&amp;gt; [...]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bedeutung:&lt;br /&gt;
*&amp;lt;code&amp;gt;Groupname&amp;lt;/code&amp;gt;: Ein beliebiger Name, der auch als Dateiname verwendet werden kann und keinerlei Sonder-/Leerzeichen enthält&lt;br /&gt;
*&amp;lt;code&amp;gt;PlayerDeviceRegEx&amp;lt;/code&amp;gt;: Ein regulärer Ausdruck, der für das Matching der zu berücksichtigten Player verwendet wird. Das Matching erfolgt auf dem FHEM-Devicenamen. Wenn nicht angegeben, dann wird &#039;&#039;&#039;&#039;.*&#039;&#039;&#039;&#039; verwendet.&lt;br /&gt;
*&amp;lt;code&amp;gt;MinListLength&amp;lt;/code&amp;gt;: Eine Zahl die angibt, wieviel Titel eine aktuelle Abspielliste mindestens haben muss, um berücksichtigt zu werden. Wenn nicht angegeben, dann wird &#039;&#039;&#039;&#039;0&#039;&#039;&#039;&#039; verwendet.&lt;br /&gt;
*&amp;lt;code&amp;gt;MaxListLength&amp;lt;/code&amp;gt;: Eine Zahl die angibt, wieviel Titel eine aktuelle Abspielliste maximal haben darf, um berücksichtigt zu werden. Wenn nicht angegeben, dann wird &#039;&#039;&#039;&#039;99999&#039;&#039;&#039;&#039; verwendet.&lt;br /&gt;
*&amp;lt;code&amp;gt;MaxAge&amp;lt;/code&amp;gt;: Das maximale Alter für die Verwendung eines gespeicherten Bookmarks in Sekunden. Hier kann ein beliebiger Perl-Ausdruck (natürlich ohne Doppelpunkte) verwendet werden, der zu einer Zahl evaluierbar sein muss. Wenn nicht angegeben, dann wird &#039;&#039;&#039;&#039;28*24*60*60&#039;&#039;&#039;&#039; (also vier Wochen) verwendet.&lt;br /&gt;
&lt;br /&gt;
Nach hinten hin dürfen die Doppelpunkte von leergelassenen Werten ebenfalls weggelassen werden.&lt;br /&gt;
&lt;br /&gt;
Es können beliebig viele Gruppen mit diversen (auch überlappenden) Bereichen gebildet werden. Diese verschiedenen Gruppen werden mit Leerzeichen getrennt, sodass innerhalb einer Bookmarkdefinition selbst keinerlei Leerzeichen vorkommen dürfen.&lt;br /&gt;
&lt;br /&gt;
Die Dateinamen für das Speichern und Laden werden wie folgt gebildet: &amp;amp;lt;bookmarkSaveDir&amp;amp;gt;/BookmarkPlaylist_&amp;amp;lt;BookmarkGroupName&amp;amp;gt;.save&lt;br /&gt;
&lt;br /&gt;
Beispiele&lt;br /&gt;
*&amp;lt;code&amp;gt;Eltern:Sonos_(Schlaf|Wohn|Ess)zimmer&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Hiermit wird eine Gruppe mit dem Namen &#039;&#039;&#039;Eltern&#039;&#039;&#039; definiert, die alle Listen, die auf den drei Playern &#039;&#039;&#039;Schlafzimmer&#039;&#039;&#039;, &#039;&#039;&#039;Wohnzimmer&#039;&#039;&#039; und &#039;&#039;&#039;Esszimmer&#039;&#039;&#039; verwendet werden, beachtet.&lt;br /&gt;
*&amp;lt;code&amp;gt;Kind1:Sonos_Kind1:0:5&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Hiermit wird eine Gruppe &#039;&#039;&#039;Kind1&#039;&#039;&#039; definiert, die alle Listen, die mindestens 0 und maximal 5 Titel haben, berücksichtigt.&lt;br /&gt;
*&amp;lt;code&amp;gt;All&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Alle Listen aller Player werden berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
==== Bookmarks für Titel ====&lt;br /&gt;
Attributname am Sonos-Device:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;bookmarkTitleDefinition&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definition:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;Groupname&amp;gt;:&amp;lt;PlayerdeviceRegEx&amp;gt;:&amp;lt;TrackURIRegEx&amp;gt;:&amp;lt;MinTitleLength&amp;gt;:&amp;lt;RemainingLength&amp;gt;:&amp;lt;MaxAge&amp;gt;:&amp;lt;ReadOnly&amp;gt; [...]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bedeutung:&lt;br /&gt;
*&amp;lt;code&amp;gt;Groupname&amp;lt;/code&amp;gt;: Ein beliebiger Name, der auch als Dateiname verwendet werden kann und keinerlei Sonder-/Leerzeichen enthält&lt;br /&gt;
*&amp;lt;code&amp;gt;PlayerDeviceRegEx&amp;lt;/code&amp;gt;: Ein regulärer Ausdruck, der für das Matching der zu berücksichtigten Player verwendet wird. Das Matching erfolgt auf dem FHEM-Devicenamen. Wenn nicht angegeben, dann wird &#039;&#039;&#039;&#039;.*&#039;&#039;&#039;&#039; verwendet.&lt;br /&gt;
*&amp;lt;code&amp;gt;TrackURIRegEx&amp;lt;/code&amp;gt;: Ein regulärer Ausdruck, der für das Matching der zu berücksichtigten Titel verwendet wird. Wenn nicht angegeben, dann wird &#039;&#039;&#039;.*&#039;&#039;&#039;&#039; verwendet.&lt;br /&gt;
*&amp;lt;code&amp;gt;MinTitleLength&amp;lt;/code&amp;gt;: Die minimale Lieddauer in Sekunden, die der Titel lang sein muss, um berücksichtigt zu werden. Wenn nicht angegeben, dann wird &#039;&#039;&#039;&#039;60&#039;&#039;&#039;&#039; verwendet.&lt;br /&gt;
*&amp;lt;code&amp;gt;RemainingLength&amp;lt;/code&amp;gt;: Die minimale Restspielzeit in Sekunden, die ein Titel noch haben muss, um berücksichtigt zu werden. Wenn nicht angegeben, dann wird &#039;&#039;&#039;&#039;10&#039;&#039;&#039;&#039; verwendet.&lt;br /&gt;
*&amp;lt;code&amp;gt;MaxAge&amp;lt;/code&amp;gt;: Das maximale Alter für die Verwendung eines gespeicherten Bookmarks in Sekunden. Hier kann ein beliebiger Perl-Ausdruck (natürlich ohne Doppelpunkte) verwendet werden, der zu einer Zahl evaluierbar sein muss. Wenn nicht angegeben, dann wird &#039;&#039;&#039;&#039;28*24*60*60&#039;&#039;&#039;&#039; (also vier Wochen) verwendet.&lt;br /&gt;
*&amp;lt;code&amp;gt;ReadOnly&amp;lt;/code&amp;gt;: Wenn hier etwas angegeben wird, was von Perl als &#039;&#039;&#039;true&#039;&#039;&#039; erkannt wird, dann wird diese Gruppe beim Aufruf von &#039;&#039;&#039;SaveBookmarks&#039;&#039;&#039; (also auch beim Beenden von FHEM) nicht berücksichtigt. Wenn nicht angegeben, dann wird &#039;&#039;&#039;&#039;0&#039;&#039;&#039;&#039; verwendet (die Gruppe wird also gespeichert).&lt;br /&gt;
&lt;br /&gt;
Nach hinten hin dürfen die Doppelpunkte von leergelassenen Werten ebenfalls weggelassen werden.&lt;br /&gt;
&lt;br /&gt;
Es können beliebig viele Gruppen mit diversen (auch überlappenden) Bereichen gebildet werden. Diese verschiedenen Gruppen werden mit Leerzeichen getrennt, sodass innerhalb einer Bookmarkdefinition selbst keinerlei Leerzeichen vorkommen dürfen.&lt;br /&gt;
&lt;br /&gt;
Die Dateinamen für das Speichern und Laden werden wie folgt gebildet: &amp;amp;lt;bookmarkSaveDir&amp;amp;gt;/Bookmark_&amp;amp;lt;BookmarkGroupName&amp;amp;gt;.save&lt;br /&gt;
&lt;br /&gt;
Beispiele&lt;br /&gt;
*&amp;lt;code&amp;gt;Eltern:Sonos_(Schlaf|Wohn|Ess)zimmer&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Hiermit wird eine Gruppe mit dem Namen &#039;&#039;&#039;Eltern&#039;&#039;&#039; definiert, die alle Titel, die auf den drei Playern &#039;&#039;&#039;Schlafzimmer&#039;&#039;&#039;, &#039;&#039;&#039;Wohnzimmer&#039;&#039;&#039; und &#039;&#039;&#039;Esszimmer&#039;&#039;&#039; laufen, beachtet.&lt;br /&gt;
*&amp;lt;code&amp;gt;Kind1:Sonos_Kind1:.*?\/Hörspiele\/.*:240:30&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Hiermit wird eine Gruppe &#039;&#039;&#039;Kind1&#039;&#039;&#039; definiert, die alle Titel, die im Pfad den Teil &#039;&#039;&#039;/Hörspiele/&#039;&#039;&#039; enthalten, mindestens 240 Sekunden (also vier Minuten) lang und mehr als 30 Sekunden vom Ende entfernt sind, berücksichtigt.&lt;br /&gt;
*&amp;lt;code&amp;gt;All&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Alle Titel aller Player werden berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
==== Hinweise ====&lt;br /&gt;
*Beim Speichern/Laden kann der Einfachheit halber nur der Gruppenname mitgegeben werden. Gibt es sowohl im Bereich Playlist als auch im Bereich Titel eine Gruppe mit diesem Namen, dann werden beide gespeichert/geladen. Wenn man das verhindern möchte, dann müssen die Gruppennamen global eindeutig sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware-/Betriebssystemvoraussetzungen ==&lt;br /&gt;
Diese Liste sollte im Laufe der Zeit fortgeführt werden. Es soll die Hardware-/Softwarevoraussetzungen festhalten, um Probleme im Vorfeld erkennen zu können.&lt;br /&gt;
&lt;br /&gt;
Funktionierende Kombinationen:&lt;br /&gt;
*Windows, ActivePerl 32Bit (zusätzliche Pakete sollten dort mit Hilfe des mitgelieferten, grafischen Paketmanagers installiert werden)&lt;br /&gt;
*Raspberry Pi, Default-Perl&lt;br /&gt;
*Mac Mini, Perl 5.18 mit &#039;&#039;-useThreads&#039;&#039; kompiliert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Problematische Kombinationen:&lt;br /&gt;
*FritzBox: Anscheinend ist Perl dort ohne Thread-Möglichkeit kompiliert. Diese sind aber essentiell notwendig für dieses Modul.&lt;br /&gt;
*Windows, ActivePerl 64Bit (das Paket SOAP::Lite gibt es momentan nicht für 64Bit)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anpassungen bei Nutzung von IPTables als Firewall ==&lt;br /&gt;
Benutzt man bereits IPTables, so müssen folgende Regeln hinzugefügt werden. z.B. unter /etc/defauts/iptables&lt;br /&gt;
&lt;br /&gt;
 *filter&lt;br /&gt;
 :INPUT DROP [0:0]&lt;br /&gt;
 :FORWARD DROP [0:0]&lt;br /&gt;
 :OUTPUT ACCEPT [0:0]&lt;br /&gt;
 &lt;br /&gt;
 # Sonos Kommunikation&lt;br /&gt;
 -A INPUT -m pkttype --pkt-type multicast -j ACCEPT&lt;br /&gt;
 -A INPUT -s 224.0.0.0/8 -j ACCEPT&lt;br /&gt;
 &lt;br /&gt;
 # alles im lokalen LAN&lt;br /&gt;
 -A INPUT -s 192.168.0.0/16 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Softwarevoraussetzungen ==&lt;br /&gt;
Für die Verwendung sind Perlmodule notwendig, die unter Umständen noch nachinstalliert werden müssen:&lt;br /&gt;
*&#039;&#039;&#039;LWP::Simple&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;LWP::UserAgent&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;SOAP::Lite&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;HTTP::Request&#039;&#039;&#039;&lt;br /&gt;
*(&#039;&#039;&#039;XML::Parser::Lite&#039;&#039;&#039;)&amp;lt;br /&amp;gt;Ist im Normalfall im Standardpaket von Perl enthalten. Kann aber u.U. fehlen (scheint unter Ubuntu und verschiedenen Debian-Systemen so zu sein), und muss dann manuell nachinstalliert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Installation dieser Module geht in der Regel per CPAN. Das bedeutet das zum Beispiel mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo cpan LWP::Simple&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
das Modul &amp;quot;&amp;lt;code&amp;gt;LWP::Simple&amp;lt;/code&amp;gt;&amp;quot; installiert wird. Wenn man bereits als Benutzer &#039;&#039;&#039;root&#039;&#039;&#039; arbeitet, dann ist das &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; natürlich nicht nötig.&lt;br /&gt;
&lt;br /&gt;
Sollte es bei der Installation mittels CPAN zu Problemen kommen, dann folgt hier eine Beschreibung der manuellen Installation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hinweis für Debian-Systeme ===&lt;br /&gt;
Bei Debian-basierten Systemen (also auch Raspbian für den Raspberry Pi oder Ubuntu usw.) kann auch mittels&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install &amp;lt;paketname&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
installiert werden. Manchmal ist es etwas schwieriger, die Paketnamen zu ermitteln, aber Google ist da sehr hilfreich.&lt;br /&gt;
&lt;br /&gt;
Hier mal die Liste für die oben genannten Pakete:&lt;br /&gt;
*&#039;&#039;&#039;LWP::Simple&#039;&#039;&#039;-Paketname (inkl. &#039;&#039;&#039;LWP::UserAgent&#039;&#039;&#039; und &#039;&#039;&#039;HTTP::Request&#039;&#039;&#039;): &amp;lt;code&amp;gt;libwww-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;SOAP::Lite&#039;&#039;&#039;-Paketname: &amp;lt;code&amp;gt;libsoap-lite-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;XML::Parser::Lite&#039;&#039;&#039;-Paketname: &amp;lt;code&amp;gt;libxml-parser-lite-perl&amp;lt;/code&amp;gt; oder falls nicht verfügbar &amp;lt;code&amp;gt;libxml-parser-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hinweis für Windows-Systeme mit ActivePerl ===&lt;br /&gt;
Bei Windows Systemen mit ActivePerl kann man die Installation über den ActivePerl Packagemanager durchführen:&lt;br /&gt;
*Installation von Package LWP (inkl. LWP::UserAgent und HTTP::Request)&lt;br /&gt;
*Installation von Package SOAP::Lite&lt;br /&gt;
**SOAP::Lite-Besonderheit für Versionen nach 5.18:&lt;br /&gt;
***Eine neue Paketquelle aus den Vorschlägen oder manuell hinzufügen: Bribes de Perl (http://www.bribes.org/perl/ppm)&lt;br /&gt;
***Installation von Package: SOAP::Lite&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Windows ActivePerl 64Bit kann momentan nicht verwendet werden, da es das Paket SOAP::Lite aktuell nicht gibt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manuelle Installation LWP::Simple ===&lt;br /&gt;
Wenn sich dieses Paket nicht einfach per CPAN-Anweisung installieren läßt, dann hilft folgende Anleitung weiter. &lt;br /&gt;
Beim Abbruch der Installation mittels CPAN erscheint mittendrin ein Fehler, das die Datei nicht entpackt werden könne (couldn&#039;t untar). Da scheint es einen Fehler im Installationsskript zu geben.&lt;br /&gt;
&lt;br /&gt;
Man kann das aber auch Manuell installieren:&lt;br /&gt;
*Am Einfachsten ist ein Wechsel in den Kontext des Benutzers &#039;&#039;&#039;root&#039;&#039;&#039;: &amp;quot;&amp;lt;code&amp;gt;sudo su -&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
*Erstellen eines Ordners, z.B. &amp;quot;&amp;lt;code&amp;gt;mkdir lwpsimple&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
*Wechsel in diesen Ordner &amp;quot;&amp;lt;code&amp;gt;cd lwpsimple&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
*Herunterladen der Datei von [http://search.cpan.org/~gaas/libwww-perl-6.04/ libwww-perl-6.04] oder direkter Link: [http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/libwww-perl-6.04.tar.gz libwww-perl-6.04.tar.gz]: z.B. &amp;quot;&amp;lt;code&amp;gt;wget http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/libwww-perl-6.04.tar.gz&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
*Entpacken der Datei: &amp;quot;&amp;lt;code&amp;gt;tar -xzvf libwww-perl-6.04.tar.gz&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
*Wechsel in das neu entstandene Verzeichnis: &amp;quot;&amp;lt;code&amp;gt;cd libwww-perl-6.04&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
*Nun kann es nach dem Standardvorgehen weitergehen:&lt;br /&gt;
**&amp;quot;&amp;lt;code&amp;gt;perl Makefile.PL&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
**&amp;quot;&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
**&amp;quot;&amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manuelle Installation SOAP::Lite ===&lt;br /&gt;
Wenn sich dieses Paket nicht einfach per CPAN-Anweisung installieren läßt, dann hilft folgende Anleitung weiter. &lt;br /&gt;
Beim Abbruch der Installation mittels CPAN erscheint mittendrin ein Fehler, das die Datei nicht entpackt werden könne (couldn&#039;t untar). Da scheint es einen Fehler im Installationsskript zu geben.&lt;br /&gt;
&lt;br /&gt;
Man kann das aber auch Manuell installieren:&lt;br /&gt;
*Am Einfachsten ist ein Wechsel in den Kontext des Benutzers &#039;&#039;&#039;root&#039;&#039;&#039;: &amp;quot;&amp;lt;code&amp;gt;sudo su -&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
*Erstellen eines Ordners, z.B. &amp;quot;&amp;lt;code&amp;gt;mkdir soaplite&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
*Wechsel in diesen Ordner &amp;quot;&amp;lt;code&amp;gt;cd soaplite&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
*Herunterladen der Datei von [http://search.cpan.org/~mkutter/SOAP-Lite-0.715/ CPAN-SOAP-Lite-0.715] oder direkter Link: [http://mirror.informatik.uni-mannheim.de/pub/mirrors/CPAN/authors/id/M/MK/MKUTTER/SOAP-Lite-0.715.tar.gz SOAP-Lite-0.715.tar.gz]: z.B. &amp;quot;&amp;lt;code&amp;gt;wget http://mirror.informatik.uni-mannheim.de/pub/mirrors/CPAN/authors/id/M/MK/MKUTTER/SOAP-Lite-0.715.tar.gz&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
*Entpacken der Datei: &amp;quot;&amp;lt;code&amp;gt;tar -xzvf SOAP-Lite-0.715.tar.gz&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
*Wechsel in das neu entstandene Verzeichnis: &amp;quot;&amp;lt;code&amp;gt;cd SOAP-Lite-0.715&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
*Nun kann es nach der [http://www.soaplite.com/2003/06/installation_in.html Anleitung] weitergehen:&lt;br /&gt;
**&amp;quot;&amp;lt;code&amp;gt;perl Makefile.PL&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
**Dann kommt eine Nachfrage, was zusammengebaut werden soll. An dieser Stelle ist es jetzt wie eine normale CPAN Installation. Einfach mit &amp;lt;Enter&amp;gt; weitermachen lassen.&lt;br /&gt;
**&amp;quot;&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
**&amp;quot;&amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Einrichtung von Samba für Sprachausgabemöglichkeit ===&lt;br /&gt;
Wenn die Sprachausgabe verwendet werden soll, muss ein lokaler Samba-Daemon (Server für Windowsfreigaben) laufen oder eine für FHEM beschreibbare (Windows-)Freigabe woanders existieren, da Sonos nur auf eine solche lesend zugreifen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Beschreibung soll anhand des Raspberry-Pi (und anderer Debian-Systeme) zeigen, wie man einen solchen lokalen Samba-Server schnell für diesen Zweck einrichten kann:&lt;br /&gt;
*Lokales Verzeichnis für die Ablage der Tondateien erzeugen. z.B.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mkdir /mnt/SonosSpeak&lt;br /&gt;
sudo chmod 777 /mnt/SonosSpeak/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Installation der notwendigen Pakete für Samba: &amp;lt;pre&amp;gt;sudo apt-get install samba samba-common-bin&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Starten des Editors zum Anpassen der Konfigurationsdatei: &amp;lt;pre&amp;gt;sudo nano /etc/samba/smb.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Ist die Datei Original von der Raspbian Installation, muss außer dem Eintrag für das Share nichts geändert werden! Folgende Zeilen am Ende der smb.conf hinzufügen (Pfade müssen natürlich u.U. angepasst werden): &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[SonosSpeak]&lt;br /&gt;
  comment = Audio-Files for SonosPlayer to Speak&lt;br /&gt;
  read only = false&lt;br /&gt;
  path = /mnt/SonosSpeak&lt;br /&gt;
  guest ok = yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Falls der Zugriff nicht funktioniert, ist eventuell die smb.conf nicht im Originalzustand:&lt;br /&gt;
**Sicherstellen, dass in der &#039;&#039;Global&#039;&#039;-Sektion der Parameter &#039;&#039;Security&#039;&#039; nicht definiert wurde oder auf &#039;&#039;security = user&#039;&#039; steht und der Eintrag &#039;&#039;map to guest = bad user&#039;&#039; noch vorhanden ist.&lt;br /&gt;
{{Randnotiz|RNText=Hinweis: Siehe auch https://forum.fhem.de/index.php/topic,79335.msg719716.html#msg719716}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[global]&lt;br /&gt;
  security = user&lt;br /&gt;
  map to guest = bad user&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Samba-Server neustarten:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo systemctl restart smbd&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ältere Systeme &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo /etc/init.d/samba restart&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit wird eine Freigabe mit dem Namen &#039;&#039;&#039;SonosSpeak&#039;&#039;&#039; erzeugt, die von allen ohne Anmeldung gelesen und beschrieben werden kann.&lt;br /&gt;
&lt;br /&gt;
== Interner Aufbau ==&lt;br /&gt;
Um die Kommunikation mit dem UPnP-Netzwerk parallel zum normalen Betrieb von FHEM zu ermöglichen, werden [http://perldoc.perl.org/threads.html Threads] eingesetzt. Dadurch sind manche Hardwareplattformen leider überfordert und können u.U. nicht mit diesem Modul verwendet werden.&amp;lt;br /&amp;gt;Das läßt sich aus technologischen Gründen auch nicht umgehen.&lt;br /&gt;
&lt;br /&gt;
Dabei wird der SubThread verwendet um die Callback-Aufrufe, die erfolgen, wenn z.B. eine Statusänderung eines Players erfolgt, zu verarbeiten. Die Aktualisierung der Daten selbst wird dann über eine interne [http://perldoc.perl.org/Thread/Queue.html Queue] &amp;quot;nach oben&amp;quot; zum Hauptthread übertragen, und dann mittels einer bestehenden TCP-Verbindung zur Verarbeitung in FHEM übertragen.&amp;lt;br /&amp;gt; Dadurch wird gewährleistet, dass die Daten immer im Hauptthread (also dem &amp;quot;eigentlichen&amp;quot; FHEM-Thread) verfügbar sind.&lt;br /&gt;
&lt;br /&gt;
Da dieser SubThread auch die Kommandoübergabe an den Player übernimmt, gibt es auch eine Kommando-Queue in die andere Richtung, die dann mittels eines Thread-Signals im SubThread-Kontext ausgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Dieser Aufbau sorgt natürlich dafür, dass man auf die üblichen Nebenläufigskeitsprobleme achten muss (in der Hauptsache sind das Dead-Locks, da man oftmals über drei Ecken aufeinander wartet, ohne das direkt zu sehen). Deswegen wird in allen Log-Ausgaben des Moduls ein Kürzel vorangestellt: &amp;quot;&amp;lt;code&amp;gt;SONOS_&amp;lt;/code&amp;gt;&amp;quot;, wobei der Unterstrich durch die Nummer des aktiven, loggenden, Threads ersetzt wird. Damit kann man sehr leicht feststellen, auf welcher &amp;quot;Ebene&amp;quot; diese Ausgabe erfolgt ist, und ob das alles so seine Richtigkeit hat.&lt;br /&gt;
&lt;br /&gt;
Der Rest sind nur viele Zeilen, die XML-Strukturen (mittels regulärer Ausdrücke) parsen oder erzeugen, und die entsprechenden Informationen setzen oder abfragen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation des Moduls selbst ==&lt;br /&gt;
Hier wird die Installation des eigentlichen Moduls beschrieben, sowie ein Changelog ausgegeben, damit man nachvollziehen kann, was am Modul so passiert ist. Dieser Changelog steht auch in der Datei 00_SONOS.pm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installation mittels FHEM-Updatemechanismus ===&lt;br /&gt;
Dieses Modul wird seit Dezember 2014 zusammen mit FHEM ausgeliefert. Es sind keine weiteren Schritte zur Installation des Moduls selbst notwendig.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===  Fehlersuche ===&lt;br /&gt;
Da das Modul noch in der Entwicklung steht, und natürlich sowieso immer wieder Probleme auftauchen können, hier ein paar Hinweise zur Fehlersuche:&lt;br /&gt;
Das Modul besteht zunächst aus zwei Ebenen:&lt;br /&gt;
*Eine Ebene, die innerhalb von FHEM selbst läuft&lt;br /&gt;
*Eine Ebene, die als eigenständiger Prozess läuft (entweder durch FHEM selbst oder manuell angestartet)&lt;br /&gt;
&lt;br /&gt;
Die Logausgaben der ersten Ebene landen direkt im FHEM-Log, die der zweiten Ebene können dort nicht reingeschrieben werden, und landen dementsprechend auf der Konsole (genauer: auf STDOUT).&lt;br /&gt;
Wenn man also die Log-Ausgaben dieses Sub-Prozesses sehen möchte, muss man im Startskript den STDOUT entsprechend umlenken, oder einen manuellen Start ausführen:&lt;br /&gt;
&amp;lt;code&amp;gt;sudo perl fhem.pl fhem.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
Dazu muss man natürlich vorher in das entsprechende Verzeichnis wechseln.&lt;br /&gt;
&lt;br /&gt;
Die Menge der Logausgaben werden, wie in FHEM üblich, über das Attribut Verbose am Sonos-Device gesteuert (Bis auf wenige Zeilen beim Start des Sub-Prozesses, die nur mit dem globalen Verbose-Attribut gesteuert werden können, da noch keine Verbindung besteht).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis!&#039;&#039;&#039;: &amp;lt;br /&amp;gt;In neueren Versionen von FHEM wird die Konsolenlogausgabe in das normale FHEMlog umgeleitet, sodass man das nicht mehr umständlich selber umlenken und suchen muss.&lt;br /&gt;
&lt;br /&gt;
Im Normalfall sollte Anhand der Ausgabe erkennbar sein, was das jeweilige Problem ist. Bei Unklarheiten am Besten im Forum suchen/posten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Hinweise / Häufige Fehler / FAQ ====&lt;br /&gt;
Hier soll mal eine Liste mit häufigen Fehlern, Problemen und Hinweisen entstehen.&lt;br /&gt;
&lt;br /&gt;
*In neueren Versionen von FHEM werden die Konsolen-Logausgaben in das FHEMlog umgeleitet. Dadurch wird die Logdatei in der Standardeinstellung von (3) ziemlich voll. Wenn man das verhindern möchte, dann muss man das Attribut &#039;&#039;verbose&#039;&#039; am Sonos-Device auf einen Wert kleiner 3 setzen (z.B. 0).&lt;br /&gt;
*Das Modul wird im Normalfall stets an die aktuelle Sonos-Firmwareversion angepasst. Es empfiehlt sich also im Normalfall bei komischem Verhalten des Moduls, welches auf eine solche Inkompatibilität hindeutet, auf die neueste Sonos-Firmware upzudaten.&amp;lt;br /&amp;gt;Ein Beispiel ist hierfür die Verarbeitung der Alarme. Dort wurde bei einem Sonos-Update die Logik verändert, sodass das Modul nun eine Inkompatibilität mit der Vorgängerfirmwareversion hat.&lt;br /&gt;
*Allgemein läuft das Modul besser, wenn es im Benutzerkontext &#039;&#039;root&#039;&#039; läuft. Für diverse Funktionalitäten ist das sogar notwendig (z.B. Pingtype auf &#039;&#039;icmp&#039;&#039; konfiguriert).&lt;br /&gt;
**Um FHEM als &#039;&#039;root&#039;&#039; laufen lassen zu können, kann es notwendig sein, den Benutzer &#039;&#039;fhem&#039;&#039; in der Datei &#039;&#039;&#039;/etc/passwd&#039;&#039;&#039; auszumarkieren oder mittels &#039;&#039;&#039;deleteuser&#039;&#039;&#039; zu löschen. FHEM schaltet in den Benutzerkontext &#039;&#039;fhem&#039;&#039; um, wenn es diesen Benutzer beim Start findet.&lt;br /&gt;
*Wenn man das Problem hat, dass Befehle an den falschen Player gesendet werden, sollte man das Reading &#039;&#039;&#039;ZoneGroupID&#039;&#039;&#039; prüfen. Bei ungruppierten Playern sollte es die eigene UDN enthalten, bei gruppierten Playern die UDN des Gruppenmaster.&amp;lt;br /&amp;gt;Sollte das mal nicht der Fall sein, so kann es sein, dass im Sonos-System eine Falschinformation vorliegt. Da es jetzt nicht so einfach ist, die bei Sonos dazu zu bewegen, diesen Fehler zu beseitigen, gibt es u.U. eine Workaround-Möglichkeit mit dem Modul.&amp;lt;br /&amp;gt;Wenn wir z.B. zwei Player haben: &#039;&#039;Sonos_Bad&#039;&#039; und &#039;&#039;Sonos_Kueche&#039;&#039;, und dort die Steuerung nicht korrekt funktioniert, dann einmal die folgenden Schritte versuchen (bei mehr oder anderen Playern natürlich analog dazu).&amp;lt;br /&amp;gt;Dadurch werden die Gruppen gebildet, und nochmal explizit aufgelöst.&lt;br /&gt;
**&amp;lt;code&amp;gt;set Sonos Groups [Sonos_Bad, Sonos_Kueche]&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;set Sonos Groups [Sonos_Kueche, Sonos_Bad]&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;set Sonos Groups [Sonos_Bad], [Sonos_Kueche]&amp;lt;/code&amp;gt;&lt;br /&gt;
*Es ist wichtig, dass erst das &#039;&#039;&#039;Sonos&#039;&#039;&#039;-Device definiert wird, und dann erst die entsprechenden &#039;&#039;&#039;Sonosplayer&#039;&#039;&#039;-Devices dazu. Sonst kann es u.U. zu einer Verdoppelung des SubProzesses kommen.&lt;br /&gt;
*Manchmal bleiben &#039;Reste&#039; beim Beenden von FHEM. Dann kann es sinnvoll sein, erst alle Perl-Prozesse zu beenden. Diese kann man mit &amp;lt;pre&amp;gt;sudo ps -aux | grep perl&amp;lt;/pre&amp;gt; finden, und dann einzeln mittels &amp;lt;pre&amp;gt;sudo kill ID&amp;lt;/pre&amp;gt; beenden (die ID steht in der ersten Spalte des Ergebnisses des vorherigen Befehls).&lt;br /&gt;
&lt;br /&gt;
Einträge, die mittlerweile behoben wurden:&lt;br /&gt;
*&#039;&#039;&#039;Fehler&#039;&#039;&#039;-Ausgaben beim FHEM-Start: Einige Readings dürfen bei einem Neustart von FHEM nicht bereits vorbelegt sein, da der entsprechende Zoneplayer mittlerweile andere Informationen haben könnte, bzw. einige Events sonst nicht erzeugt werden. Aus diesem Grund werden diese beim Start auch nicht geladen.&amp;lt;br /&amp;gt;Folgende Meldung erscheint z.B.:&amp;lt;code&amp;gt;Reading Sonos_Wohnzimmer-&amp;gt;AlarmListVersion must not be used out of statefile.&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Diese Meldungen kann man getrost ignorieren, da sie nicht auf einen Fehler hindeuten, sondern nur klarstellen, dass diese Readings eben nicht aus dem Statefile verwendet werden dürfen (was durch Ausgabe dieser Meldung auch nicht passiert).&lt;br /&gt;
**Das konnte mittlerweile durch ein Setzen eines &amp;quot;Lademarkers&amp;quot; verhindert werden. Dadurch wird das Laden des Readings nicht mehr unterbunden, sondern auf einen sicher ungültigen Wert gesetzt. Damit funktionieren die folgenden Readings-Update Aufrufe wieder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===  Changelog ===&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:10%&amp;quot; | Datum !! style=&amp;quot;width:8%&amp;quot; | Version !! style=&amp;quot;width:82%&amp;quot; | Änderungen&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; style=&amp;quot;vertical-align:top&amp;quot; | SVN-History&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 25.04.2018&lt;br /&gt;
| &lt;br /&gt;
*&amp;quot;Deep Recursion&amp;quot;-Warnung beim loggen wird nun verhindert&lt;br /&gt;
*Beim Erzeugen der Gruppen-ReadingsGroup ist bei der Verwendung eines Boosts ab und zu ein Fehler aufgetreten&lt;br /&gt;
*Beim Erzeugen eines ControlPoint-Objekts kann man nun das Envelope-Prefix angeben (nicht für das Sonos-Modul relevant)&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 15.04.2018&lt;br /&gt;
| &lt;br /&gt;
*Streams über Alexa (z.B. Sonos One) werden nun korrekt als Radiostreams dargestellt&lt;br /&gt;
*Es werden nun auch Updateinformationen und die interne Softwareversionsnummer gesucht und als Reading gesetzt: &amp;quot;softwareRevisionAvailable&amp;quot;, &amp;quot;softwareRevisionInternal&amp;quot; und &amp;quot;softwareRevisionInternalAvailable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 24.03.2018&lt;br /&gt;
| &lt;br /&gt;
*Einige Log-Ausgaben haben bei undefinierten Default-Übergaben Fehlermeldungen verursacht.&lt;br /&gt;
*Bei einigen Positionsabfragen an die Player wurden Sonderfälle (wie NOT_IMPLEMENTED) nicht berücksichtigt.&lt;br /&gt;
*Slider-Wertebereich für Bass und Treble auf den Bereich -10..10 korrigiert.&lt;br /&gt;
*Es gibt jetzt ein Reading &amp;quot;IsZoneGroup&amp;quot;, das 0 oder 1 sein kann. Danach wird jetzt auch entschieden, ob eine Playersteuerung dargestellt wird, oder nicht.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 10.03.2018&lt;br /&gt;
| &lt;br /&gt;
*Die PlayBase kann nun auch den SPDIF-Eingang aktivieren (wie die PlayBar)&lt;br /&gt;
*Wenn man über Alexa Musik hört, wird das aktuelle Cover nun auch angezeigt.&lt;br /&gt;
*Wenn ein Player nach einem Neustart disabled war, und während des Betriebs enabled wird, wird nun versucht ihn wiederzufinden.&lt;br /&gt;
*Wenn ein Player disabled oder disappeared ist, wird ein Proxy-Cover-Zugriffsversuch auf diesen Player unterbunden.&lt;br /&gt;
*Ein Modify-Befehlsaufruf wird nun am Vorhandensein von $hash-&amp;gt;{OLDDEF} erkannt.&lt;br /&gt;
*Bei einigen PERL-Installationen stand im Reading &#039;currentTrackPositionSimulatedSec&#039; eine Kommazahl (da sie von time() aus berechnet wird). Diese Zahl wird nun gerundet.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 26.02.2018&lt;br /&gt;
| &lt;br /&gt;
*ComObjectTransportQueue in Client_ReceiveQueue umbenannt.&lt;br /&gt;
*If-Abfrage um die can_read-Schleife im SubProzess eingebaut, Um Signalunterbrechungen zu berücksichtigen.&lt;br /&gt;
*Neuer Getter &amp;quot;WifiPortStatus&amp;quot;. Liefert Active, wenn das WLAN aktiviert ist, sonst Inactive.&lt;br /&gt;
*Drei neue (automatisch ermittelte) Readings &amp;quot;Orientation&amp;quot;, &amp;quot;WifiEnabled&amp;quot; und &amp;quot;WirelessMode&amp;quot;.&lt;br /&gt;
*Warnung mit &amp;quot;unescaped left brace&amp;quot; in Tag.pm wurde korrigiert.&lt;br /&gt;
*ExportSonosBibliothek wird nun in einem eigenen Thread (LongJobs-Thread) ausgeführt. Dadurch bleibt das System steuerbar, auch wenn gerade ein langwieriger Export läuft.&lt;br /&gt;
*Prüfmethode eingebaut, um verlorengegangene Fhem-Prozessverbindungen (aus Sicht des SubProzesses) zu erkennen, und entsprechende Thread-Bereinigungmaßnahmen durchführen zu können.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 07.01.2018&lt;br /&gt;
| &lt;br /&gt;
*Der Initialwert von LastProcessAnswer (wird beim Start auf 0 gesetzt) wird nun korrekt berücksichtigt&lt;br /&gt;
*Bei ignoredIPs und bei usedOnlyIPs kann jetzt für jedes Komma-Getrennte Element auch ein regulärer Ausdruck stehen. Wird mit // umschlossen, und darf keine Doppelpunkte enthalten.&lt;br /&gt;
*Logausgabe im UPnP-Modul, welche Devices mit welchen Header-Angaben nun akzeptiert wurden (Ausgabe auf Level 5)&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 23.12.2017&lt;br /&gt;
| &lt;br /&gt;
*Subscriptions-Refresh umgebaut.&lt;br /&gt;
*Devicenamen mit Punkt (.) funktionieren nun.&lt;br /&gt;
*Fehler mit &amp;quot;undefined value $value&amp;quot; behoben.&lt;br /&gt;
*GetTrackProvider liefert bei Nichtfinden in der MusicServicesList nun eine leere Angabe, und keine undefined.&lt;br /&gt;
*Die Angabe in LastProcessAnswer ist nicht Zeitumstellungsfest. Der Wert wurde nun umgestellt auf epoch-Zeit.&lt;br /&gt;
*Der Verweis auf %intAt wurde entfernt. Die Variable wurde sowieso nie verwendet.&lt;br /&gt;
*Warnungsunterdrückung von &#039;mumpitzstuff&#039; eingebaut.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 28.09.2017&lt;br /&gt;
| &lt;br /&gt;
*Provider-Icons werden wieder korrekt ermittelt&lt;br /&gt;
*Das Verarbeiten der Arbeitsschlange im SubProcess wurde optimiert&lt;br /&gt;
*Die Fehlermeldung mit den redundanten Argumenten bei sprintf wurde umgestellt.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 14.07.2017&lt;br /&gt;
| &lt;br /&gt;
*Änderung in der ControlPoint.pm: Es wurden zuviele Suchantworten berücksichtigt.&lt;br /&gt;
*Bei einem Modify wird von Fhem nur die DefFn aufgerufen (und nicht vorher UndefFn). Dadurch blieben Reste, die aber vor einer Definition aufgeräumt werden müssen. Resultat war eine 100%-CPU-Last.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 09.07.2017&lt;br /&gt;
| &lt;br /&gt;
*BulkUpdate: Beginn und Ende sind nun sicher davor einen vom SubProzess gestarteten BulkUpdate vorzeitig zu beenden.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 05.07.2017&lt;br /&gt;
| &lt;br /&gt;
*Neue Variante für das Ermitteln der laufenden Favoriten, Radios oder Playlists&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 05.07.2017&lt;br /&gt;
| &lt;br /&gt;
*Veralteten Mechanismus für das Unterbrechen der Sendeschleife aufgeräumt.&lt;br /&gt;
*SONOS_ConvertNumToWord kann nun mit undef-Übergaben umgehen.&lt;br /&gt;
*Andere Methodik zum Ermitteln von FavouriteName, RadioName und PlaylistName eingebaut.&lt;br /&gt;
*Es gibt ein neues Attribut &amp;quot;SubProcessLogfileName&amp;quot;. Damit kann die Logausgabe des SubProzesses in eine eigene Datei umgeleitet werden. Unter Windows z.B. gibt es sonst keine saubere Darstellungsmöglichkeit für die Logausgabe, da die beiden Prozesse sich gegenseitig die Ausgaben im Fhem-Log überschreiben. Bei Angabe von &#039;-&#039; wird wie bisher auf STDOUT (und damit im Fhem-Log) geloggt.&lt;br /&gt;
*Kleinere Fehler bei einzelnen Reading-Aktualisierungen behoben.&lt;br /&gt;
*Beim Zerlegen der MusicServicesList gab es einen Fehler, der z.B. dafür gesorgt hatte, dass Apple Music nicht erkannt wurde.&lt;br /&gt;
*Umbau der Verarbeitungslogik in Richtung SubProzess. Das sollte nun schneller und sicher sequentiell verarbeitet werden.&lt;br /&gt;
*Die Aktualisierung des Readings &amp;quot;LastProcessAnswer&amp;quot; wird jetzt während eines laufenden Bulkupdates auch als solches durchgeführt, und zerstört damit nicht mehr dieses laufende Update.&lt;br /&gt;
*Alle noch vorhandenen ReadingsSingleUpdate-Aufrufe wurden BulkUpdate-Sicher gemacht.&lt;br /&gt;
*Die prozentuale Fortschrittsanzeige hat bei Streams negative, hohe Werte angezeigt. Steht jetzt wieder auf 0.&lt;br /&gt;
*Beim Löschen blieb noch die automatisch angelegte ReadingsGroup für die aktuelle Abspielliste bestehen.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 21.06.2017&lt;br /&gt;
| &lt;br /&gt;
*Bei der ersten Verbindung war das Reading für die letzte SubProzess-Antwort eventuell bereits veraltet. Das wird nun durch ein Datum in der Zukunft verhindert.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 20.06.2017&lt;br /&gt;
| &lt;br /&gt;
*Die Verarbeitung des Notify-Events für die Anzeigeaktualisierung ist in das SONOSPLAYER-Modul umgezogen (wo es auch logisch hingehört).&lt;br /&gt;
*Die Zeitkonvertierung hatte einen Sekundenfehler.&lt;br /&gt;
*Durch eine fehlerhafte IF-Verschachtelung in der ControlPoint.pm gab es komische Log-Augaben.&lt;br /&gt;
*Die lokalen Cover werden nur noch heruntergeladen, wenn das Attribut &amp;quot;getLocalCoverArt&amp;quot; am Sonos-Device gesetzt ist. Normalerweise merkt man davon nichts, da die eingebauten Coveranzeigen diese nicht verwenden. Wenn man diese heruntergeladenen Cover selbst noch verwendet werden, dann muss dieses Attribut gesetzt werden!&lt;br /&gt;
*Das Problem mit den Wide-Character bei der Hashwert-Berechnung von ProxyCache und SpeakBuffer wird abgefangen, und ein Versuch mit einem dazwischenliegenden Konverter durchgeführt.&lt;br /&gt;
*Das Subscribing für Rendering-Events wird in einem Eval durchgeführt, sodass eine abgefangene Fehlermeldung bei nicht-Erfolg ausgegeben wird. Das passiert z.B. bei einem Sub- oder Surroundlautsprecher.&lt;br /&gt;
*Die Simulation der aktuellen TrackPosition lief weiter, wenn der Player vor einem disappeared nicht gestoppt wurde.&lt;br /&gt;
*Bei der Verarbeitung eines Befehls im SubProzess wurde in einigen Fällen die Befehlsqueue nicht korrekt verringert, was zu Folgefehlern führte.&lt;br /&gt;
*Wenn der RestoreThread einen ungültigen Datensatz in der RestoreQueue vorfindet, überspringt er ihn...&lt;br /&gt;
*Bessere Behandlung der TrackProviderermittlung&lt;br /&gt;
*Bei MakeCoverURL gab es Logausgaben mit dem falschen Level.&lt;br /&gt;
*Es gibt vier neue Attribute am Sonosdevice: &amp;quot;getFavouritesListAtNewVersion&amp;quot;, &amp;quot;getPlaylistsListAtNewVersion&amp;quot;, &amp;quot;getRadiosListAtNewVersion&amp;quot; und &amp;quot;getQueueListAtNewVersion&amp;quot;. In Zusammenarbeit mit &amp;quot;getListsDirectlyToReadings&amp;quot; wird dann bei Änderung der entsprechenden Liste automatisch das entsprechende Reading aller Sonosplayer-Devices aktualisiert. Hierbei entfallen dann etwaige eigene Notifies, die eine Aktualisierung der Readings veranlassen. Diese sollten dann natürlich auch entfernt werden.&lt;br /&gt;
*Die Überprüfung, ob der SubProzess noch lebt, wird nun über die bereits bestehende Verbindung abgewickelt. Dadurch entfallen die ständigen Verbindungsversuche zum SubProzess. Dazu wird ein Reading &#039;LastProcessAnswer&#039; am zentralen Sonos-Device geführt.&lt;br /&gt;
*Bei Verlust der Verbindung zum SubProzess wird nun keine 100% Systemlast mehr verursacht.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 14.05.2017&lt;br /&gt;
| &lt;br /&gt;
*FHEMWEB-Anzeige der Player auf die neu möglichen, nicht quadratischen, Radiocover angepasst.&lt;br /&gt;
*In der Datei ControlPoint.pm wurde beim Öffnen des SSDP-Ports das Attribut ReusePort hinzugefügt (sofern das Betriebssystem das unterstützt).&lt;br /&gt;
*Es gibt ein neues Reading &amp;quot;currentEnqueuedTransportHandle&amp;quot;, welches zur Weitergabe der aktuellen Quelle des aktuellen Titels verwendet werden kann.&lt;br /&gt;
*Es gibt zwei neue Readings &amp;quot;currentTrackHandle&amp;quot; und &amp;quot;nextTrackHandle&amp;quot;, welche zur Weitergabe der aktuellen bzw. nächsten Wiedergabe geeignet sind.&lt;br /&gt;
*Es gibt ein neues Reading &amp;quot;currentSource&amp;quot;, welches (wenn beliefert) den Namen der Quelle des Titels angibt. Bei Spotify z.B. die gewählte Playliste oder das Album, oder die gewählte Sonos-Playliste.&lt;br /&gt;
*Die Trackprovider werden jetzt über die verfügbaren, von Sonos bereitgestellten, MusicServices ermittelt.&lt;br /&gt;
*(Fehlende) Radiocover werden nun über den offiziellen Webservice von Sonos ermittelt, und werden wieder geladen.&lt;br /&gt;
*Etwaige, immer noch, fehlende Radiocover werden als Fallback wie bisher geladen. Das sollte aber nicht mehr vorkommen.&lt;br /&gt;
*Spotify-Playlisten-Cover werden wieder geladen.&lt;br /&gt;
*Teilweise wurden Bibliothekscover nicht geladen, das sollte wieder gehen.&lt;br /&gt;
*Die Verbindungsprüfung zwischen Fhem-Modul und SubProzess erfolgt nur noch, wenn nicht sowieso schon Daten übertragen werden, und sollte dementsprechend nicht mehr dazwischenfunken.&lt;br /&gt;
*Die Verbindungsprüfung und der grundsätzliche Verbindungsaufbau zum SubProzess wurden umgestellt.&lt;br /&gt;
*Fehlermeldungen bei Fhem-Player-Such-Prozeduren verbessert.&lt;br /&gt;
*Es gibt zwei (bzw. vier) neue Readings &amp;quot;TrackProviderIconRoundURL&amp;quot; und &amp;quot;TrackProviderIconQuadraticURL&amp;quot; (jeweils für &amp;quot;current&amp;quot; und für &amp;quot;next&amp;quot;). Mit diesen lassen sich die entsprechenden Provider-Icons anzeigen.&lt;br /&gt;
*Die Titelanzeige in FhemWeb enthält nun auch die neuen Provider-Icons.&lt;br /&gt;
*Detaildarstellung der SonosPlayer-Devices enthält jetzt auch die Coverdarstellung.&lt;br /&gt;
*Bug in &amp;quot;SONOS_GetTimeFromString&amp;quot; behoben.&lt;br /&gt;
*Es gibt zwei neue Attribute &amp;quot;simulateCurrentTrackPosition&amp;quot; und &amp;quot;simulateCurrentTrackPositionPercentFormat&amp;quot;. Mit diesen kann man eine Simulation des Fortschritts von currentTrackPosition im gewählten Intervall aktivieren. Dabei werden die Readings &amp;quot;currentTrackPositionSimulated&amp;quot;, &amp;quot;currentTrackPositionSimulatedSec&amp;quot; und &amp;quot;currentTrackPositionSimulatedPercent&amp;quot; (nur bei gelieferter &amp;quot;currentTrackDuration&amp;quot;) aktualisiert.&lt;br /&gt;
*Es gibt zwei neue Readings &amp;quot;currentTrackDurationSec&amp;quot; und &amp;quot;nextTrackDurationSec&amp;quot;, welche die jeweilige Tracklänge in Sekunden angeben.&lt;br /&gt;
*Durch ein mittlerweile verändertes Notify-Event-Handling in Fhem wurden die Bookmarks nicht immer zusammen mit dem globalen Save-Befehl gespeichert.&lt;br /&gt;
*Die Cover-/Titelanzeige wird nun intern vom Modul durchgeführt. Deshalb ist keine zusätzliche ReadingsGroup für die Anzeige und Aktualisierung mehr notwendig. In der Raumansicht kann man das Verhalten für alle Sonosplayer einheitlich mit dem Attribut &amp;quot;deviceRoomView&amp;quot; beeinflussen. Es kann die Zustände &amp;quot;Both&amp;quot; und &amp;quot;DeviceLineOnly&amp;quot; annehmen.&lt;br /&gt;
*Die Steuermöglichkeiten werden nun intern vom Modul dargestellt. Dazu muss die Cover-/Titelanzeige aktiviert sein. Will man die Steuerung ausblenden, kann man das Attribut &amp;quot;suppressControlButtons&amp;quot; für Sonosplayer einzeln setzen setzen.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 09.04.2017&lt;br /&gt;
| &lt;br /&gt;
*Beim Maskieren der Anzeigelisten für Playlisten, Radios oder Favoriten werden Klammern und andere Sonderzeichen für reguläre Ausdrücke nun auch in Punkte umgewandelt, da diese sonst den regulären Such-Ausdruck stören.&lt;br /&gt;
*Beim Starten/Laden von Playlisten, Radios oder Favoriten werden, vor der eigentlichen Suche im Sonossystem, einfache Anführungszeichen (&#039;) in die HTML-Schreibweise (&amp;amp;apos;) übersetzt, da diese so auch von Sonos verwendet werden.&lt;br /&gt;
*Radiocover werden nun in höherer Auflösung von einer TuneIn-API-Schnittstelle geladen (von dort wo auch der Controller selbst die Cover lädt).&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 04.04.2017&lt;br /&gt;
| &lt;br /&gt;
*Es gibt zwei neue Readings &amp;quot;AvailablePlayerList&amp;quot; und &amp;quot;AvailablePlayerListAlias&amp;quot; am Sonosplayer-Device, wenn das Attribut &amp;quot;getListsDirectlyToReadings&amp;quot; am Sonos-Device gesetzt wurde. Diese Reading geben die anderen noch verfügbaren, nicht gebundenen, Player an. Das ist die Grundlage für eine Player-zur-Abspielgruppe-hinzufügen-Funktion als Listendarstellung.&lt;br /&gt;
*Es gibt zwei neue Readings &amp;quot;AllPlayerNotBonded&amp;quot; und &amp;quot;AllPlayerNotBondedCount&amp;quot; am Sonos-Device, welche alle Masterplayer angibt, die nicht gebunden sind.&lt;br /&gt;
*Es gibt ein neues Reading &amp;quot;IsBonded&amp;quot; am Sonosplayer-Device, welches angibt, ob der Player in einer Bindung zum Masterplayer steht (anstatt ein einfaches Gruppenmitglied zu sein). Gebundene Player sind z.B. der rechte Player im Stereoverbund, sowie die Satellitenplayer in einem 5.1er Surroundsystem (also Subwoofer, hintere Lautsprecher und vordere Lautsprecher).&lt;br /&gt;
*Es gibt drei neue Readings &amp;quot;SlavePlayerNotBonded&amp;quot;, &amp;quot;SlavePlayerNotBondedList&amp;quot; und &amp;quot;SlavePlayerNotBondedListAlias&amp;quot; am Sonosplayer-Device, wobei die beiden letzteren nur erzeugt werden, wenn das Attribut &amp;quot;getListsDirectlyToReadings&amp;quot; am Sonos-Device gesetzt wurde.&lt;br /&gt;
*Es gibt jetzt ein Attribut &amp;quot;getTitleInfoFromMaster&amp;quot; am Sonosplayer-Device, mit welchem man ein Slave-Device (auch gebundene) dazu bringen kann, die wichtigsten Abspielreadings automatisch vom Master zu duplizieren.&lt;br /&gt;
*Die Oberflächenauswahl für &amp;quot;AddMember&amp;quot;, &amp;quot;RemoveMember&amp;quot; und &amp;quot;CreateStereoPair&amp;quot; wurde auf die nicht bereits gebundenen Player bzw. die Teilnehmer deer Gruppe beschränkt.&lt;br /&gt;
*Es gibt zwei neue Readings &amp;quot;AllPlayer&amp;quot; und &amp;quot;AllPlayerCount&amp;quot; am Sonos-Device. Damit erhält man eine komplette Liste aller Player (und deren Anzahl), egal wie sie gerade verwendet werden.&lt;br /&gt;
*Die mitgelieferte Prozedur für die ReadingsGroup-Anzeigen wurde für das neue Reading &amp;quot;Queue&amp;quot; erweitert, außerdem wurde ein Darstellungsproblem der Gruppierungsanzeige mit aktuellen Versionen von FHEMWEB behoben&lt;br /&gt;
*Es gibt zwei neue Readings &amp;quot;ButtonState&amp;quot; und &amp;quot;ButtonLockState&amp;quot;, sowie einen Setter für &amp;quot;ButtonLockState&amp;quot;.&lt;br /&gt;
*Es gibt ein neues Reading &amp;quot;LineInPlayer&amp;quot; am Sonos-Device, und wenn das Attribut &amp;quot;getListsDirectlyToReadings&amp;quot; gesetzt ist, auch &amp;quot;LineInPlayerList&amp;quot; und &amp;quot;LineInPlayerListAlias&amp;quot;. Diese Liste enthält die gültigen LineIn-Eingänge aller Player, die für die Wiedergabe ausgewählt werden können.&lt;br /&gt;
*Es gibt zwei neue Attribute &amp;quot;stopSleeptimerInAction&amp;quot; und &amp;quot;saveSleeptimerInAction&amp;quot; am Sonosplayer-Device. Mit &amp;quot;stopSleeptimerInAction&amp;quot; wird das Modul dazu angehalten, bei einem Wechsel des TransportState auf &amp;quot;STOPPED&amp;quot; oder &amp;quot;PAUSED_PLAYBACK&amp;quot; einen etwaig aktivierten SleepTimer zu deaktivieren. Mit dem Attribut &amp;quot;saveSleeptimerInAction&amp;quot; kann man dieses Verhalten (z.B. temporär) wieder unterdrücken.&lt;br /&gt;
*Es gibt jetzt ein Reading &amp;quot;ZoneGroupNameDetails&amp;quot; am Sonosplayer-Device, welches die Slavezonen als textuelle Auflistung mittels &#039;+&#039; enthält. Ist leer, wenn es keine Slaveplayer gibt. Enthält den Namen des Gruppenmasters, wenn es einen solchen gibt.&lt;br /&gt;
*Interne Aufräumarbeiten: Mittlerweile überflüssige Codeteile wurden entfernt, und einige Single-Readingsupdates zu einem Bulk-Readingsupdate zusammengefasst.&lt;br /&gt;
*Die Readings &amp;quot;currentFavouriteNameMasked&amp;quot;, &amp;quot;currentPlaylistNameMasked&amp;quot; und &amp;quot;currentRadioNameMasked&amp;quot; werden automatisch gesetzt, wenn das Attribut &amp;quot;getListsDirectlyToReadings&amp;quot; gesetzt ist.&lt;br /&gt;
*Tippfehler bei den Readings &amp;quot;RadioList&amp;quot; und &amp;quot;RadioListAlias&amp;quot; korrigiert. Korrekt ist nun &amp;quot;RadiosList&amp;quot; und &amp;quot;RadiosListAlias&amp;quot; (also Mehrzahl bei Radios).&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 19.03.2017&lt;br /&gt;
| &lt;br /&gt;
*Es gibt ein neues Attribut &amp;quot;getListsDirectlyToReadings&amp;quot;, mit welchem die UserReadings bzgl. Favourites, Playlists und Radios (sowie currentTrackPosition) obsolet werden, da sie dann direkt in die passenden Readings geschrieben werden. Wenn man selber beeinflussen möchte, auf welche Weise und mit welchem Namen diese Readings gefüllt werden, dann darf dieses Attribut nicht gesetzt werden (es bleibt dann das bisherige Verhalten)&lt;br /&gt;
*Es gibt zwei neue Getter &amp;quot;Queue&amp;quot; und &amp;quot;QueueWithCovers&amp;quot;, welche die aktuelle Abspielliste liefern. Diese können wieder mit UserReadings oder dem neuen Attribut &amp;quot;getListsDirectlyToReadings&amp;quot; in entsprechende Readings übertragen werden. Hierbei werden auch zwei neue Readings &amp;quot;QueueDuration&amp;quot; und &amp;quot;QueueDurationSec&amp;quot; gefüllt, die die gesamte Abspieldauer der Abspielliste enthalten.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 13.03.2017&lt;br /&gt;
| &lt;br /&gt;
*Saubere Fehlerbehandlung bei der Verarbeitung von currentFavouriteName, currentPlaylistName und currentRadioName.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 12.03.2017&lt;br /&gt;
| &lt;br /&gt;
*NotifyFn und NotifyDev werden nun im Define des Moduls festgelegt (anstatt wie vorher im Initialize). Dadurch sollten deutlich weniger Notify-Anfragen beim Modul ankommen.&lt;br /&gt;
*Es gibt nun einen Set-Befehl &amp;quot;RefreshShareIndex&amp;quot; zum Aktualisieren der Bibliothek und ein Reading &amp;quot;ShareIndexInProgress&amp;quot;, welches angibt, ob eine Aktualisierung gerade in Ausführung ist.&lt;br /&gt;
*Die Fehlermeldung beim Verbinden zum Device wurde um die Zieladresse erweitert.&lt;br /&gt;
*Es gibt drei neue Readings, die sich auf Spotify-Direct-Play beziehen: DirectControlClientID, DirectControlIsSuspended und DirectControlAccountID&lt;br /&gt;
*Man kann beim Setzen der Titelposition nun auch relative Angaben machen, also z.B. &#039;+0:00:15&#039; oder auch &#039;+10%&#039;. Geht natürlich auch mit &#039;-&#039;.&lt;br /&gt;
*Man kann beim Setzen der Titelposition nun auch eine ganze Zahl als Sekundenangabe  machen. Dabei gehen auch Relativangaben&lt;br /&gt;
*Beim Cover-Download wird nun ein Standard_Timeout von 5s verwendet, sodass ein fehlender Player keine Blockade mehr verursachen sollte. Dafür gibt es auch ein neues Attribut &#039;coverLoadTimeout&#039;, womit dieser Wert eingestellt werden kann. Das ganze geht nur für Nicht-Windows-Systeme, da der Timeout über einen Alarm realisiert wird.&lt;br /&gt;
*Wenn während eines Subscriptions-Renews ein Timeout-Fehler auftreten sollte, wird nun der Discovery-Prozess neu angestartet, um sicherzustellen, daß der Player wieder gefunden und neu initialisiert wird.&lt;br /&gt;
*In der ControlPoint.pm wurde eine Sicherheitsabfrage eingebaut, wenn total verstümmelte Pakete beim SSDP-Recover ankommen.&lt;br /&gt;
*Es gibt ein neues Reading &amp;quot;currentEnqueuedTransportURI&amp;quot;, welches den TransportURI des hinzugefügten Paketes enthält, aus welchem der Titel gerade abgespielt wird (z.B. der Identifier der Spotify-Playliste)&lt;br /&gt;
*Es gibt ein neues Reading &amp;quot;currentFavouriteName&amp;quot;, welches versucht den &amp;quot;currentEnqueuedTransportURI&amp;quot; in den Favoriten zu finden, und enthält dann den gefundenen Favoritennamen. Dazu müssen die Favoriten einmal mittels &amp;quot;get FavouritesWithCover&amp;quot; ermittelt worden sein, und im Reading &amp;quot;Favourites&amp;quot; bereitstehen.&lt;br /&gt;
*Es gibt ein neues Reading &amp;quot;currentPlaylistName&amp;quot;, welches versucht den &amp;quot;currentEnqueuedTransportURI&amp;quot; in den Playlisten zu finden, und enthält dann den gefundenen Playlistnamen. Dazu müssen die Playlisten einmal mittels &amp;quot;get PlaylistsWithCover&amp;quot; ermittelt worden sein, und im Reading &amp;quot;Playlists&amp;quot; bereitstehen.&lt;br /&gt;
*Es gibt ein neues Reading &amp;quot;currentRadioName&amp;quot;, welches versucht den &amp;quot;currentEnqueuedTransportURI&amp;quot; in den Radios zu finden, und enthält dann den gefundenen Radionamen. Dazu müssen die Radios einmal mittels &amp;quot;get RadiosWithCover&amp;quot; ermittelt worden sein, und im Reading &amp;quot;Radios&amp;quot; bereitstehen.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 19.03.2016&lt;br /&gt;
| &lt;br /&gt;
*Bei der Alarmbearbeitung kann man nun mehrere Alarm-IDs mit Komma getrennt angeben, und das Schlüsselwort &amp;quot;All&amp;quot; verwenden, um alle Alarme dieses Players anzusprechen.&lt;br /&gt;
*Man kann bei der Alarmbearbeitung nun auch zwei neue, direkte und kürzere, Befehle für Standardaufgaben verwenden: &amp;quot;Enable&amp;quot;, &amp;quot;Disable&amp;quot;.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 06.02.2016&lt;br /&gt;
| &lt;br /&gt;
*Zusätzlich zu &amp;quot;Mute&amp;quot; (mit Parameter) am Sonos-Device gibt es jetzt auch &amp;quot;MuteOn&amp;quot; und &amp;quot;MuteOff&amp;quot; (jeweils ohne Parameter) zur Verwendung als WebCmd.&lt;br /&gt;
*Es gibt ein neues Reading &amp;quot;IsMaster&amp;quot; am Sonosplayer-Device, welches angibt, ob der Player gerade ein Masterplayer ist&lt;br /&gt;
*Es gibt ein neues Reading &amp;quot;MasterPlayer&amp;quot; am Sonosplayer-Device, welches angibt, wie der aktuelle MasterPlayer zu diesem Player heißt. Ist der Player selber der Master (also IsMaster = 1), so steht dort der eigene Name drin.&lt;br /&gt;
*Es gibt ein neues Reading &amp;quot;SlavePlayer&amp;quot; am Sonosplayer-Device, welches angibt, welche Slaveplayer zu diesem Player zugeordnet sind. Enthält nur Playerdevicenamen, wenn dieser Player ein Masterplayer ist, und dann auch nicht sich selber.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 31.01.2016&lt;br /&gt;
| &lt;br /&gt;
*Im Modul ControlPoint.pm gab es eine fehlerhafte Bearbeitung des Arrays @LWP::Protocol::http::EXTRA_SOCK_OPTS, welche in manchen Fällen zu der Fehlermeldung &amp;quot;Odd number of elements in hash assignment&amp;quot; geführt hat.&lt;br /&gt;
*Der Anbieter SoundCloud wird als Quelle erkannt und angezeigt&lt;br /&gt;
*Es gibt drei neue Readings &amp;quot;MasterPlayer&amp;quot;, &amp;quot;MasterPlayerPlaying&amp;quot; und &amp;quot;MasterPlayerNotPlaying&amp;quot; am Sonos-Device (zzgl. der jeweiligen Angabe der Anzahl)&lt;br /&gt;
*Die Ausgabe von &amp;quot;get Sonos Groups&amp;quot; liefert nun stets eine normalisierte Liste (also sortiert).&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 31.12.2015 &lt;br /&gt;
| &lt;br /&gt;
*Das Reading ZoneGroupID wurde immer länger (mit &amp;quot;:__&amp;quot;), wenn Gruppierungen anderer Player verändert wurden.&lt;br /&gt;
*Bei den Settern von &amp;quot;SleepTimer&amp;quot; und &amp;quot;SnoozeAlarm&amp;quot; kann man jetzt auch eine Zahl als Dauer in Sekunden angeben. Dazu wurde auch die Doku entsprechend angepasst.&lt;br /&gt;
*In der ControlPoint.pm wurde eine Fehlermeldung korrigiert&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 24.12.2015 &lt;br /&gt;
| &lt;br /&gt;
*Wenn ein Player ein &amp;quot;ß&amp;quot; (oder auch andere besondere Zeichen, wie Smilies o.ä.) im Namen hatte, funktionierte die Erkennung nicht mehr, und der SubThread verstarb.&lt;br /&gt;
*Man kann nun mittels dem Setter &amp;quot;Name&amp;quot; auch &amp;quot;ß&amp;quot; und Smilies o.ä. im Playernamen setzen.&lt;br /&gt;
*Bei der Namensvergabe des Sonosplayer-FHEM-Device wird jetzt ein bißchen besser umgewandelt. Erst werden alle Sonderzeichen entfernt, dann Leerzeichen an den Rändern entfernt, und dann die restlichen Leerzeichen in &amp;quot;_&amp;quot; umgewandelt&lt;br /&gt;
*Das Attribut &amp;quot;characterDecoding&amp;quot; wurde entfernt, da es keine Funktion mehr hatte.&lt;br /&gt;
*Der UPnP-Teil verwendet nun einen beliebigen freien Port für die Kommunikation mit den Playern. Dadurch sind auch mehrere Instanzen auf ein und derselben Maschine möglich.&lt;br /&gt;
*Es gibt jetzt einen neuen Setter &amp;quot;RescanNetwork&amp;quot; am Sonos-Device. Damit kann man den Erkennungsprozess des UPnP-Moduls neu anstarten.&lt;br /&gt;
*Es gibt jetzt eine Get-Anweisung &amp;quot;SupportLinks&amp;quot; am Playerdevice, die direkte Links (momentan zwei) zu den Player-Support-Seiten liefert.&lt;br /&gt;
*Ein Datei-Ordner als Favorit konnte nicht sauber gestartet werden. Es wurde nicht als Album in die aktuelle Abspielliste übertragen, sondern als ein Titel direkt abgespielt. Des Weiteren wurde dafür kein Coverbild ermittelt.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 15.12.2015 &lt;br /&gt;
| &lt;br /&gt;
*Es gibt eine neue Funktionalität an den Sonosplayern: Repeat für einen einzelnen Titel. Durch diese Umstellung wurde der Repeat-Zustand nicht korrekt erkannt. Dafür gibt es jetzt noch einen zusätzlichen Setter und ein zusätzliches Reading: &amp;quot;RepeatOne&amp;quot;.&lt;br /&gt;
*Es gibt eine neue Funktion &amp;quot;DeleteFromQueue&amp;quot;, die Titel aus der aktuellen Abspielliste entfernen kann. Angegeben wird der Index des Elements / der Elemente.&lt;br /&gt;
*Das Reading &amp;quot;fieldType&amp;quot; wurde nicht ordnungsgemäß auf Leer gesetzt, wenn die Gruppierung aufgelöst wurde.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 08.12.2015 &lt;br /&gt;
| &lt;br /&gt;
*Bei der Erkennung von Streams beim Restore von PlayURITemp wurde ein neues Format nicht berücksichtigt.&lt;br /&gt;
*Bei der Verwendung von &amp;quot;set Sonos Groups Reset&amp;quot; tauchte eine Fehlermeldung wegen eines Leerstrings auf.&lt;br /&gt;
*Es wurde ein neuer Setter &amp;quot;LoadFavourite&amp;quot; eingebaut, der einem StartFavourite mit der Angabe von NoStart entspricht.&lt;br /&gt;
*Man kann bei LoadSearchList nun auch an das Ende der aktuellen Abspielliste anhängen lassen. Dazu muss man an den Parameter maxElem ein &amp;quot;+&amp;quot; anhängen.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 07.12.2015 &lt;br /&gt;
| &lt;br /&gt;
*Zwei neue Setter &amp;quot;DialogLevel&amp;quot; und &amp;quot;NightMode&amp;quot;, die an einer PlayBar ausgeführt werden können.&lt;br /&gt;
*&amp;quot;Set Sonos Groups&amp;quot; hat eine neue Option &amp;quot;Reset&amp;quot;, mit der alle Gruppen in einem Rutsch aufgelöst werden können.&lt;br /&gt;
*ControlPoint.pm: Bei einem Fehler beim Verbindungsaufbau zum Player wurde aus dem &amp;quot;carp&amp;quot; ein &amp;quot;croak&amp;quot; gemacht. Dadurch greifen die Auffangmechanismen.&lt;br /&gt;
*Beim Verlieren des Gruppenmaster stand der TransportState bei allen zukünftigen NICHT-Gruppenmastern bis zum nächsten Titelwechsel auf &amp;quot;ERROR&amp;quot;.&lt;br /&gt;
*Man kann bei einer Speak-Definition nun auch den Parameter %textescaped% verwenden, um den URL-Enkodierten Text einzufügen.&lt;br /&gt;
*Die Smartmatch-Fehlermeldung wird nun unterdrückt&lt;br /&gt;
*Die Fehlerausgabe bei fehlenden Set- oder Get-Parametern enthält jetzt auch den zulässigen Wertebereich des Parameters (z.B. &#039;(0..100)&#039; für die Lautstärke), sowie die optionalen Parameter&lt;br /&gt;
*StartSearchList hat die Wiedergabe immer neu gestartet, obwohl das u.U. gar nicht nötig war.&lt;br /&gt;
*Die Attribute für die Lautstärke (minVolume, maxVolume, minVolumeHeadphone und maxVolumeHeadphone) können nun im laufenden Betrieb geändert werden und die neuen Grenzen werden sofort sichergestellt.&lt;br /&gt;
*Es gibt einen neuen Setter &#039;MakeStandaloneGroup&#039;, mit dem man einen Player aus seiner Gruppe lösen kann.&lt;br /&gt;
*Es wird der Provider Amazon nun mit angezeigt.&lt;br /&gt;
*Es gibt nun ein Attribut usedonlyIPs, mit dem man die IP-Adressen der zu verwendenden Player angeben kann. Damit ist man manchmal besser dran, als mit dem Ausschluss von einzelnen Adressen&lt;br /&gt;
*Es gibt einen neuen Setter &amp;quot;TruePlay&amp;quot;.&lt;br /&gt;
*Es gibt ein neues Attribut &#039;SpeakGoogleURL&#039; für die Definition der zu verwendenden Google-URL für die Sprachausgabe&lt;br /&gt;
*Die Standard-Google-URL wurde nach neuen Hinweisen angepasst.&lt;br /&gt;
*Es gibt neue Setter &amp;quot;AudioDelayLeftRear&amp;quot; (Abstand hinterer linker Lautsprecher), &amp;quot;AudioDelayRightRear&amp;quot; (Abstand hinterer rechter Lautsprecher) und &amp;quot;SubPolarity&amp;quot; (Sub Aufstellung) bei einem 5.1 Surroundsystem.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 02.08.2015 &lt;br /&gt;
| &lt;br /&gt;
*uri_escape() umgestellt, sodass auch UTF8-Sonderzeichen übersetzt werden&lt;br /&gt;
*Google-Translator-URL parametrisiert und um die mittlerweile notwendigen Parameter &#039;client=t&#039; und &#039;prev=input&#039; erweitert&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 12.07.2015 &lt;br /&gt;
| &lt;br /&gt;
*Es gibt zwei neue Setter &amp;quot;GroupVolumeU&amp;quot; und &amp;quot;GroupVolumeD&amp;quot;, um die Gruppenlautstärke um &#039;VolumeStep&#039;-Einheiten zu erhöhen oder zu verringern.&lt;br /&gt;
*Innerhalb des SubProzesses wurden die Devicenamen der bereits in FHEM definierten Player nicht korrekt verwendet. Das machte sich erst mit dem neuen Feature Bookmarks bemerkbar.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 14.06.2015 &lt;br /&gt;
| &lt;br /&gt;
*Zwei weitere Ausnahmen für das Neustarten des SubThreads eingefügt.&lt;br /&gt;
*ControlPoint.pm: Beim Renew von Subscription wurde aus dem &amp;quot;carp&amp;quot; ein &amp;quot;croak&amp;quot; gemacht. Dadurch greifen die darüberliegenden Auffangmassnahmen.&lt;br /&gt;
*Neues Feature: Bookmarks für Playlisten und Titel&lt;br /&gt;
*Changelog in der Quelltextdatei enthält nur noch für die letzten vier Veröffentlichungen. Die komplette Liste ist nur noch im Wiki vorhanden. Dadurch wird die Dateigröße geringer.&lt;br /&gt;
*SetEQ eingebaut, um Subwoofer und Surroundeinstellungen vornehmen zu können: &amp;quot;SurroundEnable&amp;quot;, &amp;quot;SurroundLevel&amp;quot;, &amp;quot;SubEnable&amp;quot;, &amp;quot;SubGain&amp;quot; und &amp;quot;AudioDelay&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 02.05.2015 &lt;br /&gt;
| &lt;br /&gt;
*Es gibt drei neue Readings &amp;quot;FavouritesVersion&amp;quot;, &amp;quot;RadiosVersion&amp;quot; und &amp;quot;PlaylistsVersion&amp;quot;, die bei einer Änderung des jeweiligen Bereichs durch einen Sonos Controller aktualisiert werden, und auf die man mit einem Notify reagieren kann, um z.B. ein &amp;quot;get player FavouritesWithCovers&amp;quot; ausführen zu können. Damit entfällt die Notwendigkeit von zeitgesteuerten Aktualisierungen.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 14.04.2015 &lt;br /&gt;
| &lt;br /&gt;
*Zusätzliche Fehlerüberprüfung und -ausgabe beim Herunterladen der Cover-Bilder eingebaut, sowie relative URLs unterbunden&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 07.04.2015 &lt;br /&gt;
| &lt;br /&gt;
*Neues Feature &#039;ExportSonosBibliothek&#039;: Hiermit kann eine Datei mit der textuellen Darstellung eines Struktur- und Titelhashs erzeugt werden, das die komplette Navigationsstruktur aus der Sonos-Bibliothek abbildet. Richtwerte bei ca. 22.000 Titeln auf einem Windows-Server mit Intel Core i5 mit 2.8GHz: Laufzeit: ca. 28Min, Arbeitsspeicher: ca. 1GB, Resultierende Datei: ca. 90MB&lt;br /&gt;
*Neues Feature &#039;DeletePlaylist&#039;: Hiermit kann eine Playlist gelöscht werden. Genauso wie bei LoadPlaylist kann man hier URL-Encoded arbeiten, oder einen regulären Ausdruck verwenden&lt;br /&gt;
*Neues Feature &#039;SnoozeAlarm&#039;: Hiermit kann ein gerade abspielender Alarm für die übergebene Zeit unterbrochen werden&lt;br /&gt;
*Neues Feature bei &#039;LoadPlaylist&#039;: Man kann nun einen Devicenamen angeben, dann wird dessen aktuelle Abspielliste kopiert&lt;br /&gt;
*Bei der Titelanzeige wird der Numerische Vergleichsfehler abgefangen, der auftritt, wenn der Player keinerlei aktuelle Abspielinformationen hat&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 03.04.2015 &lt;br /&gt;
| &lt;br /&gt;
*IsAlive-Check Anpassungen: Bei einer Antwort wird nun nicht mehr geprüft, ob diese von derselben Netzwerkschnittstelle stammt, an die der Ping gesendet wurde. Damit werden Player besser erkannt, die sowohl am Funknetz als auch am LAN angeschlossen sind.&lt;br /&gt;
*IsAlive-Check Anpassungen: Bei der Option &#039;tcp&#039; wird nun versucht auf den Standard-Webport des Players zu verbinden (1400)&lt;br /&gt;
*Callback-Aufrufmethoden: Wenn ein Player eine Nachricht an FHEM sendet und dieser Player in FHEM als &#039;disappeared&#039; geführt wird, dann wird der Discovery-Process neu angestartet, um diesen Player wieder sauber zu erkennen&lt;br /&gt;
*Sonos hat das Verfahren zum Hinzufügen von Spotify-Titeln angepasst. Jetzt kann man diese Titel auch wieder mit dem Modul einfügen und abspielen lassen&lt;br /&gt;
*Das Heraussuchen der Spotify-Cover (z.B. für Playlisten) schlug fehl, wenn die API kein Bild mit 640er Höhe angeboten hat. Nun wird das erste Cover verwendet, welches immer das größte sein sollte&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 28.03.2015 &lt;br /&gt;
| &lt;br /&gt;
*Die Wiederholungsintervalle (Tage) von Alarmen werden wieder korrekt erkannt, und gesetzt&lt;br /&gt;
*Bei PlaylistWithCovers wird nun auch ein Cover angezeigt, wenn der erste Titel ein Spotify-Titel ist&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 28.02.2015 &lt;br /&gt;
| &lt;br /&gt;
*Der Speak-Befehl kann jetzt auch eingeschobene MP3-Datei-Verweise verarbeiten. Diese werden im Text mit &amp;quot;|&amp;quot; eingeschlossen, und mit Leerzeichen abgetrennt. z.B.: &amp;quot;Dies ist ein |/path/to/tada.mp3| Test.&amp;quot;. Funktioniert nur bei &amp;quot;Speak&amp;quot; (und nicht bei eigenen Programmaufrufen wie &amp;quot;Speak1&amp;quot;)&lt;br /&gt;
*Es gibt für die einfachere Handhabung der neuen Speakmöglichkeiten zwei neue Attribute &amp;quot;targetSpeakMP3FileDir&amp;quot; und &amp;quot;targetSpeakMP3FileConverter&amp;quot;. Mit &amp;quot;targetSpeakMP3FileDir&amp;quot; kann ein Standardverzeichnis für die eingschobenen MP3-Dateien angegeben werden, und mit &amp;quot;targetSpeakMP3FileConverter&amp;quot; kann ein MP3-Konverter definiert werden, der am Ende die zusammengebaute Durchsage-MP3-Datei nochmal sauber durchkodiert (um z.B. Restzeitanzeigeprobleme zu beheben).&lt;br /&gt;
*Beim internen Entfernen der Player-Objekte (wenn z.B. die Subscription nicht erneuert werden konnte), werden nun alle Referenzen entfernt. Teilweise wurden Subscription-Referenzen noch aufbewahrt.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 19.02.2015 &lt;br /&gt;
| &lt;br /&gt;
*Das Attribut &amp;quot;verbose&amp;quot; am Sonos-Device wird nun zur Laufzeit an den SubProzess übertragen und wirkt dort sofort.&lt;br /&gt;
*Beim initialen Erkennen der wichtigsten Abspielparameter während des Discover-Prozesses gab es einen Fehler, der das Setzen verhindert hat&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 14.02.2015 &lt;br /&gt;
| &lt;br /&gt;
*Festen Lib-Pfad für Synology-Stations hinzugefügt.&lt;br /&gt;
*Im Modul 21_SONOSPLAYER wurde ein require auf das Modul 00_SONOS eingefügt.&lt;br /&gt;
*Es gibt jetzt einen neuen Setter &amp;quot;ResetAttributesToDefault&amp;quot;, mit dem man die Attribute eines Devices auf den Standard beim Anlegen zurücksetzen lassen kann. Die notwendigen Informationen werden frisch vom Player angefordert, und können sich somit, auf den ursprünglichen Anlege-Zeitpunkt bezogen, verändert haben.&lt;br /&gt;
*Ein Fehler bei der Verarbeitung von Devicebeschreibungen wurde in der Datei &amp;quot;Common.pm&amp;quot; des UPnP-Moduls behoben.&lt;br /&gt;
*Es gibt jetzt zwei neue Readings &amp;quot;GroupVolume&amp;quot; und &amp;quot;GroupMute&amp;quot;, die automatisch aktualisiert werden. Damit passt jetzt auch die Anzeige des Slider beim Setter &amp;quot;GroupVolume&amp;quot; und die Vorauswahl beim Setter &amp;quot;GroupMute&amp;quot;.&lt;br /&gt;
*Fehlermeldungen für Speak wurden erweitert.&lt;br /&gt;
*Bei der Verwendung von &amp;quot;targetSpeakFileHashCache&amp;quot; wird nun auch Digest::SHA versucht, wenn Digest::SHA1 nicht funktioniert.&lt;br /&gt;
*Es gibt zwei neue Reading &amp;quot;currentTrackProvider&amp;quot; und &amp;quot;nextTrackProvider&amp;quot;, in dem die &#039;Quelle&#039; der aktuellen (bzw. nächsten) Wiedergabe abgelegt wird. Damit kann man sich Anzeigen lassen, ob der aktuelle Titel z.B. von Spotify oder aus der hausinternen Bibliothek kommt.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 06.02.2015 &lt;br /&gt;
| &lt;br /&gt;
*Der Getter &amp;quot;EthernetPortStatus&amp;quot; hat jetzt auch die Portnummern 2 und 3 zur Auswahl.&lt;br /&gt;
*Es gibt ein neues Reading &amp;quot;OutputFixed&amp;quot; sowie ein zugehöriger Setter zum Setzen des Wertes.&lt;br /&gt;
*Es wurde im Standard-RemoteControl-Design ein :blank zwischen den Steuerbefehlen und den drei Umschaltbefehlen (&amp;quot;MuteT&amp;quot;, &amp;quot;ShuffleT&amp;quot; und &amp;quot;RepeatT&amp;quot;) eingefügt.&lt;br /&gt;
*Es gibt ein neues Reading &amp;quot;roomNameAlias&amp;quot;, das den Namen enthält, der für das Attribut &amp;quot;alias&amp;quot; beim Erkennen des Players verwendet werden würde (z.B. &amp;quot;Wohnzimmer - Rechts&amp;quot;). Wird zu Laufzeit mit aktualisiert.&lt;br /&gt;
*Es gibt zwei neue Setter-Befehle &amp;quot;LoadSearchlist&amp;quot; und &amp;quot;StartSearchlist&amp;quot;. Mit diesen kann eine dynamisch erzeugte Playliste mit Titeln aus der Sonos-Bibliothek geladen werden. Nähere Informationen dazu im Wiki.&lt;br /&gt;
*Es gibt einen neuen Getter-Befehl &amp;quot;SearchlistCategories&amp;quot;, mit dem die möglichen Kategorien für den Aufruf von &amp;quot;LoadSearchlist&amp;quot; oder &amp;quot;StartSearchlist&amp;quot; ermittelt werden können.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 01.02.2015 &lt;br /&gt;
| &lt;br /&gt;
*Es gibt nun zwei neue Befehle &amp;quot;ShuffleT&amp;quot; und &amp;quot;RepeatT&amp;quot;, die jeweils den aktuellen Zustand von &amp;quot;Shuffle&amp;quot; und &amp;quot;Repeat&amp;quot; umschalten&lt;br /&gt;
*Das angelegte RemoteControl sowie die RemoteControl Vorlagen enthalten nun zwei neue Icons für Shuffle-Umschaltung und Repeat-Umschaltung&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 31.01.2015 &lt;br /&gt;
| &lt;br /&gt;
*Es gibt jetzt drei Sonos-Vorlagen für RemoteControl: &amp;quot;Sonos&amp;quot;, &amp;quot;SonosSVG_Buttons&amp;quot; und &amp;quot;SonosSVG_Icons&amp;quot;. &lt;br /&gt;
*Es gibt jetzt ein neues Standardlayout (SonosSVG_Buttons) für die Erzeugung der RemoteControl.&lt;br /&gt;
*Es gibt jetzt ein Attribut &amp;quot;ignoredIPs&amp;quot;, mit dem man problematische oder unerwünschte IPs bei der UPnP-Erkennung ausschließen kann.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 30.01.2015 &lt;br /&gt;
| &lt;br /&gt;
*Commandref wurde optisch übersichtlicher gestaltet, und die Windows-Hinweise eingefügt.&lt;br /&gt;
*Bei der Anzeige des nächsten Titels in der Standard-ReadingsGroup stand &amp;quot;Artist&amp;quot;. Das wurde auf &amp;quot;Interpret&amp;quot; korrigiert.&lt;br /&gt;
*Es gibt jetzt eine Prozedur &amp;quot;SONOSPLAYER_GetSlavePlayerNames()&amp;quot;, mit der man sich die Teilnehmer einer Gruppe liefern lassen kann. Der Master wird nicht mit zurückgegeben. Man kann den Namen eines beliebigen Teilnehmers angeben.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 27.01.2015 &lt;br /&gt;
| &lt;br /&gt;
*Bei den Befehlen &amp;quot;AddMember&amp;quot;, &amp;quot;RemoveMember&amp;quot; und &amp;quot;CreateStereoPair&amp;quot; werden nun alle in FHEM verfügbaren Sonosplayer in einer Auswahl angeboten. Das erfolgt allerdings ungeachtet der Gültigkeit eines Players in diesem Kontext (z.B. kann man keinen Player aus der Gruppe entfernen, der nicht in der Gruppe ist, die Auswahl bietet aber alle an).&lt;br /&gt;
*Es gibt jetzt eine Prozedur &amp;quot;SONOSPLAYER_GetMasterPlayerName()&amp;quot; mit der man sich den Devicenamen des Masterplayer zu dem übergebenen Playernamen geben lassen kann.&lt;br /&gt;
*Es gibt einen neuen Setter &amp;quot;Mute&amp;quot; am Sonos-Device. Damit kann man mit einem Schritt bei allen Playern den Mute-Zustand setzen.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 26.01.2015 &lt;br /&gt;
| &lt;br /&gt;
*Beim Setzen von &amp;quot;disable&amp;quot; am Sonos-Device wurde der &amp;quot;state&amp;quot; und &amp;quot;STATE&amp;quot; der Player nicht korrekt gesetzt. &lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 24.01.2015 &lt;br /&gt;
| &lt;br /&gt;
*Wenn man seine Player umbenannt hatte, wurde ein Attribut-Kommando (für das Model-Attribut) falsch aufgerufen und hat eine Fehlermeldung im FHEM-Log verursacht (z.B. &amp;quot;Please define Sonos_Wohnzimmer first&amp;quot;)&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 19.01.2015 &lt;br /&gt;
| &lt;br /&gt;
*Verweise auf die &amp;quot;alte&amp;quot; Wikiseite &amp;quot;Sonos Anwendungsbeispiel&amp;quot; in der commandref durch die &amp;quot;neue&amp;quot; Seite &amp;quot;SONOS&amp;quot; ersetzt.&lt;br /&gt;
*Wenn kein Pingtype definiert wurde, dann wurde fälschlicherweise nicht der Standard &amp;quot;syn&amp;quot; verwendet, sondern &amp;quot;none&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 16.01.2015 &lt;br /&gt;
| &lt;br /&gt;
*Speak hatte eine fehlerhafte Überprüfung der Attribute, und konnte nicht ausgeführt werden.&lt;br /&gt;
*Bei Streams wird das Reading &amp;quot;currentTrackPosition&amp;quot; nun fest auf &amp;quot;0:00:00&amp;quot; gesetzt, und nicht mehr beim Player angefragt&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 15.01.2015&lt;br /&gt;
| &lt;br /&gt;
*Für die Setter &amp;quot;LoadPlaylist&amp;quot;, &amp;quot;StartPlaylist&amp;quot;, &amp;quot;LoadRadio&amp;quot;, &amp;quot;StartRadio&amp;quot; und &amp;quot;StartFavourite&amp;quot; kann man jetzt anstatt des Namens einen regulären Ausdruck verwenden.&lt;br /&gt;
*Beim Erkennen der Player werden einige Abspielreadings (&amp;quot;transportState&amp;quot;, &amp;quot;currentTrackURI&amp;quot;, &amp;quot;currentTrackDuration&amp;quot;, &amp;quot;currentTrackPosition&amp;quot;, &amp;quot;currentTrack&amp;quot;, &amp;quot;numberOfTracks&amp;quot;, &amp;quot;currentStreamAudio&amp;quot; und &amp;quot;currentNormalAudio&amp;quot;) nun direkt abgeholt, und werden somit aktuell korrekt gesetzt.&lt;br /&gt;
*Beim Anlegen der neuen Devices werden die Aliasnamen nun mit der Funktion im Team erweitert&lt;br /&gt;
*Der Mechanismus zum Starten des SubProzesses wurde angepasst, um auf Synology-Begebenheiten Rücksicht zu nehmen&lt;br /&gt;
*Die Coverdarstellung für einige Spotify-Titel wurde korrigiert, indem eine andere Spotify-API verwendet wird&lt;br /&gt;
*Bei Playlist-Covern wird nun das Cover des ersten Titels mit AlbumArt angezeigt&lt;br /&gt;
*Bei Favourite-Covern werden nun Album-Favoriten auch mit Cover dargestellt (das Cover des ersten Titels mit AlbumArt)&lt;br /&gt;
*Ein Album aus der lokalen Bibliothek konnte mittels &amp;quot;StartFavourite&amp;quot; nicht korrekt gestartet werden (es wurde nicht als Liste übertragen, sondern als Titel gestartet)&lt;br /&gt;
*LogLevel für die &amp;quot;Connection accepted&amp;quot;-Meldungen auf 3 hochgesetzt&lt;br /&gt;
*Es gibt jetzt ein Attribut &amp;quot;disable&amp;quot; am Sonos-Device. Wird es auf 1 gesetzt, wird der SubProzess beendet und verarbeitet somit keine Sonos-Nachrichten mehr. Wird es auf 0 gesetzt (oder gelöscht), wird der SubProzess wieder gestartet.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 08.01.2015 &lt;br /&gt;
| &lt;br /&gt;
*Bei der Wiedergabeanweisung &amp;quot;PlayURI&amp;quot; gab es einen Fehler&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 05.01.2015 &lt;br /&gt;
| &lt;br /&gt;
*Die Cover beim Abspielen &amp;quot;von diesem Gerät&amp;quot; (also iPad, oder Android-Tablet) wurden nicht angezeigt.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 04.01.2015 &lt;br /&gt;
| &lt;br /&gt;
*Bei der Ermittlung des Readings &amp;quot;AlbumArtist&amp;quot; gab es einen Fehler, wenn dieser von Sonos nicht übermittelt wurde.&lt;br /&gt;
*Wenn ein Player einen Dock (iPod) wiedergibt, dann werden die Titelinformationen dort mitgesetzt. Damit entfällt die Anzeige des Titels z.B. mit &#039;iPod von Reinerlein&#039;.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 03.01.2015 &lt;br /&gt;
| &lt;br /&gt;
*Dokumentation angepasst (commandref und Installationsdoku im Dateiheader)&lt;br /&gt;
*Fehler bei der Dockbehandlung behoben&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 02.01.2015 &lt;br /&gt;
| &lt;br /&gt;
*Anzeige bei der Wiedergabe eines Docks verbessert. Dort werden nun der Titel und Album/Artist-Informationen und ein Dock-Cover angezeigt.&lt;br /&gt;
*Getter/Setter bei Bedarf um &amp;quot;:noArg&amp;quot; erweitert.&lt;br /&gt;
*Getter/Setter sind nun nicht mehr CaseSensitive&lt;br /&gt;
*Getter/Setter habe nun soweit möglich eine Auswahlliste der möglichen Werte (alle on/off Setter, sowie Wifi und RoomIcon)&lt;br /&gt;
*Setter für &amp;quot;Treble&amp;quot; und &amp;quot;Bass&amp;quot; haben nun auch einen Slider&lt;br /&gt;
*Setter &amp;quot;Icon&amp;quot; in &amp;quot;RoomIcon&amp;quot; umbenannt, damit die Auswahlliste den aktuellen vorauswählt&lt;br /&gt;
*Beim Erzeugen der Sonosplayer-Devices wird nun das Attribut &amp;quot;alias&amp;quot; auf den Sonos-Raumnamen gesetzt.&lt;br /&gt;
*Zusätzlich zu &amp;quot;StopAll&amp;quot; oder &amp;quot;PauseAll&amp;quot; gibt es am Sonos-Device nun auch &amp;quot;Stop&amp;quot; und &amp;quot;Pause&amp;quot; mit der gleichen Funktionalität&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 01.01.2015 &lt;br /&gt;
| &lt;br /&gt;
*Anzeige in der Player-ReadingsGroup für die Darstellung von disappeared angepasst, dabei auch gleich die Höhenverhältnisse etwas angepasst.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 31.12.2014 &lt;br /&gt;
| &lt;br /&gt;
*Das Bilden von Stereopaaren wird nun unterstützt. Dafür gibt es die Anweisungen &#039;CreateStereoPair&#039; und &#039;SeparateStereoPair&#039; an einem Playerdevice.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 28.12.2014&lt;br /&gt;
| &lt;br /&gt;
*Umlaute: Die Erkennung von Umlauten war wegen der Quelltextumstellung auf UTF8 fehlerhaft. Das betraf nur die Zonennamenumwandlung, wo z.B. aus &#039;Küche&#039; ein &#039;Kueche&#039; gemacht wird.&lt;br /&gt;
*Sonos-Coverlieferung: Es waren noch ein paar Return-Anweisungen zuviel drin.&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 26.12.2014&lt;br /&gt;
| &lt;br /&gt;
*DeleteFn für Sonos wurde implementiert. Das Sonos-Device löscht erst alle SonosPlayer-Devices und beendet den selbst gestarteten SubProzess. Danach wird das Sonos-Device selber von FHEM abgeräumt.&lt;br /&gt;
*DeleteFn für SonosPlayer wurde implementiert. Es werden erst alle automatisch erzeugten Devices (RemoteControl und ReadingsGroups) entfernt, sofern sie noch unter dem Originalnamen existieren.&lt;br /&gt;
*ReportUnresponsiveDevice hat manchmal versucht, die Mitteilung an &amp;quot;sich selbst&amp;quot; zu senden, was naturgemäß nicht klappen kann.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; style=&amp;quot;vertical-align:top&amp;quot; | Versionen von fhem.lmsoft.de&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 17.12.2014 &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 2.6 &lt;br /&gt;
| &lt;br /&gt;
*Die Zeichenkodierung bei Datenübernahme vom Zoneplayer kann nun über das Attribut characterDecoding eingestellt werden&lt;br /&gt;
*Bei Gruppen-/LineIn-/SPDIF-Wiedergabe wird wieder die liefernde Zone angezeigt (als Albumname)&lt;br /&gt;
*SetCurrentPlaylist hatte einen Tippfehler, und konnte dementsprechend nicht ausgeführt werden&lt;br /&gt;
*Unter Ubuntu gibt es die SHA1-Library nicht mehr, sodass man dort eine andere einbinden muss (SHA)&lt;br /&gt;
*Wenn bei den Methoden zum heraussuchen der FHEM-Devices etwas nicht gefunden wurde, dann wird jetzt eine Fehlermeldung mit dem gesuchten Merkmal ausgegeben&lt;br /&gt;
*Es können jetzt IP-Adressen von der UPnP-Verarbeitung ausgeschlossen werden&lt;br /&gt;
*Es wird nun ein fester Mimetype &#039;jpg&#039; für Google Music und Simfy festgelegt&lt;br /&gt;
*Beim Alarm-Reading-Setzen wurde etwas doppelt gesetzt, was u.U. zu Fehlern führen konnte&lt;br /&gt;
*Die Read-Function wurde robuster gegen Übertragungsprobleme gemacht&lt;br /&gt;
*Das Wiederherstellen des Playerzustands nach einem PlayURITemp sieht nun auch den PlayBar-Eingang vor&lt;br /&gt;
*Es wird nun anstatt der WebCmd-Auflistung ein RemoteControl beim Erstellen der Komponenten erzeugt&lt;br /&gt;
*Wenn sich doch noch ein UPnP-Device als Player ausgibt, dann wird dies nun etwas sicherer erkannt&lt;br /&gt;
*Der Eingang einer Playbar kann nun auf anderen Playern wiedergegeben werden (mittels des FHEM-Namens)&lt;br /&gt;
*Lesen wurde auf DevIo_SimpleRead umgestellt (stand auf DevIo_DoSimpleRead). Dadurch wird das Fehlerhandling vereinfacht.&lt;br /&gt;
*Man kann die Zeit für das Warten auf den Subprozess nun beim Define mit angeben. Standardmäßig wird 8 verwendet.&lt;br /&gt;
*Es wird nun in regelmäßigen Abständen (Intervall wie bei der Prüfung der Sonosplayer) geprüft, ob die Verbindung zum Subprozess noch funktioniert&lt;br /&gt;
*Die Readings, die beim Start nicht geladen werden dürfen, werden beim Start von FHEM nun initialisiert. Damit wird die Fehlermeldung in MOTD verhindert&lt;br /&gt;
*Der Zeitstempel in der Konsolenausgabe berücksichtigt nun auch die Global-Angabe, ob Millisekunden mit ausgegeben werden sollen&lt;br /&gt;
*Der Start wurde komplett überarbeitet. Nun sind die einzelnen Wartebereiche in Timer ausgelagert, sodass FHEM nicht mit warten blockiert wird.&lt;br /&gt;
*Die Wiederherstellung des alten Playerzustands nach einem PlayURITemp (und damit auch bei Speak) wird nun auch bei Dateien gemacht, die mit 0s Dauer ermittelt werden (da sie sehr kurz sind).&lt;br /&gt;
*Der Aufruf der Google Text2Speech-Engine wird nun bei mehr als 95 Zeichen in mehrere Aufrufe aufgeteilt. Damit sind nun auch lange Texte über Google möglich, allerdings geht die Textmelodie u.U. verloren.&lt;br /&gt;
*Man kann jetzt für die Speak-Erzeugung ein JPG- oder PNG-Bild angeben. Dies kann für jedes Speak-Programm getrennt erfolgen.&lt;br /&gt;
*Beim Speak-Aufruf werden Umlaute nun auch korrekt an den Text2Speech-Generator (z.B. Google) übergeben, und korrekt in den MP3-Tag geschrieben&lt;br /&gt;
*Spotify-Cover werden nun in größerer Auflösung (meist 640x640 Pixel) direkt von Spotify heruntergeladen, und enthalten dann nicht mehr das Spotify-Logo&lt;br /&gt;
*Es gibt zwei neue Readings &#039;AlbumArtURL&#039; und &#039;nextAlbumArtURL&#039;, die die Originalpfade zum eigenen Download darstellen&lt;br /&gt;
*Es gibt nun zwei Prozeduren, die als Grundlage oder Beispiel für die Verwendung von ReadingsGroups dienen können: &#039;SONOS_getTitleRG&#039; und &#039;SONOS_getCoverRG&#039;&lt;br /&gt;
*Beim automatischen Erzeugen der Sonos-Devices werden nun ReadingsGroups mit mehr Informationen erzeugt. Dies kann (und soll) auch als Vorlage für eigene Ideen Verwendet werden&lt;br /&gt;
*Es gibt eine weitere ReadingsGroup-Vorlage (steht auch im Wiki), mit der Listen (Playlisten, Favoriten und Radios) dargestellt werden können&lt;br /&gt;
*Es gibt zwei neue Attribute &amp;quot;proxyCacheTime&amp;quot; und &amp;quot;proxyCacheDir&amp;quot;, die einen Cache im Proxy aktivieren&lt;br /&gt;
*Es gibt drei neue Getter am Sonosplayer-Device: &amp;quot;FavouritesWithCover&amp;quot;, &amp;quot;PlaylistsWithCover&amp;quot; und &amp;quot;RadiosWithCovers&amp;quot;. Diese geben eine Datenstruktur zurück, die den Titel und das Cover des Elements enthält.&lt;br /&gt;
*Die Prozeduren für die Anzeige des aktuellen und nächsten Titels verwenden nun ausschließlich DIV-Container (anstatt Tabellen). Dadurch klappt die Anzeige auch in einem Dashboard.&lt;br /&gt;
*Die Standard-ReadingsGroup-Anzeige durch die Prozeduren sind nun Parametrisiert. Man kann die minimale Breite der Anzeige sowie den Abstand zwischen aktuellem und nächstem Titel in Pixel festlegen&lt;br /&gt;
*Manche Sender (z.B. Capital Radio Türkiye) haben verbotene Newlines in den Titelinformationen mitgesendet. Diese werden nun entfernt.&lt;br /&gt;
*Man kann das Cover nun anklicken (oder antippen), und erhält dann die Coverdarstellung in einer Vollbilddarstellung mit Abspielstatus und Titelinformationen&lt;br /&gt;
*Es gibt zwei neue Befehle &#039;StartPlaylist&#039; und &#039;StartRadio&#039;, die die gleichen Parameter wie ihre Pendants mit &#039;Load&#039; am Anfang haben, nur dass hier das Abspielen gleich gestartet wird.&lt;br /&gt;
*Es gibt jetzt ein Reading &#039;currentTrackPosition&#039;, welches bei jedem Transportstate-Wechsel (neuer Titel, Play/Pause/Stop usw.) gesetzt wird. Damit kann man die verbleibende Restzeit eines laufenden Titels ermitteln, bzw. den Pausezeitpunkt anzeigen.&lt;br /&gt;
*Beim Wiedergeben von TV oder sonstigen externen Quellen, wird jetzt nicht mehr das &#039;leere&#039; Cover angezeigt, sondern ein TV-Cover bzw. ein Default-Input-Cover&lt;br /&gt;
*Aufnahme in das offizielle Release von FHEM&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 07.03.2014 &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 2.5 &lt;br /&gt;
| &lt;br /&gt;
*Verwendung und Speicherung der Benutzer-IDs für Spotify und Napster wurden stabiler gegenüber Sonderzeichen gemacht&lt;br /&gt;
*Spotify-URLs werden im Reading &#039;currentTrackURI&#039; und &#039;nextTrackURI&#039; lesbarer abgelegt&lt;br /&gt;
*Ein Fehler beim Öffnen von M3U-Playlistdateien wurde behoben (dafür Danke an John)&lt;br /&gt;
*Überholt: Für die Informationsanfragen an FHEM durch den SubProzess wird nun standardmäßig der Telnet-Port von FHEM verwendet. Wenn das fehlschlägt, wird auf den alten Mechanismus zurückgeschaltet&lt;br /&gt;
*Neu: Es werden keine Informationsanfragen mehr zwischen FHEM und dem SubProzess ausgetauscht. Notwendige Informationen müssen vorher übertragen werden. Das bedeutet, dass bei einer Attributänderung ein Neustart von FHEM erfolgen muss.&lt;br /&gt;
*Es wurde ein Standard-Layout für das RemoteControl-Hilfsmodul angelegt&lt;br /&gt;
*Der Verbose-Level des Sonos-Devices wird nun auch an den SubProzess weitergereicht (auch zur Laufzeit), und beim initialen Start des SubProzess-Threads mitgegeben.&lt;br /&gt;
*AlbumArt von Napster erhält nun den festen Mimetype &#039;jpg&#039;, da dieser nicht übertragen wird&lt;br /&gt;
*Es werden nun die durch FHEM definierten Standard-Attribute mit angeboten&lt;br /&gt;
*Es gab ein Problem mit der Befehlsverarbeitung, wenn das Verbose-Attribut an einem Sonos-Device gesetzt war.&lt;br /&gt;
*Es wird nun auf Änderungsevents für den Zonennamen und das Zonenicon reagiert, und die entsprechenden Readings aktualisiert&lt;br /&gt;
*Es gibt jetzt zwei neue Setter: &#039;Name&#039; und &#039;Icon&#039;, mit dem der Name und das Icon der Zone eingestellt werden kann&lt;br /&gt;
*Es gibt jetzt einen Getter &#039;PossibleRoomIcons&#039;, welcher die möglichen Angaben für den neuen Setter &#039;Icon&#039; liefert&lt;br /&gt;
*Das Reading &#039;ZoneGroupID&#039; wird nun auf eine andere Weise ermittelt und gesetzt&lt;br /&gt;
*Es gib jetzt ein neues Reading &#039;AlarmRunning&#039;, welches auf &#039;1&#039; steht, wenn gerade eine Alarmabspielung aktiv ist&lt;br /&gt;
*Die Namens- und Aufgabenerkennung beim Ermitteln der Player wurde angepasst&lt;br /&gt;
*Der Aufruf von AddMember und RemoveMember wurde bzgl. des SonosDevice-Namen abgesichert, sodass hier kein Absturz mehr bei einer falschen Deviceangabe erfolgt&lt;br /&gt;
*Es gibt jetzt ein neues Reading &#039;AlarmRunningID&#039;, welches bei einer Alarmausführung die ID des aktiven Alarms enthält&lt;br /&gt;
*Das Senden von Aktualisierungen an FHEM wurde etwas sicherer gemacht, wenn FHEM auf der anderen Seite gerade nicht zuhören kann&lt;br /&gt;
*Die Readings &#039;AlarmList&#039;, &#039;AlarmListIDs&#039; und &#039;AlarmListVersion&#039; werden nicht mehr aus dem Statefile geladen, da dort Sonderzeichen wie &#039;#&#039; zum Abschneiden der restlichen Zeile führen&lt;br /&gt;
*Anpassung der UPnP-Klasse, damit das Device-Beschreibungsdokument nur noch einmal geladen wird (anstatt wie bisher zweimal)&lt;br /&gt;
*Anpassung im Bereich der Cover Aktualisierung über FHEMWeb. Das geht jetzt mit viel weniger Aufwand durch.&lt;br /&gt;
*Es gibt jetzt einen Setter &#039;SnapshotGroupVolume&#039;, der das aktuelle Lautstärkenverhältnis der einzelnen Player einer Gruppe für die folgenden Aufrufe des Setter &#039;GroupVolume&#039; festhält. Die Anweisungen &#039;PlayURI&#039; und &#039;PlayURITemp&#039; (sowie darauf aufbauende Aufrufe wie &#039;Speak&#039;) führen diese Anweisung selbsttätig beim Starten durch.&lt;br /&gt;
*Wenn beim Auffrischen der Subscriptions ein Fehler auftritt, der darauf schließen läßt, dass der Player weg ist, dann wird die entsprechende Referenz aufgeräumt&lt;br /&gt;
*Man kann als relative Angabe bei setVolume nun einen Prozentwert angeben, z.B. &#039;+20%&#039;. Damit wird die Lautstärke um den jeweiligen prozentualen Anteil erhöht oder abgesenkt.&lt;br /&gt;
*Es gibt jetzt ein Reading &#039;LineInConnected&#039;, welches eine &#039;1&#039; enthält, wenn der Line-In-Eingang angeschlossen wurde, sonst &#039;0&#039;.&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 31.12.2013 &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 2.4 &lt;br /&gt;
| &lt;br /&gt;
*Initiale Lautstärkenermittlung wurde nun abgesichert, falls die Anfrage beim Player fehlschlägt&lt;br /&gt;
*Verbesserte Gruppenerkennung für die Anzeige der Informationen wie Titel usw.&lt;br /&gt;
*Fallback (Log) für den Aufruf von Log3 geschaffen, damit auch alte FHEM-Versionen funktionieren&lt;br /&gt;
*Es wurde eine Korrektur im verwendetetn UPnP-Modul gemacht, die eine bessere Verarbeitung der eingehenden Datagramme gewährleistet (dafür Danke an Sacha)&lt;br /&gt;
*Es werden nun zusätzliche Readings (beginnend mit &#039;next&#039;) mit den Informationen über den nächsten Titel befüllt. Diese können natürlich auch für InfoSummarize verwendet werden&lt;br /&gt;
*Es kann nun ein Eintrag aus der Sonos-Favoritenliste gestartet werden (Playlist oder Direkteintrag)&lt;br /&gt;
*Das Benennen der Sonos-FHEM-Devices wird nun auf Namensdoppelungen hin überprüft, und der Name eindeutig gemacht. Dabei wird im Normalfall das neue Reading &#039;fieldType&#039; an den Namen angehangen. Nur der Master einer solchen Paarung bekommt dann den Original-Raumnamen als FHEM-Devicenamen&lt;br /&gt;
*Es gibt ein neues Reading &#039;fieldType&#039;, mit dem man erkennen kann, an welcher Position in einer Paarung dieser Zoneplayer steht&lt;br /&gt;
*Diverse Probleme mit Gruppen und Paarungen beim neu Erkennen der Sonos-Landschaft wurden beseitigt&lt;br /&gt;
*Es gibt jetzt einen Getter &#039;EthernetPortStatus&#039;, der den Status des gewünschten Ethernet-Ports liefert&lt;br /&gt;
*Es gibt jetzt einen Setter &#039;Reboot&#039;, der einen Neustart des Zoneplayers durchführt&lt;br /&gt;
*Es gibt jetzt einen Setter &#039;Wifi&#039;, mit dem der Zustand des Wifi-Ports eines Zoneplayers gesetzt werden kann&lt;br /&gt;
*Wenn ein Player als &amp;quot;Disappeared&amp;quot; erkannt wird, wird dem Sonos-System dies mitgeteilt, sodass er aus allen Listen und Controllern verschwindet&lt;br /&gt;
*Kleinere Korrektur, die eine bessere Verarbeitung der Kommunikation zwischen FHEM und dem Subprozess bewirkt&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 02.12.2013 &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 2.3 &lt;br /&gt;
| &lt;br /&gt;
*Die Antwort von &#039;SetCurrentPlaylist&#039; wurde korrigiert. Dort kam vorher &#039;SetToCurrentPlaylist&#039; zurück.&lt;br /&gt;
*VolumeStep kann nun auch als Attribut definiert werden. Das fehlte in der zulässigen Liste noch.&lt;br /&gt;
*Speak kann nun auch für lokale Binary-Aufrufe konfiguriert werden.&lt;br /&gt;
*Speak kann nun einen Hash-Wert auf Basis des gegebenen Textes in den Dateinamen einarbeiten, und diese dann bei Gleichheit wiederverwenden (Caching)&lt;br /&gt;
*Sonos kann nun ein &amp;quot;set StopAll&amp;quot; oder &amp;quot;set PauseAll&amp;quot; ausführen, um alle Player/Gruppen auf einen Schlag zu stoppen/pausieren&lt;br /&gt;
*Beim Discover-Event wird nun genauer geprüft, ob sich überhaupt ein ZonePlayer gemeldet hat&lt;br /&gt;
*Die UserIDs für Napster und Spotify werden wieder korrekt ermittelt. Damit kann auch wieder ein Playlistenimport erfolgen.&lt;br /&gt;
*Loudness Einstell- und Abfragbar&lt;br /&gt;
*Bass Einstell- und Abfragbar&lt;br /&gt;
*Treble Einstell- und Abfragbar&lt;br /&gt;
*Volume kann nun auch als RampToVolume ausgeführt werden&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 12.10.2013 &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 2.2 &lt;br /&gt;
| &lt;br /&gt;
*Befehlswarteschlange wieder ausgebaut. Dadurch gibt es nur noch das Reading LastActionResult, und alles wird viel zügiger ausgeführt, da FHEM nicht auf die Ausführung warten muss.&lt;br /&gt;
*TempPlaying berücksichtigt nun auch die Wiedergabe von Line-In-Eingängen (also auch Speak)&lt;br /&gt;
*Veraltete, mittlerweile unbenutzte, Readings werden nun gelöscht&lt;br /&gt;
*SetLEDState wurde hinzugefügt&lt;br /&gt;
*Die IsAlive-Überprüfung kann mit &#039;none&#039; abgeschaltet werden&lt;br /&gt;
*CurrentTempPlaying wird nicht mehr benötigt&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 23.09.2013 &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 2.1 &lt;br /&gt;
| &lt;br /&gt;
*Neuen Befehl &#039;CurrentPlaylist&#039; eingeführt&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 15.09.2013 &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 2.0 &lt;br /&gt;
| &lt;br /&gt;
*Neue Konzeptbasis eingebaut&lt;br /&gt;
*Man kann Gruppen auf- und wieder abbauen&lt;br /&gt;
*Es gibt neue Lautstärke- und Mute-Einstellungen für Gruppen ingesamt&lt;br /&gt;
*Man kann Button-Events definieren&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 27.05.2013 &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 1.13 &lt;br /&gt;
| &lt;br /&gt;
*Neuer Abspielzustand &#039;TRANSITIONING&#039; wird berücksichtigt&lt;br /&gt;
*Der Aufruf von &#039;GetDeviceDefHash&#039; wird nun mit dem Parameter &#039;undef&#039; anstatt ohne einen Parameter durchgeführt&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 23.05.2013 &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 1.12 &lt;br /&gt;
| &lt;br /&gt;
*TrackURI hinzugefügt&lt;br /&gt;
*LoadPlayList und SavePlayList können nun auch Dateinamen annehmen, um eine M3U-Datei zu erzeugen/als Abspielliste zu laden&lt;br /&gt;
*Alarme können ausgelesen, gesetzt und gelöscht werden&lt;br /&gt;
*SleepTimer kann gesetzt und ausgelesen werden&lt;br /&gt;
*Reading DailyIndexRefreshTime hinzugefügt&lt;br /&gt;
*Bei AddURIToQueue und PlayURI können jetzt auch (wie bei LoadPlayList) Spotify und Napster-Ressourcen angegeben werden&lt;br /&gt;
*Beim Erzeugen des Cover-Weblinks wird nun nur noch die Breite festgelegt, damit Nicht-Quadratische Cover auch korrekt dargestellt werden&lt;br /&gt;
*SONOS_Stringify gibt Strings nun in einfachen Anführungszeichen aus (und maskiert etwaig enthaltene im String selbst)&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 10.03.2013 &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 1.11 &lt;br /&gt;
| &lt;br /&gt;
*Ein Transport-Event-Subscribing wird nur dann gemacht, wenn es auch einen Transport-Service gibt. Die Bridge z.B. hat sowas nicht.&lt;br /&gt;
*Bei PlayURITemp wird nun der Mute-Zustand auf UnMute gesetzt, und anschließend wiederhergestellt&lt;br /&gt;
*Shuffle, Repeat und CrossfadeMode können nun gesetzt und abgefragt werden. Desweiteren wird der Status beim Transport-Event aktualisiert.&lt;br /&gt;
*Umlaute bei &amp;quot;generateInfoSmmarize3&amp;quot; durch &amp;quot;sichere&amp;quot; Schreibweise ersetzt (Lautst&amp;amp;auml;rke -&amp;gt; Lautstaerke)&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 22.02.2013 &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 1.10 &lt;br /&gt;
| &lt;br /&gt;
*IsAlive beendet nicht mehr den Thread, wenn der Player nicht mehr erreichbar ist, sondern löscht nur noch die Proxy-Referenzen&lt;br /&gt;
*FHEMWEB-Icons werden nur noch im Hauptthread aktualisiert&lt;br /&gt;
*Getter &#039;getBalance&#039; und Setter &#039;setBalance&#039; eingeführt.&lt;br /&gt;
*HeadphoneConnected inkl. minVolumeHeadphone und maxVolumeHeadphone eingeführt&lt;br /&gt;
*InfoSummarize um die Möglichkeit der Volume/Balance/HeadphoneConnected-Felder erweitert. Außerdem werden diese Info-Felder nun auch bei einem Volume-Event neu berechnet (und triggern bei Bedarf auch!)&lt;br /&gt;
*InfoSummarize-Features erweitert: &#039;instead&#039; und &#039;emptyval&#039; hinzugefügt&lt;br /&gt;
*IsAlive prüft nicht mehr bei jedem Durchgang bis zum Thread runter, ob die Subscriptions erneuert werden müssen &lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 16.02.2013 &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 1.9 &lt;br /&gt;
| &lt;br /&gt;
*RTL.it Informationen werden nun schöner dargestellt (Da steht eine XML-Struktur im Titel)&lt;br /&gt;
*Wenn kein Cover vom Sonos geliefert werden kann, wird das FHEM-Logo als Standard verwendet (da dieses sowieso auf dem Rechner vorliegt)&lt;br /&gt;
*UPnP-Fehlermeldungen eingebaut, um bei einer Nichtausführung nähere Informationen erhalten zu können&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 13.02.2013 &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 1.8 &lt;br /&gt;
| &lt;br /&gt;
*Device-Removed wird nun sicher ausgeführt. Manchmal bekommt man wohl deviceRemoved-Events ohne ein vorheriges deviceAdded-Event. Dann gibt es die gesuchte Referenz nicht.&lt;br /&gt;
*Renew-Subscriptions wurden zu spät ausgeführt. Da war alles schon abgelaufen, und konnte nicht mehr verlängert werden.&lt;br /&gt;
*ZonePlayer-Icon wird nun immer beim Discover-Event heruntergeladen. Damit wird es auch wieder aktualisiert, wenn FHEM das Icon beim Update verwirft.&lt;br /&gt;
*MinVolume und MaxVolume eingeführt. Damit kann nun der Lautstärkeregelbereich der ZonePlayer festgelegt werden&lt;br /&gt;
*Umlaute beim Übertragen in das Reading State werden wieder korrekt übertragen. Das Problem waren die etwaigen doppelten Anführungsstriche. Diese werden nun maskiert.&lt;br /&gt;
*Sonos Docks werden nun auch erkannt. Dieses hat eine andere Device-Struktur, weswegen der Erkennungsprozess angepasst werden musste.&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 04.02.2013 &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 1.7 &lt;br /&gt;
| &lt;br /&gt;
*Umlaute werden bei Playernamen beim Anlegen des Devices korrekt umgewandelt, und nicht in Unterstriche&lt;br /&gt;
*Renew-Subscription eingebaut, damit ein Player nicht die Verbindung zum Modul verliert&lt;br /&gt;
*CurrentTempPlaying wird nun auch sauber beim Abbrechen des Restore-Vorgangs zurückgesetzt&lt;br /&gt;
*Die Discovermechanik umgebaut, damit dieser Thread nach einem Discover nicht neu erzeugt werden muss.&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 30.01.2013 &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 1.6 &lt;br /&gt;
| &lt;br /&gt;
*Speak hinzugefügt (siehe Doku im Wiki)&lt;br /&gt;
*Korrektur von PlayURITemp für Dateien, für die Sonos keine Abspiellänge zur Verfügung stellt&lt;br /&gt;
*Korrektur des Thread-Problems welches unter *Nix-Varianten auftrat (Windows war nicht betroffen)&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 29.01.2013 &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 1.5 &lt;br /&gt;
| &lt;br /&gt;
*PlayURI, PlayURITemp und AddURIToQueue hinzugefügt (siehe Doku im Wiki)&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 28.01.2013 &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 1.4 &lt;br /&gt;
| &lt;br /&gt;
*Exception-Handling bei der Befehlsausführung soll FHEM besser vor verschwundenen Playern schützen &lt;br /&gt;
*Variable $SONOS_ThisThreadEnded sichert die korrekte Beendigung des vorhandenen Threads, trotz Discover-Events in der Pipeline&lt;br /&gt;
*Einrückungen im Code korrigiert&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 26.01.2013 &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 1.3 &lt;br /&gt;
| &lt;br /&gt;
*StopHandling prüft nun auch, ob die Referenz noch existiert&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 24.01.2013 &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 1.2 &lt;br /&gt;
| &lt;br /&gt;
*Proxy-Objekte werden beim Disappearen des Player entfernt, und sorgen bei einem nachfolgenden Aufruf für eine saubere Fehlermeldung&lt;br /&gt;
*Probleme mit Anführungszeichen &amp;quot; in Liedtiteln und Artist-Angaben. Diese Zeichen werden nun ersetzt&lt;br /&gt;
*Weblink wurde mit fehlendem &amp;quot;/&amp;quot; am Anfang angelegt. Dadurch hat dieser nicht im Floorplan funktionert&lt;br /&gt;
*pingType wird nun auf Korrektheit geprüft.&lt;br /&gt;
*Play:3 haben keinen Audio-Eingang, deshalb funktioniert das Holen eines Proxy dafür auch nicht. Jetzt ist das Holen abgesichert.&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 18.01.2013 &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 1.1 &lt;br /&gt;
| &lt;br /&gt;
*Ping-Methode einstellbar über Attribut &#039;pingType&#039;&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 16.01.2013 &lt;br /&gt;
| style=&amp;quot;vertical-align:top;text-align:center&amp;quot; | 1.0 &lt;br /&gt;
| &lt;br /&gt;
*Initial Release&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Modul &#039;&#039;&#039;SONOS&#039;&#039;&#039; ==&lt;br /&gt;
Dieses Modul erledigt die eigentliche Kommunikationsarbeit zu den ZonePlayern mittles UPnP. &lt;br /&gt;
Es startet (und läßt ihn dauerhaft laufen) einen Discovery Prozess, der alle ZonePlayer auffordert, sich zu melden, und reagiert auf entsprechende Signalisierungen.&lt;br /&gt;
Es instantiiert einen Listener und meldet diesen bei allen ZonePlayern für Abspielaktualisierungen an.&lt;br /&gt;
&lt;br /&gt;
Wenn ein Aufruf des Discovery-Prozesses erfolgt, wird geprüft, ob der Player bereits definiert wurde. Wenn nicht, wird eine Definition erzeugt, wenn ja, dann wird die Komponente mit den neu erhaltenen Informationen aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Wenn ein Aufruf der Abspielaktualisierung erfolgt, so wird die entsprechene Zoneplayer-Komponente in FHEM mit den neu erhaltenen Informationen aktualisiert, und entsprechende FHEM-Events generiert.&lt;br /&gt;
&lt;br /&gt;
Wenn das Feature mit &amp;lt;code&amp;gt;minVolume&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;maxVolume&amp;lt;/code&amp;gt; verwendet wird, wird ein weiterer Listener beim entsprechenden Zoneplayer angemeldet. Mittels diesem werden Lautstärkenänderungen am Zoneplayer gemeldet umd können entsprechend umgehend korrigiert werden.&amp;lt;br &amp;gt;Als Nebeneffekt wird für jede Lautstärkenänderung auch ein Event in FHEM erzeugt (als Folge einer Aktualisierung des Readings &amp;lt;code&amp;gt;Volume&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings von SONOS ===&lt;br /&gt;
*&amp;lt;code&amp;gt;AllPlayer&amp;lt;/code&amp;gt;: Enthält alle Player.&lt;br /&gt;
*&amp;lt;code&amp;gt;AllPlayerCount&amp;lt;/code&amp;gt;: Enthält die Anzahl der Player in &amp;quot;AllPlayer&amp;quot;.&lt;br /&gt;
*&amp;lt;code&amp;gt;AllPlayerNotBonded&amp;lt;/code&amp;gt;: Enhtält alle Masterplayer, die nicht gebunden sind (also keine Stereo- oder Satellitenteilnehmer sind).&lt;br /&gt;
*&amp;lt;code&amp;gt;AllPlayerNotBondedCount&amp;lt;/code&amp;gt;: Enhtält die Anzahl der Player in &amp;quot;AllPlayerNotBonded&amp;quot;.&lt;br /&gt;
*&amp;lt;code&amp;gt;LastProcessAnswer&amp;lt;/code&amp;gt;: Enthält den letzten Zeitpunkt einer Datenübertragung vom SubProzess zum FHEM-Modul.&lt;br /&gt;
*&amp;lt;code&amp;gt;LastProcessRestart&amp;lt;/code&amp;gt;: Enthält (falls vorhanden) den Zeitpunkt des letzten Neustarts des SubProzesses.&lt;br /&gt;
*&amp;lt;code&amp;gt;LastProcessRestartCount&amp;lt;/code&amp;gt;: Enthält (falls vorhanden) die Anzahl der durchgeführten Neustarts des SubProzesses.&lt;br /&gt;
*&amp;lt;code&amp;gt;LineInPlayer&amp;lt;/code&amp;gt;: Enthält die gültigen LineIn-Eingänge aller Player, die für die Wiedergabe ausgewählt werden können als visualisiertes Perl-Array.&lt;br /&gt;
*&amp;lt;code&amp;gt;LineInPlayerList&amp;lt;/code&amp;gt;: Enthält die gültigen LineIn-Eingänge aller Player, die für die Wiedergabe ausgewählt werden können als &amp;quot;|&amp;quot;-separierte Liste von Devicenamen, wenn das Attribut &amp;quot;&amp;quot; am Sonos-Device angegeben ist.&lt;br /&gt;
*&amp;lt;code&amp;gt;LineInPlayerListAlias&amp;lt;/code&amp;gt;: Enthält die gültigen LineIn-Eingänge aller Player, die für die Wiedergabe ausgewählt werden können als &amp;quot;|&amp;quot;-separierte Liste von Raumnamen, wenn das Attribut &amp;quot;&amp;quot; am Sonos-Device angegeben ist.&lt;br /&gt;
*&amp;lt;code&amp;gt;MasterPlayer&amp;lt;/code&amp;gt;: Hier werden alle Masterplayer in einer per eval zu einem Array umwandelbaren Liste angegeben. z.B.: [&#039;Sonos_Kueche&#039;,&#039;Sonos_Flur&#039;]&lt;br /&gt;
*&amp;lt;code&amp;gt;MasterPlayerCount&amp;lt;/code&amp;gt;: Hier wird die Anzahl der erkannten Masterplayer angegeben. z.B.: 2&lt;br /&gt;
*&amp;lt;code&amp;gt;MasterPlayerNotPlaying&amp;lt;/code&amp;gt;: Hier werden alle Masterplayer in einer per eval zu einem Array umwandelbaren Liste angegeben, die gerade keine laufende Wiedergabe haben. z.B.: [&#039;Sonos_Kueche&#039;]&lt;br /&gt;
*&amp;lt;code&amp;gt;MasterPlayerNotPlayingCount&amp;lt;/code&amp;gt;: Hier wird die Anzahl der nicht abspielenden Masterplayer angegeben. z.B.: 1&lt;br /&gt;
*&amp;lt;code&amp;gt;MasterPlayerPlaying&amp;lt;/code&amp;gt;: Hier werden alle Masterplayer in einer per eval zu einem Array umwandelbaren Liste angegeben, die gerade eine laufende Wiedergabe haben. z.B.: [&#039;Sonos_Flur&#039;]&lt;br /&gt;
*&amp;lt;code&amp;gt;MasterPlayerPlayingCount&amp;lt;/code&amp;gt;: Hier wird die Anzahl der abspielenden Masterplayer angegeben. z.B.: 1&lt;br /&gt;
*&amp;lt;code&amp;gt;QueueHash&amp;lt;/code&amp;gt;: Der Hash-Wert für die aktuelle Abspielliste. Dieser wird bei jeder Änderung der aktuellen Abspielliste aktualisiert.&lt;br /&gt;
*&amp;lt;code&amp;gt;ShareIndexInProgress&amp;lt;/code&amp;gt;: Gibt an, ob gerade eine Aktualisierung des Indexes der Freigaben erfolgt.&lt;br /&gt;
*&amp;lt;code&amp;gt;UserId_Napster&amp;lt;/code&amp;gt;: Speichert die UserId für den Napster-Zugriff. Diese Information ist notwendig, wenn eine M3U-Datei mit Napster-Titeln importiert werden soll, und wird automatisch ermittelt, sobald man mit dem Original-Controller einen einzelnen Titel aus Napster in die aktuelle Abspielliste überträgt.&lt;br /&gt;
*&amp;lt;code&amp;gt;UserId_Spotify&amp;lt;/code&amp;gt;: Speichert die UserId für den Spotify-Zugriff. Diese Information ist notwendig, wenn eine M3U-Datei mit Spotify-Titeln importiert werden soll, und wird automatisch ermittelt, sobald man mit dem Original-Controller einen einzelnen Titel aus Spotify in die aktuelle Abspielliste überträgt.&lt;br /&gt;
*&amp;lt;code&amp;gt;ZoneGroupState&amp;lt;/code&amp;gt;: Die Konfigurationsinformationen zu der aktuellen Gruppenlandschaft der Zoneplayer. Der Befehl &amp;lt;code&amp;gt;get SONOS Groups&amp;lt;/code&amp;gt; vereinfacht den Zugriff hierauf, indem es eine einfach les- und verarbeitbare Liste erzeugt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Attribute von SONOS ===&lt;br /&gt;
&#039;&#039;&#039;Hinweis&#039;&#039;&#039;&amp;lt;br /&amp;gt;Die Attribute werden (bis auf &amp;lt;code&amp;gt;verbose&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;disable&amp;lt;/code&amp;gt;) erst bei einem Neustart von FHEM verwendet, da diese dem SubProzess initial zur Verfügung gestellt werden müssen.&lt;br /&gt;
&lt;br /&gt;
*Grundsätzliches&lt;br /&gt;
**&amp;lt;code&amp;gt;coverLoadTimeout(0..10,15,20,25,30)&amp;lt;/code&amp;gt;: Definiert den Timeout der für die Abfrage des Covers beim Sonosplayer verwendet wird. Wenn nicht angegeben, dann wird 5 verwendet.&lt;br /&gt;
**&amp;lt;code&amp;gt;deviceRoomView(Both,DeviceLineOnly)&amp;lt;/code&amp;gt;: Gibt an, was in der Raumansicht zum Sonosplayer-Device angezeigt werden soll. &amp;lt;code&amp;gt;Both&amp;lt;/code&amp;gt; bedeutet &amp;quot;normale&amp;quot; Devicezeile zzgl. Cover-/Titelanzeige und u.U. Steuerbereich, &amp;lt;code&amp;gt;DeviceLineOnly&amp;lt;/code&amp;gt; bedeutet nur die Anzeige der &amp;quot;normalen&amp;quot; Devicezeile.&lt;br /&gt;
**&amp;lt;code&amp;gt;disable(0,1)&amp;lt;/code&amp;gt;: Hiermit kann das Modul abgeschaltet werden. Wirkt sofort. Bei 1 wird der SubProzess beendet, und somit keine weitere Verarbeitung durchgeführt. Bei 0 wird der Prozess wieder gestartet.&amp;lt;br /&amp;gt;Damit kann das Modul temporär abgeschaltet werden, um bei der Neueinrichtung von Sonos-Komponenten keine halben Zustände mitzubekommen.&amp;lt;br /&amp;gt;Des Weiteren kann man damit Attribut-Änderungen an den SubProzess weiterreichen, da ja ein neuer Prozess gestartet wird, dem natürlich zu Beginn wieder alle verfügbaren/notwendigen Attribute zur Verfügung gestellt werden.&lt;br /&gt;
**&amp;lt;code&amp;gt;getFavouritesListAtNewVersion(0,1)&amp;lt;/code&amp;gt;: Mit diesem Attribut kann das Modul aufgefordert werden, die Favoriten (bei definiertem Attribut &amp;lt;code&amp;gt;getListsDirectlyToReadings&amp;lt;/code&amp;gt;) bei Aktualisierung automatisch herunterzuladen.&lt;br /&gt;
**&amp;lt;code&amp;gt;getPlaylistsListAtNewVersion(0,1)&amp;lt;/code&amp;gt;: Mit diesem Attribut kann das Modul aufgefordert werden, die Playlisten (bei definiertem Attribut &amp;lt;code&amp;gt;getListsDirectlyToReadings&amp;lt;/code&amp;gt;) bei Aktualisierung automatisch herunterzuladen.&lt;br /&gt;
**&amp;lt;code&amp;gt;getQueueListAtNewVersion &amp;amp;lt;value&amp;amp;gt;&amp;lt;/code&amp;gt;: Mit diesem Attribut kann das Modul aufgefordert werden, die aktuelle Abspielliste (bei definiertem Attribut &amp;lt;code&amp;gt;getListsDirectlyToReadings&amp;lt;/code&amp;gt;) bei Aktualisierung automatisch herunterzuladen.&lt;br /&gt;
**&amp;lt;code&amp;gt;getRadiosListAtNewVersion &amp;amp;lt;value&amp;amp;gt;&amp;lt;/code&amp;gt;: Mit diesem Attribut kann das Modul aufgefordert werden, die Radioliste (bei definiertem Attribut &amp;lt;code&amp;gt;getListsDirectlyToReadings&amp;lt;/code&amp;gt;) bei Aktualisierung automatisch herunterzuladen.&lt;br /&gt;
**&amp;lt;code&amp;gt;getListsDirectlyToReadings(0,1)&amp;lt;/code&amp;gt;: Mit diesem Attribut kann das Modul aufgefordert werden, die Listen für Favoriten, Playlists, Radios und Queue direkt in die entsprechenden Readings zu schreiben. Dafür sind dann keine Userreadings mehr notwendig.&lt;br /&gt;
**&amp;lt;code&amp;gt;getLocalCoverArt(0,1)&amp;lt;/code&amp;gt;: Mit diesem Attribut kann das Modul aufgefordert werden, die Cover lokal herunterzuladen (bisheriges Standardverhalten).&lt;br /&gt;
**&amp;lt;code&amp;gt;ignoredIPs&amp;lt;/code&amp;gt;: Mit diesem Attribut können IP-Adressen angegeben werden, die vom UPnP-System ignoriert werden sollen. Z.B.: &#039;&#039;&#039;192.168.0.11,192.168.0.37&#039;&#039;&#039;. Es sind auch reguläre Ausdrücke pro Element zulässig. Diese dürfen nur keine Kommata oder Doppelpunkte enthalten. Z.B: &#039;&#039;&#039;/192.168.0.(1|2|3)/,/192.168.1.\d*/&#039;&#039;&#039;. Alle Meldungen und Benachrichtigungen von den angegebenen IP-Adressen werden ignoriert.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Dieses Attribut kann hilfreich sein, wenn sich falsche UPnP-Devices melden, obwohl nur Sonos-Devices angefragt waren. Manchmal passiert das mit irgendwelchen NAS oder sonstigen Serverdevices.&amp;lt;br /&amp;gt;Folgende Meldungen (z.B.) sind ein Indiz auf falsche Devices: &amp;lt;code&amp;gt;Loading device description failed with error: 500 Can&#039;t connect to 192.168.2.29:2869 (timeout) at ./FHEM/00_SONOS.pm line xx thread 1&amp;lt;/code&amp;gt;, wenn die angegebene IP-Adresse gar kein Sonos-Devices ist.&lt;br /&gt;
**&amp;lt;code&amp;gt;pingType(none,tcp,udp,icmp,syn)&amp;lt;/code&amp;gt;: Definiert die Art, wie der Alive-Check eines Zoneplayers erfolgen soll. Die Verfahren funktionieren unterschiedlich gut. Am Ressourcensparsamsten ist &#039;&#039;icmp&#039;&#039;, benötigt aber &amp;quot;&amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt;&amp;quot;-Rechte. An zweiter Stelle ist &#039;&#039;syn&#039;&#039; zu empfehlen. Die anderen Verfahren melden manchmal fehlerhafte not alives. Einfach probieren. Mittels &#039;&#039;none&#039;&#039; kann dieser Mechanismus auch deaktiviert werden.&lt;br /&gt;
**&amp;lt;code&amp;gt;reusePort(0,1)&amp;lt;/code&amp;gt;: Eines von (0,1). Gibt an, ob die Portwiederwendung für SSDP aktiviert werden soll, oder nicht. Kann Restart-Probleme lösen. Wenn man diese Probleme nicht hat, sollte man das Attribut nicht setzen.&lt;br /&gt;
**&amp;lt;code&amp;gt;SubProcessLogfileName &amp;lt;Pfad&amp;gt;&amp;lt;/code&amp;gt;: Hiermit kann für den SubProzess eine eigene Logdatei angegeben werden. Unter Windows z.B. überschreiben sich die beiden Logausgaben (von Fhem und SubProzess) sonst gegenseitig. Wenn &amp;quot;-&amp;quot; angegeben wird, wird wie bisher auf STDOUT (und damit im Fhem-Log) geloggt. Der Hauptanwendungsfall ist die mehr oder weniger kurzfristige Fehlersuche. Es werden keinerlei Variablenwerte ersetzt, und der Wert direkt als Dateiname verwendet.&lt;br /&gt;
**&amp;lt;code&amp;gt;usedonlyIPs &amp;lt;IP-Adresse&amp;gt;[,IP-Adresse]&amp;lt;/code&amp;gt;: Mit diesem Attribut können IP-Adressen angegeben werden, die ausschließlich vom UPnP-System berücksichtigt werden sollen. Z.B.: &amp;quot;192.168.0.11,192.168.0.37&amp;quot;. Es sind auch reguläre Ausdrücke pro Element zulässig. Diese dürfen nur keine Kommata oder Doppelpunkte enthalten. Z.B: &#039;&#039;&#039;/192.168.0.(1|2|3)/,/192.168.1.\d*/&#039;&#039;&#039;.&lt;br /&gt;
*Bookmark-Einstellungen&amp;lt;br /&amp;gt;&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Die Konfiguration der Bookmarks wird erst bei einem Neustart des SubProzesses (also durch einen FHEM-Neustart (vorher Speichern nicht vergessen) oder dem Setzen/Zurücksetzen des Attributs &#039;&#039;&#039;disable&#039;&#039;&#039; am Sonos-Device) berücksichtigt.&lt;br /&gt;
**&amp;lt;code&amp;gt;bookmarkSaveDir &amp;amp;lt;path&amp;amp;gt;&amp;lt;/code&amp;gt;: Das Verzeichnis, in dem die Dateien für die gespeicherten Bookmarks abgelegt werden sollen. Wenn nicht festgelegt, dann wird &amp;quot;.&amp;quot; verwendet.&lt;br /&gt;
**&amp;lt;code&amp;gt;bookmarkTitleDefinition &amp;amp;lt;Groupname&amp;amp;gt;:&amp;amp;lt;PlayerdeviceRegEx&amp;amp;gt;:&amp;amp;lt;TrackURIRegEx&amp;amp;gt;:&amp;amp;lt;MinTitleLength&amp;amp;gt;:&amp;amp;lt;RemainingLength&amp;amp;gt;:&amp;amp;lt;MaxAge&amp;amp;gt;:&amp;amp;lt;ReadOnly&amp;amp;gt; [...]&amp;lt;/code&amp;gt;: Die Definition für die Verwendung von Bookmarks für Titel.&lt;br /&gt;
**&amp;lt;code&amp;gt;bookmarkPlaylistDefinition &amp;amp;lt;Groupname&amp;amp;gt;:&amp;amp;lt;PlayerdeviceRegEx&amp;amp;gt;:&amp;amp;lt;MinListLength&amp;amp;gt;:&amp;amp;lt;MaxListLength&amp;amp;gt;:&amp;amp;lt;MaxAge&amp;amp;gt; [...]&amp;lt;/code&amp;gt;: Die Definition für die Verwendung von Bookmarks für aktuelle Abspiellisten/Playlisten.&lt;br /&gt;
*Proxy-Einstellungen&lt;br /&gt;
**&amp;lt;code&amp;gt;generateProxyAlbumArtURLs(0,1)&amp;lt;/code&amp;gt;: Wenn aktiviert, werden alle Cover-Links als Proxy-Aufrufe an FHEM generiert. Dieser Proxy-Server wird vom Sonos-Modul bereitgestellt. In der Grundeinstellung erfolgt kein Caching der Cover, sondern nur eine Durchreichung der Cover von den Sonosplayern (Damit ist der Zugriff durch einen externen Proxyserver auf FHEM möglich).&lt;br /&gt;
**&amp;lt;code&amp;gt;proxyCacheDir&amp;lt;/code&amp;gt;: Hiermit wird das Verzeichnis festgelegt, in dem die Cover zwischengespeichert werden. Wenn nicht festgelegt, so wird &#039;&#039;&#039;/tmp&#039;&#039;&#039; verwendet.&lt;br /&gt;
**&amp;lt;code&amp;gt;proxyCacheTime&amp;lt;/code&amp;gt;: Mit einer Angabe ungleich 0 wird der Caching-Mechanismus des Sonos-Modul-Proxy-Servers aktiviert. Dabei werden Cover, die im Cache älter sind als diese Zeitangabe in Sekunden, neu vom Sonosplayer geladen, alle anderen direkt ausgeliefert, ohne den Player zu fragen.&lt;br /&gt;
**&amp;lt;code&amp;gt;webname &amp;lt;String&amp;gt;&amp;lt;/code&amp;gt;: Hiermit kann der zu verwendende Webname für die Cover-Link-Erzeugung angegeben werden. Da vom Modul Links zu Cover u.ä. erzeugt werden, ohne dass es einen FhemWeb-Aufruf dazu gibt, kann das Modul diesen Pfad nicht selber herausfinden. Wenn das Attribut nicht angegeben wird, dann wird &#039;fhem&#039; angenommen.&lt;br /&gt;
*{{Anker|Sprachattribute}}Sprachoptionen&lt;br /&gt;
**&amp;lt;code&amp;gt;targetSpeakDir&amp;lt;/code&amp;gt;: Das Verzeichnis, in dem dieses Modul die Sprachdateien von &amp;lt;code&amp;gt;Speak&amp;lt;/code&amp;gt; (siehe [[#Set-Befehle_an_den_SONOSPLAYER|Set-Befehle an den SONOSPLAYER]]) ablegen soll (also die Adresse für den &#039;&#039;&#039;Schreib&#039;&#039;&#039;zugriff). Es wird empfohlen, dass dieses Verzeichnis &#039;&#039;&#039;nicht&#039;&#039;&#039; von Sonos indiziert ist.&amp;lt;br /&amp;gt;z.B. Pfade unter *Nix: &amp;lt;code&amp;gt;/home/www/Sonos&amp;lt;/code&amp;gt; oder unter Windows: &amp;lt;code&amp;gt;C:\InetPub\Sonos&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;targetSpeakMP3FileConverter&amp;lt;/code&amp;gt;: Hiermit kann ein MP3-Konverter angegeben werden, der am Ende der Verkettung der Speak-Ansage das resultierende MP3-File nochmal sauber durchkodiert. Damit können Restzeitanzeigeprobleme behoben werden. Dadurch vegrößert sich allerdings u.U. die Ansageverzögerung.&amp;lt;br /&amp;gt;z.B. &amp;lt;code&amp;gt;/usr/bin/avconv -i %infile% %outfile%&amp;lt;/code&amp;gt;&lt;br /&gt;
***&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Der Platzhalter &#039;&#039;%infile%&#039;&#039; wird durch den Quelldateinamen ersetzt werden.&lt;br /&gt;
***&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Der Platzhalter &#039;&#039;%outfile%&#039;&#039; wird durch den Zieldateinamen ersetzt werden.&lt;br /&gt;
***&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Das Programm &#039;&#039;avconv&#039;&#039; kann unter Debian z.B. mittels &amp;lt;code&amp;gt;sudo apt-get install ffmpeg&amp;lt;/code&amp;gt; installiert werden.&lt;br /&gt;
**&amp;lt;code&amp;gt;targetSpeakMP3FileDir&amp;lt;/code&amp;gt;: Das Verzeichnis, welches als Standard für MP3-Fileangaben in Speak-Texten verwendet werden soll. Wird dieses Attribut definiert, können die Angaben bei Speak ohne Verzeichnis erfolgen.&amp;lt;br /&amp;gt;z.B. Pfade unter *Nix: &amp;lt;code&amp;gt;/home/www/Sonos&amp;lt;/code&amp;gt; oder unter Windows: &amp;lt;code&amp;gt;C:\InetPub\Sonos&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;targetSpeakURL&amp;lt;/code&amp;gt;: Die URL, unter der &#039;&#039;von außen&#039;&#039; (also aus Sicht des Zoneplayers) auf die abgelegte Sprachdatei zugegriffen werden kann (also die Adresse für den &#039;&#039;&#039;Lese&#039;&#039;&#039;zugriff). &amp;lt;br /&amp;gt;z.B. &amp;lt;code&amp;gt;\\192.168.178.45\Sonos&amp;lt;/code&amp;gt;&lt;br /&gt;
***&#039;&#039;&#039;Achtung!&#039;&#039;&#039;: Dabei muss darauf geachtet werden, dass als letztes Zeichen vor dem Zeilenumbruch kein Backslash steht (ist hier für den Pfad auch nicht notwendig). Dieser würde von FHEM als Maskierer für den folgenden Zeilenumbruch interpretiert werden, und die nächste Zeile wäre auch noch Bestandteil dieses Attributs (und damit des Pfades).&lt;br /&gt;
**&amp;lt;code&amp;gt;targetSpeakFileTimestamp(0,1)&amp;lt;/code&amp;gt;: Definiert, ob in dem Namen der Sprachausgabedatei ein Zeitstempel enthalten sein soll. Das sorgt dafür, dass alle Dateien beibehalten werden (da nicht mit demselben Namen überschrieben wird).&amp;lt;br /&amp;gt;Manchmal kann das auch Caching-Probleme beseitigen. In meinen Tests hat die Anzeige der in der Sprachdatei enthaltenen MP3-Tags nur mit dieser aktivierten Option sauber funktioniert, da der ZonePlayer bei mir die Tags gecached hält.&amp;lt;br /&amp;gt;Anderseits muss man sich dabei Gedanken über eine Aufräumstrategie machen, da die alten Dateien immer vorhanden bleiben.&lt;br /&gt;
**&amp;lt;code&amp;gt;targetSpeakFileHashCache(0,1)&amp;lt;/code&amp;gt;: Definiert, ob in dem Namen der Sprachausgabedatei ein Hash-Wert enthalten sein soll. Das sorgt dafür, dass die Dateien bei gleichem Text wiederverwendet werden und nicht neu generiert werden.&lt;br /&gt;
***Für diese Funktionalität wird das Perl-Modul &#039;&#039;&#039;Digest::SHA1&#039;&#039;&#039; für die Berechnung des Hash-Werts benötigt. Am einfachsten kann es bei Bedarf per CPAN installiert werden: &amp;lt;code&amp;gt;sudo cpan install Digest::SHA1&amp;lt;/code&amp;gt;.&lt;br /&gt;
**&amp;lt;code&amp;gt;Speak1&amp;lt;/code&amp;gt;: Hiermit kann ein Systemaufruf definiert werden, der zu Erzeugung einer Sprachausgabe verwendet werden kann. Sobald dieses Attribut definiert wurde, ist ein entsprechender Setter am Sonosplayer verfügbar.&amp;lt;br /&amp;gt;Das Format ist:&amp;lt;br /&amp;gt;&amp;lt;Ausgabedateiendung&amp;gt;:&amp;lt;Befehlszeile&amp;gt;&lt;br /&gt;
***Es dürfen folgende Platzhalter verwendet werden:&amp;lt;br /&amp;gt;&#039;&#039;&#039;%language%&#039;&#039;&#039;: Wird durch die eingegebene Sprache ersetzt&amp;lt;br /&amp;gt;&#039;&#039;&#039;%filename%&#039;&#039;&#039;: Wird durch den kompletten Dateinamen (inkl. Dateiendung) ersetzt.&amp;lt;br /&amp;gt;&#039;&#039;&#039;%text%&#039;&#039;&#039;: Wird durch den zu übersetzenden Text ersetzt.&amp;lt;br /&amp;gt;&#039;&#039;&#039;%textescaped%&#039;&#039;&#039;: Wird durch den URL-Enkodierten zu übersetzenden Text ersetzt.&amp;lt;br /&amp;gt;Zusätzliche Ersetzungen:&amp;lt;br /&amp;gt;&#039;&#039;&#039;%textutf8%&#039;&#039;&#039;: Wird durch den zu übersetzenden Text im UTF8-Format ersetzt.&amp;lt;br /&amp;gt;&#039;&#039;&#039;%textutf8escaped%&#039;&#039;&#039;: Wird durch den URL-Enkodierten zu übersetzenden Text im UTF8-Format ersetzt.&lt;br /&gt;
**&amp;lt;code&amp;gt;Speak2&amp;lt;/code&amp;gt;: Siehe Speak1&lt;br /&gt;
**&amp;lt;code&amp;gt;Speak3&amp;lt;/code&amp;gt;: Siehe Speak1&lt;br /&gt;
**&amp;lt;code&amp;gt;Speak4&amp;lt;/code&amp;gt;: Siehe Speak1&lt;br /&gt;
**&amp;lt;code&amp;gt;SpeakCover&amp;lt;/code&amp;gt;: Hiermit kann ein JPG- oder PNG-Bild als Cover für die Google-Sprachdurchsagen definiert werden.&lt;br /&gt;
**&amp;lt;code&amp;gt;Speak1Cover&amp;lt;/code&amp;gt;: Analog zu SpeakCover für Speak1.&lt;br /&gt;
**&amp;lt;code&amp;gt;Speak2Cover&amp;lt;/code&amp;gt;: Analog zu SpeakCover für Speak2.&lt;br /&gt;
**&amp;lt;code&amp;gt;Speak3Cover&amp;lt;/code&amp;gt;: Analog zu SpeakCover für Speak3.&lt;br /&gt;
**&amp;lt;code&amp;gt;Speak4Cover&amp;lt;/code&amp;gt;: Analog zu SpeakCover für Speak4.&lt;br /&gt;
**&amp;lt;code&amp;gt;SpeakGoogleURL &amp;lt;GoogleURL&amp;gt;&amp;lt;/code&amp;gt;: Die zu verwendende Google-URL. Wenn dieser Parameter nicht angegeben wird, dann wird ein Standard verwendet. Hier müssen Platzhalter für die Ersetzung durch das Modul eingetragen werden: %1$s -&amp;gt; Sprache, %2$s -&amp;gt; Text&lt;br /&gt;
***Die Standard-URL lautet momentan: &amp;lt;code&amp;gt;http://translate.google.com/translate_tts?tl=%1$s&amp;amp;client=tw-ob&amp;amp;q=%2$s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Get-Befehle an SONOS ===&lt;br /&gt;
*Gruppenbefehle&lt;br /&gt;
**&amp;lt;code&amp;gt;Groups&amp;lt;/code&amp;gt;: Liefert die aktuelle Gruppierungskonfiguration der Sonos-Systemlandschaft zurück. Das Format ist eine Komma-getrennte Liste von Listen mit Devicenamen, also z.B. &amp;lt;code&amp;gt;[Sonos_Kueche], [Sonos_Wohnzimmer, Sonos_Schlafzimmer]&amp;lt;/code&amp;gt;. In diesem Beispiel sind also zwei Gruppen definiert, von denen die erste aus einem Player und die zweite aus Zwei Playern besteht. Dabei ist die Reihenfolge innerhalb der Unterlisten wichtig, da der erste Eintrag der sogenannte Gruppenkoordinator ist (in diesem Fall also &amp;lt;code&amp;gt;Sonos_Wohnzimmer&amp;lt;/code&amp;gt;), von dem die aktuelle Abspielliste und der aktuelle Titel auf die anderen Gruppenmitglieder übernommen wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Set-Befehle an SONOS ===&lt;br /&gt;
*Grundsätzliches&lt;br /&gt;
**&amp;lt;code&amp;gt;RefreshShareIndex&amp;lt;/code&amp;gt;: Startet eine Aktualisierung des Indexes der Freigaben&lt;br /&gt;
**&amp;lt;code&amp;gt;RescanNetwork&amp;lt;/code&amp;gt;: Startet die Erkennung der im Netzwerk vorhandenen Player erneut.&lt;br /&gt;
*Steuerbefehle&lt;br /&gt;
**&amp;lt;code&amp;gt;Mute &amp;lt;State&amp;gt;&amp;lt;/code&amp;gt;: Setzt den Mute-Zustand bei allen Playern. Der Wert kann on oder off sein.&lt;br /&gt;
**&amp;lt;code&amp;gt;PauseAll&amp;lt;/code&amp;gt;: Pausiert die Wiedergabe in allen Zonen.&lt;br /&gt;
**&amp;lt;code&amp;gt;Pause&amp;lt;/code&amp;gt;: Synonym für PauseAll.&lt;br /&gt;
**&amp;lt;code&amp;gt;StopAll&amp;lt;/code&amp;gt;: Stoppt die Wiedergabe in allen Zonen.&lt;br /&gt;
**&amp;lt;code&amp;gt;Stop&amp;lt;/code&amp;gt;: Synonym für StopAll.&lt;br /&gt;
*Bookmark-Befehle&lt;br /&gt;
**&amp;lt;code&amp;gt;DisableBookmark &amp;amp;lt;Groupname&amp;amp;gt;&amp;lt;/code&amp;gt;: Deaktiviert die angegebene Gruppe.&lt;br /&gt;
**&amp;lt;code&amp;gt;EnableBookmark &amp;amp;lt;Groupname&amp;amp;gt;&amp;lt;/code&amp;gt;: Aktiviert die angegebene Gruppe.&lt;br /&gt;
**&amp;lt;code&amp;gt;LoadBookmarks [Groupname]&amp;lt;/code&amp;gt;: Lädt die angegebene Gruppe (oder alle Gruppen, wenn nicht angegeben) aus den entsprechenden Dateien.&lt;br /&gt;
**&amp;lt;code&amp;gt;SaveBookmarks [Groupname]&amp;lt;/code&amp;gt;: Speichert die angegebene Gruppe (oder alle Gruppen, wenn nicht angegeben) in die entsprechenden Dateien.&lt;br /&gt;
*Gruppenbefehle&lt;br /&gt;
**&amp;lt;code&amp;gt;Groups &amp;lt;Gruppendefinition&amp;gt;&amp;lt;/code&amp;gt;: Setzt die aktuelle Gruppierungskonfiguration der Sonos-Systemlandschaft. Das Format ist jenes, welches auch von dem Get-Befehl &#039;&#039;Groups&#039;&#039; geliefert wird.&amp;lt;br &amp;gt;&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Hier kann als Gruppendefinition das Wort &#039;&#039;Reset&#039;&#039; verwendet werden, um alle Player aus ihren Gruppen zu entfernen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Modul &#039;&#039;&#039;SONOSPLAYER&#039;&#039;&#039; ==&lt;br /&gt;
Dieses Modul dient im großen und ganzen als Platzhalter für FHEM, damit der Anwender FHEM-Konform informiert werden, bzw. steuern kann.&lt;br /&gt;
&lt;br /&gt;
Hier werden die Informationen, die vom &#039;&#039;&#039;SONOS&#039;&#039;&#039;-Modul erkannt werden, abgelegt, und die Aktualisierungs-Events erzeugt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings von SONOSPLAYER ===&lt;br /&gt;
Folgende Informationen werden im SONOSPLAYER als Reading abgelegt:&lt;br /&gt;
*Systemzustand&lt;br /&gt;
**&amp;lt;code&amp;gt;AlarmList&amp;lt;/code&amp;gt;: Enthält die textuelle Repräsentation des Hashs mit den aktuell für diesen Player gültigen Alarminformationen. Diese Information wird automatisch aktualisiert, wenn das Attribut &#039;&#039;&#039;getAlarms&#039;&#039;&#039; auf &#039;&#039;1&#039;&#039; gesetzt wurde, ansonsten steht sie nicht zur Verfügung (und es kann kein Alarm angelegt, verändert und gelöscht werden). Das Format des Hashs entspricht dem, das zum Setzen oder Anpassen eines Alarms notwendig ist.&amp;lt;br /&amp;gt;Folgene Schlüssel sind dort zulässig/notwendig:&lt;br /&gt;
***&#039;&#039;&#039;Enabled(0,1)&#039;&#039;&#039;: Gibt an, ob der Alarm aktiviert ist.&lt;br /&gt;
***&#039;&#039;&#039;Volume(0..100)&#039;&#039;&#039;: Die Lautstärke, mit der der Alarm wiedergegeben werden soll.&lt;br /&gt;
***&#039;&#039;&#039;StartTime(Timstamp)&#039;&#039;&#039;: Die Uhrzeit, zu der der Alarm starten soll.&lt;br /&gt;
***&#039;&#039;&#039;Duration(Timstamp)&#039;&#039;&#039;: Die Dauer, die der Alarm laufen soll.&lt;br /&gt;
***&#039;&#039;&#039;Repeat(0,1)&#039;&#039;&#039;: Gibt an, ob die Wiedergabe wiederholt werden soll.&lt;br /&gt;
***&#039;&#039;&#039;Shuffle(0,1)&#039;&#039;&#039;: Gibt an, ob die Wiedergabe zufällig erfolgen soll.&lt;br /&gt;
***&#039;&#039;&#039;RoomUUID&#039;&#039;&#039;: Die ID der Zone, in der der Alarm wiedergegeben werden soll. Dieser Wert muss nie mit angegeben werden, da er automatisch befüllt wird (Diese Information ist durch das verwendete FHEM-Zoneplayer-Device klar).&lt;br /&gt;
***&#039;&#039;&#039;ProgramURI&#039;&#039;&#039;: Die abzuspielende URI.&lt;br /&gt;
***&#039;&#039;&#039;ProgramMetaData&#039;&#039;&#039;: Die Metadaten zu der abzuspielenden URI.&lt;br /&gt;
***&#039;&#039;&#039;Recurrence_Once(0,1)&#039;&#039;&#039;: Gibt an, dass der Alarm nur einmal laufen soll. Wenn hier eine &#039;&#039;1&#039;&#039; angegeben wurde, dann werden die anderen &#039;&#039;Recurrence&#039;&#039;-Angaben ignoriert.&lt;br /&gt;
***&#039;&#039;&#039;Recurrence_Monday(0,1)&#039;&#039;&#039;: Gibt an, dass der Alarm jeden Montag laufen soll. Kann mit den anderen Tagesangaben kombiniert werden.&lt;br /&gt;
***&#039;&#039;&#039;Recurrence_Tuesday(0,1)&#039;&#039;&#039;: Gibt an, dass der Alarm jeden Dienstag laufen soll. Kann mit den anderen Tagesangaben kombiniert werden.&lt;br /&gt;
***&#039;&#039;&#039;Recurrence_Wednesday(0,1)&#039;&#039;&#039;: Gibt an, dass der Alarm jeden Mittwoch laufen soll. Kann mit den anderen Tagesangaben kombiniert werden.&lt;br /&gt;
***&#039;&#039;&#039;Recurrence_Thursday(0,1)&#039;&#039;&#039;: Gibt an, dass der Alarm jeden Donnerstag laufen soll. Kann mit den anderen Tagesangaben kombiniert werden.&lt;br /&gt;
***&#039;&#039;&#039;Recurrence_Friday(0,1)&#039;&#039;&#039;: Gibt an, dass der Alarm jeden Freitag laufen soll. Kann mit den anderen Tagesangaben kombiniert werden.&lt;br /&gt;
***&#039;&#039;&#039;Recurrence_Saturday(0,1)&#039;&#039;&#039;: Gibt an, dass der Alarm jeden Samstag laufen soll. Kann mit den anderen Tagesangaben kombiniert werden.&lt;br /&gt;
***&#039;&#039;&#039;Recurrence_Sunday(0,1)&#039;&#039;&#039;: Gibt an, dass der Alarm jeden Sonntag laufen soll. Kann mit den anderen Tagesangaben kombiniert werden.&lt;br /&gt;
***&#039;&#039;&#039;IncludeLinkedZones(0,1)&#039;&#039;&#039;: Gibt an, ob die aktuell verlinkten Zonen diesen Alarm ebenfall abspielen sollen.&lt;br /&gt;
***&#039;&#039;&#039;Beispiel-Hash&#039;&#039;&#039;: { Enabled =&amp;gt; 1, Volume =&amp;gt; 12, StartTime =&amp;gt; &#039;16:00:00&#039;, Duration =&amp;gt; &#039;00:15:00&#039;, Repeat =&amp;gt; 0, Shuffle =&amp;gt; 0, ProgramURI =&amp;gt; &#039;x-rincon-buzzer:0&#039;, ProgramMetaData =&amp;gt; &#039; &#039;, Recurrence_Once =&amp;gt; 0, Recurrence_Monday =&amp;gt; 1, Recurrence_Tuesday =&amp;gt; 1, Recurrence_Wednesday =&amp;gt; 1, Recurrence_Thursday =&amp;gt; 1, Recurrence_Friday =&amp;gt; 1, Recurrence_Saturday =&amp;gt; 0, Recurrence_Sunday =&amp;gt; 0, IncludeLinkedZones =&amp;gt; 0 }&lt;br /&gt;
**&amp;lt;code&amp;gt;AlarmListIDs&amp;lt;/code&amp;gt;: Enthält die Hash-Schlüssel der Alarme als kommaseparierte Liste. Dieses Reading gibt es Hauptsächlich zur Vereinfachung des Zugriffs auf das Reading &#039;&#039;&#039;AlarmList&#039;&#039;&#039;. Damit hat man direkt die Anzahl und Primärschlüssel im Zugriff.&lt;br /&gt;
**&amp;lt;code&amp;gt;AlarmListVersion&amp;lt;/code&amp;gt;: Dieses Reading enthält die Information über die aktuelle Version der gespeicherten Alarm-Informationen. Diese Information wird Hauptsächlich intern benötigt, um beurteilen zu können, ob die Alarminformationen neu geladen werden müssen.&lt;br /&gt;
**&amp;lt;code&amp;gt;AudioDelay&amp;lt;/code&amp;gt;: Gibt das AudioDelay des Players an. Der Wert kann zwischen 0 und 5 liegen.&lt;br /&gt;
**&amp;lt;code&amp;gt;AudioDelayLeftRear&amp;lt;/code&amp;gt;: Gibt den AudioDelayLeftRear des Players an. Der Wert kann zwischen 0 und 2 liegen. Wobei die Werte folgende Bedeutung haben: 0: &amp;gt;3m, 1: &amp;gt;0.6m und &amp;lt;3m, 2: &amp;lt;0.6m&lt;br /&gt;
**&amp;lt;code&amp;gt;AudioDelayRightRear&amp;lt;/code&amp;gt;: Gibt den AudioDelayRightRear des Players an. Der Wert kann zwischen 0 und 2 liegen. Wobei die Werte folgende Bedeutung haben: 0: &amp;gt;3m, 1: &amp;gt;0.6m und &amp;lt;3m, 2: &amp;lt;0.6m&lt;br /&gt;
**&amp;lt;code&amp;gt;ButtonState&amp;lt;/code&amp;gt;: Gibt den Zustand des Buttons an.&lt;br /&gt;
**&amp;lt;code&amp;gt;ButtonLockState&amp;lt;/code&amp;gt;: Gibt den Sperr-Zustand des Buttons an.&lt;br /&gt;
**&amp;lt;code&amp;gt;DailyIndexRefreshTime&amp;lt;/code&amp;gt;: Enthält die aktuell gültige &#039;&#039;DailyIndexRefreshTime&#039;&#039;, zu der der Medienindex neu aufgebaut werden soll. &amp;lt;br /&amp;gt;Diese Information wird automatisch aktualisiert, wenn sie bei einem Player verändert wird, wenn das Attribut &#039;&#039;&#039;getAlarms&#039;&#039;&#039; des Player auf &#039;&#039;1&#039;&#039; gesetzt wurde.&lt;br /&gt;
**&amp;lt;code&amp;gt;DialogLevel&amp;lt;/code&amp;gt;: Gibt den Zustand der Sprachverbesserung an der Playbar an.&lt;br /&gt;
**&amp;lt;code&amp;gt;FavouritesVersion&amp;lt;/code&amp;gt;: Dieses Reading enthält die Information über die aktuelle Version der gespeicherten Favoriten. Eine Änderung dieses Readings wird durch eine Anpassung der Favoriten (z.B. durch einen Controller) ausgelöst.&lt;br /&gt;
**&amp;lt;code&amp;gt;fieldType&amp;lt;/code&amp;gt;: In einer Paarung wird jedem Player vom Sonos-System ein eindeutiger FieldType zugewiesen. Dieser wird von diesem Modul für die Eindeutigkeit des Device-Namen verwendet. Bei einer Stereopaarung z.B. hat ein Player den Type &#039;LF&#039; (für Left-Front), &#039;RF&#039; (für Right-Front) oder SW (für Subwoofer); bei Surround-Konfigurationen aber auch RR (für Right-Rear) oder LR (für Left-Rear).&lt;br /&gt;
**&amp;lt;code&amp;gt;HeadphoneConnected&amp;lt;/code&amp;gt;: Enthält, wenn eines der beiden Attribute &amp;lt;code&amp;gt;minVolume&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;maxVolume&amp;lt;/code&amp;gt; (oder auch &amp;lt;code&amp;gt;minVolumeHeadphone&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;maxVolumeHeadphone&amp;lt;/code&amp;gt;) gesetzt wurde, den Zustand, ob ein Kopfhörer verwendet wird, oder nicht. &amp;lt;br /&amp;gt;Wenn zusätzlich noch das Attribut &amp;lt;code&amp;gt;generateVolumeEvent&amp;lt;/code&amp;gt; gesetzt ist, erzeugt jede Änderung dieses Zustands auch ein FHEM-Event. Standardmäßig ist dies aus Zeitgründen deaktiviert, da FHEM-Events an jeden(!) notify innerhalb FHEM gemeldet werden. Dies kann u.U. zu Verzögerungen bei dem ZonePlayer führen.&lt;br /&gt;
**&amp;lt;code&amp;gt;LastActionResult&amp;lt;/code&amp;gt;: Enthält den Namen und das Ergebnis der letzten Aktion auf dem Player. Da die Aktionen asyncron übertragen werden, kann nur hier kontrolliert werden, ob das gewünschte Ergebnis erreicht wurde.&lt;br /&gt;
**&amp;lt;code&amp;gt;LineInConnected&amp;lt;/code&amp;gt;: Gibt an, ob der Line-In-Eingang angeschlossen ist, oder nicht. Wird bei Änderung am Player automatisch aktualisiert, und erzeugt damit auch ein Event.&lt;br /&gt;
**&amp;lt;code&amp;gt;location&amp;lt;/code&amp;gt;: URL zum Informationsdokument des ZonePlayers&lt;br /&gt;
**&amp;lt;code&amp;gt;NightMode&amp;lt;/code&amp;gt;: Gibt den Zustand des Nachtsounds an der Playbar an.&lt;br /&gt;
**&amp;lt;code&amp;gt;Orientation&amp;lt;/code&amp;gt;: Gibt die Lage des Players an.&lt;br /&gt;
**&amp;lt;code&amp;gt;playerType&amp;lt;/code&amp;gt;: Typbezeichnung des ZonePlayer. z.B. &amp;quot;ZP90&amp;quot;&lt;br /&gt;
**&amp;lt;code&amp;gt;PlaylistsVersion&amp;lt;/code&amp;gt;: Dieses Reading enthält die Information über die aktuelle Version der gespeicherten Playlists. Eine Änderung dieses Readings wird durch eine Anpassung der Playlists (z.B. durch einen Controller) ausgelöst.&lt;br /&gt;
**&amp;lt;code&amp;gt;presence&amp;lt;/code&amp;gt;: Erreichbarkeit des Players. Kann &amp;quot;appeared&amp;quot; oder &amp;quot;disappeared&amp;quot; sein&lt;br /&gt;
**&amp;lt;code&amp;gt;RadiosVersion&amp;lt;/code&amp;gt;: Dieses Reading enthält die Information über die aktuelle Version der gespeicherten Radiofavoriten. Eine Änderung dieses Readings wird durch eine Anpassung der Radios (z.B. durch einen Controller) ausgelöst.&lt;br /&gt;
**&amp;lt;code&amp;gt;roomName&amp;lt;/code&amp;gt;: Originalname des ZonePlayers. Kann Leer- oder Sonderzeichen enthalten&lt;br /&gt;
**&amp;lt;code&amp;gt;roomNameAlias&amp;lt;/code&amp;gt;: Originalname des ZonePlayers mit einem angehangenen Funktionsnamen, wie er für das Attribut &amp;quot;alias&amp;quot; verwendet werden würde (z.B. &amp;quot;Wohnzimmer - Rechts&amp;quot;). Wird zur Laufzeit aktualisiert. Kann Leer- oder Sonderzeichen enthalten&lt;br /&gt;
**&amp;lt;code&amp;gt;saveRoomName&amp;lt;/code&amp;gt;: Sicherer Name des Zoneplayer. Sonderzeichen wurden in Unterstriche umgewandelt. Das Device wird beim Anlegen mit diesem Namen angelegt&lt;br /&gt;
**&amp;lt;code&amp;gt;serialNum&amp;lt;/code&amp;gt;: Seriennummer des ZonePlayers. Entspricht weitestgehend der MAC-Adresse. z.B. &amp;quot;00-0E-58-28-D0-F4:2&amp;quot;&lt;br /&gt;
**&amp;lt;code&amp;gt;softwareRevision&amp;lt;/code&amp;gt;: Version der installierten Software. z.B. &amp;quot;8.4&amp;quot;&lt;br /&gt;
**&amp;lt;code&amp;gt;softwareRevisionAvailable&amp;lt;/code&amp;gt;: Version der verfügbaren Software. z.B. &amp;quot;8.5&amp;quot;&lt;br /&gt;
**&amp;lt;code&amp;gt;softwareRevisionInternal&amp;lt;/code&amp;gt;: Interne Version der installierten Software. z.B. &amp;quot;41.3-50131&amp;quot;&lt;br /&gt;
**&amp;lt;code&amp;gt;softwareRevisionInternalAvailable&amp;lt;/code&amp;gt;: Interne Version der verfügbaren Software. z.B. &amp;quot;42.2-51240&amp;quot;&lt;br /&gt;
**&amp;lt;code&amp;gt;SubEnable&amp;lt;/code&amp;gt;: Gibt den Zustand des Sub-Zustands für diesen Player an.&lt;br /&gt;
**&amp;lt;code&amp;gt;SubGain&amp;lt;/code&amp;gt;: Gibt den SubGain für diesen Player an. Der Wert kann zwischen -15 und 15 liegen.&lt;br /&gt;
**&amp;lt;code&amp;gt;SubPolarity&amp;lt;/code&amp;gt; Gibt den SubPolarity für diesen Player an. Der Wert kann zwischen 0 und 2 liegen.&lt;br /&gt;
**&amp;lt;code&amp;gt;SurroundEnable&amp;lt;/code&amp;gt;: Gibt an, ob für diesen Player die Surround-Wiedergabe aktiviert wurde, oder nicht.&lt;br /&gt;
**&amp;lt;code&amp;gt;SurroundLevel&amp;lt;/code&amp;gt;: Gibt den Surroundlevel für diesen Player an. Der Wert kann zwischen -15 und 15 sein.&lt;br /&gt;
**&amp;lt;code&amp;gt;TruePlay&amp;lt;/code&amp;gt;: Gibt an, ob für diesen Player die TruePlay-Wiedergabe aktiviert ist, oder nicht.&lt;br /&gt;
**&amp;lt;code&amp;gt;WifiEnabled&amp;lt;/code&amp;gt;: Gibt an, ob für diesen Player Wifi aktiviert ist, oder nicht.&lt;br /&gt;
**&amp;lt;code&amp;gt;WirelessMode&amp;lt;/code&amp;gt;: Gibt den Wirelessmode des Players an.&lt;br /&gt;
*Gruppierungsinformationen&lt;br /&gt;
**&amp;lt;code&amp;gt;AvailablePlayerList&amp;lt;/code&amp;gt;: Wird gesetzt, wenn das Attribut &amp;quot;getListsDirectlyToReadings&amp;quot; am Sonos-Device gesetzt wurde. Es enthält die anderen und noch verfügbaren und nicht gebundenen Player-Devicenamen. Das ist die Grundlage für eine Player-zur-Abspielgruppe-hinzufügen-Funktion als Listendarstellung.&lt;br /&gt;
**&amp;lt;code&amp;gt;AvailablePlayerListAlias&amp;lt;/code&amp;gt;: Wird gesetzt, wenn das Attribut &amp;quot;getListsDirectlyToReadings&amp;quot; am Sonos-Device gesetzt wurde. Es enthält die anderen und noch verfügbaren und nicht gebundenen Player-Raumnamen. Das ist die Grundlage für eine Player-zur-Abspielgruppe-hinzufügen-Funktion als Listendarstellung.&lt;br /&gt;
**&amp;lt;code&amp;gt;IsBonded&amp;lt;/code&amp;gt;: Gibt an, ob der Player in einer Bindung zum Masterplayer steht (anstatt ein einfaches Gruppenmitglied zu sein). Gebundene Player sind z.B. der rechte Player im Stereoverbund, sowie die Satellitenplayer in einem 5.1er Surroundsystem (also Subwoofer, hintere Lautsprecher und vordere Lautsprecher).&lt;br /&gt;
**&amp;lt;code&amp;gt;IsMaster&amp;lt;/code&amp;gt;: Gibt an, ob dieser Player aktuell ein Masterplayer einer Gruppe ist. Dabei kann die Gruppe auch nur einen Teilnehmer haben (wieder dieser Player).&amp;lt;br /&amp;gt;Damit kann ermittelt werden, welche Player korrekte Abspielinformationen darstellen können.&lt;br /&gt;
**&amp;lt;code&amp;gt;IsZoneBridge&amp;lt;/code&amp;gt;: Gibt an, ob dieser Player eine Bridge ist.&lt;br /&gt;
**&amp;lt;code&amp;gt;MasterPlayer&amp;lt;/code&amp;gt;: Gibt den FHEM-Devicenamen des Masterplayers zu diesem Player an. Wenn dieser Player alleine eine Gruppe darstellt, dann steht in diesem Reading der FHEM-Devicenamen dieses Players.&lt;br /&gt;
**&amp;lt;code&amp;gt;SlavePlayer&amp;lt;/code&amp;gt;: Gibt eine per &#039;&#039;&#039;eval&#039;&#039;&#039; umwandelbare Liste von FHEM-Devicenamen der zu diesem Masterplayer gehörenden Slaveplayer an. Diese Liste kann auch leer sein, wenn dieser Player kein Masterplayer ist, oder die Gruppe nur aus einem Mitglied besteht.&lt;br /&gt;
**&amp;lt;code&amp;gt;SlavePlayerNotBonded&amp;lt;/code&amp;gt;: Enthält alle SlavePlayer, die nicht gebunden sind als visualisiertes Perl-Array.&lt;br /&gt;
**&amp;lt;code&amp;gt;SlavePlayerNotBondedList&amp;lt;/code&amp;gt;: Enthält alle SlavePlayer, die nicht gebunden sind als &amp;quot;|&amp;quot;-separierte Liste der Devicenamen.&lt;br /&gt;
**&amp;lt;code&amp;gt;SlavePlayerNotBondedListAlias&amp;lt;/code&amp;gt;: Enthält alle SlavePlayer, die nicht gebunden sind als &amp;quot;|&amp;quot;-separierte Liste der Raumnnamen.&lt;br /&gt;
**&amp;lt;code&amp;gt;ZoneGroupID&amp;lt;/code&amp;gt;: Die ID des Gruppenkoordinators plus eine laufende Nummer. Sollte die Gruppe nur aus einem Mitglied bestehen, so ist es die eigene ID (=UDN).&lt;br /&gt;
**&amp;lt;code&amp;gt;ZoneGroupName&amp;lt;/code&amp;gt;: Der Name der aktuellen Gruppe&lt;br /&gt;
**&amp;lt;code&amp;gt;ZoneGroupNameDetails&amp;lt;/code&amp;gt;: Enthält die Slavezonen als textuelle Auflistung mittels &#039;+&#039;. Ist leer, wenn es keine Slaveplayer gibt. Enthält den Namen des Gruppenmasters, wenn es einen solchen gibt.&lt;br /&gt;
**&amp;lt;code&amp;gt;ZonePlayerUUIDsInGroup&amp;lt;/code&amp;gt;: Eine Liste der in der aktuellen Gruppe befindlichen Zoneplayer.&lt;br /&gt;
*Abspielzustand&lt;br /&gt;
**&amp;lt;code&amp;gt;AlarmRunning&amp;lt;/code&amp;gt;: Dieses Reading enthält &#039;&#039;1&#039;&#039;, wenn gerade ein Alarm abgespielt wird, sonst &#039;&#039;0&#039;&#039;&lt;br /&gt;
**&amp;lt;code&amp;gt;AlarmRunningID&amp;lt;/code&amp;gt;: Dieses Reading enthält die ID des verursachenden Alarms, wenn gerade ein Alarm abgespielt wird, sonst ist es leer.&lt;br /&gt;
**&amp;lt;code&amp;gt;Balance&amp;lt;/code&amp;gt;: Enthält im Normalfall die am Player eingestellte Balance zum Zeitpunkt der Erkennung. Wenn eines der beiden Attribute &amp;lt;code&amp;gt;minVolume&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;maxVolume&amp;lt;/code&amp;gt; gesetzt wurde, wird diese Balance bei jeder Änderung am Player mit aktualisiert. &amp;lt;br /&amp;gt;Wenn zusätzlich noch das Attribut &amp;lt;code&amp;gt;generateVolumeEvent&amp;lt;/code&amp;gt; gesetzt ist, erzeugt jede Änderung der Balance auch ein FHEM-Event. Standardmäßig ist dies aus Zeitgründen deaktiviert, da FHEM-Events an jeden(!) notify innerhalb FHEM gemeldet werden. Dies kann u.U. zu Verzögerungen bei dem ZonePlayer führen.&lt;br /&gt;
**&amp;lt;code&amp;gt;Bass&amp;lt;/code&amp;gt;: Enthält im Normalfall den am Player eingestellten Basslevel zum Zeitpunkt der Erkennung. Wenn eines der beiden Attribute &amp;lt;code&amp;gt;minVolume&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;maxVolume&amp;lt;/code&amp;gt; gesetzt wurde, wird dieser Basslevel bei jeder Änderung am Player mit aktualisiert. &amp;lt;br /&amp;gt;Wenn zusätzlich noch das Attribut &amp;lt;code&amp;gt;generateVolumeEvent&amp;lt;/code&amp;gt; gesetzt ist, erzeugt jede Änderung des Basslevels auch ein FHEM-Event. Standardmäßig ist dies aus Zeitgründen deaktiviert, da FHEM-Events an jeden(!) notify innerhalb FHEM gemeldet werden. Dies kann u.U. zu Verzögerungen bei dem ZonePlayer führen.&lt;br /&gt;
**&amp;lt;code&amp;gt;CrossfadeMode&amp;lt;/code&amp;gt;: Enthält den aktuellen Zustand von CrossfadeMode. Wird durch Event des Players aktualisiert (zusammen mit der Titelinformation).&lt;br /&gt;
**&amp;lt;code&amp;gt;GroupMute&amp;lt;/code&amp;gt;: Enthält den GroupMute-Zustand. Wird automatisch aktualisiert.&lt;br /&gt;
**&amp;lt;code&amp;gt;GroupVolume&amp;lt;/code&amp;gt;: Enthält den GroupVolume-Zustand. Wird automatisch aktualisiert.&lt;br /&gt;
**&amp;lt;code&amp;gt;GroupVolumeD&amp;lt;/code&amp;gt;: Verringert die aktuelle Gruppenlautstärke um volumeStep-Einheiten.&lt;br /&gt;
**&amp;lt;code&amp;gt;GroupVolumeU&amp;lt;/code&amp;gt;: Erhöht die aktuelle Gruppenlautstärke um volumeStep-Einheiten.&lt;br /&gt;
**&amp;lt;code&amp;gt;Loudness&amp;lt;/code&amp;gt;: Enthält, wenn eines der beiden Attribute &amp;lt;code&amp;gt;minVolume&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;maxVolume&amp;lt;/code&amp;gt; gesetzt wurde, den aktuellen Zustand des Loudness. &amp;lt;br /&amp;gt;Wenn zusätzlich noch das Attribut &amp;lt;code&amp;gt;generateVolumeEvent&amp;lt;/code&amp;gt; gesetzt ist, erzeugt jede Änderung des Loudness-Zustands auch ein FHEM-Event. Standardmäßig ist dies aus Zeitgründen deaktiviert, da FHEM-Events an jeden(!) notify innerhalb FHEM gemeldet werden. Dies kann u.U. zu Verzögerungen bei dem ZonePlayer führen.&lt;br /&gt;
**&amp;lt;code&amp;gt;Mute&amp;lt;/code&amp;gt;: Enthält, wenn eines der beiden Attribute &amp;lt;code&amp;gt;minVolume&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;maxVolume&amp;lt;/code&amp;gt; gesetzt wurde, den aktuellen Zustand des Mute. &amp;lt;br /&amp;gt;Wenn zusätzlich noch das Attribut &amp;lt;code&amp;gt;generateVolumeEvent&amp;lt;/code&amp;gt; gesetzt ist, erzeugt jede Änderung des Mute-Zustands auch ein FHEM-Event. Standardmäßig ist dies aus Zeitgründen deaktiviert, da FHEM-Events an jeden(!) notify innerhalb FHEM gemeldet werden. Dies kann u.U. zu Verzögerungen bei dem ZonePlayer führen.&lt;br /&gt;
**&amp;lt;code&amp;gt;numberOfTracks&amp;lt;/code&amp;gt;: Anzahl der momentan in der Abspielliste befindlichen Titel&lt;br /&gt;
**&amp;lt;code&amp;gt;OutputFixed&amp;lt;/code&amp;gt;: Enthält, wenn eines der beiden Attribute &amp;lt;code&amp;gt;minVolume&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;maxVolume&amp;lt;/code&amp;gt; gesetzt wurde, den aktuellen Zustand des OutputFixed. &amp;lt;br /&amp;gt;Wenn zusätzlich noch das Attribut &amp;lt;code&amp;gt;generateVolumeEvent&amp;lt;/code&amp;gt; gesetzt ist, erzeugt jede Änderung des OutputFixed-Zustands auch ein FHEM-Event. Standardmäßig ist dies aus Zeitgründen deaktiviert, da FHEM-Events an jeden(!) notify innerhalb FHEM gemeldet werden. Dies kann u.U. zu Verzögerungen bei dem ZonePlayer führen.&lt;br /&gt;
**&amp;lt;code&amp;gt;QueueDuration&amp;lt;/code&amp;gt;: Enthält die Abspieldauer der aktuellen Abspielliste als Zeitangabe. &#039;&#039;Achtung!&#039;&#039;: Nicht jeder Titel wird mit Abspiellänge von Sonos geliefert, sodass dieser Wert auch ungenau sein kann.&lt;br /&gt;
**&amp;lt;code&amp;gt;QueueDurationSec&amp;lt;/code&amp;gt;: Enthält die Abspieldauer der aktuellen Abspielliste in Sekunden. &#039;&#039;Achtung!&#039;&#039;: Nicht jeder Titel wird mit Abspiellänge von Sonos geliefert, sodass dieser Wert auch ungenau sein kann.&lt;br /&gt;
**&amp;lt;code&amp;gt;QueueHash&amp;lt;/code&amp;gt;: Enthält den Hashwert der aktuellen Abspielliste. Dieser wird für die Bookmarkfunktionalität verwendet&lt;br /&gt;
**&amp;lt;code&amp;gt;Repeat&amp;lt;/code&amp;gt;: Enthält den aktuellen Zustand von Repeat. Wird durch Event des Players aktualisiert (zusammen mit der Titelinformation).&lt;br /&gt;
**&amp;lt;code&amp;gt;RepeatOne&amp;lt;/code&amp;gt;: Enthält den aktuellen Zustand von RepeatOne. Wird durch Event des Players aktualisiert (zusammen mit der Titelinformation).&lt;br /&gt;
**&amp;lt;code&amp;gt;Shuffle&amp;lt;/code&amp;gt;: Enthält den aktuellen Zustand von Shuffle. Wird durch Event des Players aktualisiert (zusammen mit der Titelinformation).&lt;br /&gt;
**&amp;lt;code&amp;gt;SleepTimer&amp;lt;/code&amp;gt;: Enthält die Restzeit des Sleeptimers. Diese Information wird vom Player beim Setzen und Ablaufen gemeldet, und erzeugt somit ein Event zu Beginn und Ende des Timers. Während der Timer läuft, wird hier nichts aktualisiert. Man muss also, falls benötigt, selber die verbleibende Restzeit mittels des Readings-Timestamps und diesem Wert ermitteln.&amp;lt;br /&amp;gt;Diese Information wird automatisch aktualisiert, wenn sie bei einem Player verändert wird.&amp;lt;br /&amp;gt;Beim Ablaufen des Timers wird vom Player eine Aktualisierung auf den Wert &#039;&#039;&#039;off&#039;&#039;&#039; gesendet. Darauf kann in einem Notify-Event geprüft werden.&lt;br /&gt;
**&amp;lt;code&amp;gt;SleepTimerVersion&amp;lt;/code&amp;gt;: Dieses Reading enthält die Information über die aktuelle Version der gespeicherten &#039;&#039;SleepTimer&#039;&#039;-Informationen. Diese Information wird Hauptsächlich intern benötigt, um beurteilen zu können, ob das Reading &#039;&#039;SleepTimer&#039;&#039; neu geladen werden muss.&lt;br /&gt;
**&amp;lt;code&amp;gt;transportState&amp;lt;/code&amp;gt;: Aktueller Abspielstatus. Kann &amp;quot;ERROR&amp;quot;, &amp;quot;STOPPED&amp;quot;, &amp;quot;PLAYING&amp;quot; oder &amp;quot;PAUSED_PLAYBACK&amp;quot; sein. Wobei ERROR heißt, dass es keine Verbindung zum Player gibt.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Hinweis&#039;&#039;: Bei Gruppen hat nur der Gruppenmaster den korrekten Abspielzustand. Alle Slaveplayer enthalten immer den Zustand &amp;quot;PLAYING&amp;quot;, da sie ja gerade den Masterplayer &amp;quot;abspielen&amp;quot;, und keine Information dazu haben, ob und was abgespielt wird.&lt;br /&gt;
**&amp;lt;code&amp;gt;Treble&amp;lt;/code&amp;gt;: Enthält im Normalfall den am Player eingestellten Treblelevel zum Zeitpunkt der Erkennung. Wenn eines der beiden Attribute &amp;lt;code&amp;gt;minVolume&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;maxVolume&amp;lt;/code&amp;gt; gesetzt wurde, wird dieser Treblelevel bei jeder Änderung am Player mit aktualisiert. &amp;lt;br /&amp;gt;Wenn zusätzlich noch das Attribut &amp;lt;code&amp;gt;generateVolumeEvent&amp;lt;/code&amp;gt; gesetzt ist, erzeugt jede Änderung des Treblelevels auch ein FHEM-Event. Standardmäßig ist dies aus Zeitgründen deaktiviert, da FHEM-Events an jeden(!) notify innerhalb FHEM gemeldet werden. Dies kann u.U. zu Verzögerungen bei dem ZonePlayer führen.&lt;br /&gt;
**&amp;lt;code&amp;gt;Volume&amp;lt;/code&amp;gt;: Enthält im Normalfall die am Player eingestellte Laustärke zum Zeitpunkt der Erkennung. Wenn eines der beiden Attribute &amp;lt;code&amp;gt;minVolume&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;maxVolume&amp;lt;/code&amp;gt; gesetzt wurde, wird diese Lautstärke bei jeder Änderung am Player mit aktualisiert. &amp;lt;br /&amp;gt;Wenn zusätzlich noch das Attribut &amp;lt;code&amp;gt;generateVolumeEvent&amp;lt;/code&amp;gt; gesetzt ist, erzeugt jede Änderung der Lautstärke auch ein FHEM-Event. Standardmäßig ist dies aus Zeitgründen deaktiviert, da FHEM-Events an jeden(!) notify innerhalb FHEM gemeldet werden. Dies kann u.U. zu Verzögerungen bei dem ZonePlayer führen.&lt;br /&gt;
*Infos zum aktuellen Titel&lt;br /&gt;
**&amp;lt;code&amp;gt;currentTitle&amp;lt;/code&amp;gt;: Titelbezeichnung des aktuellen Titels&lt;br /&gt;
**&amp;lt;code&amp;gt;currentArtist&amp;lt;/code&amp;gt;: Interpret des aktuellen Titels&lt;br /&gt;
**&amp;lt;code&amp;gt;currentAlbum&amp;lt;/code&amp;gt;: Albumname des aktuellen Titel&lt;br /&gt;
**&amp;lt;code&amp;gt;currentAlbumArtist&amp;lt;/code&amp;gt;: Interpret des Albums. Kann z.B. auch &amp;quot;(compilations)&amp;quot; sein.&lt;br /&gt;
**&amp;lt;code&amp;gt;currentEnqueuedTransportHandle&amp;lt;/code&amp;gt;: Handle, welches zur Weitergabe der aktuellen Quelle des aktuellen Titels verwendet werden kann.&lt;br /&gt;
**&amp;lt;code&amp;gt;currentEnqueuedTransportURI&amp;lt;/code&amp;gt;: Enthält den Identifier der Quelle des aktuellen Titels. Z.B. die ID der Spotify-Playliste&lt;br /&gt;
**&amp;lt;code&amp;gt;currentFavouriteName&amp;lt;/code&amp;gt;: Enthält den Namen des Quellfavoriten, der den aktuellen Titel zur Liste hinzugefügt hat. Dazu müssen die Favoriten mittels &amp;quot;get FavouritesWithCover&amp;quot; ermittelt worden sein, und die Liste im Reading &amp;quot;Favourites&amp;quot; zur Verfügung stehen.&lt;br /&gt;
**&amp;lt;code&amp;gt;currentPlaylistName&amp;lt;/code&amp;gt;: Enthält den Namen der Quellplaylist, die den aktuellen Titel zur Liste hinzugefügt hat. Dazu müssen die Playlisten mittels &amp;quot;get PlaylistsWithCover&amp;quot; ermittelt worden sein, und die Liste im Reading &amp;quot;Playlists&amp;quot; zur Verfügung stehen.&lt;br /&gt;
**&amp;lt;code&amp;gt;currentRadioName&amp;lt;/code&amp;gt;: Enthält den Namen des Quellradios, der den aktuellen Titel zur Liste hinzugefügt hat. Dazu müssen die Radios mittels &amp;quot;get RadiosWithCover&amp;quot; ermittelt worden sein, und die Liste im Reading &amp;quot;Radios&amp;quot; zur Verfügung stehen.&lt;br /&gt;
**&amp;lt;code&amp;gt;currentOriginalTrackNumber&amp;lt;/code&amp;gt;: Nummer des aktuellen Titels bezogen auf das Album&lt;br /&gt;
**&amp;lt;code&amp;gt;currentSource&amp;lt;/code&amp;gt;: Enthält die aktuelle Quelle zum aktuellen Titel. Bei Spotify z.B. die gewählte Playliste oder das Album, oder die gewählte Sonos-Playliste.&lt;br /&gt;
**&amp;lt;code&amp;gt;currentTrack&amp;lt;/code&amp;gt;: Nummer des aktuellen Titels in der Abspielliste&lt;br /&gt;
**&amp;lt;code&amp;gt;currentTrackHandle&amp;lt;/code&amp;gt;: Handle des aktuellen Titels, welches zur Weitergabe geeignet ist.&lt;br /&gt;
**&amp;lt;code&amp;gt;currentTrackURI&amp;lt;/code&amp;gt;: Dateipfad des aktuellen Titels in der Abspielliste. Gültige Formate siehe PlayURI.&lt;br /&gt;
**&amp;lt;code&amp;gt;currentTrackDuration&amp;lt;/code&amp;gt;: Länge des aktuellen Titels im Format H:MM:SS&lt;br /&gt;
**&amp;lt;code&amp;gt;currentTrackDurationSec&amp;lt;/code&amp;gt;: Länge des aktuellen Titels in Sekunden.&lt;br /&gt;
**&amp;lt;code&amp;gt;currentTrackPosition&amp;lt;/code&amp;gt;: Position innerhalb des aktuellen Titels im Format H:MM:SS. Wird zum Zeitpunkt einer Änderung des Abspielstatus (Play, Pause, Stop, Nächster Titel, usw.) aktualisiert.&lt;br /&gt;
**&amp;lt;code&amp;gt;currentTrackPositionSimulated&amp;lt;/code&amp;gt;: Simulierte und laufend aktualisierte Abspielposition des Titels im Format H:MM:SS.&lt;br /&gt;
**&amp;lt;code&amp;gt;currentTrackPositionSimulatedSec&amp;lt;/code&amp;gt;: Simulierte und laufend aktualisierte Abspielposition des Titels in Sekunden.&lt;br /&gt;
**&amp;lt;code&amp;gt;currentTrackPositionSimulatedPercent&amp;lt;/code&amp;gt;: Simulierte und laufend aktualisierte Abspielposition des Titels in Prozent.&lt;br /&gt;
**&amp;lt;code&amp;gt;currentTrackProvider&amp;lt;/code&amp;gt;: &#039;Quelle&#039; der aktuellen Wiedergabe. Enthält z.B. &#039;&#039;Spotify&#039;&#039; oder &#039;&#039;Bibliothek&#039;&#039;&lt;br /&gt;
**&amp;lt;code&amp;gt;currentTrackProviderIconQuadraticURL&amp;lt;/code&amp;gt;: Enthält eine URL zu einem quadratischen TrackProvider-Icon.&lt;br /&gt;
**&amp;lt;code&amp;gt;currentTrackProviderIconRoundURL&amp;lt;/code&amp;gt;: Enthält eine URL zu einem runden TrackProvider-Icon.&lt;br /&gt;
**&amp;lt;code&amp;gt;currentSender&amp;lt;/code&amp;gt;: Senderbezeichnung, wenn es ein Radiostream ist&lt;br /&gt;
**&amp;lt;code&amp;gt;currentSenderCurrent&amp;lt;/code&amp;gt;: Zusatzinformationen zur Radiosendung, meist der Programmtitel wie &#039;Pop&amp;amp;Weck&#039;&lt;br /&gt;
**&amp;lt;code&amp;gt;currentSenderInfo&amp;lt;/code&amp;gt;: Zusatzinformationen zur Radiosendung, meist der Titel des aktuellen Liedes&lt;br /&gt;
**&amp;lt;code&amp;gt;currentAlbumArtURI&amp;lt;/code&amp;gt;: Relativer Verzeichnis-Pfad im lokalen FHEM (physisch). Beginnt momentan mit &amp;quot;www&amp;quot;&lt;br /&gt;
**&amp;lt;code&amp;gt;currentAlbumArtURL&amp;lt;/code&amp;gt;: Kompletter Pfad für den eigenen Download der Coverdatei des aktuellen Titels oder für die Angabe in einer HTML-IMG-Source.&lt;br /&gt;
*Infos zum nächsten Titel&lt;br /&gt;
**&amp;lt;code&amp;gt;nextTitle&amp;lt;/code&amp;gt;: Titelbezeichnung des nächsten Titels&lt;br /&gt;
**&amp;lt;code&amp;gt;nextArtist&amp;lt;/code&amp;gt;: Interpret des nächsten Titels&lt;br /&gt;
**&amp;lt;code&amp;gt;nextAlbum&amp;lt;/code&amp;gt;: Albumname des nächsten Titel&lt;br /&gt;
**&amp;lt;code&amp;gt;nextAlbumArtist&amp;lt;/code&amp;gt;: Interpret des Albums des nächsten Titels. Kann z.B. auch &amp;quot;(compilations)&amp;quot; sein.&lt;br /&gt;
**&amp;lt;code&amp;gt;nextOriginalTrackNumber&amp;lt;/code&amp;gt;: Nummer des nächsten Titels bezogen auf das Album&lt;br /&gt;
**&amp;lt;code&amp;gt;nextAlbumArtURI&amp;lt;/code&amp;gt;: Relativer Verzeichnis-Pfad im lokalen FHEM (physisch). Beginnt momentan mit &amp;quot;www&amp;quot;&lt;br /&gt;
**&amp;lt;code&amp;gt;nextAlbumArtURL&amp;lt;/code&amp;gt;: Kompletter Pfad für den eigenen Download der Coverdatei des nächsten Titels oder für die Angabe in einer HTML-IMG-Source.&lt;br /&gt;
**&amp;lt;code&amp;gt;nextTrackHandle&amp;lt;/code&amp;gt;: Handle des nächsten Titels, welches zur Weitergabe geeignet ist.&lt;br /&gt;
**&amp;lt;code&amp;gt;nextTrackURI&amp;lt;/code&amp;gt;: Dateipfad des nächsten Titels in der Abspielliste. Gültige Formate siehe PlayURI.&lt;br /&gt;
**&amp;lt;code&amp;gt;nextTrackDuration&amp;lt;/code&amp;gt;: Länge des nächsten Titels im Format H:MM:SS&lt;br /&gt;
**&amp;lt;code&amp;gt;nextTrackDurationSec&amp;lt;/code&amp;gt;: Länge des nächsten Titels in Sekunden.&lt;br /&gt;
**&amp;lt;code&amp;gt;nextTrackProvider&amp;lt;/code&amp;gt;: &#039;Quelle&#039; der nächsten Wiedergabe. Enthält z.B. &#039;&#039;Spotify&#039;&#039; oder &#039;&#039;Bibliothek&#039;&#039;&lt;br /&gt;
**&amp;lt;code&amp;gt;nextTrackProviderIconQuadraticURL&amp;lt;/code&amp;gt;: Enthält eine URL zu einem quadratischen TrackProvider-Icon.&lt;br /&gt;
**&amp;lt;code&amp;gt;nextTrackProviderIconRoundURL&amp;lt;/code&amp;gt;: Enthält eine URL zu einem runden TrackProvider-Icon.&lt;br /&gt;
*Generierte Informationen&lt;br /&gt;
**&amp;lt;code&amp;gt;infoSummarize1&amp;lt;/code&amp;gt;: Frei zusammenstellbare Informationszeile. Zum Format siehe [InfoSummarize]&lt;br /&gt;
**&amp;lt;code&amp;gt;infoSummarize2&amp;lt;/code&amp;gt;: Frei zusammenstellbare Informationszeile. Zum Format siehe [InfoSummarize]&lt;br /&gt;
**&amp;lt;code&amp;gt;infoSummarize3&amp;lt;/code&amp;gt;: Frei zusammenstellbare Informationszeile. Zum Format siehe [InfoSummarize]&lt;br /&gt;
**&amp;lt;code&amp;gt;infoSummarize4&amp;lt;/code&amp;gt;: Frei zusammenstellbare Informationszeile. Zum Format siehe [InfoSummarize]&lt;br /&gt;
**&amp;lt;code&amp;gt;currentStreamAudio&amp;lt;/code&amp;gt;: Boolean. 1 wenn gerade ein Radiostream läuft, sonst 0. Momentan faktisch Negation zu &amp;lt;currentNormalAudio&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;currentNormalAudio&amp;lt;/code&amp;gt;: Boolean. 1 wenn gerade ein normaler Titel läuft, sonst 0. Momentan faktisch Negation zu &amp;lt;currentStreamAudio&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Attribute von SONOSPLAYER ===&lt;br /&gt;
&#039;&#039;&#039;Hinweis&#039;&#039;&#039;&amp;lt;br /&amp;gt;Die Attribute werden meistens erst bei einem Neustart von FHEM verwendet, da diese dem SubProzess initial zur Verfügung gestellt werden müssen.&lt;br /&gt;
&lt;br /&gt;
*Grundsätzliches&lt;br /&gt;
**&amp;lt;code&amp;gt;disable(0,1)&amp;lt;/code&amp;gt;: Deaktiviert die Verarbeitung von Events dieses Devices&lt;br /&gt;
**&amp;lt;code&amp;gt;generateSomethingChangedEvent(0,1)&amp;lt;/code&amp;gt;: Bestimmt, ob ein Event mit dem Namen &#039;SomethingChanged&#039; generiert werden soll, wenn überhaupt ein Event generiert wurde. Das ist nützlich, wenn man auf eine beliebige Änderung des Player reagieren möchte.&lt;br /&gt;
**&amp;lt;code&amp;gt;generateVolumeEvent(0,1)&amp;lt;/code&amp;gt;: Aktiviert die Generierung eines Events bei Lautstärkeänderungen, wenn mindestens eines der Attribute &amp;lt;code&amp;gt;minVolume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;maxVolume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;minVolumeHeadphone&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;maxVolumeHeadphone&amp;lt;/code&amp;gt; definiert ist. Standardmäßig ist dies deaktiviert (=0), um die Zeitverzögerung so gering wie möglich zu halten.&lt;br /&gt;
**&amp;lt;code&amp;gt;generateVolumeSlider(0,1)&amp;lt;/code&amp;gt;: Aktiviert einen Slider für die Lautstärkeneinstellung auf der Detailansicht. Standardmäßig ist dieser aktiviert (=1).&lt;br /&gt;
**&amp;lt;code&amp;gt;getAlarms(0,1)&amp;lt;/code&amp;gt;: Meldet sich bei Playern für die Aktualisierung von Alarm-Informationen an. Diese werden bei Änderung direkt aktualisiert, und erzeugen dementsprechend ein FHEM-Event. Gleichzeitig wird hiermit die &#039;&#039;&#039;DailyIndexRefreshTime&#039;&#039;&#039; mit aktualisiert.&lt;br /&gt;
**&amp;lt;code&amp;gt;suppressControlButtons(0,1)&amp;lt;/code&amp;gt;: Gibt an, ob die Steuerbuttons unter der Cover-/Titelanzeige angezeigt werden sollen (=1) oder nicht (=0).&lt;br /&gt;
**&amp;lt;code&amp;gt;VolumeStep&amp;lt;/code&amp;gt;: Definiert die Schrittweite für den Aufruf von &amp;lt;code&amp;gt;VolumeU&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;VolumeD&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Informationen generieren&lt;br /&gt;
**&amp;lt;code&amp;gt;generateInfoSummarize1&amp;lt;/code&amp;gt;: Generiert das Reading &#039;InfoSummarize1&#039; mit dem angegebenen Format.&lt;br /&gt;
**&amp;lt;code&amp;gt;generateInfoSummarize2&amp;lt;/code&amp;gt;: Generiert das Reading &#039;InfoSummarize2&#039; mit dem angegebenen Format.&lt;br /&gt;
**&amp;lt;code&amp;gt;generateInfoSummarize3&amp;lt;/code&amp;gt;: Generiert das Reading &#039;InfoSummarize3&#039; mit dem angegebenen Format.&lt;br /&gt;
**&amp;lt;code&amp;gt;generateInfoSummarize4&amp;lt;/code&amp;gt;: Generiert das Reading &#039;InfoSummarize4&#039; mit dem angegebenen Format.&lt;br /&gt;
**&amp;lt;code&amp;gt;getTitleInfoFromMaster(0,1)&amp;lt;/code&amp;gt;: Bringt das Device dazu, seine aktuellen Abspielinformationen vom aktuellen Gruppenmaster zu holen, wenn es einen solchen gibt.&lt;br /&gt;
**&amp;lt;code&amp;gt;simulateCurrentTrackPosition(0,1)&amp;lt;/code&amp;gt;: Bringt das Device dazu, seine aktuelle Abspielposition simuliert weiterlaufen zu lassen. Dazu werden die Readings &amp;lt;code&amp;gt;currentTrackPositionSimulated&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;currentTrackPositionSimulatedSec&amp;lt;/code&amp;gt; gesetzt. Gleichzeitig wird auch das Reading &amp;lt;code&amp;gt;currentTrackPositionSimulatedPercent&amp;lt;/code&amp;gt; (zwischen 0.0 und 100.0) gesetzt.&lt;br /&gt;
**&amp;lt;code&amp;gt;simulateCurrentTrackPositionPercentFormat &amp;amp;lt;Format&amp;amp;gt;&amp;lt;/code&amp;gt;: Definiert das Format für die sprintf-Prozentausgabe im Reading &amp;lt;code&amp;gt;currentTrackPositionSimulatedPercent&amp;lt;/code&amp;gt;.&lt;br /&gt;
**&amp;lt;code&amp;gt;stateVariable(TransportState,NumberOfTracks,Track,TrackDuration,Title,Artist,Album,&amp;lt;br /&amp;gt;&lt;br /&gt;
	OriginalTrackNumber,AlbumArtist,Sender,SenderCurrent,SenderInfo,StreamAudio,NormalAudio,&amp;lt;br /&amp;gt;&lt;br /&gt;
	AlbumArtURI,nextTrackDuration,nextTrackURI,nextAlbumArtURI,nextTitle,nextArtist,&amp;lt;br /&amp;gt;&lt;br /&gt;
	nextAlbum,nextAlbumArtist,nextOriginalTrackNumber,Volume,Mute,Shuffle,Repeat,RepeatOne,CrossfadeMode,&amp;lt;br /&amp;gt;&lt;br /&gt;
	Balance,HeadphoneConnected,SleepTimer,Presence,RoomName,RoomNameAlias,SaveRoomName,PlayerType,Location,&amp;lt;br /&amp;gt;&lt;br /&gt;
	SoftwareRevision,SerialNum,InfoSummarize1,InfoSummarize2,InfoSummarize3,InfoSummarize4)&amp;lt;/code&amp;gt;: Legt fest, welcher Variablenwert in den State geschrieben werden soll.&lt;br /&gt;
*Steueroptionen&lt;br /&gt;
**&amp;lt;code&amp;gt;maxVolume(0..100)&amp;lt;/code&amp;gt;: Legt die obere Grenze für die einstellbare Lautstärke dieses ZonePlayers fest. Diese kann auch mit keinem Controller überschritten werden, da diese überwacht wird.&lt;br /&gt;
***Wenn eine untere oder obere Grenze festgelegt wurde, so wird das Reading &#039;&#039;&#039;Volume&#039;&#039;&#039; am entsprechenden SonosPlayer bei jeder Änderung am Player aktualisiert.&amp;lt;br /&amp;gt;Möchte man also immer die aktuelle Lautstärke kennen, aber keine Enschränkung machen, dann sollte der Wert von &amp;lt;code&amp;gt;minVolume&amp;lt;/code&amp;gt; auf &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;maxVolume&amp;lt;/code&amp;gt; auf &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; gesetzt werden. Desweiteren werden gleichzeitig auch Änderungen an der Balance aktualisiert, da diese mit übertragen werden.&lt;br /&gt;
***&#039;&#039;&#039;Achtung!&#039;&#039;&#039;: Wenn eine untere oder obere Grenze festgelegt wird, werden für Lautstärkenänderungen auch Events erzeugt. Es ist unbedingt darauf zu achten, dass etwaige Notify-Definitionen zügig bearbeitet werden, da sonst das Sonos-System träge werden könnte.&lt;br /&gt;
***&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Dieses Attribut kann auch im laufenden Betrieb angepasst werden. Die Einhaltung der Grenzen wird umgehend sichergestellt.&amp;lt;br /&amp;gt;Bedingung ist nur, dass zum Startzeitpunkt des SubProzesses eine Grenze festgelegt sein musste, damit die entsprechenden Listener angemeldet werden.&lt;br /&gt;
**&amp;lt;code&amp;gt;minVolume(0..100)&amp;lt;/code&amp;gt;: Legt die untere Grenze für die einstellbare Lautstärke dieses ZonePlayers fest. Diese kann auch mit keinem Controller unterschritten werden, da diese überwacht wird.&lt;br /&gt;
***Wenn eine untere oder obere Grenze festgelegt wurde, so wird das Reading &#039;&#039;&#039;Volume&#039;&#039;&#039; am entsprechenden SonosPlayer bei jeder Änderung am Player aktualisiert.&amp;lt;br /&amp;gt;Möchte man also immer die aktuelle Lautstärke kennen, aber keine Enschränkung machen, dann sollte der Wert von &amp;lt;code&amp;gt;minVolume&amp;lt;/code&amp;gt; auf &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;maxVolume&amp;lt;/code&amp;gt; auf &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; gesetzt werden. Desweiteren werden gleichzeitig auch Änderungen an der Balance aktualisiert, da diese mit übertragen werden.&lt;br /&gt;
***&#039;&#039;&#039;Achtung!&#039;&#039;&#039;: Wenn eine untere oder obere Grenze festgelegt wird, werden für Lautstärkenänderungen auch Events erzeugt. Es ist unbedingt darauf zu achten, dass etwaige Notify-Definitionen zügig bearbeitet werden, da sonst das Sonos-System träge werden könnte.&lt;br /&gt;
***&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Dieses Attribut kann auch im laufenden Betrieb angepasst werden. Die Einhaltung der Grenzen wird umgehend sichergestellt.&amp;lt;br /&amp;gt;Bedingung ist nur, dass zum Startzeitpunkt des SubProzesses eine Grenze festgelegt sein musste, damit die entsprechenden Listener angemeldet werden.&lt;br /&gt;
**&amp;lt;code&amp;gt;maxVolumeHeadphone(0..100)&amp;lt;/code&amp;gt;: Legt die obere Grenze für die einstellbare Lautstärke dieses ZonePlayers im Kopfhörerbetrieb fest.&lt;br /&gt;
***&#039;&#039;&#039;Hinweis!&#039;&#039;&#039;: Es gelten die gleichen Bedingungen und Hinweise wie bei &amp;lt;code&amp;gt;maxVolume&amp;lt;/code&amp;gt;.&lt;br /&gt;
**&amp;lt;code&amp;gt;minVolumeHeadphone(0..100)&amp;lt;/code&amp;gt;: Legt die untere Grenze für die einstellbare Lautstärke dieses ZonePlayers im Kopfhörerbetrieb fest.&lt;br /&gt;
***&#039;&#039;&#039;Hinweis!&#039;&#039;&#039;: Es gelten die gleichen Bedingungen und Hinweise wie bei &amp;lt;code&amp;gt;minVolume&amp;lt;/code&amp;gt;.&lt;br /&gt;
**&amp;lt;code&amp;gt;buttonEvents &amp;amp;lt;Time:Pattern&amp;amp;gt;[ &amp;amp;lt;Time:Pattern&amp;amp;gt; ...]&amp;lt;/code&amp;gt;: Definiert, dass bei einer bestimten Tastenfolge am Player ein Event erzeugt werden soll. Die Definition der Events erfolgt als Tupel: Der erste Teil vor dem Doppelpunkt ist die Zeit in Sekunden, die berücksichtigt werden soll, der zweite Teil hinter dem Doppelpunkt definiert die Abfolge der Buttons, die für dieses Event notwendig sind.&lt;br /&gt;
***Folgende Button-Kürzel sind zulässig:&lt;br /&gt;
****&#039;&#039;&#039;M&#039;&#039;&#039;: Der Mute-Button (&#039;&#039;&#039;Achtung&#039;&#039;&#039;: Der Mute-Button am SonosPlayer ist seit Firmware 4.2 ein Play/Pause/Next-Button, der kein Mute-Event mehr erzeugt, meine Beschwerde an Sonos, dass es nicht benutzerfreundlich ist, einen Mute-Symbolisierten Button mit Play/Pause zu belegen, wurde im großen und ganzen ignoriert)&lt;br /&gt;
****&#039;&#039;&#039;H&#039;&#039;&#039;: Die Headphone-Buchse&lt;br /&gt;
****&#039;&#039;&#039;U&#039;&#039;&#039;: Up-Button (Lautstärke Hoch)&lt;br /&gt;
****&#039;&#039;&#039;D&#039;&#039;&#039;: Down-Button (Lautstärke Runter)&lt;br /&gt;
***Das Event, das geworfen wird, heißt &amp;lt;code&amp;gt;ButtonEvent&amp;lt;/code&amp;gt;, der Wert ist die definierte Tastenfolge&amp;lt;br /&amp;gt;Z.B.: &amp;lt;code&amp;gt;2:MM&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Hier wird definiert, dass ein Event erzeugt werden soll, wenn innerhalb von 2 Sekunden zweimal die Mute-Taste gedrückt wurde. Das damit erzeugte Event hat dann den Namen &amp;lt;code&amp;gt;ButtonEvent&amp;lt;/code&amp;gt;, und den Wert &amp;lt;code&amp;gt;MM&amp;lt;/code&amp;gt;.&lt;br /&gt;
**&amp;lt;code&amp;gt;saveSleeptimerInAction(0,1)&amp;lt;/code&amp;gt;: Wenn gesetzt, wird ein etwaig gesetztes Attribut &amp;quot;stopSleeptimerInAction&amp;quot; ignoriert.&lt;br /&gt;
**&amp;lt;code&amp;gt;stopSleeptimerInAction(0,1)&amp;lt;/code&amp;gt;: Wenn gesetzt, wird bei einem Wechsel des transportState auf &amp;quot;PAUSED_PLAYBACK&amp;quot; oder &amp;quot;STOPPED&amp;quot; ein etwaig definierter SleepTimer deaktiviert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Get-Befehle an den SONOSPLAYER ===&lt;br /&gt;
&#039;&#039;&#039;Hinweis!&#039;&#039;&#039;: Es wurden ein paar Get-Möglichkeiten entfernt. Diese Befehle (wie z.B. &#039;&#039;Volume&#039;&#039;) können mittlerweile direkt geliefert werden, und müssen nicht angefordert werden. Übrig geblieben sind nur noch solche Anweisungen, die Informationen beschaffen, die nicht automatisch geliefert werden (können).&lt;br /&gt;
*Grundsätzliches&lt;br /&gt;
**&amp;lt;code&amp;gt;Alarm &amp;lt;ID&amp;gt;&amp;lt;/code&amp;gt;: Ausnahmefall. Diese Get-Anweisung liefert direkt ein Hash zurück, in welchem die Informationen des Alarms mit der gegebenen ID enthalten sind. Es ist die Kurzform für &amp;lt;code&amp;gt;eval(ReadingsVal(&amp;lt;Devicename&amp;gt;, &#039;Alarmlist&#039;, ()))-&amp;gt;{&amp;lt;ID&amp;gt;};&amp;lt;/code&amp;gt;, damit sich nicht jeder ausdenken muss, wie er jetzt am einfachsten an die Alarm-Informationen rankommen kann.&lt;br /&gt;
**&amp;lt;code&amp;gt;EthernetPortStatus &amp;lt;PortNumber&amp;gt;&amp;lt;/code&amp;gt;: Liefert den Ethernet-Portstatus des gegebenen Ports (&#039;0&#039; oder &#039;1&#039;). Kann &#039;Active&#039; oder &#039;Inactive&#039; liefern.&lt;br /&gt;
**&amp;lt;code&amp;gt;PossibleRoomIcons&amp;lt;/code&amp;gt;: Liefert eine Liste aller möglichen RoomIcon-Bezeichnungen zurück.&lt;br /&gt;
**&amp;lt;code&amp;gt;SupportLinks&amp;lt;/code&amp;gt;: Ausnahmefall. Diese Get-Anweisung liefert eine Liste mit passenden Links zu den Supportseiten des Player.&lt;br /&gt;
**&amp;lt;code&amp;gt;WifiPortStatus&amp;lt;/code&amp;gt;: Liefert den Wifi-Portstatus. Kann &#039;Active&#039; oder &#039;Inactive&#039; liefern.&lt;br /&gt;
*Listen&lt;br /&gt;
**&amp;lt;code&amp;gt;Favourites&amp;lt;/code&amp;gt;: Liefert eine Liste mit den Namen aller gespeicherten Sonos-Favoriten. Das Format der Liste ist eine Komma-Separierte Liste, bei der die Namen in doppelten Anführungsstrichen stehen. z.B. &amp;quot;Liste 1&amp;quot;,&amp;quot;Eintrag 2&amp;quot;,&amp;quot;Test&amp;quot;&lt;br /&gt;
**&amp;lt;code&amp;gt;FavouritesWithCovers&amp;lt;/code&amp;gt;: Liefert die Stringrepräsentation eines Hash mit den Namen und Covern aller gespeicherten Sonos-Favoriten. Z.B.: {&#039;FV:2/22&#039; =&amp;gt; {&#039;Cover&#039; =&amp;gt; &#039;urlzumcover&#039;, &#039;Title&#039; =&amp;gt; &#039;1. Favorit&#039;}}. Dieser String kann einfach mit &#039;&#039;&#039;eval&#039;&#039;&#039; in eine Perl-Datenstruktur umgewandelt werden.&lt;br /&gt;
**&amp;lt;code&amp;gt;Playlists&amp;lt;/code&amp;gt;: Liefert eine Liste aller gespeicherten Playlists. Diese Anfrage liefert bei allen Zoneplayern die gleiche Liste zurück. Das Format ist eine Komma-Separierte Liste, bei der die Einträge in doppelten Anführungszeichen stehen z.B. &amp;quot;Liste 1&amp;quot;,&amp;quot;Liste 2&amp;quot;,&amp;quot;Test&amp;quot;&lt;br /&gt;
**&amp;lt;code&amp;gt;PlaylistsWithCovers&amp;lt;/code&amp;gt;: Liefert die Stringrepräsentation eines Hash mit den Namen und Covern aller gespeicherten Sonos-Playlisten. Z.B.: {&#039;SQ:14&#039; =&amp;gt; {&#039;Cover&#039; =&amp;gt; &#039;urlzumcover&#039;, &#039;Title&#039; =&amp;gt; &#039;1. Playlist&#039;}}. Dieser String kann einfach mit &#039;&#039;&#039;eval&#039;&#039;&#039; in eine Perl-Datenstruktur umgewandelt werden.&lt;br /&gt;
**&amp;lt;code&amp;gt;Queue&amp;lt;/code&amp;gt;: Liefert eine Liste mit den Namen aller Titel in der aktuellen Abspielliste. Das Format der Liste ist eine Komma-Separierte Liste, bei der die Namen in doppelten Anführungsstrichen stehen. z.B. &amp;quot;1. Liste 1 [0:02:14]&amp;quot;,&amp;quot;2. Eintrag 2 [k.A.]&amp;quot;,&amp;quot;3. Test [0:14:00]&amp;quot;&lt;br /&gt;
**&amp;lt;code&amp;gt;QueueWithCovers&amp;lt;/code&amp;gt;: Liefert die Stringrepräsentation eines Hash mit den Namen und Covern aller Titel der aktuellen Abspielliste. Z.B.: {&#039;Q:0/22&#039; =&amp;gt; {&#039;Cover&#039; =&amp;gt; &#039;urlzumcover&#039;, &#039;Title&#039; =&amp;gt; &#039;1. Titel&#039;}}. Dieser String kann einfach mit &#039;&#039;&#039;eval&#039;&#039;&#039; in eine Perl-Datenstruktur umgewandelt werden.&lt;br /&gt;
**&amp;lt;code&amp;gt;Radios&amp;lt;/code&amp;gt;: Liefert eine Liste aller gespeicherten Radiosender (Favoriten). Diese Anfrage liefert bei allen Zoneplayern die gleiche Liste zurück. Das Format ist eine Komma-Separierte Liste, bei der die Einträge in doppelten Anführungszeichen stehen z.B. &amp;quot;Sender 1&amp;quot;,&amp;quot;Sender 2&amp;quot;,&amp;quot;Test&amp;quot;&lt;br /&gt;
**&amp;lt;code&amp;gt;RadiosWithCovers&amp;lt;/code&amp;gt;: Liefert die Stringrepräsentation eines Hash mit den Namen und Covern aller gespeicherten Sonos-Radiofavoriten. Z.B.: {&#039;R:0/0/2&#039; =&amp;gt; {&#039;Cover&#039; =&amp;gt; &#039;urlzumcover&#039;, &#039;Title&#039; =&amp;gt; &#039;1. Radiosender&#039;}}. Dieser String kann einfach mit &#039;&#039;&#039;eval&#039;&#039;&#039; in eine Perl-Datenstruktur umgewandelt werden.&lt;br /&gt;
**&amp;lt;code&amp;gt;SearchlistCategories&amp;lt;/code&amp;gt;: Liefert eine Liste mit allen verfügbaren Kategorien, die beim Set-Befehl &#039;&#039;&#039;LoadSearchlist&#039;&#039;&#039; verwendet werden können. Diese Liste kann dynamisch durch Sonos erweitert werden.&lt;br /&gt;
*Informationen zum aktuellen Titel&lt;br /&gt;
**&amp;lt;code&amp;gt;CurrentTrackPosition&amp;lt;/code&amp;gt;: Liefert die aktuelle Zeitposition im Lied&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Set-Befehle an den SONOSPLAYER ===&lt;br /&gt;
&#039;&#039;&#039;Hinweis!&#039;&#039;&#039;: Alle Set-Befehle liefern kein direktes Ergebnis zurück. Sollte ein Ergebnis generiert werden (meistens eine Statusmeldung, bzw. was genau getan wurde), so landet dies nach der Ausführung in dem Reading &amp;lt;code&amp;gt;LastActionResult&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Grundsätzliche Einstellungen&lt;br /&gt;
**&amp;lt;code&amp;gt;Alarm &amp;lt;Create|Update|Delete|Enable|Disable&amp;gt; &amp;lt;ID[,ID]|All&amp;gt; &amp;lt;Datenhash&amp;gt;&amp;lt;/code&amp;gt;: Diese Anweisung wird für die Bearbeitung der Alarme verwendet:&lt;br /&gt;
***&#039;&#039;&#039;Create&#039;&#039;&#039;: Erzeugt einen neuen Alarm-Eintrag mit den übergebenen Hash-Daten. Der Rückgabewert ist die ID des neuen Alarms.&lt;br /&gt;
***&#039;&#039;&#039;Update&#039;&#039;&#039;: Aktualisiert die Alarme mit den übergebenen IDs und den angegebenen Hash-Daten.&lt;br /&gt;
***&#039;&#039;&#039;Delete&#039;&#039;&#039;: Löscht die Alarm-Einträge mit den übergebenen IDs.&lt;br /&gt;
***&#039;&#039;&#039;Enable&#039;&#039;&#039;: Aktiviert die Alarm-Einträge mit den übergebenen IDs.&lt;br /&gt;
***&#039;&#039;&#039;Disable&#039;&#039;&#039;: Deaktiviert die Alarm-Einträge mit den übergebenen IDs.&lt;br /&gt;
***&#039;&#039;Hinweis&#039;&#039;: Bei Angabe des Worts &#039;&#039;All&#039;&#039; als ID werden alle, diesem Player zugeordneten, Alarme verarbeitet.&lt;br /&gt;
***&#039;&#039;&#039;Datenhash&#039;&#039;&#039;: Das Format ist ein Perl-Hash und wird mittels der eval-Funktion interpretiert. Eine Beschreibung befindet sich bei der Dokumentation des Readings &#039;&#039;&#039;AlarmList&#039;&#039;&#039; oder den folgenden Beispielen.&lt;br /&gt;
***&#039;&#039;&#039;Beispiele&#039;&#039;&#039;:&lt;br /&gt;
****&amp;lt;code&amp;gt;set Sonos_Wohnzimmer Alarm Create 0 { Enabled =&amp;amp;gt; 1, Volume =&amp;amp;gt; 35, StartTime =&amp;amp;gt; &#039;00:00:00&#039;, Duration =&amp;amp;gt; &#039;00:15:00&#039;, Repeat =&amp;amp;gt; 0, Shuffle =&amp;amp;gt; 0, ProgramURI =&amp;amp;gt; &#039;x-rincon-buzzer:0&#039;, ProgramMetaData =&amp;amp;gt; &#039; &#039;, Recurrence_Once =&amp;amp;gt; 0, Recurrence_Monday =&amp;amp;gt; 1, Recurrence_Tuesday =&amp;amp;gt; 1, Recurrence_Wednesday =&amp;amp;gt; 1, Recurrence_Thursday =&amp;amp;gt; 1, Recurrence_Friday =&amp;amp;gt; 1, Recurrence_Saturday =&amp;amp;gt; 0, Recurrence_Sunday =&amp;amp;gt; 0, IncludeLinkedZones =&amp;amp;gt; 0 }&amp;lt;/code&amp;gt;: Erzeugt einen neuen Alarm mit den angegebenen Informationen. Die neue ID wird als Ergebnis zurückgegeben.&lt;br /&gt;
****&amp;lt;code&amp;gt;set Sonos_Wohnzimmer Alarm Update 17 { Shuffle =&amp;amp;gt; 1 }&amp;lt;/code&amp;gt;: Aktualisiert den Alarm mit der ID &#039;&#039;17&#039;&#039;, und passt dort Shuffle auf &#039;&#039;Aktiv&#039;&#039; an.&lt;br /&gt;
****&amp;lt;code&amp;gt;set Sonos_Wohnzimmer Alarm Delete 17&amp;lt;/code&amp;gt;: Löscht den Alarm mit der ID &#039;&#039;17&#039;&#039;.&lt;br /&gt;
**&amp;lt;code&amp;gt;AudioDelay &amp;amp;lt;Level&amp;amp;gt;&amp;lt;/code&amp;gt;: Setzt das AudioDelay der Playbar auf den angegebenen Wert. Der Wert kann zwischen 0 und 5 liegen.&lt;br /&gt;
**&amp;lt;code&amp;gt;AudioDelayLeftRear &amp;amp;lt;Level&amp;amp;gt;&amp;lt;/code&amp;gt;: Setzt den AudioDelayLeftRear des Players auf den angegebenen Wert. Der Wert kann zwischen 0 und 2 liegen. Wobei die Werte folgende Bedeutung haben: 0: &amp;gt;3m, 1: &amp;gt;0.6m und &amp;lt;3m, 2: &amp;lt;0.6m&lt;br /&gt;
**&amp;lt;code&amp;gt;AudioDelayRightRear &amp;amp;lt;Level&amp;amp;gt;&amp;lt;/code&amp;gt;: Setzt den AudioDelayRightRear des Players auf den angegebenen Wert. Der Wert kann zwischen 0 und 2 liegen. Wobei die Werte folgende Bedeutung haben: 0: &amp;gt;3m, 1: &amp;gt;0.6m und &amp;lt;3m, 2: &amp;lt;0.6m&lt;br /&gt;
**&amp;lt;code&amp;gt;ButtonLockState(0,1)&amp;lt;/code&amp;gt;: Setzt den aktuellen Button-Sperr-Zustand.&lt;br /&gt;
**&amp;lt;code&amp;gt;DailyIndexRefreshTime &amp;lt;Timestring&amp;gt;&amp;lt;/code&amp;gt;: Legt die aktuell gültige &#039;&#039;DailyIndexRefreshTime&#039;&#039; fest, zu der der Medienindex neu aufgebaut werden soll. Der Wert muss ein kompletter Zeitstempel sein (HH:MM:SS).&lt;br /&gt;
**&amp;lt;code&amp;gt;DialogLevel &amp;lt;Level&amp;gt;&amp;lt;/code&amp;gt;: Legt den Zustand der Sprachverbesserung an der Playbar fest.&lt;br /&gt;
**&amp;lt;code&amp;gt;ExportSonosBibliothek &amp;lt;Filename&amp;gt;&amp;lt;/code&amp;gt;: Exportiert eine Datei mit der textuellen Darstellung eines Struktur- und Titelhashs, das die komplette Navigationsstruktur aus der Sonos-Bibliothek abbildet. Dieser Prozess braucht viel CPU-Zeit und Arbeitsspeicher zum Ermitteln und wegspeichern der Daten.&lt;br /&gt;
***&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Richtwerte bei ca. 22.000 Titeln auf einem Windows-Server mit Intel Core i5 mit 2.8GHz: Laufzeit: ca. 28Min, Arbeitsspeicher: ca. 1GB, Resultierende Datei: ca. 90MB&lt;br /&gt;
**&amp;lt;code&amp;gt;Name&amp;lt;/code&amp;gt;: Legt den Namen der Zone fest.&lt;br /&gt;
**&amp;lt;code&amp;gt;NightMode &amp;lt;State&amp;gt;&amp;lt;/code&amp;gt;: Legt den Zustand des Nachtsounds an der Playbar fest.&lt;br /&gt;
**&amp;lt;code&amp;gt;OutputFixed &amp;lt;State&amp;gt;&amp;lt;/code&amp;gt;: Setzt den OutputFixed-Zustand (die Lautstärkepegelsteuerung des Ausgangs des Players) auf den angegebenen Wert. Der Wert kann on oder off sein. Liefert als Ergebnis den neuen Zustand.&lt;br /&gt;
**&amp;lt;code&amp;gt;Reboot&amp;lt;/code&amp;gt;: Führt für den Zoneplayer einen Neustart durch.&lt;br /&gt;
**&amp;lt;code&amp;gt;ResetAttributesToDefault &amp;lt;DeleteAllOtherAttributes&amp;gt;&amp;lt;/code&amp;gt;: Setzt die Attribute eines Players auf die Voreinstellung zurück, wie sie beim Anlegen des Players gesetzt waren. Wenn der Parameter &amp;quot;DeleteAllOtherAttributes&amp;quot; mit &amp;quot;1&amp;quot; oder &amp;quot;on&amp;quot; angegeben wurde, werden vor dem Setzen alle Attribute gelöscht.&lt;br /&gt;
**&amp;lt;code&amp;gt;RoomIcon&amp;lt;/code&amp;gt;: Legt das Icon für die Zone fest.&lt;br /&gt;
**&amp;lt;code&amp;gt;SnoozeAlarm &amp;amp;lt;Timestring|Seconds&amp;amp;gt;&amp;lt;/code&amp;gt;: Unterbricht eine laufende Alarmwiedergabe für den übergebenen Zeitraum.&lt;br /&gt;
**&amp;lt;code&amp;gt;SubEnable &amp;amp;lt;State&amp;amp;gt;&amp;lt;/code&amp;gt;: Legt den Zustand des Sub-Zustands fest.&lt;br /&gt;
**&amp;lt;code&amp;gt;SubGain &amp;amp;lt;Level&amp;amp;gt;&amp;lt;/code&amp;gt;: Setzt den SubGain auf den angegebenen Wert. Der Wert kann zwischen -15 und 15 liegen.&lt;br /&gt;
**&amp;lt;code&amp;gt;SubPolarity &amp;amp;lt;Level&amp;amp;gt;&amp;lt;/code&amp;gt; Setzt den SubPolarity auf den angegebenen Wert. Der Wert kann zwischen 0 und 2 liegen.&lt;br /&gt;
**&amp;lt;code&amp;gt;SurroundEnable &amp;amp;lt;State&amp;amp;gt;&amp;lt;/code&amp;gt;: Legt den Zustand des Surround-Zustands fest. Liefert den aktuell gültigen Surround-Zustand.&lt;br /&gt;
**&amp;lt;code&amp;gt;SurroundLevel &amp;amp;lt;Level&amp;amp;gt;&amp;lt;/code&amp;gt;: Setzt den Surroundlevel auf den angegebenen Wert. Der Wert kann zwischen -15 und 15 sein.&lt;br /&gt;
**&amp;lt;code&amp;gt;TruePlay &amp;amp;lt;State&amp;amp;gt;&amp;lt;/code&amp;gt;: Setzt den TruePlay-Zustand.&lt;br /&gt;
**&amp;lt;code&amp;gt;Wifi &amp;lt;State&amp;gt;&amp;lt;/code&amp;gt;: Setzt den WiFi-Zustand des Players. Kann &#039;off&#039;, &#039;persist-off&#039; oder &#039;on&#039; sein.&lt;br /&gt;
*Abspiel-Steuerbefehle&lt;br /&gt;
**&amp;lt;code&amp;gt;CurrentTrackPosition &amp;lt;TimePosition&amp;gt;&amp;lt;/code&amp;gt;: Setzt die aktuelle Zeitposition im Lied. Man kann hier auch relative Angaben machen wie &#039;+0:00:10&#039; oder nur &#039;+10&#039;. Zusätzlich kann man auch Prozentwerte angeben wie z.B. &#039;+10%&#039;. Natürlich können diese Angaben auch negativ sein.&lt;br /&gt;
**&amp;lt;code&amp;gt;Pause&amp;lt;/code&amp;gt;: Pausiert die Wiedergabe&lt;br /&gt;
**&amp;lt;code&amp;gt;Previous&amp;lt;/code&amp;gt;: Springt zum Anfang des vorhergehenden Liedes. Das ist ein anderes Verhalten als mit einem Controller. Der Controller springt zunächst an den Anfang des aktuellen Liedes, und erst beim erneuten Drücken an den Anfang des vorhergehenden Liedes.&lt;br /&gt;
**&amp;lt;code&amp;gt;Play&amp;lt;/code&amp;gt;: Startet die Wiedergabe&lt;br /&gt;
**&amp;lt;code&amp;gt;PlayURI &amp;lt;SongURI&amp;gt; [Volume]&amp;lt;/code&amp;gt;: Spielt die angegebene MP3-Datei mit der optional verwendbaren Lautstärke ab. Die Datei muss vom SonosPlayer aus direkt erreichbar (und natürlich auch lesbar) sein, braucht aber nicht indiziert worden zu sein.&amp;lt;br /&amp;gt;Folgende Formate werden momentan akzeptiert:&lt;br /&gt;
***&#039;&#039;&#039;Sonos-Devicenamen&#039;&#039;&#039;: z.B. &amp;lt;code&amp;gt;Sonos_Wohnzimmer&amp;lt;/code&amp;gt;. Der Devicename muss natürlich bereits definiert worden sein. Es wird der Audio(oder AV)-Eingang des gewählten Zoneplayer-Device als Wiedergabestrom gewählt.&lt;br /&gt;
****Bei normalen Audio-Eingängen (LineIn) kann man einen beliebigen Player für die Wiedergabe verwenden. Es muss nicht der lokale Player für die Wiedergabe verwendet werden.&lt;br /&gt;
****Besonderheit bei Sonos Playbar-Komponenten:&amp;lt;br /&amp;gt;Wenn als Quelle eine Playbar ausgewählt wird, so wird erst die Playbar selbst auf den SPDIF-Eingang umgestellt, und anschließend eine Gruppe mit dem gewünschten Player gebildet.&amp;lt;br /&amp;gt;Wenn diese Anweisung an die Playbar selbst gegeben wird, dann wird nur der SPDIF-Eingang als Quelle aktiviert.&lt;br /&gt;
***&#039;&#039;&#039;UNC-Pfade&#039;&#039;&#039;: z.B. &amp;lt;code&amp;gt;\\Server\Freigabe\Dateiname.mp3&amp;lt;/code&amp;gt;. Erkennungsmerkmal ist der Doppelte Backslash am Anfang. Darstellung aller üblichen Informationen inkl. Cover u.ä.&lt;br /&gt;
***&#039;&#039;&#039;Web-Streams&#039;&#039;&#039;: z.B. &amp;lt;code&amp;gt;http://www.energyradio.de/hot&amp;lt;/code&amp;gt;. Erkennungsmerkmal ist die Angabe von &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; am Anfang. Es werden keine Cover aber Streaminformationen dargestellt.&lt;br /&gt;
***&#039;&#039;&#039;Sonstige URI-Typen&#039;&#039;&#039;: z.B. &amp;lt;code&amp;gt;x-sonos-spotify:spotify:track:0jkLC0noG4A4i9lob2gSc3?sid=9&amp;amp;flags=0&amp;lt;/code&amp;gt;. Darstellung aller üblichen Informationen. Die verfügbaren Formate können durch Sonos erweitert/verändert werden.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Das Format der URI, das hier angegeben werden kann, ist stets identisch zum Reading &#039;&#039;&#039;currentTrackURI&#039;&#039;&#039;, das bedeutet, dass die URI, die man dort sieht, hier direkt wieder angegeben werden kann.&amp;lt;br /&amp;gt;Es gibt lediglich die oben benannte Vereinfachung für MP3-Dateien und Radio-URLs (aber auch dafür könnte man das offizielle Format angeben).&lt;br /&gt;
**&amp;lt;code&amp;gt;PlayURITemp &amp;lt;SongURI&amp;gt; [Volume]&amp;lt;/code&amp;gt;: Spielt die angegebene MP3-Datei mit der optional verwendbaren Lautstärke als temporäre Datei ab. Nachdem die Datei abgespielt wurde, werden die vorhergehenden Abspielparameter (Lautstärke, Titel, Position usw.) wiederhergestellt. Im Normalfall geht es also direkt dort weiter, wo die Unterbrechung stattgefunden hat. Die Datei muss vom SonosPlayer aus direkt erreichbar (und natürlich auch lesbar) sein, braucht aber nicht indiziert worden zu sein. Für eine ordnungsgemäße Wiederherstellung ist es notwendig, dass dies eine Datei und kein Stream ist, da die Abspiellänge vorher bekannt sein muss.&lt;br /&gt;
***Für Streams (genauer: Für Dateien, deren Abspiellänge nicht ermittelt werden kann) ist dieser Aufruf identisch zu &amp;lt;code&amp;gt;PlayURI&amp;lt;/code&amp;gt;, es wird im Anschluß nichts wiederhergestellt.&lt;br /&gt;
***Zulässige Formate stehen unter &amp;lt;code&amp;gt;PlayURI&amp;lt;/code&amp;gt;.&lt;br /&gt;
***&#039;&#039;&#039;Achtung!&#039;&#039;&#039;: Wenn bereits eine temporäre Ausgabe erfolgt, so wird die Aufforderung mit einer entsprechenden Meldung verworfen. Es kann nur eine geben :-)&lt;br /&gt;
**&amp;lt;code&amp;gt;Next&amp;lt;/code&amp;gt;: Springt zum Anfang des nächsten Liedes&lt;br /&gt;
**&amp;lt;code&amp;gt;Speak &amp;lt;Volume&amp;gt; &amp;lt;Language&amp;gt; &amp;lt;Text&amp;gt;&amp;lt;/code&amp;gt;: Wandelt den angegebenen Text mittels Google in gesprochenen Text um und spielt diesen mittels &amp;lt;code&amp;gt;PlayURITemp&amp;lt;/code&amp;gt; ab. An dieser Stelle ist zu berücksichtigen, dass der Text-Parameter auch Leerzeichen enthalten darf (und damit nach FHEM-Regeln eigentlich mehrere Parameter sind). Deswegen steht die Lautstärke vorne als nicht optionaler Parameter.&lt;br /&gt;
***&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Im Text können MP3-File-Verweise eingebettet werden. Diese müssen vorne und hinten mit einem &#039;&#039;&#039;|&#039;&#039;&#039; und einem Leerzeichen abgetrennt werden. Außerdem darf der Dateiname selbst kein Leerzeichen enthalten.&amp;lt;br /&amp;gt;Beispieltexte:&lt;br /&gt;
****&#039;&#039;&#039;|/path/to/Gong.mp3| Achtung! Achtung! Die Waschmaschine ist fertig.&#039;&#039;&#039;&lt;br /&gt;
****&#039;&#039;&#039;Die Datei kann auch |/path/to/Tada.mp3| mittendrin stehen.&#039;&#039;&#039;&lt;br /&gt;
****&#039;&#039;&#039;|/path/to/Gong.mp3| Es können auch |/path/to/Tada.mp3| mehrere Dateien eingebettet werden.&#039;&#039;&#039;&lt;br /&gt;
***&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Es kann ein Standardpfad für diese Jingle-Dateien angegeben werden, dann braucht man im Text nur den Dateinamen anzugeben. Das Attribut am Sonos-Device dafür lautet &#039;&#039;targetSpeakMP3FileDir&#039;&#039;. z.B.: &#039;&#039;&#039;/path/to&#039;&#039;&#039;. Des Weiteren kann die Endung &#039;&#039;.mp3&#039;&#039; auch weggelassen werden.&amp;lt;br /&amp;gt;Damit können die Texte z.B. so gekürzt werden:&lt;br /&gt;
****&#039;&#039;&#039;|Gong| Achtung! Achtung! Die Waschmaschine ist fertig.&#039;&#039;&#039;&lt;br /&gt;
****&#039;&#039;&#039;Die Datei kann auch |Tada| mittendrin stehen.&#039;&#039;&#039;&lt;br /&gt;
****&#039;&#039;&#039;|Gong| Es können auch |Tada| mehrere Dateien eingebettet werden.&#039;&#039;&#039;&lt;br /&gt;
***&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Eine Website mit einigen Jingles und kurzen Tönen zur kostenfreien, privaten, Verwendung ist z.B. [http://soundbible.com/tags-gong.html soundbible.com]. Dort gibt es auch Gebell und ähnliches :-)&lt;br /&gt;
***&#039;&#039;&#039;Achtung!&#039;&#039;&#039;: Die Verkettung der diversen MP3-Dateien erfolgt durch einfaches hintereinanderschreiben. Bei verschiedenen Formaten (Mono oder Stereo, 16kHz oder 22kHz, usw.) funktioniert zwar die Wiedergabe auf dem Sonos-System fehlerfrei, allerdings werden die Zeitinformationen nicht korrekt dargestellt. Um das zu korrigieren, kann man noch nachträglich einen lokal installierten Konverter (z.B. &#039;&#039;avconv&#039;&#039;) drüberlaufen lassen. Diesen kann man mit dem Sonos-Device-Attribut &#039;&#039;targetSpeakMP3FileConverter&#039;&#039; einstellen (z.B. mit &#039;&#039;/usr/bin/avconv -i %infile% %outfile%&#039;&#039;). Dabei ist zu beachten, dass dieser Zeit benötigt und somit die Verzögerung der Durchsage vergrößert.&lt;br /&gt;
***&#039;&#039;&#039;Achtung!&#039;&#039;&#039;: Für die korrekte Funktionsweise müssen die Attribute &amp;lt;code&amp;gt;targetSpeakDir&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;targetSpeakURL&amp;lt;/code&amp;gt; am Sonos-Device konfiguriert sein (siehe [[#Attribute_von_SONOS|Attribute von SONOS]]).&lt;br /&gt;
***Mögliche Sprachparamter können bei Google herausgefunden werden. Diese sind z.B. &#039;&#039;&#039;de&#039;&#039;&#039;, &#039;&#039;&#039;en&#039;&#039;&#039;, &#039;&#039;&#039;es&#039;&#039;&#039;, &#039;&#039;&#039;fr&#039;&#039;&#039;, &#039;&#039;&#039;it&#039;&#039;&#039;...&lt;br /&gt;
***&#039;&#039;&#039;Achtung!&#039;&#039;&#039;: Die Textlänge ist durch Google begrenzt. Wenn die Größe überschritten wird, wird die Tonerzeugung in mehrere Aufrufe unterteilt. Davon merkt man im Prinzip wenig, ausser dass die Wiedergabeverzögerung höher ist, und die Sprachmelodie an der Trennstelle etwas &amp;quot;holprig&amp;quot; wirkt.&lt;br /&gt;
***&#039;&#039;&#039;Achtung!&#039;&#039;&#039;: Wenn bereits eine temporäre Ausgabe erfolgt, so wird die Aufforderung mit einer entsprechenden Meldung verworfen. Es kann nur eine geben :-)&lt;br /&gt;
**&amp;lt;code&amp;gt;StartFavourite &amp;lt;FavouriteName&amp;gt; [NoStart]&amp;lt;/code&amp;gt;: Startet den angegebenen Favoriten. Der Name bezeichnet einen Eintrag in der Sonos-Favoritenliste. Der Parameter sollte/kann URL-Encoded (z.B. mittels &#039;&#039;&#039;uri_escape()&#039;&#039;&#039; oder manuell) werden um auch Spezialzeichen zu ermöglichen.&amp;lt;br /&amp;gt;Siehe auch die Hinweise unter &#039;&#039;&#039;LoadFavourite&#039;&#039;&#039;.&lt;br /&gt;
***Wenn das Wort &#039;NoStart&#039; als zweiter Parameter angegeben wurde, dann wird der Favorit geladen und fertig vorbereitet, aber nicht explizit gestartet (entspricht dann einem &#039;&#039;LoadFavourite&#039;&#039;).&lt;br /&gt;
**&amp;lt;code&amp;gt;StartPlaylist &amp;lt;Playlistname&amp;gt; [ListeVorherLeeren]&amp;lt;/code&amp;gt;: Lädt die benannte Playlist und startet sofort die Wiedergabe.&amp;lt;br /&amp;gt;Zu den Parametern und Bemerkungen bitte unter &#039;&#039;&#039;LoadPlaylist&#039;&#039;&#039; nachsehen.&lt;br /&gt;
**&amp;lt;code&amp;gt;StartRadio &amp;lt;Radiostationname&amp;gt;&amp;lt;/code&amp;gt;: Lädt den benannten Radiosender, genauer gesagt, den benannten Radiofavoriten und startet sofort die Wiedergabe. Dabei wird die bestehende Abspielliste beibehalten, aber deaktiviert. Der Parameter kann/muss URL-Encoded (z.B. mittels &#039;&#039;&#039;uri_escape()&#039;&#039;&#039; oder manuell) sein, um auch Leer- und Sonderzeichen angeben zu können.&lt;br /&gt;
**&amp;lt;code&amp;gt;StartSearchlist &amp;lt;Kategoriename&amp;gt; &amp;lt;KategorieElement&amp;gt; [[TitelfilterRegEx]/[AlbumfilterRegEx]/[ArtistfilterRegEx] [maxElem]]&amp;lt;/code&amp;gt;: Ruft den Befehl &#039;&#039;&#039;LoadSearchlist&#039;&#039;&#039; auf und startet anschließend die Wiedergabe. Zu den genauen Beschreibungen der Funktion und Parameter bitte den Set-Befehl &#039;&#039;&#039;LoadSearchlist&#039;&#039;&#039; nachschlagen.&lt;br /&gt;
**&amp;lt;code&amp;gt;Stop&amp;lt;/code&amp;gt;: Stoppt die Wiedergabe&lt;br /&gt;
**&amp;lt;code&amp;gt;Track &amp;lt;TrackNumber&amp;gt;&amp;lt;/code&amp;gt;: Stellt das Lied an der Position TrackNumber in der Abspielliste als aktuelles Lied ein. Dabei kann als Tracknummer der Wert &amp;lt;code&amp;gt;Random&amp;lt;/code&amp;gt; angegeben werden. Dann wird eine zufällige Tracknummer ausgewählt (diese Ermittlung erfolgt nach Setzen der aktuellen Abspielliste, und erfolgt somit korrekt auf die gesamte zur Verfügung stehende Liste).&lt;br /&gt;
*Einstellungen zum Abspielen&lt;br /&gt;
**&amp;lt;code&amp;gt;Balance&amp;lt;/code&amp;gt;: Setzt die Balance auf den angegebenen Wert. Der Wert kann zwischen -100 (voll links) und 100 (voll rechts) liegen. Gibt die wirklich eingestellte Balance als Ergebnis zurück.&lt;br /&gt;
**&amp;lt;code&amp;gt;Bass&amp;lt;/code&amp;gt;: Setzt den Bass-Level auf den angegebenen Wert. Der Wert kann zwischen -10 und 10 liegen.&lt;br /&gt;
**&amp;lt;code&amp;gt;CrossfadeMode&amp;lt;/code&amp;gt;: Legt den Zustand des Crossfade-Mode fest. Liefert den aktuell gültigen Crossfade-Mode.&lt;br /&gt;
**&amp;lt;code&amp;gt;LEDState&amp;lt;/code&amp;gt;: Legt den Zustand der LED fest. Liefert den aktuell gültigen Zustand zurück.&lt;br /&gt;
**&amp;lt;code&amp;gt;Loudness&amp;lt;/code&amp;gt;: Aktiviert oder deaktiviert das Loudness (Bassanhebung bei geringen Lautstärken). Kann 0 oder 1 sein.&lt;br /&gt;
**&amp;lt;code&amp;gt;Mute &amp;lt;State&amp;gt;&amp;lt;/code&amp;gt;: Setzt den Mute-Zustand auf den angegebenen Wert. Der Wert kann on oder off sein. Liefert als Ergebnis den neuen Zustand.&lt;br /&gt;
**&amp;lt;code&amp;gt;MuteT&amp;lt;/code&amp;gt;: Schaltet den Mute-Zustand um. Liefert als Ergebnis den neuen Zustand.&lt;br /&gt;
**&amp;lt;code&amp;gt;Repeat&amp;lt;/code&amp;gt;: Legt den Zustand des Repeat-Zustands fest. Liefert den aktuell gültigen Repeat-Zustand.&lt;br /&gt;
**&amp;lt;code&amp;gt;RepeatOne&amp;lt;/code&amp;gt;: Legt den Zustand des RepeatOne-Zustands fest. Liefert den aktuell gültigen RepeatOne-Zustand.&lt;br /&gt;
**&amp;lt;code&amp;gt;RepeatOneT&amp;lt;/code&amp;gt;: Schaltet den Zustand des RepeatOne-Zustands um. Liefert den aktuell gültigen RepeatOne-Zustand.&lt;br /&gt;
**&amp;lt;code&amp;gt;RepeatT&amp;lt;/code&amp;gt;: Schaltet den Zustand des Repeat-Zustands um. Liefert den aktuell gültigen Repeat-Zustand.&lt;br /&gt;
**&amp;lt;code&amp;gt;Shuffle&amp;lt;/code&amp;gt;: Legt den Zustand des Shuffle-Zustands fest. Liefert den aktuell gültigen Shuffle-Zustand.&lt;br /&gt;
**&amp;lt;code&amp;gt;ShuffleT&amp;lt;/code&amp;gt;: Schaltet den Zustand des Shuffle-Zustands um. Liefert den aktuell gültigen Shuffle-Zustand.&lt;br /&gt;
**&amp;lt;code&amp;gt;SleepTimer &amp;lt;Timestring|Seconds&amp;gt;&amp;lt;/code&amp;gt;: Legt den aktuellen SleepTimer fest. Der Wert muss ein kompletter Zeitstempel sein (HH:MM:SS) (oder eine Zahl in Sekunden). Zum Deaktivieren darf der Zeitstempel nur Nullen enthalten oder das Wort &#039;off&#039;.&lt;br /&gt;
**&amp;lt;code&amp;gt;Treble&amp;lt;/code&amp;gt;: Setzt den Höhen-Level auf den angegebenen Wert. Der Wert kann zwischen -10 und 10 liegen.&lt;br /&gt;
**&amp;lt;code&amp;gt;Volume &amp;lt;VolumeLevel&amp;gt; [RampType]&amp;lt;/code&amp;gt;: Setzt die Lautstärke auf den angegebenen Wert. Der kann eine relative Angabe mittels + oder - sein. Dann wird um die entsprechende Höhe erhöht oder verringert. Wird eine relative Lautstärke angegeben, so kann diese mit einem folgenden Prozentzeichen als anteilige Änderung ausgeführt werden (z.B. +20%). Liefert als Ergebnis die neue Lautstärke.&amp;lt;br /&amp;gt;Als optionaler Parameter ist ein Ramptype zulässig. Mögliche Werte sind 1 (SLEEP_TIMER_RAMP_TYPE), 2 (AUTOPLAY_RAMP_TYPE) und 3 (ALARM_RAMP_TYPE). Die Werte entsprechen verschiedenen Mustern bei der Geschwindigkeit nach oben oder unten.&lt;br /&gt;
**&amp;lt;code&amp;gt;VolumeD&amp;lt;/code&amp;gt;: Verringert die Lautstärke um [VolumeStep]-Einheiten (Standardmäßig 7).&lt;br /&gt;
**&amp;lt;code&amp;gt;VolumeRestore&amp;lt;/code&amp;gt;: Stellt die mittels VolumeSave gespeicherte Lautstärke wieder her.&lt;br /&gt;
**&amp;lt;code&amp;gt;VolumeSave &amp;lt;VolumeLevel&amp;gt;&amp;lt;/code&amp;gt;: Setzt die Lautstärke auf den angegebenen Wert. Der kann eine relative Angabe mittels + oder - sein. Dann wird um die entsprechende Höhe erhöht oder verringert. Liefert als Ergebnis die neue Lautstärke. Zusätzlich wird die alte Lautstärke in einem Reading abgelegt, um sie wiederherstellen zu können.&lt;br /&gt;
**&amp;lt;code&amp;gt;VolumeU&amp;lt;/code&amp;gt;: Erhöht die Lautstärke um [VolumeStep]-Einheiten (Standardmäßig 7).&lt;br /&gt;
*Steuerung der aktuellen Abspielliste&lt;br /&gt;
**&amp;lt;code&amp;gt;AddURIToQueue &amp;lt;SongURI&amp;gt;&amp;lt;/code&amp;gt;: Fügt die angegebene Datei in die aktuelle Abspielliste an die Stelle hinter dem aktuellen Titel hinzu. Ändert nichts am aktuell abgespielten Titel.&amp;lt;br /&amp;gt;Zulässige Formate stehen unter &amp;lt;code&amp;gt;PlayURI&amp;lt;/code&amp;gt;.&lt;br /&gt;
***&#039;&#039;&#039;Achtung!&#039;&#039;&#039;: Es kann auch ein Radio-Stream hinzugefügt werden. Dieser wird auch normal abgespielt, wenn er dran ist. Dabei ist zu beachten, dass dieser Titel nie enden wird, und die Titel- und Interpretinformationen nicht dargestellt werden. Auch nicht die sonst üblichen Streaminformationen. Diese werden nur angezeigt, wenn der Stream mittels &amp;lt;code&amp;gt;PlayURI&amp;lt;/code&amp;gt; direkt (ohne Verwendung der Queue) abgespielt wird.&lt;br /&gt;
**&amp;lt;code&amp;gt;CurrentPlaylist&amp;lt;/code&amp;gt;: Setzt den Abspielmodus auf die aktuelle Abspielliste, startet aber keine Wiedergabe (z.B. nach dem Hören eines Radiostreams, wo die aktuelle Abspielliste zwar noch existiert, aber gerade &amp;quot;nicht verwendet&amp;quot; wird)&lt;br /&gt;
**&amp;lt;code&amp;gt;DeleteFromQueue &amp;lt;index_of_elems&amp;gt;&amp;lt;/code&amp;gt;:  Löscht die angegebenen Elemente aus der aktuellen Abspielliste. Die Angabe erfolgt über die Indizies der Titel. Es können die bei Perl-Array-üblichen Formate verwendet werden: &amp;quot;1..12,17,20..22&amp;quot;. Die Indizies beziehen sich auf die aktuell angezeigte Reihenfolge (diese unterscheidet sich zwischen der normalen Abspielweise und dem Shufflemodus).&lt;br /&gt;
**&amp;lt;code&amp;gt;DeletePlaylist&amp;lt;/code&amp;gt;: Löscht die bezeichnete Playliste. Zum möglichen Format des Playlistenamen unter &#039;&#039;&#039;LoadPlaylist&#039;&#039;&#039; nachsehen.&lt;br /&gt;
**&amp;lt;code&amp;gt;EmptyPlaylist&amp;lt;/code&amp;gt;: Löscht die aktuelle Abspielliste&lt;br /&gt;
**&amp;lt;code&amp;gt;LoadFavourite &amp;lt;FavouriteName&amp;gt;&amp;lt;/code&amp;gt;: Lädt den angegebenen Favoriten. Der Name bezeichnet einen Eintrag in der Sonos-Favoritenliste. Der Parameter sollte/kann URL-Encoded (z.B. mittels &#039;&#039;&#039;uri_escape()&#039;&#039;&#039; oder manuell) werden um auch Spezialzeichen zu ermöglichen.&lt;br /&gt;
***&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Man kann anstatt des Namens auch einen regulären Ausdruck verwenden. Es dürfen keine Leerzeichen vorkommen. Der erste Treffer wird verwendet.&amp;lt;br /&amp;gt;Beispiele:&lt;br /&gt;
****&#039;&#039;&#039;/meine.hits/&#039;&#039;&#039; - Trifft Case-Sensitive auf z.B. &#039;&#039;&#039;meine hits&#039;&#039;&#039; zu. Auch &#039;&#039;&#039;meineXhits&#039;&#039;&#039; oder &#039;&#039;&#039;meine-hits&#039;&#039;&#039; wird gefunden.&lt;br /&gt;
****&#039;&#039;&#039;/(?i)meine.hits/&#039;&#039;&#039; - Trifft Case-Insensitive auf z.B. &#039;&#039;&#039;Meine Hits&#039;&#039;&#039; zu. Auch &#039;&#039;&#039;Meine-Hits&#039;&#039;&#039; wird gefunden.&lt;br /&gt;
***Folgende Unterscheidungen werden auf Basis des Typs des Sonos-Favoriten gemacht:&lt;br /&gt;
****Bei einem Playlist-Typ (z.B. Sonos-Playlist, Spotify-Playlist, usw.) wird die aktuelle Abspielliste geleert, mit dem neuen Inhalt befüllt und die Wiedergabe gestartet&lt;br /&gt;
****Bei einem Einzel-Eintrag (Direkter Titel, Radiosender, Spotify-Titel, usw) wird die aktuelle Abspielliste nicht angetastet, sondern der aktuelle Abspieleintrag entsprechend angepasst und gestartet&lt;br /&gt;
**&amp;lt;code&amp;gt;LoadPlaylist &amp;lt;Playlistname|FHEM-Devicename&amp;gt; [ListeVorherLeeren]&amp;lt;/code&amp;gt;: Lädt die benannte Playliste in die aktuelle Abspielliste. Der Parameter kann/muss URL-Encoded (z.B. mittels &#039;&#039;&#039;uri_escape()&#039;&#039;&#039; oder manuell) sein, um auch Leer- und Sonderzeichen angeben zu können. Wenn der Parameter &#039;&#039;ListeVorherLeeren&#039;&#039; mit &#039;&#039;1&#039;&#039; angegeben wurde, wird die aktuelle Abspielliste vor dem Import geleert. Standardmäßig wird hier eine &#039;&#039;1&#039;&#039; angenommen.&lt;br /&gt;
***&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Man kann anstatt des Namens auch einen FHEM-Sonosplayer-Devicenamen angeben. Dann wird dessen aktuelle Abspielliste zum Player übertragen/kopiert.&lt;br /&gt;
***&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Man kann anstatt des Namens auch einen regulären Ausdruck verwenden. Es dürfen keine Leerzeichen vorkommen. Der erste Treffer wird verwendet.&amp;lt;br /&amp;gt;Beispiele:&lt;br /&gt;
****&#039;&#039;&#039;/meine.hits/&#039;&#039;&#039; - Trifft Case-Sensitive auf z.B. &#039;&#039;&#039;meine hits&#039;&#039;&#039; zu. Auch &#039;&#039;&#039;meineXhits&#039;&#039;&#039; oder &#039;&#039;&#039;meine-hits&#039;&#039;&#039; wird gefunden.&lt;br /&gt;
****&#039;&#039;&#039;/(?i)meine.hits/&#039;&#039;&#039; - Trifft Case-Insensitive auf z.B. &#039;&#039;&#039;Meine Hits&#039;&#039;&#039; zu. Auch &#039;&#039;&#039;Meine-Hits&#039;&#039;&#039; wird gefunden.&lt;br /&gt;
***&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Es kann auch ein Dateiname angegeben werden, um eine übliche M3U-Datei aus dem Filesystem zu laden. Dieser muss mit &amp;quot;&#039;&#039;&#039;file:&#039;&#039;&#039;&amp;quot; eingeleitet werden. Beispiel: &amp;quot;&#039;&#039;&#039;file:c:/Test.m3u&#039;&#039;&#039;&amp;quot;.&amp;lt;br /&amp;gt;Innerhalb der Datei selbst werden bislang folgende Sonderformate unterstützt:&lt;br /&gt;
****&#039;&#039;&#039;Spotify:&#039;&#039;&#039; Titel aus Spotify werden mit dem Kürzel &#039;&#039;x-sonos-spotify:&#039;&#039; begonnen.&lt;br /&gt;
****&#039;&#039;&#039;Napster/Rhapsody:&#039;&#039;&#039; Titel aus Napster/Rhapsody werden mit dem Kürzel &#039;&#039;npsdy:&#039;&#039; begonnen.&lt;br /&gt;
****&#039;&#039;Hinweise&#039;&#039;: Die Benutzernamen für diese Importe, die zum Zeitpunkt des Import bekannt sein müssen, müssen zuvor dem System bekannt gemacht werden. Ansonsten erscheint eine entsprechende Fehlermeldung.&amp;lt;br /&amp;gt;So kann der Benutzername für eines der Systeme bekannt gemacht werden:&lt;br /&gt;
*****Aktuelle Abspielliste eines Players leeren&lt;br /&gt;
*****Einen beliebigen Titel aus dem gewünschten Anbieter in die aktuelle Abspielliste einfügen. Dabei ist zu beachten, dass man das direkt aus der Auswahl des Anbietes heraus macht (also nicht über eine Playliste, Favoriten o.ä. Direktzugriffe)&lt;br /&gt;
*****Nun gibt es ein neues Reading am zentralen Sonos-Device, welches den Benutzernamen enthält. Um diesen Dauerhaft bereitzustellen, muss der Zustand mittels &#039;&#039;save&#039;&#039; gespeichert werden.&lt;br /&gt;
**&amp;lt;code&amp;gt;LoadRadio &amp;lt;Radiostationname&amp;gt;&amp;lt;/code&amp;gt;: Lädt den benannten Radiosender, genauer gesagt, den benannten Radiofavoriten. Dabei wird die bestehende Abspielliste beibehalten, aber deaktiviert. Der Parameter kann/muss URL-Encoded sein, um auch Leer- und Sonderzeichen angeben zu können.&lt;br /&gt;
***&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Man kann anstatt des Namens auch einen regulären Ausdruck verwenden. Es dürfen keine Leerzeichen vorkommen. Der erste Treffer wird verwendet.&amp;lt;br /&amp;gt;Beispiele:&lt;br /&gt;
****&#039;&#039;&#039;/NRJ.90s/&#039;&#039;&#039; - Trifft Case-Sensitive auf z.B. &#039;&#039;&#039;NRJ 90s&#039;&#039;&#039; zu. Auch &#039;&#039;&#039;NRJx90s&#039;&#039;&#039; oder &#039;&#039;&#039;NRJ-90s&#039;&#039;&#039; wird gefunden.&lt;br /&gt;
****&#039;&#039;&#039;/(?i)nrj.90s/&#039;&#039;&#039; - Trifft Case-Insensitive auf z.B. &#039;&#039;&#039;NRJ 90s&#039;&#039;&#039; zu. Auch &#039;&#039;&#039;NRJ-90s&#039;&#039;&#039; wird gefunden.&lt;br /&gt;
**&amp;lt;code&amp;gt;LoadSearchlist &amp;lt;Kategoriename&amp;gt; &amp;lt;KategorieElement&amp;gt; [[TitelfilterRegEx]/[AlbumFilterRegEx]/[ArtistfilterRegEx] [[*]maxElem[+|-]]]&amp;lt;/code&amp;gt;: Hiermit kann die aktuelle Abspielliste mit Suchergebnissen aus der Sonos-Bibliothek gefüllt werden.&amp;lt;br /&amp;gt;Dazu kann man sich im Controller anschauen, wie die Suchstruktur aufgebaut ist:&lt;br /&gt;
***&#039;&#039;&#039;Kategoriename&#039;&#039;&#039;: kann &amp;quot;Albums&amp;quot;, &amp;quot;Artists&amp;quot;, &amp;quot;Composers&amp;quot;, &amp;quot;Contributing Artists&amp;quot;, &amp;quot;Genres&amp;quot;, &amp;quot;Playlists&amp;quot; oder &amp;quot;Tracks&amp;quot; sein. Leerzeichen müssen wie immer URI-Encoded sein (also &#039;&#039;%20&#039;&#039;). Diese Liste kann mit dem Get-Befehl &#039;&#039;SearchlistCategories&#039;&#039; ermittelt werden, da Sonos auch neue hinzufügen könnte.&amp;lt;br /&amp;gt;Man kann hier einen regulären Ausdruck mit &#039;&#039;/&#039;&#039; eingeschlossen angeben, z.B. &#039;&#039;/Contr.*/&#039;&#039;.&lt;br /&gt;
***&#039;&#039;&#039;KategorieElement&#039;&#039;&#039;: enthält einen zur Suchkategorie passenden Wert als gesamten Match. Kann/muss URI-Encoded (z.B. mittels &#039;&#039;&#039;uri_escape()&#039;&#039;&#039; oder manuell) sein.&amp;lt;br /&amp;gt;Man kann hier auch einen regulären Ausdruck mit &#039;&#039;/&#039;&#039; eingeschlossen angeben, z.B. &#039;&#039;/(?i)udo.jürgens/&#039;&#039;.&lt;br /&gt;
***&#039;&#039;&#039;Filter&#039;&#039;&#039;: Man kann reguläre Ausdrücke als Titel-, Album- oder Artistfilter angeben, der als ein Parameter mit &#039;&#039;/&#039;&#039; getrennt angegeben werden muss.&amp;lt;br /&amp;gt;Dieser Filter filtert die durch die beiden vorangehenden Werten vorgegebene Liste getrennt nach Titel, Album oder Artist, z.B. &#039;&#039;(?i)haus&#039;&#039; (enthält dann alles, was auf Haus im Titel ohne Berücksichtigung der Groß-/Kleinschreibung passt) oder &#039;&#039;(?i)haus//(?i)udo&#039;&#039; (enhält dann alles, was auf den Titel &#039;&#039;Haus&#039;&#039; und den Interpret &#039;&#039;Udo&#039;&#039; ohne Berücksichtigung der Groß-/Kleinschreibung passt) sowie z.B. &#039;&#039;/(?i)Best.of/&#039;&#039; (enthält dann alle Best-of-Alben beliebiger Interpreten).&lt;br /&gt;
****&#039;&#039;&#039;Beispiele&#039;&#039;&#039; für den Filter-Parameter:&lt;br /&gt;
*****&amp;lt;code&amp;gt;//Udo&amp;lt;/code&amp;gt;: Filtert nach dem Interpretenbestandteil &#039;&#039;Udo&#039;&#039;, der Titel ist beliebig. Alternative Schreibweise: &amp;lt;code&amp;gt;.*/.*/Udo&amp;lt;/code&amp;gt;&lt;br /&gt;
*****&amp;lt;code&amp;gt;Sahne&amp;lt;/code&amp;gt;: Filtert nach dem Titelbestandteil &#039;&#039;Sahne&#039;&#039;, das Album und der Interpret sind beliebig. Alternative Schreibweisen: &amp;lt;code&amp;gt;Sahne/.*/.*&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;Sahne//&amp;lt;/code&amp;gt;.&lt;br /&gt;
*****&amp;lt;code&amp;gt;Sahne//Udo&amp;lt;/code&amp;gt;: Filtert nach dem Titelbestandteil &#039;&#039;Sahne&#039;&#039; und dem Interpretenbestandteil &#039;&#039;Udo&#039;&#039;&lt;br /&gt;
*****&amp;lt;code&amp;gt;(?i)sahne//(?i)udo&amp;lt;/code&amp;gt;: Filtert nach dem Titelbestandteil &#039;&#039;sahne&#039;&#039; und dem Interpretenbestandteil &#039;&#039;udo&#039;&#039; ohne die Groß-/Kleinschreibung zu berücksichtigen.&lt;br /&gt;
*****&amp;lt;code&amp;gt;/(?i)best.of/&amp;lt;/code&amp;gt;: Filtert nach dem Albumtitel Best-of. Alternative Schreibweisen: &amp;lt;code&amp;gt;.*/(?i)best.of&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;.*/(?i)best.of/.*&amp;lt;/code&amp;gt;&lt;br /&gt;
***&#039;&#039;&#039;maxElem&#039;&#039;&#039;: Hiermit kann eine Begrenzung der einzutragenden Element angegeben werden. Des Weiteren kann hier durch ein vorangestelltes &#039;&#039;*&#039;&#039; eine Durchmischung der Ausgangsmenge erreicht werden, und durch ein nachgestelltes &#039;&#039;-&#039;&#039; das Leeren der aktuellen Abspielliste erreicht werden. Durch ein nachgestelltes &#039;&#039;+&#039;&#039; wird ein Anhängen der gefundenen Titel an das Ende der aktuellen Abspielliste erreicht (sonst wird hinter dem aktuellen Titel eingefügt).&amp;lt;br /&amp;gt;Eine Angabe von 0 übernimmt alle verfügbaren Titel.&amp;lt;br /&amp;gt;Diese Mengenbegrenzung erfolgt erst nach Anwendung der Filter auf die Ausgangsmenge (die Durchmischung ebenfalls). z.B. &#039;&#039;*20-&#039;&#039; (es werden nur 20 Titel ausgesucht, die Ausgangsmenge wird zuvor zufällig gemischt, und die aktuelle Abspielliste vor dem Einfügen geleert), &#039;&#039;*10&#039;&#039; (es werden 10 zufällige Titel zu der Abspielliste an der aktuellen Stelle hinzugefügt) oder &#039;&#039;10&#039;&#039; (es werden die ersten 10 Titel zu der Abspielliste an der aktuellen Stelle hinzugefügt).&lt;br /&gt;
***&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Wenn die Kategorie &#039;&#039;Tracks&#039;&#039; verwendet wird, wird der zweite Parameter (&#039;&#039;KategorieElement&#039;&#039;) nicht verwendet. Dieser muss als Platzhalter trotzdem vorhanden sein, und kann z.B. mit einem Punkt &#039;&#039;.&#039;&#039; angegeben werden.&lt;br /&gt;
***&#039;&#039;&#039;Achtung&#039;&#039;&#039;: Wenn die Kategorie &#039;&#039;Tracks&#039;&#039; verwendet wird, werden *alle* Titel, die in der Sonos-Bibliothek enthalten sind, durchsucht. Das kann bei einer Bibliothek mit 20.000 Titeln locker mal 4 Minuten dauern. Dabei wird die Zeit hauptsächlich vom Sonosplayer verbraucht; Es ist also für die Laufzeit nicht relevant, ob das Modul z.B. auf einem Raspberry Pi oder einer leistungsfähigeren Hardware läuft.&amp;lt;br /&amp;gt;Bitte beachten, das während dieser Zeit keine Sonos-Nachrichten verarbeitet werden, und keine Befehle an die Player gesendet werden können. FHEM wird währenddessen nicht blockiert.&lt;br /&gt;
***&#039;&#039;&#039;Beispiele&#039;&#039;&#039;&amp;lt;br /&amp;gt;Bitte beachten, dass sich die Möglichkeiten nach der zugrundeliegenden Bibliothek richten.&lt;br /&gt;
****&amp;lt;code&amp;gt;set Sonos_Wohnzimmer LoadSearchlist Genres Synthpop .*/(?i)pet *20-&amp;lt;/code&amp;gt;: Hier wird das Genre &#039;&#039;Synthpop&#039;&#039; als Ausgangsliste verwendet und nach Interpreten mit &#039;&#039;pet&#039;&#039; gefiltert. Von dieser Menge werden 20 zufällige Einträge in die Abspielliste übernommen, die vorher geleert wurde.&lt;br /&gt;
****&amp;lt;code&amp;gt;set Sonos_Wohnzimmer LoadSearchlist /(?i)contr.*/ /(?i)pet.*?shop.*?boys/ / *10-&amp;lt;/code&amp;gt;: Hier werden die Teilnehmenden Interpreten nach den &#039;&#039;Pet Shop Boys&#039;&#039; durchsucht, und anschließend aus dieser Liste 10 beliebige Titel in die vorher geleerte Abspielliste übertragen. Es erfolgt keine zusätzliche Filterung.&lt;br /&gt;
****&amp;lt;code&amp;gt;set Sonos_Wohnzimmer LoadSearchlist Tracks . / *50-&amp;lt;/code&amp;gt;: Hier werden 50 beliebige Titel aus der gesamten Bibliothek in die Abspielliste übertragen. Bitte Hinweis zur Laufzeit beachten.&lt;br /&gt;
****&amp;lt;code&amp;gt;set Sonos_Wohnzimmer LoadSearchlist Tracks . /(?i)best.of/ *50-&amp;lt;/code&amp;gt;: Hier werden 50 zufällige Titel von Best-of-Alben aus der gesamten Bibliothek in die Abspielliste übertragen. Bitte Hinweis zur Laufzeit beachten.&lt;br /&gt;
**&amp;lt;code&amp;gt;SavePlaylist &amp;lt;Playlistname&amp;gt;&amp;lt;/code&amp;gt;: Speichert die aktuelle Abspielliste unter dem angegebenen Namen als Playliste ab. Dabei wird eine etwaig bestehende Liste gleichen Namens überschrieben. Der Parameter kann/muss URL-Encoded (z.B. mittels &#039;&#039;&#039;uri_escape()&#039;&#039;&#039; oder manuell) sein, um auch Leer- und Sonderzeichen angeben zu können.&lt;br /&gt;
***&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Es kann auch ein Dateiname angegeben werden, um eine übliche M3U-Datei im Filesystem zu erzeugen. Dieser muss mit &amp;quot;&#039;&#039;&#039;file:&#039;&#039;&#039;&amp;quot; eingeleitet werden. Beispiel: &amp;quot;&#039;&#039;&#039;file:c:/Test.m3u&#039;&#039;&#039;&amp;quot;.&amp;lt;br /&amp;gt;&#039;&#039;Nähere Informationen zum möglichen Inhalt der Datei siehe unter &#039;&#039;&#039;LoadPlayList&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
*Gruppenbefehle&lt;br /&gt;
**&amp;lt;code&amp;gt;AddMember &amp;lt;Devicename&amp;gt;&amp;lt;/code&amp;gt;: Fügt dem Device das übergebene Device als Gruppenmitglied hinzu. Die Wiedergabe des aktuellen Devices bleibt erhalten, und wird auf das angegebene Device mit übertragen.&lt;br /&gt;
**&amp;lt;code&amp;gt;CreateStereoPair &amp;lt;rightPlayerDevicename&amp;gt;&amp;lt;/code&amp;gt;: Fügt dem Device das übergebene Device als rechtes Stereopaar-Element hinzu. Die Wiedergabe des aktuellen Devices bleibt erhalten (als linker Lautsprecher), und wird auf das angegebene Device mit übertragen (als rechter Lautsprecher).&lt;br /&gt;
**&amp;lt;code&amp;gt;GroupMute &amp;lt;State&amp;gt;&amp;lt;/code&amp;gt;: Setzt den Mute-Zustand für die komplette Gruppe in einem Schritt. Der Wert kann on oder off sein.&lt;br /&gt;
**&amp;lt;code&amp;gt;GroupVolume &amp;lt;VolumeLevel&amp;gt;&amp;lt;/code&amp;gt;: Setzt die Gruppenlautstärke. Das dafür verwendete Lautstärkenverhältnis muss zuvor einmal mittels der Anweisung &#039;&#039;&#039;SnapshotGroupVolume&#039;&#039;&#039; festgelegt worden sein.&lt;br /&gt;
***&#039;&#039;Hinweis&#039;&#039;: Wenn man &#039;&#039;&#039;GroupVolume&#039;&#039;&#039; aufruft, ohne vorher &#039;&#039;&#039;SnapshotGroupVolume&#039;&#039;&#039; aufgerufen zu haben, wird nur die Lautstärke des Players verändert wird, für den man den Aufruf durchführt.&lt;br /&gt;
**&amp;lt;code&amp;gt;MakeStandaloneGroup&amp;lt;/code&amp;gt;: Macht diesen Player zu seiner eigenen Gruppe.&lt;br /&gt;
**&amp;lt;code&amp;gt;RemoveMember &amp;lt;Devicename&amp;gt;&amp;lt;/code&amp;gt;: Entfernt dem Device das übergebene Device, sodass die beiden keine Gruppe mehr bilden. Die Wiedergabe des aktuellen Devices läuft normal weiter. Das abgetrennte Device stoppt seine Wiedergabe, und hat keine aktuelle Abspielliste mehr (seit Sonos Version 4.2 hat der Player wieder die Playliste von vorher aktiv).&lt;br /&gt;
**&amp;lt;code&amp;gt;SeparateStereoPair&amp;lt;/code&amp;gt;: Trennt das Stereopaar wieder auf.&lt;br /&gt;
**&amp;lt;code&amp;gt;SnapshotGroupVolume&amp;lt;/code&amp;gt;: Legt das Lautstärkeverhältnis der aktuellen Player der Gruppe für folgende &#039;&#039;&#039;GroupVolume&#039;&#039;&#039;-Aufrufe fest. Dieses festgelegte Verhältnis wird bis zum nächsten Aufruf von &#039;&#039;&#039;SnapshotGroupVolume&#039;&#039;&#039; beibehalten.&lt;br /&gt;
***&#039;&#039;Hinweis&#039;&#039;: Das einzelne Verstellen von Zoneplayer-Laustärken mittels &#039;&#039;&#039;Volume&#039;&#039;&#039; wird nicht im bereits gespeicherten Lautstärkenverhältnis aktualisiert/widergespiegelt. Hat man also nachträglich die Lautstärke eines einzelnen Players geändert (auch über den Controller), so muss &#039;&#039;&#039;SnapshotGroupVolume&#039;&#039;&#039; erneut aufgerufen werden, damit das Verhältnis bei einer weiteren Gruppenlautstärkenänderung wieder erhalten bleibt (ansonsten wird das alte Verhältnis vor der Lautstärkeänderung wiederhergestellt).&lt;br /&gt;
***&#039;&#039;Hinweis&#039;&#039;: Dieser Aufruf muss vor einem eventuellen Aufruf von &#039;&#039;&#039;GroupVolume&#039;&#039;&#039; erfolgen, da sonst nur die Lautstärke des Players verändert wird, für den man den Aufruf durchführt.&lt;br /&gt;
***&#039;&#039;Beispiel&#039;&#039; für eine Gruppe mit stark verschiedenen Lautstärken:&lt;br /&gt;
****Aufruf von &#039;&#039;&#039;SnapshotGroupVolume&#039;&#039;&#039; =&amp;gt; Aktuelles Lautstärkeverhältnis wird gespeichert&lt;br /&gt;
****Aufruf von &#039;&#039;&#039;GroupVolume 2&#039;&#039;&#039; =&amp;gt; Gruppe wird sehr leise gestellt, dabei sieht das relative Lautstärkeverhältnis fast gleich aus, da sich die Abstände immer weiter annähern&lt;br /&gt;
****Aufruf von &#039;&#039;&#039;GroupVolume 35&#039;&#039;&#039; =&amp;gt; Gruppe wird laut gestellt, dabei kommt wieder das vorhergehende Lautstärkeverhältnis zum tragen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nützliche Hilfs-Prozeduren aus den Modulen ==&lt;br /&gt;
Das Modul liefert eine Menge kleiner Hilfs-Prozeduren mit, die teilweise auch für die eigene Verwendung interessant sein können.&lt;br /&gt;
&lt;br /&gt;
*Grundsätzliches&lt;br /&gt;
**&amp;lt;code&amp;gt;SONOS_getAllSonosplayerDevices()&amp;lt;/code&amp;gt;: Liefert ein Array mit allen Sonosplayerdevices, die in FHEM definiert sind.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Beispiel&#039;&#039;&#039;:&lt;br /&gt;
***&amp;lt;code&amp;gt;my @allPlayer = SONOS_getAllSonosplayerDevices();&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Liefert alle Sonosplayer.&lt;br /&gt;
**&amp;lt;code&amp;gt;SONOSPLAYER_DeleteIfExists($name)&amp;lt;/code&amp;gt;: Löscht das Device mit dem übergebenen Namen, wenn es existiert.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Beispiel&#039;&#039;&#039;:&lt;br /&gt;
***&amp;lt;code&amp;gt;SONOSPLAYER_DeleteIfExists(&#039;Sonos_Wohnzimmer&#039;);&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Löscht das Device mit dem Namen &#039;&#039;Sonos_Wohnzimmer&#039;&#039;, sofern es existiert. Es wird also keine Fehlermeldung erzeugt, wenn das Device nicht existiert.&lt;br /&gt;
**&amp;lt;code&amp;gt;SONOS_GetTimeSeconds($timeStr)&amp;lt;/code&amp;gt;: Liefert die Anzahl der Sekunden, die vom übergebenen Zeitstring beschrieben werden. Der Zeitstring muss vom Format &amp;quot;H:M:S&amp;quot; sein. Die Zahlen könne auch mehrere Stellen umfassen.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Beispiel&#039;&#039;&#039;:&lt;br /&gt;
***&amp;lt;code&amp;gt;my $sec = SONOS_GetTimeSeconds(&#039;0:04:12&#039;)&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Liefert die Anzahl der Sekunden des String &#039;0:04:12&#039;, in diesem Fall also &#039;&#039;252&#039;&#039;.&lt;br /&gt;
**&amp;lt;code&amp;gt;SONOS_LoadExportedSonosBibliothek($fileName, $deviceName, $internalName)&amp;lt;/code&amp;gt;: Lädt die angegebene Datei in das übergebene Device in das übergebene Internal. Vorher wird der Dateiinhalt per &#039;&#039;&#039;eval()&#039;&#039;&#039; in eine interne Datenstruktur umgewandelt. Damit kann eine zuvor mit &#039;&#039;&#039;ExportSonosBibliothek&#039;&#039;&#039; erzeugte Datei als Hash in ein beliebiges FHEM-Device eingelesen werden.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Beispiel&#039;&#039;&#039;:&lt;br /&gt;
***&amp;lt;code&amp;gt;SONOS_LoadExportedSonosBibliothek(&#039;c:/data.txt&#039;, &#039;MyDummyDevice&#039;, &#039;Bibliothek&#039;);&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Lädt die Datei &#039;&#039;&#039;c:/data.txt&#039;&#039;&#039; zunächst in einen Hash ein, und weist diesen Hash dann dem Device &#039;&#039;&#039;MyDummyDevice&#039;&#039;&#039; (kann ein beliebiges FHEM-Device sein) dem Internal &#039;&#039;&#039;Bibliothek&#039;&#039;&#039; zu.&lt;br /&gt;
**&amp;lt;code&amp;gt;SONOS_Max($param1, $param2)&amp;lt;/code&amp;gt;: Liefert den größeren der beiden übergebenen Parameter zurück.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Beispiel&#039;&#039;&#039;:&lt;br /&gt;
***&amp;lt;code&amp;gt;my $min = SONOS_Min(15, 23);&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Das Ergebnis ist &#039;&#039;23&#039;&#039;, da es der größere der beiden Werte ist.&lt;br /&gt;
**&amp;lt;code&amp;gt;SONOS_Min($param1, $param2)&amp;lt;/code&amp;gt;: Liefert den kleineren der beiden übergebenen Parameter zurück.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Beispiel&#039;&#039;&#039;:&lt;br /&gt;
***&amp;lt;code&amp;gt;my $min = SONOS_Min(15, 23);&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Das Ergebnis ist &#039;&#039;15&#039;&#039;, da es der kleinere der beiden Werte ist.&lt;br /&gt;
**&amp;lt;code&amp;gt;SONOS_isInList($search, @list)&amp;lt;/code&amp;gt;: Liefert &#039;&#039;1&#039;&#039;, wenn &#039;&#039;$search&#039;&#039; in &#039;&#039;@list&#039;&#039; enthalten ist, sonst &#039;&#039;0&#039;&#039;.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Beispiel&#039;&#039;&#039;:&lt;br /&gt;
***&amp;lt;code&amp;gt;my $exists = SONOS_isInList(&#039;Eins&#039;, qw(Eins Zwei Drei));&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Das Ergebnis ist &#039;&#039;true&#039;&#039; (bzw. &#039;&#039;1&#039;&#039;), da der String &#039;&#039;Eins&#039;&#039; in der Liste enthalten ist.&lt;br /&gt;
**&amp;lt;code&amp;gt;SONOS_posInList($search, @list)&amp;lt;/code&amp;gt;: Liefert die Position des gefundenen Strings &#039;&#039;$search&#039;&#039; in der Liste &#039;&#039;@list&#039;&#039;, wenn &#039;&#039;$search&#039;&#039; in &#039;&#039;@list&#039;&#039; enthalten ist, sonst &#039;&#039;-1&#039;&#039;. Zählt 0-basiert.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Beispiele&#039;&#039;&#039;:&lt;br /&gt;
***&amp;lt;code&amp;gt;my $pos = SONOS_posInList(&#039;Eins&#039;, qw(Eins Zwei Drei));&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Das Ergebnis ist &#039;&#039;0&#039;&#039;, da der String &#039;&#039;Eins&#039;&#039; in der Liste an der ersten Stelle enthalten ist.&lt;br /&gt;
***&amp;lt;code&amp;gt;my $pos = SONOS_posInList(&#039;Eins&#039;, qw(Zwei Eins Drei));&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Das Ergebnis ist &#039;&#039;1&#039;&#039;, da der String &#039;&#039;Eins&#039;&#039; in der Liste an der zweiten Stelle enthalten ist.&lt;br /&gt;
***&amp;lt;code&amp;gt;my $pos = SONOS_posInList(&#039;Vier&#039;, qw(Eins Zwei Drei));&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Das Ergebnis ist &#039;&#039;-1&#039;&#039;, da der String &#039;&#039;Vier&#039;&#039; in der Liste nicht enthalten ist.&lt;br /&gt;
**&amp;lt;code&amp;gt;SONOS_Stringify($elem)&amp;lt;/code&amp;gt;: Liefert eine Stringrepräsentation der übergebenen Datenstruktur. Diese Struktur darf nicht rekursiv sein, da sonst eine Endlosschleife auftritt.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Beispiel&#039;&#039;&#039;:&lt;br /&gt;
***&amp;lt;code&amp;gt;my @list = qw(Eins Zwei Drei); my $string = SONOS_Stringify(\@list);&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Liefert eine Stringrepräsentation des Arrayparameters. In diesem Fall also &amp;lt;code&amp;gt;[&#039;Eins&#039;, &#039;Zwei&#039;, &#039;Drei&#039;]&amp;lt;/code&amp;gt;&lt;br /&gt;
*Gruppenfunktionen&lt;br /&gt;
**&amp;lt;code&amp;gt;SONOSPLAYER_GetMasterPlayerName($name)&amp;lt;/code&amp;gt;: Liefert den Namen des Masterplayerdevices zu einem übergebenen Sonosplayer-Devicenamen. Sollte der Player nicht Bestandteil einer Gruppe sein, dann wird der Name des übergebenen Players zurückgegeben.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Beispiel&#039;&#039;&#039;:&lt;br /&gt;
***&amp;lt;code&amp;gt;my $groupMasterName = SONOSPLAYER_GetMasterPlayerName(&#039;Sonos_Wohnzimmer&#039;);&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Liefert den Masterplayernamen der Gruppe, in der sich der Wohnzimmerplayer gerade befindet.&lt;br /&gt;
**&amp;lt;code&amp;gt;SONOSPLAYER_GetSlavePlayerNames($name)&amp;lt;/code&amp;gt;: Liefert die Teilnehmer einer Gruppe. Der Master wird nicht mit zurückgegeben. Man kann den Namen eines beliebigen Teilnehmers angeben.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Beispiel&#039;&#039;&#039;:&lt;br /&gt;
***&amp;lt;code&amp;gt;my @member = SONOSPLAYER_GetSlavePlayerNames(&#039;Sonos_Wohnzimmer&#039;);&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Liefert alle Teilnehmer der Gruppe in der sich der Player &#039;&#039;Sonos_Wohnzimmer&#039;&#039; gerade befindet. Der Master der Gruppe wird nicht mitgeliefert.&lt;br /&gt;
**&amp;lt;code&amp;gt;SONOSPLAYER_GetRealTargetPlayerHash($hash)&amp;lt;/code&amp;gt;: Liefert den Hash des Masterplayerdevices zu einem übergebenen Sonosplayer-Devicehash. Sollte der Player nicht Bestandteil einer Gruppe sein, dann wird der Hash des übergebenen Players zurückgegeben.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Beispiel&#039;&#039;&#039;:&lt;br /&gt;
***&amp;lt;code&amp;gt;my $groupMasterHash = SONOSPLAYER_GetRealTargetPlayerHash($defs{&#039;Sonos_Wohnzimmer&#039;});&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Liefert den Masterplayerhash der Gruppe, in der sich der Wohnzimmerplayer gerade befindet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Die Funktionalität &amp;quot;ExportSonosBibliothek&amp;quot; ===&lt;br /&gt;
Die Funktionalität &#039;&#039;ExportSonosBibliothek&#039;&#039; ermöglicht einen kompletten Export der Struktur und Titelinformationen wie sie in dem Bereich &#039;&#039;Bibliothek&#039;&#039; des Sonos-Controllers dargestellt wird.&lt;br /&gt;
Dabei wird ein großer Perl-Hash erzeugt, der sowohl die Struktur als auch die eigentlichen Titel enthält. Im Bereich &#039;&#039;Struktur&#039;&#039; werden auf unterster (Titel-)Ebene die IDs der zugehörigen Titel als Verweis abgelegt, sodass man diese nicht mehrfach im Hash vorliegen hat.&lt;br /&gt;
Im Bereich &#039;&#039;Titel&#039;&#039; werden alle irgendwo referenzierten Titel mit ihren IDs und allen von Sonos übermittelten Informationen abgelegt.&lt;br /&gt;
&lt;br /&gt;
Das Ermitteln dauert einige Zeit. Als Beispiel: Mein WindowsServer mit Intel Core i5 mit 2.8GHz benötigt für meine ca. 22.000 Titel 28 Minuten und 1GB RAM zum Ermitteln. Die resultierende Datendatei ist ca. 90MB groß.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Das Grundkonzept ====&lt;br /&gt;
Es gibt einen Setter &#039;&#039;ExportSonosBibliothek&#039;&#039; am Sonosplayer-Device, der eine Datei mit dem übergebenen Dateinamen erzeugt. In dieser Datei wird der komplette Datenhash als textuelle, und damit per &amp;lt;code&amp;gt;eval()&amp;lt;/code&amp;gt; einlesbare, Darstellung gespeichert. &lt;br /&gt;
Die Cover der Titel werden als Aufruf auf den verwendeten Player erzeugt, und es wird berücksichtigt, ob man die Proxy-Einstellung aktiviert hat.&lt;br /&gt;
&lt;br /&gt;
Um diese Datei wieder einzulesen, kann die mitgelieferte Prozedur &amp;lt;code&amp;gt;SONOS_LoadExportedSonosBibliothek($fileName, $deviceName, $internalName)&amp;lt;/code&amp;gt; verwendet werden. Diese legt den geladenen Datenhash in einem Internal mit übergebenem Namen im benannten FHEM-Device ab. Das muss kein Sonosplayer-Device sein, sondern kann auch ein Dummy bzw. ein beliebiges FHEM-Device sein.&lt;br /&gt;
&lt;br /&gt;
Von hier aus kann man mit anderen Methodiken auf diese Daten zugreifen. Durch die Dateiablage kann die Datei auch über einen Neustart hinweg verwendet werden, da die Ermittlung ja etwas Zeit in Anspruch nimmt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Mit Vorsicht ist z.B. der Bereich unter &#039;&#039;Tracks&#039;&#039; zu sehen, da dort alle(!) Titel auftauchen werden. Das kann eine Auswahlmöglichkeit auf einer (Web-)Oberfläche schnell mal sprengen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Das Datenformat ====&lt;br /&gt;
Grundsätzlich gibt es zwei Bereiche im Hash: Einen für die Struktur und einen für die Titel. &lt;br /&gt;
Die Struktur ist dann mit einem dynamischen Unterbaum ausgestattet, um die nächsten Ebenen zu repräsentieren. Welche Ebenen dort vohanden sind, und wie tief die Verschachtelung geht, kann sich u.U. in Zukunft ändern, wenn Sonos dort Anpassungen vornimmt.&lt;br /&gt;
Die Titel sind als eine Liste ohne weitere Verschachtelung abgelegt.&lt;br /&gt;
&lt;br /&gt;
Hier der Hash mit einigen Dummy-Beispieldaten, um den Inhalt zu verdeutlichen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
my $hash = &lt;br /&gt;
{&#039;Structure&#039; =&amp;gt; {&lt;br /&gt;
    &#039;A:PLAYLISTS&#039; =&amp;gt; {&lt;br /&gt;
        &#039;ID&#039; =&amp;gt; &#039;A:PLAYLISTS&#039;,&lt;br /&gt;
        &#039;Type&#039; =&amp;gt; &#039;Container&#039;,&lt;br /&gt;
        &#039;Title&#039; =&amp;gt; &#039;Playlists&#039;,&lt;br /&gt;
        &#039;Children&#039; =&amp;gt; {}&lt;br /&gt;
    },&lt;br /&gt;
    &#039;A:GENRE&#039; =&amp;gt; {&lt;br /&gt;
        &#039;ID&#039; =&amp;gt; &#039;A:GENRE&#039;,&lt;br /&gt;
        &#039;Type&#039; =&amp;gt; &#039;Container&#039;,&lt;br /&gt;
        &#039;Title&#039; =&amp;gt; &#039;Genres&#039;,&lt;br /&gt;
        &#039;Children&#039; =&amp;gt; {}&lt;br /&gt;
    },&lt;br /&gt;
    &#039;A:ALBUM&#039; =&amp;gt; {&lt;br /&gt;
        &#039;ID&#039; =&amp;gt; &#039;A:ALBUM&#039;,&lt;br /&gt;
        &#039;Type&#039; =&amp;gt; &#039;Container&#039;,&lt;br /&gt;
        &#039;Title&#039; =&amp;gt; &#039;Albums&#039;,&lt;br /&gt;
        &#039;Children&#039; =&amp;gt; {&lt;br /&gt;
            &#039;A:ALBUM/Chaos&#039; =&amp;gt; {&lt;br /&gt;
                &#039;ID&#039; =&amp;gt; &#039;A:ALBUM/Chaos&#039;,&lt;br /&gt;
                &#039;Type&#039; =&amp;gt; &#039;Container&#039;,&lt;br /&gt;
                &#039;Title&#039; =&amp;gt; &#039;Chaos&#039;,&lt;br /&gt;
                &#039;Artist&#039; =&amp;gt; &#039;Herbert Grönemeyer&#039;,&lt;br /&gt;
                &#039;Cover&#039; =&amp;gt; &#039;/Pfad/zum/Cover/auch/mit/proxy/pfad&#039;,&lt;br /&gt;
                &#039;Children&#039; =&amp;gt; {&lt;br /&gt;
                    &#039;TitleID1&#039; =&amp;gt; {&lt;br /&gt;
                        &#039;ID&#039; =&amp;gt; &#039;TitleID1&#039;,&lt;br /&gt;
                        &#039;Type&#039; =&amp;gt; &#039;Track&#039;&lt;br /&gt;
                    },&lt;br /&gt;
                    &#039;TitleID2&#039; =&amp;gt; {&lt;br /&gt;
                        &#039;ID&#039; =&amp;gt; &#039;TitleID2&#039;,&lt;br /&gt;
                        &#039;Type&#039; =&amp;gt; &#039;Track&#039;&lt;br /&gt;
                    },&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
            &#039;A:ALBUM/Testalbum&#039; =&amp;gt; {&lt;br /&gt;
                &#039;ID&#039; =&amp;gt; &#039;A:ALBUM/Testalbum&#039;,&lt;br /&gt;
                &#039;Type&#039; =&amp;gt; &#039;Container&#039;,&lt;br /&gt;
                &#039;Title&#039; =&amp;gt; &#039;Testalbum&#039;,&lt;br /&gt;
                &#039;Artist&#039; =&amp;gt; &#039;Hansi Fischer&#039;,&lt;br /&gt;
                &#039;Cover&#039; =&amp;gt; &#039;/Pfad/zum/Cover/auch/mit/proxy/pfad&#039;,&lt;br /&gt;
                &#039;Children&#039; =&amp;gt; {&lt;br /&gt;
                    &#039;TitleID1&#039; =&amp;gt; {&lt;br /&gt;
                        &#039;ID&#039; =&amp;gt; &#039;TitleID3&#039;,&lt;br /&gt;
                        &#039;Type&#039; =&amp;gt; &#039;Track&#039;&lt;br /&gt;
                    },&lt;br /&gt;
                    &#039;TitleID2&#039; =&amp;gt; {&lt;br /&gt;
                        &#039;ID&#039; =&amp;gt; &#039;TitleID4&#039;,&lt;br /&gt;
                        &#039;Type&#039; =&amp;gt; &#039;Track&#039;&lt;br /&gt;
                    },&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &#039;A:TRACKS&#039; =&amp;gt; {&lt;br /&gt;
        &#039;ID&#039; =&amp;gt; &#039;A:TRACKS&#039;,&lt;br /&gt;
        &#039;Type&#039; =&amp;gt; &#039;Container&#039;,&lt;br /&gt;
        &#039;Title&#039; =&amp;gt; &#039;Tracks&#039;,&lt;br /&gt;
        &#039;Children&#039; =&amp;gt; {}&lt;br /&gt;
    },&lt;br /&gt;
    &#039;A:COMPOSER&#039; =&amp;gt; {&lt;br /&gt;
        &#039;ID&#039; =&amp;gt; &#039;A:COMPOSER&#039;,&lt;br /&gt;
        &#039;Type&#039; =&amp;gt; &#039;Container&#039;,&lt;br /&gt;
        &#039;Title&#039; =&amp;gt; &#039;Composers&#039;,&lt;br /&gt;
        &#039;Children&#039; =&amp;gt; {}&lt;br /&gt;
    },&lt;br /&gt;
    &#039;A:ARTIST&#039; =&amp;gt; {&lt;br /&gt;
        &#039;ID&#039; =&amp;gt; &#039;A:ARTIST&#039;,&lt;br /&gt;
        &#039;Type&#039; =&amp;gt; &#039;Container&#039;,&lt;br /&gt;
        &#039;Title&#039; =&amp;gt; &#039;Contributing Artists&#039;,&lt;br /&gt;
        &#039;Children&#039; =&amp;gt; {}&lt;br /&gt;
    },&lt;br /&gt;
    &#039;A:ALBUMARTIST&#039; =&amp;gt; {&lt;br /&gt;
        &#039;ID&#039; =&amp;gt; &#039;A:ALBUMARTIST&#039;,&lt;br /&gt;
        &#039;Type&#039; =&amp;gt; &#039;Container&#039;,&lt;br /&gt;
        &#039;Title&#039; =&amp;gt; &#039;Artists&#039;,&lt;br /&gt;
        &#039;Children&#039; =&amp;gt; {}&lt;br /&gt;
    }&lt;br /&gt;
 },&lt;br /&gt;
 &#039;Titles&#039; =&amp;gt; {&lt;br /&gt;
     &#039;TitleID1&#039; =&amp;gt; {&lt;br /&gt;
         &#039;ID&#039; =&amp;gt; &#039;TitleID1&#039;,&lt;br /&gt;
         &#039;TrackURI&#039; =&amp;gt; &#039;/Pfad/zur/Datei.mp3&#039;,&lt;br /&gt;
         &#039;Title&#039; =&amp;gt; &#039;Titel des Musikstücks&#039;,&lt;br /&gt;
         &#039;Artist&#039; =&amp;gt; &#039;Interpret des Musikstücks&#039;,&lt;br /&gt;
         &#039;Album&#039; =&amp;gt; &#039;Titel des Albums&#039;,&lt;br /&gt;
         &#039;AlbumArtist&#039; =&amp;gt; &#039;Interpret des Albums&#039;,&lt;br /&gt;
         &#039;Cover&#039; =&amp;gt; &#039;/Pfad/zum/Cover/auch/mit/proxy/pfad&#039;,&lt;br /&gt;
         &#039;OriginalTrackNumber&#039; =&amp;gt; 5&lt;br /&gt;
     }, &lt;br /&gt;
     &#039;TitleIDn&#039; =&amp;gt; {&lt;br /&gt;
         &#039;ID&#039; =&amp;gt; &#039;TitleIDn&#039;,&lt;br /&gt;
         &#039;TrackURI&#039; =&amp;gt; &#039;/Pfad/zur/Datei.mp3&#039;,&lt;br /&gt;
         &#039;Title&#039; =&amp;gt; &#039;Titel des Musikstücks&#039;,&lt;br /&gt;
         &#039;Artist&#039; =&amp;gt; &#039;Interpret des Musikstücks&#039;,&lt;br /&gt;
         &#039;Album&#039; =&amp;gt; &#039;Titel des Albums&#039;,&lt;br /&gt;
         &#039;AlbumArtist&#039; =&amp;gt; &#039;Interpret des Albums&#039;,&lt;br /&gt;
         &#039;Cover&#039; =&amp;gt; &#039;/Pfad/zum/Cover/auch/mit/proxy/pfad&#039;,&lt;br /&gt;
         &#039;OriginalTrackNumber&#039; =&amp;gt; 5&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Wie kann es angezeigt werden? ====&lt;br /&gt;
(Das soll noch erweitert werden...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Was wird alles automatisch erzeugt? ==&lt;br /&gt;
Hier soll kurz beschrieben werden, welche Elemente der automatische Erkennungsprozess anlegt, und welche Funktion diese haben.&lt;br /&gt;
&lt;br /&gt;
=== Automatische Zoneplayererkennung ===&lt;br /&gt;
Erkannte Zoneplayer werden als &#039;&#039;&#039;SONOSPLAYER&#039;&#039;&#039;-Device angelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;define Sonos_Wohnzimmer SONOSPLAYER RINCON_000E5828D0F401400_MR&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Name des Device wird aus dem Namen des SONOS-Device und dem Namen der Zone gebildet. Dabei werden Leer- und Sonderzeichen in &amp;quot;&amp;lt;code&amp;gt;_&amp;lt;/code&amp;gt;&amp;quot; umgewandelt.&lt;br /&gt;
&lt;br /&gt;
Beim Anlegen werden automatisch einige Attribute mit angelegt, am Beispiel eines Wohnzimmer-Players:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr Sonos_Wohnzimmer generateInfoSummarize1 &amp;lt;NormalAudio&amp;gt;&amp;lt;Artist prefix=&amp;quot;(&amp;quot; suffix=&amp;quot;)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;Title prefix=&amp;quot; &#039;&amp;quot; suffix=&amp;quot;&#039;&amp;quot; ifempty=&amp;quot;[Keine Musikdatei]&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;Album prefix=&amp;quot; vom Album &#039;&amp;quot; suffix=&amp;quot;&#039;&amp;quot;/&amp;gt;&amp;lt;/NormalAudio&amp;gt; &lt;br /&gt;
		&amp;lt;StreamAudio&amp;gt;&amp;lt;Sender suffix=&amp;quot;:&amp;quot;/&amp;gt;&amp;lt;SenderCurrent prefix=&amp;quot; &#039;&amp;quot; suffix=&amp;quot;&#039; -&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;SenderInfo prefix=&amp;quot; &amp;quot;/&amp;gt;&amp;lt;/StreamAudio&amp;gt;&lt;br /&gt;
attr Sonos_Wohnzimmer generateInfoSummarize2 &amp;lt;TransportState/&amp;gt;&amp;lt;InfoSummarize1 prefix=&amp;quot; =&amp;gt; &amp;quot;/&amp;gt;&lt;br /&gt;
attr Sonos_Wohnzimmer generateInfoSummarize3 &amp;lt;Volume prefix=&amp;quot;Lautstärke: &amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;Mute instead=&amp;quot; ~ Kein Ton&amp;quot; ifempty=&amp;quot; ~ Ton An&amp;quot; emptyval=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
		 ~ Balance: &amp;lt;Balance ifempty=&amp;quot;Mitte&amp;quot; emptyval=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;HeadphoneConnected instead=&amp;quot; ~ Kopfhörer aktiv&amp;quot; &lt;br /&gt;
			ifempty=&amp;quot; ~ Kein Kopfhörer&amp;quot; emptyval=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
attr Sonos_Wohnzimmer icon icoSONOSPLAYER_icon-ZP90.png&lt;br /&gt;
attr Sonos_Wohnzimmer room Sonos&lt;br /&gt;
attr Sonos_Wohnzimmer stateVariable presence&lt;br /&gt;
attr Sonos_Wohnzimmer group Wohnzimmer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dadurch ist dieses Device direkt in der FHEM-Oberfläche steuerbar. Auch hier gilt, dass man das natürlich anpassen kann. Das sollen nur vereinfachende Vorgaben sein.&lt;br /&gt;
Das Attribut &amp;quot;&amp;lt;code&amp;gt;room&amp;lt;/code&amp;gt;&amp;quot; wird wieder aus dem Namen des SONOS-Device gebildet.&lt;br /&gt;
Das Attribut &amp;quot;&amp;lt;code&amp;gt;group&amp;lt;/code&amp;gt;&amp;quot; wird aus dem Namen der Zone gebildet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zusätzliche Readingsgroups, die zunächst nichts anzeigen ===&lt;br /&gt;
Es werden zusätzliche [[readingsGroup]]s angelegt, die zunächst keine Inhalte anzeigen. Diese lesen das der Readingsgroup entsprechende Reading &#039;&#039;Favourites&#039;&#039;, &#039;&#039;Radios&#039;&#039; oder &#039;&#039;Playlists&#039;&#039; aus.&lt;br /&gt;
Um diese Readings zu füllen gibt es bereits ein angelegtes &#039;&#039;&#039;userReadings&#039;&#039;&#039;, welches auf die Get-Aufrufe von &#039;&#039;FavouritesWithCovers&#039;&#039;, &#039;&#039;RadiosWithCovers&#039;&#039; oder &#039;&#039;PlaylistsWithCovers&#039;&#039; reagiert und die entsprechenden Readings füllt.&lt;br /&gt;
&lt;br /&gt;
Unter [[#Beispiel für eine ReadingsGroup für die Darstellung von Listen (Favoriten, Playlisten und Radios)|Beispiel für eine ReadingsGroup für die Darstellung von Listen (Favoriten, Playlisten und Radios)]] gibt es Beispiele für ein at-Statement, mit dem diese Readings automatisch gefüllt werden können. &lt;br /&gt;
Damit werden diese auch in FHEM aktualisiert, wenn man diese am Sonos-Controller verändert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Definition der InfoSummarize ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
infoSummarizeX := &amp;lt;NormalAudio&amp;gt;:sumElem:&amp;lt;/NormalAudio&amp;gt; &amp;lt;StreamAudio&amp;gt;:sumElem:&amp;lt;/StreamAudio&amp;gt;|&lt;br /&gt;
	:sumElem:&lt;br /&gt;
sumElem := &amp;lt;:variable:[ prefix=&amp;quot;:text:&amp;quot;][ suffix=&amp;quot;:text:&amp;quot;][ instead=&amp;quot;:text:&amp;quot;]&lt;br /&gt;
	[ ifempty=&amp;quot;:text:&amp;quot;][ emptyval=&amp;quot;:text:&amp;quot;]/&amp;gt;&lt;br /&gt;
variable := TransportState|NumberOfTracks|Track|TrackDuration|Title|Artist|Album|&lt;br /&gt;
	OriginalTrackNumber|AlbumArtist|Sender|SenderCurrent|SenderInfo|StreamAudio|NormalAudio|&lt;br /&gt;
	AlbumArtURI|nextTrackDuration|nextTrackURI|nextAlbumArtURI|nextTitle|nextArtist|&lt;br /&gt;
	nextAlbum|nextAlbumArtist|nextOriginalTrackNumber|Volume|Mute|Shuffle|Repeat|RepeatOne|&lt;br /&gt;
	CrossfadeMode|Balance|HeadphoneConnected|SleepTimer|Presence|RoomName|RoomNameAlias|&lt;br /&gt;
	SaveRoomName|PlayerType|Location|SoftwareRevision|SerialNum|InfoSummarize1|InfoSummarize2|&lt;br /&gt;
	InfoSummarize3|InfoSummarize4&lt;br /&gt;
text := [Beliebiger Text ohne doppelte Anführungszeichen]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die Unterscheidung zwischen &amp;lt;code&amp;gt;&amp;lt;NormalAudio&amp;gt;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&amp;lt;StreamAudio&amp;gt;&amp;lt;/code&amp;gt; liegt bei der anliegenden Musikquelle. Gestreamte Audioquellen habe nur einen kleineren Set an Informationen vorliegen, während bei einer &amp;quot;normalen&amp;quot; Musikquelle z.B. eine Unterscheidung zwischen Artist und Title gemacht wird, und im Gegenzug z.B. kein Sendername existiert.&amp;lt;br /&amp;gt;&lt;br /&gt;
Man kann diese Unterscheidung auch weglassen, und direkt die Variablenausgaben hinschreiben. Dann gilt der Code für beide Musikquellenarten gleichermaßen (u.U. sind dann einige Felder nicht sinnvoll bzw. gar nicht gefüllt).&lt;br /&gt;
&lt;br /&gt;
Die Tag-Erweiterungen &amp;lt;code&amp;gt;prefix&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;suffix&amp;lt;/code&amp;gt; werden jeweils vor bzw. hinter den Feldwert in die Ausgabe gesetzt, wenn es einen Feldwert zum Ausgeben gibt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Die Erweiterung &amp;lt;code&amp;gt;instead&amp;lt;/code&amp;gt; wird anstatt des Feldwerts ausgegeben, wenn normalerweise der Feldwert ausgegeben werden würde (abhängig davon, ob der Feldwert als &#039;&#039;empty&#039;&#039; angesehen wird, oder nicht).&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Erweiterung &amp;lt;code&amp;gt;ifempty&amp;lt;/code&amp;gt; wird eingesetzt, wenn es gerade &#039;&#039;keinen&#039;&#039; Feldinhalt gibt. In diesem Fall werden natürlich auch keine Pre- und Suffixe sowie Instead-Angaben ausgegeben.&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Erweiterung &amp;lt;code&amp;gt;emptyval&amp;lt;/code&amp;gt; legt fest, was neben einem undefinierten Feldwert noch als &#039;&#039;leer&#039;&#039; gelten soll. Dies ist interessant, wenn man z.B. den Zahlwert &#039;&#039;0&#039;&#039; als &#039;&#039;leer&#039;&#039; festlegen möchte.&amp;lt;br /&amp;gt;&lt;br /&gt;
Beim Definieren dieser Erweiterungen ist zu beachten, dass keine doppelten Anführungszeichen angegeben werden. Diese zerstören die weitere, interne Verarbeitung durch FHEM (Irgendwas ist immer :-)&lt;br /&gt;
Desweiteren können Verweise auf andere &amp;lt;code&amp;gt;InfoSummarize&amp;lt;/code&amp;gt;-Felder nur in aufsteigender Reihenfolge erfolgen. Es sind also keine Vorwärtsreferenzen oder Rekursionen möglich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fehlende Kommandos ==&lt;br /&gt;
Sollte eine Steuerungsmöglichkeit oder Information fehlen, oder anderes gewünscht sein, dann einfach eine Nachricht ins Forum. Meistens läßt sich da was machen :-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ideenpipeline ===&lt;br /&gt;
Folgende Ideen sind bereits in der gedanklichen Pipeline. Aber alles Schritt für Schritt und der Reihe nach:&lt;br /&gt;
*&#039;&#039;&#039;Momentan Leer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Erledigte Ideen:&lt;br /&gt;
*&#039;&#039;&#039;Zwischendurchsage&#039;&#039;&#039;: Eine Datei abspielen, und danach wieder an der alten Stelle mit der alten Lautstärke weiterspielen (In Version 1.5 hinzugekommen)&lt;br /&gt;
*&#039;&#039;&#039;Beliebige MP3s in die Queue legen oder abspielen&#039;&#039;&#039;: Entgegen dem Controllergefühl kann man sehr wohl völlig frei abspielbare Dateien in der Queue haben. Es kann nur sein, das man kein Cover oder ähnliches angezeigt bekommt (noch zu testen). (In Version 1.5 hinzugekommen, Cover funktionieren wie immer)&lt;br /&gt;
*&#039;&#039;&#039;Beliebige Radiostationen abspielen&#039;&#039;&#039;: Hier gilt das gleich wie für die MP3s. (In Version 1.5 hinzugekommen, Cover und Streaminformationen funktionieren beim Direktabspielen, aus der Queue heraus wird nur der Stream abgespielt)&lt;br /&gt;
*&#039;&#039;&#039;Lautstärkegrenzen festlegen&#039;&#039;&#039;: Damit soll festgelegt werden können, in welchen Grenzen die Lautstärke überhaupt verändert werden kann. Das soll in der entsprechenden Zone natürlich auch für die normalen Sonos-Controller gelten. Dabei werden explizit &#039;&#039;keine&#039;&#039; Readings im FHEM aktualisiert, da eine Lautstärkeänderung sonst von der Verarbeitungsgeschwindigkeit von FHEM (inkl. seiner Notifies) abhängig wäre. (In Version 1.8 hinzugekommen)&lt;br /&gt;
*&#039;&#039;&#039;Zonentopologie verwenden/anpassen&#039;&#039;&#039;: Es soll eine Speichermöglichkeit für die aktuelle Topologie geschaffen werden, und auch eine neue Topologie gesetzt werden können. Ich stelle mir da eine Art von &amp;quot;Szenen&amp;quot; vor die man nach Bedarf setzen und dann natürlich auch steuern kann. Diese Szenen sollen den Gruppierungszustand aller verfügbaren ZonePlayer repräsentieren (können), also wer mit wem in einer Gruppe ist, und wer der jeweilige Koordinator ist (nur dieser kann die Steuerung entgegennehmen, und für die gesamte Gruppe ausführen). (In Version 2.0 hinzugekommen)&lt;br /&gt;
*&#039;&#039;&#039;Button-Events&#039;&#039;&#039;: Es soll eine Möglichkeit zum direkten Reagieren auf Tastenevents am Player existieren. Man soll verschiedene Tastensequenzen festlegen können, die dann FHEM-Events erzeugen, auf die man reagieren kann. (In Version 2.0 hinzugekommen)&lt;br /&gt;
*&#039;&#039;&#039;relatives Spulen&#039;&#039;&#039;: während einer Wiedergabe soll mit &amp;quot;currentTrackPosition x&amp;quot; mit x festgelegt werden, umwieviel sekunden vorgespult werden soll. Analog dazu das zurückspulen (In Version vom 12.3.2017 hinzugekommen)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
Hier können mit der Zeit ein paar Beispiele eingestellt werden, um die Möglichkeiten zu verdeutlichen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Die Codebeispiele wurden umgebaut, damit diese für eine Bearbeitung über die FHEMWeb-Oberfläche passend sind. Wenn man die Beispiele direkt in einer Konfigurationsdatei verwenden möchte, so müssen die &#039;&#039;&#039;;&#039;&#039;&#039; maskiert werden (also verdoppelt).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel zum Loggen aller Aktionen auf allen Playern ===&lt;br /&gt;
&amp;lt;pre&amp;gt;define FileLog_Sonos_Actions FileLog /path/to/log/Sonos_Actions-%Y-%m.log \&lt;br /&gt;
		Sonos_.*:.*LastActionResult.*&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hiermit wird jede Aktion, die, durch FHEM verursacht, an die Player gesendet wurde, mitgeschrieben. Sehr praktisch für Fehlersuche, bzw. die Kontrolle darüber, was eigentlich von FHEM aus so auf den Playern gesteuert wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel zum automatischen Abspielen einer Liste nach dem Einschalten eines Players ===&lt;br /&gt;
&amp;lt;pre&amp;gt;define Sonos_Wohnzimmer_Appeared_Notify notify Sonos_Wohnzimmer:presence:.appeared { \&lt;br /&gt;
	fhem &amp;quot;set Sonos_Wohnzimmer LoadPlaylist R.%20Spielliste&amp;quot; ; \&lt;br /&gt;
	fhem &amp;quot;set Sonos_Wohnzimmer Volume 15&amp;quot; ; \&lt;br /&gt;
	fhem &amp;quot;set Sonos_Wohnzimmer Track random&amp;quot; ; \&lt;br /&gt;
	fhem &amp;quot;set Sonos_Wohnzimmer Play&amp;quot; \&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird auf das Event &#039;&#039;&#039;presence: appeared&#039;&#039;&#039; reagiert und eine Playlist geladen (hier mit Leerzeichen im Namen, darum mittels &amp;quot;&amp;lt;code&amp;gt;%20&amp;lt;/code&amp;gt;&amp;quot; HTML-kodiert, was wiederum bei FHEM-Featurelevel &amp;lt; 5.7 wegen FHEM-Notify auf &amp;quot;&amp;lt;code&amp;gt;%%20&amp;lt;/code&amp;gt;&amp;quot; kodiert werden müsste). Anschließend wird die Lautstärke gesetzt, ein Titel ausgewählt (zufällig) und das Abspielen gestartet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da dies aber auch bei einem Neustart von FHEM getriggert wird, kann man noch eine zusätzliche Prüfung einbauen:&lt;br /&gt;
&amp;lt;pre&amp;gt;define Sonos_Wohnzimmer_Appeared_Notify notify Sonos_Wohnzimmer:presence:.appeared { \&lt;br /&gt;
	if (ReadingsVal(&#039;Sonos_Wohnzimmer&#039;, &#039;numberOfTracks&#039;, -1) == 0) {\&lt;br /&gt;
		fhem &amp;quot;set Sonos_Wohnzimmer LoadPlaylist R.%20Spielliste&amp;quot; ; \&lt;br /&gt;
		fhem &amp;quot;set Sonos_Wohnzimmer Volume 15&amp;quot; ; \&lt;br /&gt;
		fhem &amp;quot;set Sonos_Wohnzimmer Track random&amp;quot; ; \&lt;br /&gt;
		fhem &amp;quot;set Sonos_Wohnzimmer Play&amp;quot; \&lt;br /&gt;
	}\&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternativ kann man auch das Reading &#039;&#039;&#039;currentTrackURI&#039;&#039;&#039; prüfen, je nachdem, was mit dem Player passieren soll.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für eine Verstärkerschaltung auf Basis des Player-Zustands ===&lt;br /&gt;
&amp;lt;pre&amp;gt;define Sonos_Wohnzimmer_GoPlaying_Notify notify Sonos_Wohnzimmer:transportState.*PLAYING { \&lt;br /&gt;
			fhem &amp;quot;delete wohnzimmer_Sonos_Ton_Off_Timer&amp;quot; ; \&lt;br /&gt;
			if (Value(&#039;wohnzimmer_Sonos_Ton&#039;) ne &#039;on&#039;) { \&lt;br /&gt;
				fhem &amp;quot;set wohnzimmer_Sonos_Ton on&amp;quot; \&lt;br /&gt;
			} \&lt;br /&gt;
		}&lt;br /&gt;
define Sonos_Wohnzimmer_GoNotPlaying_Notify notify \&lt;br /&gt;
		Sonos_Wohnzimmer:transportState.*(STOPPED|PAUSED_PLAYBACK) { \&lt;br /&gt;
			fhem &amp;quot;delete wohnzimmer_Sonos_Ton_Off_Timer&amp;quot; ; \&lt;br /&gt;
			fhem &amp;quot;define wohnzimmer_Sonos_Ton_Off_Timer at +00:05:00 \&lt;br /&gt;
				set wohnzimmer_Sonos_Ton off&amp;quot; \&lt;br /&gt;
		}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird beim Wechsel des &amp;lt;code&amp;gt;transportState&amp;lt;/code&amp;gt; auf &amp;quot;&amp;lt;code&amp;gt;PLAYING&amp;lt;/code&amp;gt;&amp;quot; der Verstärker angeschaltet, und beim Wechsel auf &amp;quot;&amp;lt;code&amp;gt;STOPPED&amp;lt;/code&amp;gt;&amp;quot; oder &amp;quot;&amp;lt;code&amp;gt;PAUSED_PLAYBACK&amp;lt;/code&amp;gt;&amp;quot; ein Timer zum Ausschalten des Verstärkers in 5 Minuten definiert.&amp;lt;br /&amp;gt;Der Timer ist notwendig, da beim Wechsel zwischen einem &amp;quot;normalen&amp;quot; Titel und einem Radiostream ein kurzer Zwischenwechsel auf &amp;quot;&amp;lt;code&amp;gt;STOPPED&amp;lt;/code&amp;gt;&amp;quot; erfolgt, und ich nicht den Verstärker innerhalb von ein paar Sekunden aus- und wieder einschalten will.&lt;br /&gt;
&lt;br /&gt;
Das Ganze geht mittlerweile viel kürzer mit dem Modul [[DOIF]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;define Sonos_Wohnzimmer_PlayingCheck DOIF ([Sonos_Wohnzimmer:transportState] eq &amp;quot;PLAYING&amp;quot;) \&lt;br /&gt;
	(set wohnzimmer_Sonos_Ton on) DOELSE (set wohnzimmer_Sonos_Ton off)&lt;br /&gt;
attr Sonos_Wohnzimmer_PlayingCheck wait 0:300&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für das Loggen des gerade abgespielten Titels ===&lt;br /&gt;
&amp;lt;pre&amp;gt;define FileLog_Sonos_Wohnzimmer FileLog /etc/fhem/log/Sonos_Wohnzimmer-%Y-%m.log \&lt;br /&gt;
		Sonos_Wohnzimmer:infoSummarize2:.{2,}&lt;br /&gt;
attr FileLog_Sonos_Wohnzimmer room Sonos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird bei jedem Wechsel des Titels oder des Abspielzustands ein Eintrag ins Log geschrieben. Damit kann man, auch bei einem Radiosender, verfolgen, welche Titel zu welcher Zeit so über den Player gelaufen sind :-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für eine Stummschaltung bei einem Anruf ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define fritzBox_anrufstartring_notify notify fritzBox:.*ring set Sonos_Wohnzimmer VolumeSave 15&lt;br /&gt;
define fritzBox_anrufstartcall_notify notify fritzBox:.*call set Sonos_Wohnzimmer VolumeSave +0&lt;br /&gt;
define fritzBox_anrufende_notify notify fritzBox:.*disconnect set Sonos_Wohnzimmer VolumeRestore&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Trigger auf &#039;call&#039; existiert nur, damit ausgehende Telefonate beim Beenden nicht die Lautstärke verändern. Das passiert, weil das Disconnected-Event auch nach ausgehenden Anrufen kommt.&amp;lt;br /&amp;gt;Das Beispiel kann man natürlich noch beliebig erweitern, vielleicht etwas mit Anrufererkennung usw.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für eine Anrufsignalisierung per MP3 bei einem Anruf ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define fritzBox_anrufstartringsong_notify notify fritzBox:.*ring set Sonos_Wohnzimmer \&lt;br /&gt;
		PlayURITemp \\Server\Audio\RingRingRing.mp3 30&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird bei Anruf die angegebene MP3-Datei temporär mit der Lautstärke 30 eingeblendet. Wenn die Datei abgespielt wurde, wird der vorherige Zustand im Player wiederhergestellt, und es geht weiter, wo unterbrochen wurde.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für beide Varianten beim Telefonanruf gleichzeitig ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define fritzBox_anrufstartring_notify notify fritzBox:.*ring set Sonos_Wohnzimmer VolumeSave 15 \&lt;br /&gt;
		;; set Sonos_Wohnzimmer PlayURITemp \\Server\Audio\RingRingRing.mp3 30&lt;br /&gt;
define fritzBox_anrufstartcall_notify notify fritzBox:.*call set Sonos_Wohnzimmer VolumeSave +0&lt;br /&gt;
define fritzBox_anrufende_notify notify fritzBox:.*disconnect set Sonos_Wohnzimmer VolumeRestore&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel soll nur die Kombinationsmöglichkeiten verdeutlichen, und hat mehr spielerischen Character.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für eine Sprachdurchsage auf Basis eines Notify ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define wohnzimmer_Tastenfeld_1_Notify notify wohnzimmer_Tastenfeld_1 set Sonos_Wohnzimmer Speak \&lt;br /&gt;
		45 de Hier dann die Textnachricht, wie sie auf dem Player ausgegeben werden soll.&lt;br /&gt;
define wohnzimmer_Tastenfeld_2_Notify notify wohnzimmer_Tastenfeld_2 set Sonos_Wohnzimmer Speak \&lt;br /&gt;
		+10 de Hier dann die Textnachricht, wie sie auf dem Player ausgegeben werden soll.&lt;br /&gt;
define wohnzimmer_Tastenfeld_3_Notify notify wohnzimmer_Tastenfeld_3 set Sonos_Wohnzimmer Speak \&lt;br /&gt;
		+0 en Hello, this is a short message.&lt;br /&gt;
&lt;br /&gt;
define wohnzimmer_Tastenfeld_4_doif DOIF ([EnO_switch:?B0] and [?06:00-09:05]) \&lt;br /&gt;
    ({my $temp = &amp;quot;Außentemperatur: &amp;quot; . ReadingsVal(&amp;quot;MeinWetter&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;unbekannt&amp;quot;) . \&lt;br /&gt;
    &amp;quot; °C. Höchsttemperatur: &amp;quot; . ReadingsVal(&amp;quot;MeinWetter&amp;quot;,&amp;quot;fc1_high_c&amp;quot;,&amp;quot;unbekannt&amp;quot;) . &amp;quot; °.&amp;quot;;; \&lt;br /&gt;
    fhem &amp;quot;set Sonos_Bad Speak 30 de $temp&amp;quot;})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1: Hier wird auf Basis eines Notify (hier ein FS20-Taster) eine Textnachricht auf Deutsch mit der Lautstärke 45 auf dem SonosPlayer ausgegeben.&amp;lt;br /&amp;gt;&lt;br /&gt;
2: Hier wird eine deutsche Textnachricht mit 10 Einheiten lauter als aktuell eingestellt ausgegeben.&amp;lt;br /&amp;gt;&lt;br /&gt;
3: Hier wird eine englische Textnachricht mit der gleichen Lautstärke wie aktuell eingestellt ausgegeben.&amp;lt;br /&amp;gt;&lt;br /&gt;
4: Hier wird, wenn der EnOcean-Taster rechts oben (&amp;quot;B0&amp;quot;) zwischen 6:00 und 9:05 Uhr gedrückt wird, die aktuelle Außentemperatur und die Tageshöchsttemperatur (vom [[weather]]-Modul) in Lautstärke 30 ausgegeben (nicht mit [[notify]], sondern mit [[DOIF]] realisiert).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für das Reagieren auf Tastenevents ===&lt;br /&gt;
Hier ein Beispiel, wie man die Tasten an einem Play5 (und natürlich auch an jedem anderen Player) zu einer einfachen, autarken Steuerung programmieren kann.&lt;br /&gt;
&lt;br /&gt;
Grundlagen, die ich zur allgemeinen Vereinfachung in meiner &amp;lt;code&amp;gt;99_myUtils.pm&amp;lt;/code&amp;gt; habe:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Wird benötigt, da ein reDefine nur einen Befehl aufrufen kann&lt;br /&gt;
sub pauseMuteOff($) {&lt;br /&gt;
  my ($devName) = @_;&lt;br /&gt;
&lt;br /&gt;
  if (defined($main::defs{$devName})) {&lt;br /&gt;
    fhem(&amp;quot;set $devName Pause&amp;quot;);&lt;br /&gt;
    fhem(&amp;quot;set $devName Mute Off&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Löscht ein Define, wenn es existiert. Damit kann man dynamische AT-Defines löschen, &lt;br /&gt;
# ohne zu wissen, ob sie überhaupt existieren&lt;br /&gt;
sub deleteDefineIfExists($) {&lt;br /&gt;
  my ($devName) = @_;&lt;br /&gt;
&lt;br /&gt;
  if (defined($main::defs{$devName})) {&lt;br /&gt;
    fhem(&amp;quot;delete $devName&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Definiert ein define neu; Heisst, es wird, wenn es bereits existiert, gelöscht und neu angelegt&lt;br /&gt;
sub reDefine($$) {&lt;br /&gt;
  my ($devName, $define) = @_;&lt;br /&gt;
&lt;br /&gt;
  deleteDefineIfExists($devName);&lt;br /&gt;
  fhem(&#039;define &#039;.$devName.&#039; &#039;.$define);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attribut am Sonosplayer-Device:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr Sonos_Schlafzimmer buttonEvents 1:MM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notify-Defines, die die Steuerung übernehmen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Sonos_Schlafzimmer_WantPlaying_Notify notify Sonos_Schlafzimmer:ButtonEvent:.MM \&lt;br /&gt;
	set Sonos_Schlafzimmer Play&lt;br /&gt;
define Sonos_Schlafzimmer_WantStopPlaying notify Sonos_Schlafzimmer:Mute.*1 \&lt;br /&gt;
	{ reDefine(&#039;Schlafzimmer_Sonos_Stop_Timer&#039;, &#039;at +00:00:30 \&lt;br /&gt;
		{ pauseMuteOff(&amp;quot;Sonos_Schlafzimmer&amp;quot;) }&#039;) }&lt;br /&gt;
define Sonos_Schlafzimmer_WantStopPlayingOff notify Sonos_Schlafzimmer:Mute.*0 \&lt;br /&gt;
	{ deleteDefineIfExists(&#039;Schlafzimmer_Sonos_Stop_Timer&#039;) }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird mittels des Attributs &amp;lt;code&amp;gt;buttonEvents&amp;lt;/code&amp;gt; ein Event bei zweimaligen Drücken von &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt;ute innerhalb von 1 Sekunde definiert. &lt;br /&gt;
Anschließend wird auf dieses Event reagiert, indem der Player mit der Wiedergabe beginnen soll.&lt;br /&gt;
Desweiteren wird auf das Ändern von Mute reagiert, indem beim Aktivieren von Mute (also einmal drücken) ein Timer gestartet wird, der nach 30 Sekunden die Wiedergabe anhält, und den Mute-Zustand wieder zurücksetzt. Das letzte notify existiert nur, damit man das Beenden der Wiedergabe innerhalb der 30 Sekunden noch verhindern kann.&lt;br /&gt;
&lt;br /&gt;
Hier ist zu beachten, dass diese Events natürlich nicht unterscheiden können, ob das ganze am Player selbst oder über einen Controller geschaltet wurde. Von beiden Stellen aus kann diese Funktionalität verursacht werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für einen Offline-Sprachsynthetisierer ===&lt;br /&gt;
Man kann mit den Attributen &#039;&#039;Speak1&#039;&#039;, &#039;&#039;Speak2&#039;&#039;, &#039;&#039;Speak3&#039;&#039; und &#039;&#039;Speak4&#039;&#039; am zentralen Sonos-Device Kommandozeilen definieren, die einen Text in eine Sounddatei umwandeln.&lt;br /&gt;
Hier soll dies am Beispiel von &#039;&#039;espeak&#039;&#039; verdeutlicht werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wav:/usr/bin/espeak -v %language% -w %filename% &amp;quot;%text%&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Zuerst muss das Ausgabedateiformat definiert werden, damit die internen Funktionen entsprechend reagieren können. Anschließend wird die Befehlszeile mit den entsprechenden Platzhaltern angegeben.&lt;br /&gt;
Hier muss beachtet werden, dass der Platzhalter &#039;&#039;%language%&#039;&#039; mit dem zweiten Parameter der FHEM-Befehlseingabe gefüllt wird. In diesem Beispiel muss man dort also &#039;&#039;german&#039;&#039; angeben (anstatt &#039;&#039;de&#039;&#039; bei Google), um eine deutsche Ausgabe zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel hat den kleinen Nachteil, dass die Ausgabe in einer WAV-Datei erfolgt, die keinerlei Tag-Informationen tragen kann. Um das zu ändern, kann man einen Konverter nachschalten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mp3:/usr/bin/espeak -v %language% --stdout &amp;quot;%text%&amp;quot; | /usr/bin/avconv -i - %filename%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Damit wird die Ausgabe von &#039;&#039;espeak&#039;&#039; direkt in das MP3-Format umgewandelt, und intern mit den entsprechenden Tags versehen. Hier ist allerdings der Nachteil, dass es etwas länger dauert (auf meinem Raspberry Pi ca. 1-3 Sekunden).&lt;br /&gt;
&lt;br /&gt;
Die in diesem Beispiel verwendeten Pakete können unter Debian mittels der Anweisungen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install espeak&lt;br /&gt;
sudo apt-get install ffmpeg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
installiert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel zu InfoSummarize ===&lt;br /&gt;
Standard, wie er angelegt wird:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
InfoSummarize1 = &amp;lt;NormalAudio&amp;gt;&amp;lt;Artist prefix=&amp;quot;(&amp;quot; suffix=&amp;quot;)&amp;quot;/&amp;gt;\&lt;br /&gt;
	&amp;lt;Title prefix=&amp;quot; &#039;&amp;quot; suffix=&amp;quot;&#039;&amp;quot; ifempty=&amp;quot;[Keine Musikdatei]&amp;quot;/&amp;gt;\&lt;br /&gt;
	&amp;lt;Album prefix=&amp;quot; vom Album &#039;&amp;quot; suffix=&amp;quot;&#039;&amp;quot;/&amp;gt;&amp;lt;/NormalAudio&amp;gt; \&lt;br /&gt;
	&amp;lt;StreamAudio&amp;gt;&amp;lt;Sender suffix=&amp;quot;:&amp;quot;/&amp;gt;\&lt;br /&gt;
	&amp;lt;SenderCurrent prefix=&amp;quot; &#039;&amp;quot; suffix=&amp;quot;&#039; -&amp;quot;/&amp;gt;\&lt;br /&gt;
	&amp;lt;SenderInfo prefix=&amp;quot; &amp;quot;/&amp;gt;&amp;lt;/StreamAudio&amp;gt;&lt;br /&gt;
InfoSummarize2 = &amp;lt;TransportState/&amp;gt;&amp;lt;InfoSummarize1 prefix=&amp;quot; =&amp;gt; &amp;quot;/&amp;gt;&lt;br /&gt;
InfoSummarize3 = &amp;lt;Volume prefix=&amp;quot;Lautstärke: &amp;quot;/&amp;gt;\&lt;br /&gt;
	&amp;lt;Mute instead=&amp;quot; ~ Kein Ton&amp;quot; ifempty=&amp;quot; ~ Ton An&amp;quot; emptyval=&amp;quot;0&amp;quot;/&amp;gt;\&lt;br /&gt;
	 ~ Balance: &amp;lt;Balance ifempty=&amp;quot;Mitte&amp;quot; emptyval=&amp;quot;0&amp;quot;/&amp;gt;\&lt;br /&gt;
	&amp;lt;HeadphoneConnected instead=&amp;quot; ~ Kopfhörer aktiv&amp;quot; ifempty=&amp;quot; ~ Kein Kopfhörer&amp;quot; \&lt;br /&gt;
		emptyval=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei ist zu beachten, dass man auf andere InfoSummarize-Felder verweisen darf, solange man diese nur in aufsteigender Reihenfolge verwendet. Rekursionen oder Vorwärtrsreferenzen werden nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Hier noch ein Beispiel, um die Informationen des nächsten Titels zusammenzufassen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
InfoSummarize4 = &amp;lt;NormalAudio&amp;gt;Nächster Titel: &amp;lt;nextArtist prefix=&amp;quot;(&amp;quot; suffix=&amp;quot;)&amp;quot;/&amp;gt;\&lt;br /&gt;
	&amp;lt;nextTitle prefix=&amp;quot; &#039;&amp;quot; suffix=&amp;quot;&#039;&amp;quot; ifempty=&amp;quot;[Keine Musikdatei]&amp;quot;/&amp;gt;\&lt;br /&gt;
	&amp;lt;nextAlbum prefix=&amp;quot; vom Album &#039;&amp;quot; suffix=&amp;quot;&#039;&amp;quot;/&amp;gt;&amp;lt;/NormalAudio&amp;gt;\&lt;br /&gt;
	&amp;lt;StreamAudio&amp;gt;Kein nächster Titel ermittelbar&amp;lt;/StreamAudio&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für eine Cover-Anzeige des nächsten Titels ===&lt;br /&gt;
Mit diesem Beispiel wird gezeigt, wie man sich einen Weblink für die Anzeige des Covers des nächsten Titels erzeugen kann:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define NextAlbumArt_Wohnzimmer weblink image fhem/icons/SONOSPLAYER/Sonos_Wohnzimmer_NextAlbumArt&lt;br /&gt;
attr NextAlbumArt_Wohnzimmer group Wohnzimmer&lt;br /&gt;
attr NextAlbumArt_Wohnzimmer htmlattr width=&amp;quot;200&amp;quot;&lt;br /&gt;
attr NextAlbumArt_Wohnzimmer room Sonos&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für das Übertragen eines Titels an einen anderen Player ===&lt;br /&gt;
Mein Sohn hat öfter den Wunsch, einen gerade im Wohnzimmer laufenden Titel auch in seine eigene Abspielliste zu bekommen. Der Weg am Sonos-Controller über eine gespeicherte Playliste ist dabei sehr umständlich.&lt;br /&gt;
Ich habe ein 8-fach Sensorfeld an der Wohnzimmerwand, wo ich ein Feld dafür programmiert habe, das Reading &#039;&#039;currentTrackURI&#039;&#039; mittels der Set-Anweisung &#039;&#039;AddURIToQueue&#039;&#039; in die aktuelle Abspielliste meines Sohnes zu packen.&lt;br /&gt;
Das ist natürlich nichts besonderes, aber vielleicht für den einen oder anderen auch eine nette Idee:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define wohnzimmer_Sensorfeld_Notify notify wohnzimmer_Sensorfeld { \&lt;br /&gt;
	fhem &amp;quot;set Sonos_Sohnemann AddURIToQueue &amp;quot;.\&lt;br /&gt;
		ReadingsVal(&amp;quot;Sonos_Wohnzimmer&amp;quot;, &amp;quot;currentTrackURI&amp;quot;, &amp;quot;&amp;quot;) \&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für eine eigene ReadingsGroup zur Darstellung der Cover- und Titelinformationen ===&lt;br /&gt;
Wenn man das Standarddesign der generierten [[readingsGroup]] überarbeiten möchte, muss man sich einfach eine eigene Prozedur in der &#039;&#039;&#039;99_myUtils.pm&#039;&#039;&#039; anlegen, die dann in der [[readingsGroup]] verwendet werden kann.&lt;br /&gt;
&lt;br /&gt;
Da die Original-Vorlage wegen des Vollbildmodus sehr umfangreich ist, gibt es hier nur eine abgespeckte Version, die nur die Anzeige selbst übernimmt. Wer gerne den Vollbildmodus anpassen möchte, kann sich die entsprechende Prozedur &#039;&#039;&#039;SONOS_getCoverTitleRG&#039;&#039;&#039; einfach aus dem Modulcode kopieren (umbenennen nicht vergessen).&lt;br /&gt;
&lt;br /&gt;
Hier die Vorlage der drei Prozeduren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub getCoverTitleRG($;$$) {&lt;br /&gt;
	my ($device, $width, $space) = @_;&lt;br /&gt;
	$width = 500 if (!defined($width));&lt;br /&gt;
	&lt;br /&gt;
	return &#039;&amp;lt;div style=&amp;quot;float: left;&amp;quot;&amp;gt;&#039;.getCoverRG($device).\&lt;br /&gt;
		&#039;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-left: 150px; min-width: &#039;.$width.\&lt;br /&gt;
		&#039;px;&amp;gt;&#039;.getTitleRG($device, $space).&#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub getCoverRG($;$) {&lt;br /&gt;
	my ($device) = @_;&lt;br /&gt;
	&lt;br /&gt;
	return &#039;&amp;lt;img style=&amp;quot;margin-right: 5px; border: 1px solid lightgray; \&lt;br /&gt;
		height: 175px&amp;quot; src=&amp;quot;&#039;.ReadingsVal($device, &#039;currentAlbumArtURL&#039;, &#039;&#039;).&#039;&amp;quot; /&amp;gt;&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub SONOS_getTitleRG($;$) {&lt;br /&gt;
	my ($device, $space) = @_;&lt;br /&gt;
	$space = 20 if (!defined($space));&lt;br /&gt;
	&lt;br /&gt;
	my $infoString = &#039;&#039;;&lt;br /&gt;
	&lt;br /&gt;
	my $transportState = ReadingsVal($device, &#039;transportState&#039;, &#039;&#039;);&lt;br /&gt;
	$transportState = &#039;Spiele&#039; if ($transportState eq &#039;PLAYING&#039;);&lt;br /&gt;
	$transportState = &#039;Pausiere&#039; if ($transportState eq &#039;PAUSED_PLAYBACK&#039;);&lt;br /&gt;
	$transportState = &#039;Stop bei&#039; if ($transportState eq &#039;STOPPED&#039;);&lt;br /&gt;
  &lt;br /&gt;
	# Läuft Radio oder ein &amp;quot;normaler&amp;quot; Titel&lt;br /&gt;
	if (ReadingsVal($device, &#039;currentNormalAudio&#039;, 1) == 1) {&lt;br /&gt;
		$infoString = sprintf(&#039;&amp;lt;div style=&amp;quot;margin-left: -150px;&amp;quot;&amp;gt;%s Titel %s \&lt;br /&gt;
			von %s&amp;lt;br /&amp;gt;Titel: &amp;lt;b&amp;gt;%s&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;Interpret: &amp;lt;b&amp;gt;%s&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;Album: \&lt;br /&gt;
			&amp;lt;b&amp;gt;%s&amp;lt;/b&amp;gt;&amp;lt;div style=&amp;quot;height: %dpx;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;.encode(&#039;UTF-8&#039;, \&lt;br /&gt;
			&#039;Nächste Wiedergabe:&#039;).&#039;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;float: left; margin-left: \&lt;br /&gt;
			0px;&amp;quot;&amp;gt;&amp;lt;img style=&amp;quot;margin: 0px; padding: 0px; margin-right: 5px; \&lt;br /&gt;
			border: 1px solid lightgray;&amp;quot; height=&amp;quot;55&amp;quot;  border=&amp;quot;0&amp;quot; src=&amp;quot;%s&amp;quot; /&amp;gt;\&lt;br /&gt;
			&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-left: 0px;&amp;quot;&amp;gt;Titel: %s&amp;lt;br /&amp;gt;Artist: %s&amp;lt;br /&amp;gt;\&lt;br /&gt;
			Album: %s&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
				$transportState, &lt;br /&gt;
				ReadingsVal($device, &#039;currentTrack&#039;, &#039;&#039;), &lt;br /&gt;
				ReadingsVal($device, &#039;numberOfTracks&#039;, &#039;&#039;),&lt;br /&gt;
				ReadingsVal($device, &#039;currentTitle&#039;, &#039;&#039;),&lt;br /&gt;
				ReadingsVal($device, &#039;currentArtist&#039;, &#039;&#039;),&lt;br /&gt;
				ReadingsVal($device, &#039;currentAlbum&#039;, &#039;&#039;),&lt;br /&gt;
				$space,&lt;br /&gt;
				ReadingsVal($device, &#039;nextAlbumArtURL&#039;, &#039;&#039;),&lt;br /&gt;
				ReadingsVal($device, &#039;nextTitle&#039;, &#039;&#039;),&lt;br /&gt;
				ReadingsVal($device, &#039;nextArtist&#039;, &#039;&#039;),&lt;br /&gt;
				ReadingsVal($device, &#039;nextAlbum&#039;, &#039;&#039;));&lt;br /&gt;
	} else {&lt;br /&gt;
		$infoString = sprintf(&#039;&amp;lt;div style=&amp;quot;margin-left: -150px;&amp;quot;&amp;gt;%s Radiostream\&lt;br /&gt;
			&amp;lt;br /&amp;gt;Sender: &amp;lt;b&amp;gt;%s&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;Info: &amp;lt;b&amp;gt;%s&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&#039;.encode(&#039;UTF-8&#039;, \&lt;br /&gt;
			&#039;Läuft:&#039;).&#039; &amp;lt;b&amp;gt;%s&amp;lt;/b&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
				$transportState,&lt;br /&gt;
				ReadingsVal($device, &#039;currentSender&#039;, &#039;&#039;),&lt;br /&gt;
				ReadingsVal($device, &#039;currentSenderInfo&#039;, &#039;&#039;),&lt;br /&gt;
				ReadingsVal($device, &#039;currentSenderCurrent&#039;, &#039;&#039;));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	return $infoString;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Diese kann man als Kopiervorlage für eigene Ideen verwenden. Die Backslashs vor den Zeilenumbrüchen sind hauptsächlich der Optik halber hier. Generell empfehle ich die so getrennten Befehle in eine Zeile zu schreiben...&lt;br /&gt;
&lt;br /&gt;
Hier noch eine beispielhafte [[readingsGroup]] dazu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Sonos_WohnzimmerRG readingsGroup Sonos_Wohnzimmer:\&lt;br /&gt;
	&amp;lt;{getCoverTitleRG($DEVICE)}@infoSummarize1&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für eine ReadingsGroup für die Darstellung von Listen (Favoriten, Playlisten und Radios) ===&lt;br /&gt;
Es gibt eine mitgelieferte Prozedur, die für diese Darstellung verwendet werden kann. Diese stellt die Listen einfach als zweispaltige Tabelle dar (links das Cover, rechts der Titel als ausführbarer Link).&lt;br /&gt;
Für die Datenlieferung (z.B. die Favoriten in einem Reading) muss man sich noch ein entsprechendes userReading schaffen.&lt;br /&gt;
Beim Generieren der Devices vom Autocreate-Mechanismus werden diese Elemente und Attribute bereits mit erzeugt. Es muss lediglich ein Automatismus zum Aktualisieren des entsprechenden Readings geschaffen werden, oder dieses einmal manuell ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Hier die Vorlage für das userReadings:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr Sonos_Wohnzimmer userReadings Favourites:LastActionResult.*?\&lt;br /&gt;
	GetFavouritesWithCovers.* { if (ReadingsVal($name, \&lt;br /&gt;
	&amp;quot;LastActionResult&amp;quot;, &amp;quot;&amp;quot;) =~ m/.*?: (.*)/) { return $1; } }, Radios:\&lt;br /&gt;
	LastActionResult.*?GetRadiosWithCovers.* { if (ReadingsVal($name, \&lt;br /&gt;
	&amp;quot;LastActionResult&amp;quot;, &amp;quot;&amp;quot;) =~ m/.*?: (.*)/) { return $1; } }, Playlists:\&lt;br /&gt;
	LastActionResult.*?GetPlaylistsWithCovers.* { if (ReadingsVal($name, \&lt;br /&gt;
	&amp;quot;LastActionResult&amp;quot;, &amp;quot;&amp;quot;) =~ m/.*?: (.*)/) { return $1; } }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Damit wird jeweils ein Reading für Favoriten, Playlisten und Radios angelegt, sobald im Reading &#039;&#039;&#039;LastActionResult&#039;&#039;&#039; dieses Ergebnis asynchron geliefert wurde.&lt;br /&gt;
&lt;br /&gt;
Die Lieferung selbst kann man mit einem &#039;&#039;&#039;at&#039;&#039;&#039;-Statement zu bestimmten Zeitpunkten erzeugen/aktualisieren lassen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define refreshFavouritesWohnzimmer at *06:00 get Sonos_Wohnzimmer FavouritesWithCovers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ganze muss natürlich für jede gewünschte Liste an jedem Player aktualisiert werden. Man kann also auch sowas schreiben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define refreshFavouritesSonos at *06:00 get Sonos_.*.Favourites FavouritesWithCovers&lt;br /&gt;
define refreshPlaylistsSonos at *06:01 get Sonos_.*.Playlists PlaylistsWithCovers&lt;br /&gt;
define refreshRadiosSonos at *06:02 get Sonos_.*.Radios RadiosWithCovers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Möchte man eine andere Darstellung, so muss man sich eine eigene Prozedur in eine &#039;&#039;&#039;99_myUtils.pm&#039;&#039;&#039; packen. Hier eine Kopiervorlage:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub getListRG($$;$) {&lt;br /&gt;
	my ($device, $reading, $ul) = @_;&lt;br /&gt;
	$ul = 0 if (!defined($ul));&lt;br /&gt;
	&lt;br /&gt;
	my $resultString = &#039;&#039;;&lt;br /&gt;
	&lt;br /&gt;
	# Manchmal ist es etwas komplizierter mit den Zeichensätzen...&lt;br /&gt;
	my %elems = %{eval(decode(&#039;CP1252&#039;, ReadingsVal($device, $reading, &#039;{}&#039;)))};&lt;br /&gt;
	&lt;br /&gt;
	for my $key (keys %elems) {&lt;br /&gt;
		my $command;&lt;br /&gt;
		if ($reading eq &#039;Favourites&#039;) {&lt;br /&gt;
			$command = &#039;cmd.&#039;.$device.uri_escape(&#039;=set &#039;.$device.&#039; \&lt;br /&gt;
				StartFavourite &#039;.uri_escape($elems{$key}-&amp;gt;{Title}));&lt;br /&gt;
		} elsif ($reading eq &#039;Playlists&#039;) {&lt;br /&gt;
			$command = &#039;cmd.&#039;.$device.uri_escape(&#039;=set &#039;.$device.&#039; \&lt;br /&gt;
				StartPlaylist &#039;.uri_escape($elems{$key}-&amp;gt;{Title}));&lt;br /&gt;
		} elsif ($reading eq &#039;Radios&#039;) {&lt;br /&gt;
			$command = &#039;cmd.&#039;.$device.uri_escape(&#039;=set &#039;.$device.&#039; \&lt;br /&gt;
				StartRadio &#039;.uri_escape($elems{$key}-&amp;gt;{Title}));&lt;br /&gt;
		}&lt;br /&gt;
		$command = &amp;quot;FW_cmd(&#039;/fhem?XHR=1&amp;amp;$command&#039;)&amp;quot;;&lt;br /&gt;
		&lt;br /&gt;
		if ($ul) {&lt;br /&gt;
			$resultString .= &#039;&amp;lt;li style=&amp;quot;list-style-type: none; display: inline;&amp;quot;&amp;gt;\&lt;br /&gt;
				&amp;lt;a onclick=&amp;quot;&#039;.$command.&#039;&amp;quot;&amp;gt;&amp;lt;img style=&amp;quot;border: solid 1px lightgray; \&lt;br /&gt;
				margin: 3px;&amp;quot; width=&amp;quot;70&amp;quot; src=&amp;quot;&#039;.$elems{$key}-&amp;gt;{Cover}.&#039;&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&#039;;&lt;br /&gt;
		} else {&lt;br /&gt;
			$resultString .= &#039;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;img width=&amp;quot;70&amp;quot; src=&amp;quot;&#039;.$elems{$key}-&amp;gt;{Cover}.\&lt;br /&gt;
				&#039;&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;a onclick=&amp;quot;&#039;.$command.&#039;&amp;quot;&amp;gt;&#039;.$elems{$key}-&amp;gt;{Title}.&amp;quot;&amp;lt;/a&amp;gt;\&lt;br /&gt;
				&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;\n&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	if ($ul) {&lt;br /&gt;
		return &#039;&amp;lt;ul style=&amp;quot;margin-left: 0px; padding-left: 0px; list-style-type: none; \&lt;br /&gt;
			display: inline;&amp;quot;&amp;gt;&#039;.$resultString.&#039;&amp;lt;/ul&amp;gt;&#039;;&lt;br /&gt;
	} else {&lt;br /&gt;
		return &#039;&amp;lt;table&amp;gt;&#039;.$resultString.&#039;&amp;lt;/table&amp;gt;&#039;;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Diese Prozedur hat einen optionalen Parameter ($ul). Mit diesem kann man angeben, ob eine Tabelle mit vertikaler Darstellung ($ul=0) oder eine Unordered-List mit horizontaler Darstellung ($ul=1) erzeugt wird.&lt;br /&gt;
Die Variante mit den ListItems ist auch für eine Darstellung in einem Dashboard geeignet.&lt;br /&gt;
Da bei der horizontalen Darstellung kein Platz für Namen ist, eignet sich diese Darstellung nur für Listen, deren Icon für jeden Eintrag unterschiedlich ist (Playlisten kann man hier also nicht mehr unterscheiden :-).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die eigentliche [[readingsGroup]] verwendet dann diese Prozedur:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Sonos_WohnzimmerFavouriteListRG readingsGroup Sonos_Wohnzimmer:\&lt;br /&gt;
	&amp;lt;{getListRG($DEVICE,&amp;quot;Favourites&amp;quot;)}@Favourites&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder für die Variante mit den List-Elementen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Sonos_WohnzimmerFavouriteListRG readingsGroup Sonos_Wohnzimmer:\&lt;br /&gt;
	&amp;lt;{getListRG($DEVICE,&amp;quot;Favourites&amp;quot;,1)}@Favourites&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit kann man sich dynamische Listen auf Basis der Informationen im Sonosplayer für die Darstellung erzeugen lassen.&lt;br /&gt;
&lt;br /&gt;
Die Backslashs vor den Zeilenumbrüchen sind hauptsächlich der Optik halber hier. Generell empfehle ich die so getrennten Befehle in eine Zeile zu schreiben...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Anzeige der Gruppenkonstellation in einer ReadingsGroup ===&lt;br /&gt;
[[Datei:ReadingsGroupSonosGruppierung.png|right|75px|Beispiel der Visualisierung der Gruppenkonstellation im Style &amp;quot;dark&amp;quot;]]&lt;br /&gt;
Mit der folgende Prozedur (in die &#039;&#039;&#039;99_myUtils.pm&#039;&#039;&#039; schreiben) und der [[readingsGroup]] läßt sich auf einfache Weise die Gruppenkonstellation stets aktuell darstellen.&lt;br /&gt;
&lt;br /&gt;
Die Prozedur, die die Zerlegung des Strings und in diesem Fall die Aufbereitung als UL (Unordered-List) übernimmt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub getGroupsRG() {&lt;br /&gt;
	my $groups = CommandGet(undef, SONOS_getSonosPlayerByName(undef)-&amp;gt;{NAME}.\&lt;br /&gt;
		&#039; Groups&#039;);&lt;br /&gt;
	&lt;br /&gt;
	my $result = &#039;&#039;;&lt;br /&gt;
	my $i = 0;&lt;br /&gt;
	while ($groups =~ m/\[(.*?)\]/ig) {&lt;br /&gt;
		my @member = split(/, /, $1);&lt;br /&gt;
		@member = map { my $elem = $_; $elem = FW_makeImage(&#039;icoSONOSPLAYER_icon-&#039;.\&lt;br /&gt;
			ReadingsVal($elem, &#039;playerType&#039;, &#039;&#039;).&#039;.png&#039;, &#039;&#039;, &#039;&#039;).ReadingsVal($elem,\&lt;br /&gt;
			&#039;roomNameAlias&#039;, $elem); $elem; } @member;&lt;br /&gt;
		&lt;br /&gt;
		$result .= &#039;&amp;lt;li&amp;gt;&#039;.++$i.&#039;. Gruppe:&amp;lt;ul style=&amp;quot;list-style-type: none; \&lt;br /&gt;
			padding-left: 0px;&amp;quot;&amp;gt;&amp;lt;li&amp;gt;&#039;.join(&#039;&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;&#039;, @member).&#039;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&#039;;&lt;br /&gt;
	}&lt;br /&gt;
	return &#039;&amp;lt;ul&amp;gt;&#039;.$result.&#039;&amp;lt;/ul&amp;gt;&#039;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und hier die entsprechende ReadingsGroup dazu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SonosRG readingsGroup Sonos:&amp;lt;{getGroupsRG()}@ZoneGroupState&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit wird eine einfache Darstellung der Gruppenkonstellation durchgeführt, die man sich natürlich selber nach Belieben anpassen kann/soll.&lt;br /&gt;
&lt;br /&gt;
Die Backslashs vor den Zeilenumbrüchen sind hauptsächlich der Optik halber hier. Generell empfehle ich die so getrennten Befehle in eine Zeile zu schreiben...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für eine ReadingsGroup, die die Informationen des Masters anzeigt ===&lt;br /&gt;
Wenn Player in einer Gruppe sind, werden keine Titelinformationen des eigentlichten Streams angezeigt. Man kann sich jetzt zu jedem Player eine [[readingsGroup]] bauen, die die Informationen des Gruppenmasters anzeigen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Sonos_WohnzimmerRG2 readingsGroup Sonos_Wohnzimmer:infoSummarize2@{\&lt;br /&gt;
	SONOSPLAYER_GetMasterPlayerName($DEVICE)}&lt;br /&gt;
attr Sonos_WohnzimmerRG2 valueFormat {&amp;quot; &amp;quot;}&lt;br /&gt;
attr Sonos_WohnzimmerRG2 valuePrefix {SONOS_getCoverTitleRG(\&lt;br /&gt;
	SONOSPLAYER_GetMasterPlayerName($DEVICE))}&lt;br /&gt;
attr Sonos_WohnzimmerRG2 noheading 1&lt;br /&gt;
attr Sonos_WohnzimmerRG2 nonames 1&lt;br /&gt;
attr Sonos_WohnzimmerRG2 notime 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Hinweis&#039;&#039;: Diese ReadingsGroup wird automatisch per longpoll aktualisiert. Lediglich bei einer Umgruppierung muss bislang die Seite neu geladen werden. Es kann aber gut sein, dass man das in Zukunft auch per longpoll hinbekommen kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für ein Shell-Skript zum Aufräumen eines Speak-Verzeichnisses ===&lt;br /&gt;
Mit der freundlichen Freigabe von Loredo und CQuadrat hier ein kleines Shell-Skript, mit dem länger nicht abgespielte Dateien gelöscht werden können.&lt;br /&gt;
Bei allen Varianten muss berücksichtigt werden, dass der ausführende Benutzer die Dateien auch löschen darf. Bitte die Dateirechte prüfen.&lt;br /&gt;
&lt;br /&gt;
==== Variante mit Ausgabe der gelöschten Dateien ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
FILES=`ls /mnt/SonosSpeak/RINCON*.mp3*`&lt;br /&gt;
CURRENTTIME=`date +&amp;quot;%s&amp;quot;`&lt;br /&gt;
PASTDAYS=75&lt;br /&gt;
&lt;br /&gt;
THESHOLDATIME=`expr $CURRENTTIME - $PASTDAYS \* 24 \* 60 \* 60`&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Cleaning up all files older than $PASTDAYS days ...\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
for f in $FILES&lt;br /&gt;
do&lt;br /&gt;
&lt;br /&gt;
  FILEATIME=`stat -c &amp;quot;%X&amp;quot; $f`&lt;br /&gt;
&lt;br /&gt;
  if [[ &amp;quot;$FILEATIME&amp;quot; &amp;lt; &amp;quot;$THESHOLDATIME&amp;quot; ]]; then&lt;br /&gt;
        echo &amp;quot;cleaned up $f: last access on `stat -c &amp;quot;%x&amp;quot; $f`&amp;quot;&lt;br /&gt;
        rm $f&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unter Umständen gibt es eine aktuellere Version unter [https://gist.github.com/jpawlowski/689d1cf74334488cd127 cleanupSonosSpeak.sh auf GitHub].&lt;br /&gt;
&lt;br /&gt;
==== Variante für die crontab ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0 4 * * * find /mnt/SonosSpeak -name &amp;quot;RINCON*&amp;quot; ! -atime -75 -delete&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier wird jeden Tag um 4:00 Uhr der Ordner mit den Sprachausgabedateien bereinigt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Betrieb des Sonos an einer Funksteckdose (regelmäßiges Ausschalten) - Verbindungsprobleme ===&lt;br /&gt;
&lt;br /&gt;
Wenn das Sonossystem per Funksteckdose regelmäßig vom Netz genommen wird, bereitet der Neustart und das anschließende &lt;br /&gt;
Verbinden mit FHEM oft Probleme. Das Sonosmodul bleibt auf dem Status &amp;quot;disappeared&amp;quot; stehen und das Playerdevice ebenfalls.&lt;br /&gt;
Ergo ist eine Bedienung per FHEM oder die Sprachausgabe nicht mehr möglich.&lt;br /&gt;
&lt;br /&gt;
Um diesem Problem Abhilfe zu schaffen reicht ein kleines notify oder DOIF, welches den Player beim Abschalten &lt;br /&gt;
das Attribut disable = 1 verschafft und beim Wiedereinschalten dieses Attribut löscht.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define RebootSonosDOIF DOIF ([FunksteckerSonos:state] eq &amp;quot;on&amp;quot; )(deleteattr MeinSonosDevice disable) (save) &lt;br /&gt;
                       DOELSEIF ([FunksteckerSonos:state] eq &amp;quot;off&amp;quot; )(attr MeinSonosDevice disable 1)(save)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen von &amp;quot;disable&amp;quot; sorgt dafür, dass der Sonosthread beendet wird und beim Einschalten ein neuer Prozess erstellt wird.&lt;br /&gt;
Diese automatische Änderung an der Konfiguration des Device benötigt ein save config im Nachgang der DOIF- oder notify-Aktion. &lt;br /&gt;
Daher wird der jeweilige attr-Befehl mit einem (save) abgeschlossen.&lt;br /&gt;
&lt;br /&gt;
Wichtig hierbei (wie auch in der Überschrift erwähnt) funktioniert das nur, wenn die einzelnen Sonosplayer an einer schaltbaren Steckdose betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Das DOIF triggert nur bei Änderung des &amp;quot;state&amp;quot; der jeweilige Funksteckdose.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiele für FTUI-Integrationen ===&lt;br /&gt;
Hier können diverse Beispiele für eine FTUI (FHEM Tablet User Interface) Integration aufgeführt werden. Dabei sollten die Beispiele &#039;&#039;vollständig&#039;&#039; sein, und auch alle notwendigen Dummies und/oder Userreadings beschreiben.&lt;br /&gt;
&lt;br /&gt;
==== Beispiel von Reinerlein ====&lt;br /&gt;
[[Datei:ReinersSonosFTUIIntegration.jpg|mini|Beispiel der SONOS-FTUI-Integration von Reinerlein]]&lt;br /&gt;
[[Datei:ReinersSonosFTUIIntegrationHeadline.jpg|mini|Kopfzeile bei Gruppenwiedergabe]]&lt;br /&gt;
Hier gebe ich mal mein Beispiel zum Besten. Es ist eine 3 Spalten x 5 Zeilen Integration mit der Möglichkeit einer Favoriten-, Playlisten- und Radioauswahl, sowie einer Titelauswahl und Gruppierungsanpassung.&lt;br /&gt;
&lt;br /&gt;
Die Formatierung der Listen erfolgt mit einem &#039;&#039;&#039;|&#039;&#039;&#039; als Trenner der Elemente, da dieses Zeichen hier nie im Titel vorkommt.&lt;br /&gt;
&lt;br /&gt;
Die Maskierung der Leerzeichen für die Schlüsselliste erfolgt auf den Punkt. Damit besteht die Möglichkeit, den Wert direkt als regulären Ausdruck an den entsprechenden Start-Befehl zu übermitteln. Es müssen nur noch die Schrägstriche &#039;&#039;&#039;/&#039;&#039;&#039; vorne und hinten angefügt werden.&lt;br /&gt;
&lt;br /&gt;
Beim Antippen des Covers wird ein Vollbild-Popup geöffnet, welches das Cover in groß, den Abspielzustand und die Abspielposition darstellt.&lt;br /&gt;
&lt;br /&gt;
Im Header jedes Players wird angezeigt, ob gerade irgendwelche Slaveplayer mitbedient werden, bzw. wer der aktuelle Masterplayer zu dieser Wiedergabe ist. Des Weiteren kann dort direkt ein Player zu der Wiedergabegruppe hinzugefügt oder aus ihr entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Im Header kann jetzt bei einer Gruppenwiedergabe auch der GroupMute-Zustand gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Über dem Cover wird nun die aktuelle Quelle des Titels angezeigt (Playlist, Album o.ä.)&lt;br /&gt;
&lt;br /&gt;
===== FTUI-Code =====&lt;br /&gt;
Der Code ist in zwei Bereiche aufgeteilt, damit die Templatemöglichkeiten für mehrere Player verwendet werden können.&lt;br /&gt;
&lt;br /&gt;
Zunächst die Einbindung des Templates. Hier wird auch der Rahmen festgelegt. In diesem Fall der Gridster-Kasten mit 3x5 Feldgröße:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;li data-row=&amp;quot;1&amp;quot; data-col=&amp;quot;1&amp;quot; data-sizex=&amp;quot;3&amp;quot; data-sizey=&amp;quot;5&amp;quot; class=&amp;quot;border-down-gray lesstransparent&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div data-template=&amp;quot;template_musik_sonos.html&amp;quot; data-parameter=&#039;{&amp;quot;Device&amp;quot;:&amp;quot;Sonos_Wohnzimmer&amp;quot;}&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dadurch, dass der Rahmen nicht mit im Template enthalten ist, könnte man z.B. auch mehrere Player nebeneinander in einem Rahmen darstellen, dabei aber nicht den umschließenden DIV-Tag um das Template vergessen, da sonst die Titelanzeigen &#039;&#039;rauswandern&#039;&#039; könnten.&lt;br /&gt;
&#039;&#039;Hinweis:&#039;&#039; In der vorherigen Version gab es noch einen Parameter für den Raumnamen, und der Header wurde hier bei der Einbindung festgelegt. Das entfällt nun, da der Raumname per Reading ermittelt wird, und im Header nun Gruppierungsinformationen enthalten sind.&lt;br /&gt;
&lt;br /&gt;
Für die Coverdarstellung ist ein neues Widget notwendig (welches momentan noch nicht offiziell ist), da in der neuen Sonosversion größere Radiocover geladen werden, und diese nicht unbedingt quadratisch orientiert sind.&lt;br /&gt;
&lt;br /&gt;
Das Widget kann im Forum heruntergeladen werden: [https://forum.fhem.de/index.php/topic,70265.0.html https://forum.fhem.de/index.php/topic,70265.0.html].&lt;br /&gt;
&lt;br /&gt;
Für die Lauftext-Animation sind eigene CSS-Klassen, eine Javascript-Funktion und (momentan noch) eine Anpassung des JoinedLabel-Widgets notwendig.&lt;br /&gt;
&lt;br /&gt;
Hier die notwendigen Styles und Javascript. Ich habe diese einfach in den Kopfbereich meiner index.html gepackt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!-- Anfang Styles und Javascript für die Scrolltexte in der Sonosplayer-Ansicht --&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.flowanimation {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	animation: floatText 8s infinite alternate ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@keyframes floatText {&lt;br /&gt;
	from {&lt;br /&gt;
		left: 0px;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	to {&lt;br /&gt;
		left: calc(355px - 100%);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mycenteredtext {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	left: calc(355px / 2 - 50%);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
	function checkFlowAnimation(elemName) {&lt;br /&gt;
		if ($(elemName).innerWidth() &amp;gt;= 355) {&lt;br /&gt;
			$(elemName).addClass(&#039;flowanimation&#039;);&lt;br /&gt;
		} else {&lt;br /&gt;
			$(elemName).addClass(&#039;mycenteredtext&#039;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;!-- Ende Styles und Javascript für die Scrolltexte in der Sonosplayer-Ansicht --&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Anpassungen in der Datei &amp;quot;widget_joinedlabel.js&amp;quot; beschränken sich auf zwei Zeilen:&lt;br /&gt;
*In der Funktion &amp;quot;init_attr()&amp;quot; als letztes Statement vor der abschließenden Log-Ausgabe: &amp;lt;pre&amp;gt;elem.initData(&#039;onupdate&#039;, &#039;&#039;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
*In der Funktion &amp;quot;update&amp;quot; als letztes Statement nach der &amp;quot;me.update_colorize()&amp;quot;-Anweisung: &amp;lt;pre&amp;gt;eval(elem.data(&#039;onupdate&#039;));&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier nun der Inhalt der Datei &#039;&#039;&#039;template_musik_sonos.html&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;header&amp;gt;&lt;br /&gt;
	&amp;lt;div data-type=&amp;quot;classchanger&amp;quot; data-device=&amp;quot;Device&amp;quot; data-get=&amp;quot;SlavePlayerNotBonded&amp;quot; data-get-on=&#039;[&amp;quot;[]&amp;quot;]&#039; data-on-class=&amp;quot;hide&amp;quot; data-off-class=&amp;quot;mini&amp;quot; class=&amp;quot;inline&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div data-type=&amp;quot;switch&amp;quot; data-device=&amp;quot;Device&amp;quot; data-get=&amp;quot;GroupMute&amp;quot; data-set=&amp;quot;GroupMute&amp;quot;&lt;br /&gt;
			data-icon=&amp;quot;fa-deaf&amp;quot; data-background-icon=&amp;quot;-&amp;quot;&lt;br /&gt;
			data-on-color=&amp;quot;#aa6900&amp;quot; data-off-color=&amp;quot;gray&amp;quot;&lt;br /&gt;
			data-get-on=&amp;quot;1&amp;quot; data-get-off=&amp;quot;0&amp;quot;&lt;br /&gt;
			data-set-on=&amp;quot;1&amp;quot; data-set-off=&amp;quot;0&amp;quot; class=&amp;quot;mini&amp;quot; style=&amp;quot;margin-right: -5px;&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;div data-type=&amp;quot;joinedlabel&amp;quot; data-device=&amp;quot;Device&amp;quot; data-mask=&amp;quot;[$1][ ($2)]&amp;quot; data-get=&#039;[&amp;quot;roomName&amp;quot;,&amp;quot;ZoneGroupNameDetails&amp;quot;]&#039; class=&amp;quot;truncate inline&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;div data-type=&amp;quot;classchanger&amp;quot; data-device=&amp;quot;Device&amp;quot; data-get=&amp;quot;MasterPlayer&amp;quot; data-get-on=&amp;quot;Device&amp;quot; data-on-class=&amp;quot;hide&amp;quot; class=&amp;quot;inline left-narrow&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div data-type=&amp;quot;push&amp;quot; &lt;br /&gt;
			data-device=&amp;quot;Device&amp;quot;&lt;br /&gt;
			data-icon=&amp;quot;fa-minus-circle&amp;quot; &lt;br /&gt;
			data-background-icon=&amp;quot;-&amp;quot;&lt;br /&gt;
			data-set-on=&amp;quot;MakeStandaloneGroup&amp;quot;&lt;br /&gt;
			class=&amp;quot;inline mini gray&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;div data-type=&amp;quot;classchanger&amp;quot; data-device=&amp;quot;Device&amp;quot; data-get=&amp;quot;MasterPlayer&amp;quot; data-get-on=&amp;quot;Device&amp;quot; data-off-class=&amp;quot;hide&amp;quot; class=&amp;quot;inline left-narrow&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div data-type=&amp;quot;popup&amp;quot; class=&amp;quot;&amp;quot; data-width=&amp;quot;400px&amp;quot; data-height=&amp;quot;110px&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div data-type=&amp;quot;symbol&amp;quot;&lt;br /&gt;
				data-icon=&amp;quot;fa-chevron-circle-down&amp;quot;&lt;br /&gt;
				class=&amp;quot;mini&amp;quot;&lt;br /&gt;
				style=&amp;quot;height: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div class=&amp;quot;dialog&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;header&amp;gt;&amp;lt;div data-type=&amp;quot;joinedlabel&amp;quot; data-device=&amp;quot;Device&amp;quot; data-mask=&amp;quot;Wiedergabegruppe[ für $1] anpassen&amp;quot; data-get=&#039;[&amp;quot;roomName&amp;quot;]&#039; class=&amp;quot;inline&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/header&amp;gt;&lt;br /&gt;
				&lt;br /&gt;
				&amp;lt;div class=&amp;quot;top-space-10 left-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div&amp;gt;&lt;br /&gt;
						&amp;lt;div class=&amp;quot;large middle inline&amp;quot;&amp;gt;Player hinzufügen: &amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;div data-type=&amp;quot;select&amp;quot; &lt;br /&gt;
							data-device=&amp;quot;Device&amp;quot; &lt;br /&gt;
							data-list=&amp;quot;AvailablePlayerList&amp;quot; &lt;br /&gt;
							data-alias=&amp;quot;AvailablePlayerListAlias&amp;quot; &lt;br /&gt;
							data-delimiter=&amp;quot;|&amp;quot;&lt;br /&gt;
							data-get=&amp;quot;-&amp;quot;&lt;br /&gt;
							data-set=&amp;quot;AddMember&amp;quot;&lt;br /&gt;
							class=&amp;quot;inline w3x&amp;quot;&lt;br /&gt;
							onchange=&amp;quot;$(&#039;.dialog-close&#039;).trigger(&#039;click&#039;);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
					&lt;br /&gt;
					&amp;lt;div&amp;gt;&lt;br /&gt;
						&amp;lt;div class=&amp;quot;large middle inline&amp;quot;&amp;gt;Player entfernen: &amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;div data-type=&amp;quot;select&amp;quot; &lt;br /&gt;
							data-device=&amp;quot;Device&amp;quot; &lt;br /&gt;
							data-list=&amp;quot;SlavePlayerNotBondedList&amp;quot; &lt;br /&gt;
							data-alias=&amp;quot;SlavePlayerNotBondedListAlias&amp;quot; &lt;br /&gt;
							data-delimiter=&amp;quot;|&amp;quot;&lt;br /&gt;
							data-get=&amp;quot;-&amp;quot;&lt;br /&gt;
							data-set=&amp;quot;RemoveMember&amp;quot;&lt;br /&gt;
							class=&amp;quot;inline w3x&amp;quot;&lt;br /&gt;
							onchange=&amp;quot;$(&#039;.dialog-close&#039;).trigger(&#039;click&#039;);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/header&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div data-type=&amp;quot;joinedlabel&amp;quot; data-device=&amp;quot;Device&amp;quot; data-mask=&amp;quot;&amp;amp;nbsp;[~ $1 ~]&amp;amp;nbsp;&amp;quot; data-get=&#039;[&amp;quot;currentSource&amp;quot;]&#039; class=&amp;quot;bottom-narrow mini white&amp;quot; style=&amp;quot;padding-top: 3px; background: rgba(170, 105, 0, 0.6);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;div data-type=&amp;quot;popup&amp;quot; data-width=&amp;quot;100%&amp;quot; data-height=&amp;quot;100%&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div style=&amp;quot;margin-bottom: -40px;&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div data-type=&amp;quot;imagecover&amp;quot;&lt;br /&gt;
				data-device=&amp;quot;Device&amp;quot;&lt;br /&gt;
				data-get=&amp;quot;currentAlbumArtURL&amp;quot;&lt;br /&gt;
				data-opacity=&amp;quot;1.0&amp;quot;&lt;br /&gt;
				data-width=&amp;quot;350px&amp;quot;&lt;br /&gt;
				data-height=&amp;quot;350px&amp;quot;&lt;br /&gt;
				class=&amp;quot;&amp;quot;&lt;br /&gt;
				onclick=&amp;quot;$(&#039;.dialog-close&#039;).trigger(&#039;click&#039;);&amp;quot;&lt;br /&gt;
				style=&amp;quot;margin-left: 12px; margin-top: 12px; border: 1px solid rgba(170, 105, 0, 0.6);&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div data-type=&amp;quot;classchanger&amp;quot; data-device=&amp;quot;Device&amp;quot; data-get=&amp;quot;currentTrackProviderIconRoundURL&amp;quot; data-get-on=&amp;quot;&amp;quot; data-on-class=&amp;quot;hide&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;inline&amp;quot; style=&amp;quot;width: 40px; height: 40px; background: rgba(0, 0, 0, 0.40); position: relative; top: -349px; left: -152px;&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div data-type=&amp;quot;imagecover&amp;quot;&lt;br /&gt;
						data-device=&amp;quot;Device&amp;quot;&lt;br /&gt;
						data-get=&amp;quot;currentTrackProviderIconRoundURL&amp;quot;&lt;br /&gt;
						data-opacity=&amp;quot;1.0&amp;quot;&lt;br /&gt;
						data-width=&amp;quot;30px&amp;quot;&lt;br /&gt;
						data-height=&amp;quot;30px&amp;quot;&lt;br /&gt;
						class=&amp;quot;&amp;quot;&lt;br /&gt;
						style=&amp;quot;margin-left: 5px; margin-top: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div data-type=&amp;quot;classchanger&amp;quot; data-device=&amp;quot;Device&amp;quot; data-get=&amp;quot;currentTrackProviderIconRoundURL&amp;quot; data-get-on=&amp;quot;&amp;quot; data-off-class=&amp;quot;hide&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;inline&amp;quot; style=&amp;quot;width: 40px; height: 40px; position: relative; top: -349px; left: -152px;&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;div class=&amp;quot;dialog&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;header&amp;gt;&amp;lt;div data-type=&amp;quot;joinedlabel&amp;quot; data-device=&amp;quot;Device&amp;quot; data-mask=&amp;quot;Cover[ für $1]&amp;quot; data-get=&#039;[&amp;quot;roomName&amp;quot;]&#039; class=&amp;quot;inline&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/header&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div data-type=&amp;quot;imagecover&amp;quot;&lt;br /&gt;
				data-device=&amp;quot;Device&amp;quot;&lt;br /&gt;
				data-get=&amp;quot;currentTrackProviderIconRoundURL&amp;quot;&lt;br /&gt;
				data-opacity=&amp;quot;1.0&amp;quot;&lt;br /&gt;
				data-width=&amp;quot;30px&amp;quot;&lt;br /&gt;
				data-height=&amp;quot;30px&amp;quot;&lt;br /&gt;
				class=&amp;quot;&amp;quot;&lt;br /&gt;
				style=&amp;quot;position: absolute; top: 25px; left: 5px;&amp;quot;&lt;br /&gt;
				style=&amp;quot;margin-left: 5px; margin-top: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div data-type=&amp;quot;switch&amp;quot;&lt;br /&gt;
				data-device=&amp;quot;Device&amp;quot;&lt;br /&gt;
				data-get=&amp;quot;transportState&amp;quot;&lt;br /&gt;
				data-states=&#039;[&amp;quot;PLAYING&amp;quot;,&amp;quot;PAUSED_PLAYBACK&amp;quot;,&amp;quot;STOPPED&amp;quot;]&#039;&lt;br /&gt;
				data-background-icon=&amp;quot;-&amp;quot;&lt;br /&gt;
				data-background-colors=&#039;[&amp;quot;white&amp;quot;,&amp;quot;white&amp;quot;,&amp;quot;white&amp;quot;]&#039;&lt;br /&gt;
				data-colors=&#039;[&amp;quot;white&amp;quot;,&amp;quot;white&amp;quot;,&amp;quot;white&amp;quot;]&#039;&lt;br /&gt;
				data-icons=&#039;[&amp;quot;fa-play&amp;quot;,&amp;quot;fa-pause&amp;quot;,&amp;quot;fa-pause&amp;quot;]&#039;&lt;br /&gt;
				class=&amp;quot;inline readonly&amp;quot;&lt;br /&gt;
				style=&amp;quot;position: absolute; top: 10px; right: -10px;&amp;quot;&lt;br /&gt;
				onclick=&amp;quot;$(&#039;.dialog-close&#039;).trigger(&#039;click&#039;);&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div data-type=&amp;quot;imagecover&amp;quot;&lt;br /&gt;
				data-device=&amp;quot;Device&amp;quot;&lt;br /&gt;
				data-get=&amp;quot;currentAlbumArtURL&amp;quot;&lt;br /&gt;
				data-opacity=&amp;quot;1.0&amp;quot;&lt;br /&gt;
				data-width=&amp;quot;100%&amp;quot;&lt;br /&gt;
				data-height=&amp;quot;calc(100vh - 60px)&amp;quot;&lt;br /&gt;
				class=&amp;quot;&amp;quot;&lt;br /&gt;
				onclick=&amp;quot;$(&#039;.dialog-close&#039;).trigger(&#039;click&#039;);&amp;quot;&lt;br /&gt;
				style=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div data-type=&amp;quot;classchanger&amp;quot; data-device=&amp;quot;Device&amp;quot; data-get=&amp;quot;currentNormalAudio&amp;quot; data-get-on=&amp;quot;1&amp;quot; data-off-class=&amp;quot;hide&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
					data-device=&amp;quot;Device&amp;quot;&lt;br /&gt;
					data-get=&amp;quot;currentTrackPositionSimulatedSec&amp;quot;&lt;br /&gt;
					data-max=&amp;quot;currentTrackDurationSec&amp;quot; data-min=&amp;quot;0&amp;quot;&lt;br /&gt;
					data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
					data-handle-diameter=&amp;quot;5&amp;quot;&lt;br /&gt;
					data-width=&amp;quot;68%&amp;quot;&lt;br /&gt;
					class=&amp;quot;horizontal top-narrow readonly centered&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div data-type=&amp;quot;classchanger&amp;quot; data-device=&amp;quot;Device&amp;quot; data-get=&amp;quot;currentNormalAudio&amp;quot; data-get-on=&amp;quot;1&amp;quot; data-off-class=&amp;quot;hide&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div data-type=&amp;quot;joinedlabel&amp;quot; data-device=&amp;quot;Device&amp;quot; data-mask=&amp;quot;[$1][ ~ $2][ ~ $3]&amp;quot; data-get=&#039;[&amp;quot;currentTitle&amp;quot;,&amp;quot;currentArtist&amp;quot;,&amp;quot;currentAlbum&amp;quot;]&#039; class=&amp;quot;truncate top-space&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div data-type=&amp;quot;classchanger&amp;quot; data-device=&amp;quot;Device&amp;quot; data-get=&amp;quot;currentStreamAudio&amp;quot; data-get-on=&amp;quot;1&amp;quot; data-off-class=&amp;quot;hide&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div data-type=&amp;quot;joinedlabel&amp;quot; data-device=&amp;quot;Device&amp;quot; data-mask=&amp;quot;[$1 ~ ][$2][: $3]&amp;quot; data-get=&#039;[&amp;quot;currentSenderInfo&amp;quot;,&amp;quot;currentSender&amp;quot;,&amp;quot;currentSenderCurrent&amp;quot;]&#039; class=&amp;quot;truncate top-space&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;div data-type=&amp;quot;classchanger&amp;quot; data-device=&amp;quot;Device&amp;quot; data-get=&amp;quot;currentNormalAudio&amp;quot; data-get-on=&amp;quot;1&amp;quot; data-off-class=&amp;quot;hide&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;Device&amp;quot; data-get=&amp;quot;currentTrackPositionSimulated&amp;quot; class=&amp;quot;inline&amp;quot; style=&amp;quot;width: 3em;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
			data-device=&amp;quot;Device&amp;quot;&lt;br /&gt;
			data-set=&amp;quot;CurrentTrackPosition&amp;quot;&lt;br /&gt;
			data-get=&amp;quot;currentTrackPositionSimulatedSec&amp;quot;&lt;br /&gt;
			data-max=&amp;quot;currentTrackDurationSec&amp;quot; data-min=&amp;quot;0&amp;quot;&lt;br /&gt;
			data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
			data-handle-diameter=&amp;quot;5&amp;quot;&lt;br /&gt;
			data-width=&amp;quot;250&amp;quot;&lt;br /&gt;
			class=&amp;quot;horizontal tap inline&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;Device&amp;quot; data-get=&amp;quot;currentTrackDuration&amp;quot; class=&amp;quot;inline&amp;quot; style=&amp;quot;width: 3em;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;div class=&amp;quot;newline&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;Device&amp;quot; data-get=&amp;quot;currentTrack&amp;quot; class=&amp;quot;inline center-align&amp;quot; style=&amp;quot;width: 3em;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
				data-device=&amp;quot;Device&amp;quot;&lt;br /&gt;
				data-set=&amp;quot;Track&amp;quot;&lt;br /&gt;
				data-get=&amp;quot;currentTrack&amp;quot;&lt;br /&gt;
				data-max=&amp;quot;numberOfTracks&amp;quot; data-min=&amp;quot;0&amp;quot;&lt;br /&gt;
				data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
				data-handle-diameter=&amp;quot;5&amp;quot;&lt;br /&gt;
				data-width=&amp;quot;250&amp;quot;&lt;br /&gt;
				class=&amp;quot;horizontal tap inline&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;Device&amp;quot; data-get=&amp;quot;numberOfTracks&amp;quot; class=&amp;quot;inline center-align&amp;quot; style=&amp;quot;width: 3em;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;div data-type=&amp;quot;classchanger&amp;quot; data-device=&amp;quot;Device&amp;quot; data-get=&amp;quot;currentStreamAudio&amp;quot; data-get-on=&amp;quot;1&amp;quot; data-off-class=&amp;quot;hide&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div style=&amp;quot;height: 40px;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;!-- Leerer Ersatz für die bei Streams fehlende Positionsanzeige --&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;div class=&amp;quot;large top-space&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div data-type=&amp;quot;classchanger&amp;quot; data-device=&amp;quot;Device&amp;quot; data-get=&amp;quot;currentNormalAudio&amp;quot; data-get-on=&amp;quot;1&amp;quot; data-off-class=&amp;quot;hide&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div style=&amp;quot;height: 21px;&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div style=&amp;quot;width: 355px; position: absolute; overflow: hidden; height: 21px; margin-left: 10px; margin-right: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div style=&amp;quot;position: absolute;&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;div id=&amp;quot;Device_Title&amp;quot; data-type=&amp;quot;joinedlabel&amp;quot; data-device=&amp;quot;Device&amp;quot; data-mask=&amp;quot;[$1]&amp;quot; data-get=&#039;[&amp;quot;currentTitle&amp;quot;]&#039; data-onupdate=&amp;quot;checkFlowAnimation(&#039;#Device_Title&#039;);&amp;quot; class=&amp;quot;bold&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div style=&amp;quot;height: 21px;&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div style=&amp;quot;width: 355px; position: absolute; overflow: hidden; height: 21px; margin-left: 10px; margin-right: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div style=&amp;quot;position: absolute;&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;div id=&amp;quot;Device_Interpret&amp;quot; data-type=&amp;quot;joinedlabel&amp;quot; data-device=&amp;quot;Device&amp;quot; data-mask=&amp;quot;[$1][ ~ $2]&amp;quot; data-get=&#039;[&amp;quot;currentArtist&amp;quot;,&amp;quot;currentAlbum&amp;quot;]&#039; data-onupdate=&amp;quot;checkFlowAnimation(&#039;#Device_Interpret&#039;);&amp;quot; class=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div data-type=&amp;quot;classchanger&amp;quot; data-device=&amp;quot;Device&amp;quot; data-get=&amp;quot;currentStreamAudio&amp;quot; data-get-on=&amp;quot;1&amp;quot; data-off-class=&amp;quot;hide&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div style=&amp;quot;height: 21px;&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div style=&amp;quot;width: 355px; position: absolute; overflow: hidden; height: 21px; margin-left: 10px; margin-right: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div style=&amp;quot;position: absolute;&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;div id=&amp;quot;Device_SenderInfo&amp;quot; data-type=&amp;quot;joinedlabel&amp;quot; data-device=&amp;quot;Device&amp;quot; data-mask=&amp;quot;[$1]&amp;quot; data-get=&#039;[&amp;quot;currentSenderInfo&amp;quot;]&#039; data-onupdate=&amp;quot;checkFlowAnimation(&#039;#Device_SenderInfo&#039;);&amp;quot; class=&amp;quot;bold&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div style=&amp;quot;height: 21px;&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div style=&amp;quot;width: 355px; position: absolute; overflow: hidden; height: 21px; margin-left: 10px; margin-right: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div style=&amp;quot;position: absolute;&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;div id=&amp;quot;Device_Sender&amp;quot; data-type=&amp;quot;joinedlabel&amp;quot; data-device=&amp;quot;Device&amp;quot; data-mask=&amp;quot;[$1][: $2]&amp;quot; data-get=&#039;[&amp;quot;currentSender&amp;quot;,&amp;quot;currentSenderCurrent&amp;quot;]&#039; data-onupdate=&amp;quot;checkFlowAnimation(&#039;#Device_Sender&#039;);&amp;quot;class=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;div class=&amp;quot;top-space&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div data-type=&amp;quot;switch&amp;quot; data-device=&amp;quot;Device&amp;quot; data-get=&amp;quot;Mute&amp;quot; data-set=&amp;quot;Mute&amp;quot;&lt;br /&gt;
			data-icon=&amp;quot;fa-deaf&amp;quot; data-background-icon=&amp;quot;-&amp;quot;&lt;br /&gt;
			data-on-color=&amp;quot;#aa6900&amp;quot; data-off-color=&amp;quot;gray&amp;quot;&lt;br /&gt;
			data-get-on=&amp;quot;1&amp;quot; data-get-off=&amp;quot;0&amp;quot;&lt;br /&gt;
			data-set-on=&amp;quot;1&amp;quot; data-set-off=&amp;quot;0&amp;quot; class=&amp;quot;inline mini&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;div data-type=&amp;quot;classchanger&amp;quot; data-device=&amp;quot;Device&amp;quot; data-get=&amp;quot;currentNormalAudio&amp;quot; data-get-on=&amp;quot;1&amp;quot; data-off-class=&amp;quot;hide&amp;quot; class=&amp;quot;inline top-space&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div data-type=&amp;quot;switch&amp;quot; data-device=&amp;quot;Device&amp;quot; data-get=&amp;quot;Repeat&amp;quot; data-set=&amp;quot;Repeat&amp;quot;&lt;br /&gt;
				data-icon=&amp;quot;fa-repeat&amp;quot; data-background-icon=&amp;quot;-&amp;quot;&lt;br /&gt;
				data-on-color=&amp;quot;#aa6900&amp;quot; data-off-color=&amp;quot;gray&amp;quot;&lt;br /&gt;
				data-get-on=&amp;quot;1&amp;quot; data-get-off=&amp;quot;0&amp;quot;&lt;br /&gt;
				data-set-on=&amp;quot;1&amp;quot; data-set-off=&amp;quot;0&amp;quot; class=&amp;quot;inline mini&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;Device&amp;quot;&lt;br /&gt;
				data-icon=&amp;quot;fa-step-backward&amp;quot; data-background-icon=&amp;quot;-&amp;quot;&lt;br /&gt;
				data-off-color=&amp;quot;#fff&amp;quot; data-on-color=&amp;quot;#aa6900&amp;quot;&lt;br /&gt;
				data-set-on=&amp;quot;Previous&amp;quot; class=&amp;quot;inline mini&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;Device&amp;quot;&lt;br /&gt;
				data-set=&amp;quot;CurrentTrackPosition&amp;quot;&lt;br /&gt;
				data-icon=&amp;quot;fa-backward&amp;quot; data-background-icon=&amp;quot;-&amp;quot;&lt;br /&gt;
				data-off-color=&amp;quot;#fff&amp;quot; data-on-color=&amp;quot;#aa6900&amp;quot;&lt;br /&gt;
				data-set-on=&amp;quot;-30&amp;quot; class=&amp;quot;inline mini&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
		&amp;lt;div data-type=&amp;quot;switch&amp;quot;&lt;br /&gt;
			data-device=&amp;quot;Device&amp;quot;&lt;br /&gt;
			data-get=&amp;quot;transportState&amp;quot;&lt;br /&gt;
			data-states=&#039;[&amp;quot;PLAYING&amp;quot;,&amp;quot;PAUSED_PLAYBACK&amp;quot;,&amp;quot;STOPPED&amp;quot;]&#039;&lt;br /&gt;
			data-set-states=&#039;[&amp;quot;Pause&amp;quot;,&amp;quot;Play&amp;quot;,&amp;quot;Play&amp;quot;]&#039;&lt;br /&gt;
			data-background-icon=&amp;quot;fa-circle-thin&amp;quot;&lt;br /&gt;
			data-background-colors=&#039;[&amp;quot;#aa6900&amp;quot;,&amp;quot;white&amp;quot;,&amp;quot;white&amp;quot;]&#039;&lt;br /&gt;
			data-colors=&#039;[&amp;quot;#aa6900&amp;quot;,&amp;quot;white&amp;quot;,&amp;quot;white&amp;quot;]&#039;&lt;br /&gt;
			data-icons=&#039;[&amp;quot;fa-pause&amp;quot;,&amp;quot;fa-play&amp;quot;,&amp;quot;fa-play&amp;quot;]&#039;&lt;br /&gt;
			class=&amp;quot;inline small&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;div data-type=&amp;quot;classchanger&amp;quot; data-device=&amp;quot;Device&amp;quot; data-get=&amp;quot;currentNormalAudio&amp;quot; data-get-on=&amp;quot;1&amp;quot; data-off-class=&amp;quot;hide&amp;quot; class=&amp;quot;inline&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;Device&amp;quot;&lt;br /&gt;
				data-set=&amp;quot;CurrentTrackPosition&amp;quot;&lt;br /&gt;
				data-icon=&amp;quot;fa-forward&amp;quot; data-background-icon=&amp;quot;-&amp;quot;&lt;br /&gt;
				data-off-color=&amp;quot;#fff&amp;quot; data-on-color=&amp;quot;#aa6900&amp;quot;&lt;br /&gt;
				data-set-on=&amp;quot;+30&amp;quot; class=&amp;quot;inline mini&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;Device&amp;quot;&lt;br /&gt;
				data-icon=&amp;quot;fa-step-forward&amp;quot; data-background-icon=&amp;quot;-&amp;quot;&lt;br /&gt;
				data-off-color=&amp;quot;#fff&amp;quot; data-on-color=&amp;quot;#aa6900&amp;quot;&lt;br /&gt;
				data-set-on=&amp;quot;Next&amp;quot; class=&amp;quot;inline mini&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div data-type=&amp;quot;switch&amp;quot; data-device=&amp;quot;Device&amp;quot; data-get=&amp;quot;Shuffle&amp;quot; data-set=&amp;quot;Shuffle&amp;quot;&lt;br /&gt;
				data-icon=&amp;quot;fa-random&amp;quot; data-background-icon=&amp;quot;-&amp;quot;&lt;br /&gt;
				data-on-color=&amp;quot;#aa6900&amp;quot; data-off-color=&amp;quot;gray&amp;quot;&lt;br /&gt;
				data-get-on=&amp;quot;1&amp;quot; data-get-off=&amp;quot;0&amp;quot;&lt;br /&gt;
				data-set-on=&amp;quot;1&amp;quot; data-set-off=&amp;quot;0&amp;quot; class=&amp;quot;inline mini&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;div data-type=&amp;quot;popup&amp;quot; class=&amp;quot;inline&amp;quot; data-width=&amp;quot;650px&amp;quot; data-height=&amp;quot;210px&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div data-type=&amp;quot;push&amp;quot;&lt;br /&gt;
				data-icon=&amp;quot;fa-list&amp;quot; data-background-icon=&amp;quot;-&amp;quot;&lt;br /&gt;
				data-off-color=&amp;quot;#fff&amp;quot; data-on-color=&amp;quot;#aa6900&amp;quot;&lt;br /&gt;
				class=&amp;quot;mini&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div class=&amp;quot;dialog&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;header&amp;gt;&amp;lt;div data-type=&amp;quot;joinedlabel&amp;quot; data-device=&amp;quot;Device&amp;quot; data-mask=&amp;quot;Musikauswahl[ für $1]&amp;quot; data-get=&#039;[&amp;quot;roomName&amp;quot;]&#039; class=&amp;quot;inline&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/header&amp;gt;&lt;br /&gt;
				&lt;br /&gt;
				&amp;lt;div class=&amp;quot;top-space-10 left-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div&amp;gt;&lt;br /&gt;
						&amp;lt;div class=&amp;quot;large middle inline&amp;quot;&amp;gt;Favoriten: &amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;div data-type=&amp;quot;select&amp;quot; &lt;br /&gt;
							data-device=&amp;quot;Device&amp;quot; &lt;br /&gt;
							data-list=&amp;quot;FavouritesList&amp;quot; &lt;br /&gt;
							data-alias=&amp;quot;FavouritesListAlias&amp;quot; &lt;br /&gt;
							data-delimiter=&amp;quot;|&amp;quot;&lt;br /&gt;
							data-quote=&amp;quot;/&amp;quot;&lt;br /&gt;
							data-get=&amp;quot;currentFavouriteNameMasked&amp;quot;&lt;br /&gt;
							data-set=&amp;quot;StartFavourite&amp;quot;&lt;br /&gt;
							class=&amp;quot;inline w3x&amp;quot;&lt;br /&gt;
							onchange=&amp;quot;$(&#039;.dialog-close&#039;).trigger(&#039;click&#039;);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
					&lt;br /&gt;
					&amp;lt;div&amp;gt;&lt;br /&gt;
						&amp;lt;div class=&amp;quot;large middle inline&amp;quot;&amp;gt;Playlists: &amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;div data-type=&amp;quot;select&amp;quot; &lt;br /&gt;
							data-device=&amp;quot;Device&amp;quot; &lt;br /&gt;
							data-list=&amp;quot;PlaylistsList&amp;quot; &lt;br /&gt;
							data-alias=&amp;quot;PlaylistsListAlias&amp;quot; &lt;br /&gt;
							data-delimiter=&amp;quot;|&amp;quot;&lt;br /&gt;
							data-quote=&amp;quot;/&amp;quot;&lt;br /&gt;
							data-get=&amp;quot;currentPlaylistNameMasked&amp;quot;&lt;br /&gt;
							data-set=&amp;quot;StartPlaylist&amp;quot;&lt;br /&gt;
							class=&amp;quot;inline w3x&amp;quot;&lt;br /&gt;
							onchange=&amp;quot;$(&#039;.dialog-close&#039;).trigger(&#039;click&#039;);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
					&lt;br /&gt;
					&amp;lt;div&amp;gt;&lt;br /&gt;
						&amp;lt;div class=&amp;quot;large middle inline&amp;quot;&amp;gt;Radios: &amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;div data-type=&amp;quot;select&amp;quot; &lt;br /&gt;
							data-device=&amp;quot;Device&amp;quot; &lt;br /&gt;
							data-list=&amp;quot;RadiosList&amp;quot; &lt;br /&gt;
							data-alias=&amp;quot;RadiosListAlias&amp;quot; &lt;br /&gt;
							data-delimiter=&amp;quot;|&amp;quot;&lt;br /&gt;
							data-quote=&amp;quot;/&amp;quot;&lt;br /&gt;
							data-get=&amp;quot;currentRadioNameMasked&amp;quot;&lt;br /&gt;
							data-set=&amp;quot;StartRadio&amp;quot;&lt;br /&gt;
							class=&amp;quot;inline w3x&amp;quot;&lt;br /&gt;
							onchange=&amp;quot;$(&#039;.dialog-close&#039;).trigger(&#039;click&#039;);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
					&lt;br /&gt;
					&amp;lt;div&amp;gt;&lt;br /&gt;
						&amp;lt;div class=&amp;quot;large middle inline&amp;quot;&amp;gt;Audio-Eingang: &amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;div data-type=&amp;quot;select&amp;quot; &lt;br /&gt;
							data-device=&amp;quot;Device&amp;quot; &lt;br /&gt;
							data-list=&amp;quot;Sonos:LineInPlayerList&amp;quot; &lt;br /&gt;
							data-alias=&amp;quot;Sonos:LineInPlayerListAlias&amp;quot; &lt;br /&gt;
							data-delimiter=&amp;quot;|&amp;quot;&lt;br /&gt;
							data-get=&amp;quot;currentAlbum&amp;quot;&lt;br /&gt;
							data-set=&amp;quot;PlayURI&amp;quot;&lt;br /&gt;
							class=&amp;quot;inline w3x&amp;quot;&lt;br /&gt;
							onchange=&amp;quot;$(&#039;.dialog-close&#039;).trigger(&#039;click&#039;);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
					&lt;br /&gt;
					&amp;lt;div&amp;gt;&lt;br /&gt;
						&amp;lt;div class=&amp;quot;large middle inline&amp;quot;&amp;gt;Abspielliste: &amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;div data-type=&amp;quot;select&amp;quot; &lt;br /&gt;
							data-device=&amp;quot;Device&amp;quot; &lt;br /&gt;
							data-list=&amp;quot;QueueList&amp;quot; &lt;br /&gt;
							data-alias=&amp;quot;QueueListAlias&amp;quot; &lt;br /&gt;
							data-delimiter=&amp;quot;|&amp;quot;&lt;br /&gt;
							data-get=&amp;quot;currentTrack&amp;quot;&lt;br /&gt;
							data-set=&amp;quot;Track&amp;quot;&lt;br /&gt;
							class=&amp;quot;inline w3x&amp;quot;&lt;br /&gt;
							onchange=&amp;quot;$(&#039;.dialog-close&#039;).trigger(&#039;click&#039;);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;div data-type=&amp;quot;spinner&amp;quot;&lt;br /&gt;
		data-device=&amp;quot;Device&amp;quot;&lt;br /&gt;
		data-get=&amp;quot;Volume&amp;quot;&lt;br /&gt;
		data-set=&amp;quot;Volume&amp;quot;&lt;br /&gt;
		data-max=&amp;quot;50&amp;quot;&lt;br /&gt;
		data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
		data-width=&amp;quot;350&amp;quot;&lt;br /&gt;
		data-icon-left=&amp;quot;fa-volume-down tall&amp;quot;&lt;br /&gt;
		data-icon-right=&amp;quot;fa-volume-up tall&amp;quot;&lt;br /&gt;
		data-gradient-color=&#039;[&amp;quot;orange&amp;quot;,&amp;quot;red&amp;quot;]&#039;&lt;br /&gt;
		class=&amp;quot;tap value positiononly top-space centered&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Notwendige Userreadings =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Vorherige Version der Listenermittlung per Userreading&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Für die Funktionalität der Favoriten- / Playlisten- / Radioauswahl werden u.U. Userreadings benötigt, die die entsprechenden Listen ermitteln, und für die Verwendung im FTUI aufbereiten.&lt;br /&gt;
Außerdem gibt es ein Userreading für die Anzeige der Position innerhalb des Titels. Dieses kann man selber mittels eines wiederkehrenden AT- oder DOIF-Befehls aktualisieren lassen (ich verwende dafür eine 15 Sekündige Aktualisierung mittels DOIF, solange eine Wiedergabe läuft).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Userreading an jedem Sonosplayer-Device:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Favourites:LastActionResult.*?GetFavouritesWithCovers.* { &lt;br /&gt;
  if (ReadingsVal($name, &amp;quot;LastActionResult&amp;quot;, &amp;quot;&amp;quot;) =~ m/.*?: (.*)/) { &lt;br /&gt;
    return $1; &lt;br /&gt;
  } &lt;br /&gt;
}, &lt;br /&gt;
&lt;br /&gt;
Radios:LastActionResult.*?GetRadiosWithCovers.* { &lt;br /&gt;
  if (ReadingsVal($name, &amp;quot;LastActionResult&amp;quot;, &amp;quot;&amp;quot;) =~ m/.*?: (.*)/) { &lt;br /&gt;
    return $1; &lt;br /&gt;
  } &lt;br /&gt;
}, &lt;br /&gt;
&lt;br /&gt;
Playlists:LastActionResult.*?GetPlaylistsWithCovers.* { &lt;br /&gt;
  if (ReadingsVal($name, &amp;quot;LastActionResult&amp;quot;, &amp;quot;&amp;quot;) =~ m/.*?: (.*)/) { &lt;br /&gt;
    return $1; &lt;br /&gt;
  } &lt;br /&gt;
}, &lt;br /&gt;
&lt;br /&gt;
currentTrackPosition:LastActionResult.*?GetCurrentTrackPosition.* { &lt;br /&gt;
  if (ReadingsVal($name, &amp;quot;LastActionResult&amp;quot;, &amp;quot;&amp;quot;) =~ m/.*?: (.*)/) { &lt;br /&gt;
    return $1; &lt;br /&gt;
  } &lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
currentTrackPositionSec:currentTrackPosition.* {&lt;br /&gt;
  return SONOS_GetTimeSeconds(ReadingsVal($name, &amp;quot;currentTrackPosition&amp;quot;, &amp;quot;00:00:00&amp;quot;));&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
currentTrackDurationSec:currentTrackDuration.* {&lt;br /&gt;
 return SONOS_GetTimeSeconds(ReadingsVal($name, &amp;quot;currentTrackDuration&amp;quot;, &amp;quot;00:00:00&amp;quot;));&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
FavouritesList:LastActionResult.*?GetFavourites:.* { &lt;br /&gt;
  if (ReadingsVal($name, &amp;quot;LastActionResult&amp;quot;, &amp;quot;&amp;quot;) =~ m/.*?: (.*)/) { &lt;br /&gt;
    my @list = map { $_ =~ s/ /./g; $_ } map { substr($_, 1, -1) } split(&#039;,&#039;, $1);&lt;br /&gt;
    return join(&#039;|&#039;, @list);&lt;br /&gt;
  } &lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
FavouritesListAlias:LastActionResult.*?GetFavourites:.* { &lt;br /&gt;
  if (ReadingsVal($name, &amp;quot;LastActionResult&amp;quot;, &amp;quot;&amp;quot;) =~ m/.*?: (.*)/) { &lt;br /&gt;
    my @list = map { substr($_, 1, -1) } split(&#039;,&#039;, $1);&lt;br /&gt;
    return join(&#039;|&#039;, @list);&lt;br /&gt;
  } &lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
currentFavouriteNameMasked:currentFavouriteName.* {&lt;br /&gt;
  my $favouriteName = ReadingsVal($name, &amp;quot;currentFavouriteName&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
  $favouriteName =~ s/ /\./g;&lt;br /&gt;
  return $favouriteName;&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
PlaylistsList:LastActionResult.*?GetPlaylists:.* { &lt;br /&gt;
  if (ReadingsVal($name, &amp;quot;LastActionResult&amp;quot;, &amp;quot;&amp;quot;) =~ m/.*?: (.*)/) { &lt;br /&gt;
    my @list = map { $_ =~ s/ /./g; $_ } map { substr($_, 1, -1) } split(&#039;,&#039;, $1);&lt;br /&gt;
    return join(&#039;|&#039;, @list);&lt;br /&gt;
  } &lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
PlaylistsListAlias:LastActionResult.*?GetPlaylists:.* { &lt;br /&gt;
  if (ReadingsVal($name, &amp;quot;LastActionResult&amp;quot;, &amp;quot;&amp;quot;) =~ m/.*?: (.*)/) { &lt;br /&gt;
    my @list = map { substr($_, 1, -1) } split(&#039;,&#039;, $1);&lt;br /&gt;
    return join(&#039;|&#039;, @list);&lt;br /&gt;
  } &lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
currentPlaylistNameMasked:currentPlaylistName.* {&lt;br /&gt;
  my $name = ReadingsVal($name, &amp;quot;currentPlaylistName&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
  $name =~ s/ /\./g;&lt;br /&gt;
  return $name;&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
RadiosList:LastActionResult.*?GetRadios:.* { &lt;br /&gt;
  if (ReadingsVal($name, &amp;quot;LastActionResult&amp;quot;, &amp;quot;&amp;quot;) =~ m/.*?: (.*)/) { &lt;br /&gt;
    my @list = map { $_ =~ s/ /./g; $_ } map { substr($_, 1, -1) } split(&#039;,&#039;, $1);&lt;br /&gt;
    return join(&#039;|&#039;, @list);&lt;br /&gt;
  } &lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
RadiosListAlias:LastActionResult.*?GetRadios:.* { &lt;br /&gt;
  if (ReadingsVal($name, &amp;quot;LastActionResult&amp;quot;, &amp;quot;&amp;quot;) =~ m/.*?: (.*)/) { &lt;br /&gt;
    my @list = map { substr($_, 1, -1) } split(&#039;,&#039;, $1);&lt;br /&gt;
    return join(&#039;|&#039;, @list);&lt;br /&gt;
  } &lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
currentRadioNameMasked:currentRadioName.* {&lt;br /&gt;
  my $name = ReadingsVal($name, &amp;quot;currentRadioName&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
  $name =~ s/ /\./g;&lt;br /&gt;
  return $name;&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
currentFavouriteNameMasked:currentFavouriteName.* {&lt;br /&gt;
  my $favouriteName = ReadingsVal($name, &amp;quot;currentFavouriteName&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
  $favouriteName =~ s/ /\./g;&lt;br /&gt;
  return $favouriteName;&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
currentPlaylistNameMasked:currentPlaylistName.* {&lt;br /&gt;
  my $name = ReadingsVal($name, &amp;quot;currentPlaylistName&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
  $name =~ s/ /\./g;&lt;br /&gt;
  return $name;&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
currentRadioNameMasked:currentRadioName.* {&lt;br /&gt;
  my $name = ReadingsVal($name, &amp;quot;currentRadioName&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
  $name =~ s/ /\./g;&lt;br /&gt;
  return $name;&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
ZoneGroupNameDetails:(MasterPlayer|roomName|SlavePlayer).* {&lt;br /&gt;
  my $result = ReadingsVal(ReadingsVal($name, &#039;MasterPlayer&#039;, $name), &#039;roomName&#039;, &#039;k.A.&#039;);&lt;br /&gt;
  $result = &#039;&#039; if ($name eq ReadingsVal($name, &#039;MasterPlayer&#039;, $name));&lt;br /&gt;
  foreach my $slave (@{eval(ReadingsVal($name, &#039;SlavePlayer&#039;, &#039;[]&#039;))}) {&lt;br /&gt;
    $result .= &#039; + &#039;.ReadingsVal($slave, &#039;roomName&#039;, $slave);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return $result;&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
SlavePlayerList:SlavePlayer:.* {&lt;br /&gt;
  my @player = @{eval(ReadingsVal($name, &#039;SlavePlayer&#039;, &#039;[]&#039;))};&lt;br /&gt;
  return (scalar(@player) ? &#039;-|&#039; : &#039;&#039;).join(&#039;|&#039;, @player);&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
SlavePlayerListAlias:SlavePlayer:.* {&lt;br /&gt;
  my @player = @{eval(ReadingsVal($name, &#039;SlavePlayer&#039;, &#039;[]&#039;))};&lt;br /&gt;
  return (scalar(@player) ? &#039;Auswahl|&#039; : &#039;&#039;).join(&#039;|&#039;, map { $_ = ReadingsVal($_, &#039;roomName&#039;, $_); $_ } @player);&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
AvailablePlayerList:(MasterPlayer|SlavePlayer):.* {&lt;br /&gt;
  my @player = @{eval(ReadingsVal(&#039;Sonos&#039;, &#039;MasterPlayer&#039;, &#039;[]&#039;))};&lt;br /&gt;
  &lt;br /&gt;
  # Selber entfernen...&lt;br /&gt;
  splice(@player, SONOS_posInList($name, @player), 1);&lt;br /&gt;
  &lt;br /&gt;
  # Slaveplayer entfernen...&lt;br /&gt;
  foreach my $elem (@{eval(ReadingsVal($name, &#039;SlavePlayer&#039;, &#039;[]&#039;))}) {&lt;br /&gt;
    my $pos = SONOS_posInList($elem, @player);&lt;br /&gt;
    splice(@player, $pos, 1) if ($pos &amp;gt;= 0);&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
    &lt;br /&gt;
  return (scalar(@player) ? &#039;-|&#039; : &#039;&#039;).join(&#039;|&#039;, @player);&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
AvailablePlayerListAlias:(MasterPlayer|SlavePlayer):.* {&lt;br /&gt;
  my @player = @{eval(ReadingsVal(&#039;Sonos&#039;, &#039;MasterPlayer&#039;, &#039;[]&#039;))};&lt;br /&gt;
  &lt;br /&gt;
  # Selber entfernen...&lt;br /&gt;
  splice(@player, SONOS_posInList($name, @player), 1);&lt;br /&gt;
  &lt;br /&gt;
  # Slaveplayer entfernen...&lt;br /&gt;
  foreach my $elem (@{eval(ReadingsVal($name, &#039;SlavePlayer&#039;, &#039;[]&#039;))}) {&lt;br /&gt;
    my $pos = SONOS_posInList($elem, @player);&lt;br /&gt;
    splice(@player, $pos, 1) if ($pos &amp;gt;= 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return (scalar(@player) ? &#039;Auswahl|&#039; : &#039;&#039;).join(&#039;|&#039;, map { $_ = ReadingsVal($_, &#039;roomName&#039;, $_); $_ } @player);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Damit werden bei einem Abruf der Favoriten / Playlists / Radios mittels entsprechendem Get-Befehl die entsprechenden Listen für alle Features aufbereitet und am Sonosplayer-Device bereitgestellt.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&#039;&#039;Aktuelle Userreading&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Mit der aktuellen Modulversion werden hierfür keinerlei Userreadings mehr benötigt.&lt;br /&gt;
&lt;br /&gt;
Mit dem Attribute &#039;&#039;getListsDirectlyToReadings&#039;&#039; werden alle möglichen Listen zu Favoriten, Playlists, Radios und der aktuellen Abspielliste (= Queue) automatisch in die richtigen Readings geschrieben.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren kann man mit dem Attribut &#039;&#039;simulateCurrentTrackPosition&#039;&#039; eine Simulation der aktuellen Titelposition aktivieren, sodass eine wiederkehrende Aktualisierung durch ein DOIF o.ä. nicht mehr notwendig ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Automatische Aktualisierung der Favoriten / Playlisten / Radios durch Notifies =====&lt;br /&gt;
Mit den folgenden Notifies kann man auf die Mitteilung der Sonosplayer über eine neue Version der jeweiligen Liste reagieren, und diese im Playerdevice automatisch aktualisieren lassen.&lt;br /&gt;
Damit hat man stets die aktuellen und zum Sonos-System passenden Listen in den Userreadings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Sonos_GetNewFavouritesNotify notify Sonos_[^_]+:FavouritesVersion.* { fhem(&amp;quot;get $NAME FavouritesWithCovers&amp;quot;);; fhem(&amp;quot;get $NAME Favourites&amp;quot;);; }&lt;br /&gt;
&lt;br /&gt;
define Sonos_GetNewPlaylistsNotify notify Sonos_[^_]+:PlaylistsVersion.* { fhem(&amp;quot;get $NAME PlaylistsWithCovers&amp;quot;);; fhem(&amp;quot;get $NAME Playlists&amp;quot;);; }&lt;br /&gt;
&lt;br /&gt;
define Sonos_GetNewRadiosNotify notify Sonos_[^_]+:RadiosVersion.* { fhem(&amp;quot;get $NAME RadiosWithCovers&amp;quot;);; fhem(&amp;quot;get $NAME Radios&amp;quot;);; }&lt;br /&gt;
&lt;br /&gt;
define Sonos_GetNewQueueNotify notify Sonos_[^_]+:QueueVersion.* { fhem(&amp;quot;get $NAME QueueWithCovers&amp;quot;);; fhem(&amp;quot;get $NAME Queue&amp;quot;);; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Examples]]&lt;br /&gt;
[[Category:HOWTOS]]&lt;br /&gt;
[[Category:Code Snippets]]&lt;br /&gt;
[[Category:Unterhaltungselektronik]]&lt;br /&gt;
[[Kategorie:Akustische Ausgabe]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Copy&amp;diff=31809</id>
		<title>Copy</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Copy&amp;diff=31809"/>
		<updated>2019-12-03T20:46:17Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:copy}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Befehl zum Kopieren einer Gerätedefinition&lt;br /&gt;
|ModType=cmd&lt;br /&gt;
|ModCmdRef=copy&lt;br /&gt;
|ModForumArea=Sonstiges&lt;br /&gt;
|ModTechName=98_copy.pm&lt;br /&gt;
|ModOwner=justme1968 ({{Link2FU|430|Forum}} / [[Benutzer Diskussion:Justme|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
Der Befehl [[copy]] dient dazu, eine Kopie eines Gerätes (Device) zu erstellen. Hierbei werden die Definition und alle Attribute unter einem neuen Namen dupliziert.&lt;br /&gt;
&lt;br /&gt;
Der Befehl kann direkt über die [[FHEMWEB|Weboberfläche]] eingegeben werden. Nach dem Ende des Kopiervorgangs wird automatisch die Detailansicht des &#039;&#039;&#039;neuen&#039;&#039;&#039; Gerätes angezeigt, so dass die in der Regel erforderlichen weiteren Anpassungen gleich durchgeführt werden können.&lt;br /&gt;
&lt;br /&gt;
Beispiel: copy AktuellerName NameDerKopie&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-TC-IT-WM-W-EU_Funk-Wandthermostat_AP&amp;diff=29318</id>
		<title>HM-TC-IT-WM-W-EU Funk-Wandthermostat AP</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-TC-IT-WM-W-EU_Funk-Wandthermostat_AP&amp;diff=29318"/>
		<updated>2019-01-31T19:37:14Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Luftfeuchtigkeit in Plot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-TC-IT-WM-W-EU.jpg&lt;br /&gt;
|Bildbeschreibung=HM-TC-IT-WM-W-EU mit Standard-Einstellungen&lt;br /&gt;
|HWProtocol=[[HomeMatic]]&lt;br /&gt;
|HWType=[[HomeMatic Type Thermostat|thermostat]]&lt;br /&gt;
|HWCategory=[[:Kategorie:Temperatursensoren|Temperatursensoren]] [[:Kategorie:Feuchtesensoren|Feuchtesensoren]]&lt;br /&gt;
|HWComm=868,3 MHz&lt;br /&gt;
|HWChannels=7&lt;br /&gt;
|HWVoltage=3 V&lt;br /&gt;
|HWPowerConsumption=40 mA (max)&lt;br /&gt;
|HWPoweredBy=2 x LR6/Mignon/AA&lt;br /&gt;
|HWSize=ohne Rahmen: 55&amp;amp;#8239;x&amp;amp;#8239;55&amp;amp;#8239;x&amp;amp;#8239;20&amp;amp;nbsp;mm&amp;lt;br /&amp;gt;mit Rahmen: 86&amp;amp;#8239;x&amp;amp;#8239;86&amp;amp;#8239;x&amp;amp;#8239;21,5&amp;amp;nbsp;mm&lt;br /&gt;
|HWDeviceFHEM=[[CUL_HM]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=ELV / eQ-3&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;HM-TC-IT-WM-W-EU Funk-Wandthermostat AP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
HomeMatic-Wandthermostat Aufputz. Verfügbar seit Februar 2014. Nachfolger des [[HM-CC-TC_Funk-Wandthermostat|HM-CC-TC]].&lt;br /&gt;
&lt;br /&gt;
== Vorbemerkungen ==&lt;br /&gt;
: &#039;&#039;→ Allgemeine Informationen, die alle HomeMatic Thermostate betreffen, sind unter [[HomeMatic Type Thermostat]] zu finden.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;&#039;HM-TC-IT-WM-W-EU Funk-Wandthermostat&#039;&#039;&#039; misst die Raumtemperatur und Luftfeuchtigkeit. Er verfügt über individuell einstellbare Wochenprogramme und Programmierung direkt am Gerät. Zusätzlich ist auch eine Boost-Funktion vorhanden (ermöglicht ein schnelles, kurzzeitiges Aufheizen des Heizkörpers). Er verfügt über ein eigenes Anzeigedisplay für Soll- und Isttemperatur sowie Luftfeuchtigkeit. Er kann mittels Klebestreifen irgendwo aufgeklebt werden, soll aber auch in Mehrfachrahmen von Berker, ELSO, Gira, Merten und JUNG passen.&lt;br /&gt;
&lt;br /&gt;
Der Hauptnutzen gegenüber den Heizkörperthermostaten besteht neben einer weitaus bequemeren Bedienung und der möglichen Anzeige von Istwerten von Temperatur und Luftfeuchte auch in einer Entkopplung der Raumtemperaturreglung aus der räumlichen Nähe des Heizkörpers. Zusätzlich oder alternativ zur Heizkörpersteuerung ist auch die Anbindung von Fußbodenheizung oder anderen Wärmequellen über einen funkgesteuerten Schaltaktor durch einen separaten Schaltkanal möglich.&lt;br /&gt;
&lt;br /&gt;
== Technische Daten ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technische Daten:&#039;&#039;&#039;&lt;br /&gt;
* Versorgungsspannung: 2 Stck. 1,5 V LR03/Micro/AAA&lt;br /&gt;
* Stromaufnahme (max.): 40 mA&lt;br /&gt;
* Schutzart: IP20&lt;br /&gt;
* Schutzklasse: III&lt;br /&gt;
* Abmessungen (BxHxT ohne Rahmen): 55 x 55 x 20 mm&lt;br /&gt;
* Abmessungen (BxHxT mit Rahmen): 86 x 86 x 21,5 mm&lt;br /&gt;
* Gewicht (ohne Batterien): 74 g&lt;br /&gt;
* Temperaturwahl in Schritten von: 0,5 °C&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zum HM-CC-TC kann der HM-TC-IT-WM-W-EU auch andere HomeMatic-Schaltaktoren (z.B. [[HM-LC-SW1-FM_Schaltaktor_1-fach_UP|HM-LC-SW1-FM]]) über den Channel 07 SwitchTr direkt anlernen, womit z.B. die Steuerung elektrischer Heizungen möglich wird. Der HM-CC-TC konnte direkt nur die HM-CC-VD steuern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Betrieb mit FHEM ==&lt;br /&gt;
Grundsätzlich sind speziell bei der Ansteuerung von [[HM-CC-RT-DN Funk-Heizkörperthermostat]] zwei Betriebsarten mit FHEM denkbar.&lt;br /&gt;
&lt;br /&gt;
=== Steuerung nur über den Wandthermostat ===&lt;br /&gt;
&lt;br /&gt;
In diesem Fall werden zunächst alle [[HM-CC-RT-DN Funk-Heizkörperthermostat]]e mit dem HM-TC-IT-WM-W-EU Funk-Wandthermostat verbunden wie in den Handbüchern beschrieben (dort &amp;quot;verknüpfen&amp;quot; genannt, technisch handelt es sich um eine peering).&lt;br /&gt;
Dazu muss die mittlere Taste der Heizkörper Ventile länger als 3 Sekunden gedrückt werden, ebenso das Einstellrad am Wandthermostat. Die &amp;quot;Verknüpfung&amp;quot; war erfolgreich, wenn beide Geräte &amp;quot;ACK&amp;quot; im Display zeigen. &lt;br /&gt;
&lt;br /&gt;
Wichtig ist, dass keines der Geräte vorher mit einer Zentrale (u.B. VCCU) gepairt sein darf. Im Zweifel vorher unpairen.&lt;br /&gt;
&lt;br /&gt;
Wenn alle Heizkörperthermostat gepeert (&amp;quot;verknüpft&amp;quot;) sind, dann wird das HM-TC-IT-WM-W-EU Funk-Wandthermostat mit FHEM wie in [[HomeMatic Devices pairen]] beschrieben gepairt.&lt;br /&gt;
&lt;br /&gt;
Anschliessend kann per FHEM mit dem Befehl&lt;br /&gt;
 set myTC desired-temp 22&lt;br /&gt;
die Zieltemperatur an den Wandthermostat übermittelt werden. Dieser verteilt diese Temperatur und seine gemessene Ist-Temperatur an die Heizkörperthermostate weiter, die dann entsprechend das Ventil öffnen oder schliessen. Die Wunschtemperatur kann auch lokal an &#039;&#039;&#039;allen&#039;&#039;&#039; Geräten (also auch an einem der Heizkörperthermostate) per Drehregler geändert werden und wird anschliessend an alle anderen Geräte und FHEM weiterübertragen. Kommunikationspartner für FHEM ist aber immer nur das gepairte HM-TC-IT-WM-W-EU Funk-Wandthermostat.&lt;br /&gt;
&lt;br /&gt;
Vorteile dieser Methode:&lt;br /&gt;
* schnell eingerichtet - weniger Komplex, keine Channel peering notwendig.&lt;br /&gt;
* weniger Geräte in FHEM, weniger Daten, weniger Defs, weniger Prozessorlast, geringer Verbrauch des Funkkontingents an FHEMs Funkschnittstelle etc. (Es ist allerdings fraglich, ob in normalen Installationen diese Effekte überhaupt spürbar sind)&lt;br /&gt;
* Heizung kann am HM-TC-IT-WM-W-EU Funk-Wandthermostat auch bei Ausfall von FHEM eingestellt werden.&lt;br /&gt;
* eventuelles Wochenprogramm muss nur an einer Stelle eingespielt werden (nämlich in den Wandthmermostaten)&lt;br /&gt;
&lt;br /&gt;
Nachteile dieser Methode:&lt;br /&gt;
* keine direkte Kontrolle über die Heizkörperthermostate, weniger Daten. Z.B. ist der Valevöffnungsgrad FHEM unbekannt, ebenso Batteriewarnungen, auch lassen sich diverse Dinge nicht konfigurieren wie Button lock, boost-time, remote Kanal zur Abschaltung, temp-offset, maximale Ventilöffnung etc.&lt;br /&gt;
* leichte Verzögerung in der Übermittlung der Zieltemperatur, da diese zuerst an den Wandthermostaten übermittelt wird und dieser erst mit etwas Verzögerung die Daten an die Heizkörperthermostaten weiterreicht.&lt;br /&gt;
* eventuelles Wochenprogramm kann nur an einer Stelle eingespielt werden (nämlich in den Wandthmermostaten), man kann also nicht einzelnen Heizkörpern abweichende Programme geben. Da man einen Wandthermostat wohl in der Praxis nur mit Heizkörperthermostaten &#039;&#039;&#039;eines&#039;&#039;&#039; einzelnen Raumes peeren wird, ist dieser Nachteil ggf eher theoretischern Natur.&lt;br /&gt;
&lt;br /&gt;
=== Steuerung aller Komponenten durch FHEM ===&lt;br /&gt;
&lt;br /&gt;
Diese Methode wird zumindest von den meisten Nutzern des Forums favorisiert, weil sie mehr Kontrolle auch über Details und Geräte ermöglicht.&lt;br /&gt;
&lt;br /&gt;
In diesem Fall werden zunächst alle Geräte - also die Heizkörperthermostate und der Wandthermostat - wie in [[HomeMatic Devices pairen]] beschrieben mit FHEM (also i.d.R. der VCCU) gepairt.&lt;br /&gt;
&lt;br /&gt;
Danach kann das [[Peering (HomeMatic)|Peering]] mit den Heizkörperthermostaten des betreffenden Raumes stattfinden. Je nach Funktion sind dazu einer oder mehrer Channels zu peeren, Details weiter unten.&lt;br /&gt;
&lt;br /&gt;
Vorteile dieser Methode:&lt;br /&gt;
* direkte Kontrolle über die Heizkörperthermostate, Verfügbarkeit Daten wie z.B  Valevöffnungsgrad FHEM, Batteriestatus, am jedem Heizkörper gemessene Temperatur etc.; diverse Paramter am Heizkörperthermostat konfigurierbar, wie Button lock, boost-time, remote Kanal zur Abschaltung, temp-offset, maximale Ventilöffnung etc.&lt;br /&gt;
* schneller Übermittlung der Zieltemperatur (und sonstiger Daten), da diese zugleich an alle gepeerten Thermostaten übermittelt wird.&lt;br /&gt;
* Wochenprogramm frei in alle Geräte übertragbar, dadurch in grossen Räumen gezieltes Ansteuern einzelner Heizkörper möglich etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nachteile dieser Methode:&lt;br /&gt;
* deutlich komplexer in der Einrichtung&lt;br /&gt;
* mehr Geräte in FHEM, mehr Daten, mehr Defs notwendig, höhere Prozessorlast, höhere Auslastung des Funkkontingents an der HM Funkschnittstelle von FHEM (zumindest für &#039;&#039;normale&#039;&#039; Anzahl von Thermostaten eher theoretischer Natur)&lt;br /&gt;
* Zieltemperatur kann ohne FHEM nicht mehr am HM-TC-IT-WM-W-EU Funk-Wandthermostat eingestellt werden, sondern müsste an jedem Heizkörper einzeln eingestellt werden.&lt;br /&gt;
* Wochenprogramm muss ggf auf mehrere Geräte verteilt werden.&lt;br /&gt;
&lt;br /&gt;
Bei der Steuerung aller Komponenten über FHEM müssen je nach Anwendungsfall bestimmte Channels gepeert werden.&lt;br /&gt;
&lt;br /&gt;
==== Channels (Kanäle) ====&lt;br /&gt;
&lt;br /&gt;
===== Channel (Kanal) 01 _Weather =====&lt;br /&gt;
Damit das [[HM-CC-RT-DN Funk-Heizkörperthermostat]] die Temperatur des Wandthermostats übernimmt, muss der Weather Kanal gepeert werden:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-TC-IT-WM-W-EU-Gerät&amp;gt;_Weather peerChan 0 &amp;lt;HM-CC-RT-DN-Gerät&amp;gt;_Weather single set&lt;br /&gt;
&lt;br /&gt;
===== Channel (Kanal) 02 _Climate =====&lt;br /&gt;
Damit der Heizkörperthermostat vom Wandthermostat auch eingestellt werden kann (Soll-Temperatur, Mode etc.), muss der Climate Kanal gepeert werden:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-TC-IT-WM-W-EU-Gerät&amp;gt;_Climate peerChan 0 &amp;lt;HM-CC-RT-DN-Gerät&amp;gt;_Climate single set&lt;br /&gt;
Dies muss für jedes zu steuernde Heizkörperthermostat wiederholt werden.&lt;br /&gt;
&lt;br /&gt;
===== Channel (Kanal) 03 _WindowRec =====&lt;br /&gt;
Mit diesem Kanal lassen sich Fensterkontakte (HM-SEC-SC oder HM-SEC-RHS) peeren, die ihren Fensterstatus (geöffnet/gekippt) an ein oder mehrere Thermostate senden. Die Thermostate stellen anschließend die entsprechende (konfigurierbare) Temperatur ein. Der Temperaturwert kann je Fenster-Sensor unterschiedlich definiert werden. Sind mehrere Fenster gleichzeitig geöffnet, so wird der Thermostat auf die Temperatur des Sensors mit dem geringsten Temperaturwert eingestellt. &lt;br /&gt;
&lt;br /&gt;
Damit der Tür-Fensterkontakt den Thermostat aufwecken kann, muss zuerst der Burst-Modus aktiviert werden, siehe dazu [[HM-SEC-SC_Tür-Fensterkontakt#Problembehebung]].&lt;br /&gt;
&lt;br /&gt;
Das eigentliche Peering mit einem Tür-Fensterkontakt läuft wie folgt ab:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-Sec-SC&amp;gt; peerChan 0 &amp;lt;HM-TC-IT-WM-W-EU-Gerät&amp;gt;_WindowRec single set&lt;br /&gt;
&lt;br /&gt;
Der Befehl zur Temperatureinstellung des Heizkörperthermostaten für den Zustand &amp;quot;Fenster offen&amp;quot; lautet, wobei &amp;lt;fensterSensor&amp;gt; die FHEM-Kanalbezeichnung für den Fensterkontakt ist und &amp;lt;tc_WindowRec&amp;gt; die Kanalbezeichnung für den entsprechenden Kanal des Heizkörperthermostates, sowie &amp;lt;Temp&amp;gt; die einzustellende Temperatur (ganzzahliger Wert):&lt;br /&gt;
 set &amp;lt;tc_WindowRec&amp;gt; regSet winOpnTemp &amp;lt;Temp&amp;gt; &amp;lt;fensterSensor&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Channel (Kanal) 06 _remote =====&lt;br /&gt;
Dieser Kanal kann an eine Fernbedienung gekoppelt werden. Per Tastendruck kann man einen bestimmten Mode und/oder eine bestimmte Temperatur wählen. Dabei kann die Reaktion auf einen langen oder kurzen Tastendruck gesondert eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Der Befehl zum peeren lautet, wobei &amp;lt;button&amp;gt; die Kanalbezeichnung der Fernbedienung und &amp;lt;tc-remote&amp;gt; die Kanalbezeichnung des Heizkörperthermostates ist:&lt;br /&gt;
&amp;lt;pre&amp;gt;set &amp;lt;button&amp;gt; peerChan 0 &amp;lt;rt-remote&amp;gt; single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Channel (Kanal) 07 _SwitchTr =====&lt;br /&gt;
Dieser Kanal kann direkt mit einem HomeMatic-Schaltaktor verknüpft (gepeert) werden, um temperaturgesteuerte Schaltvorgänge auszulösen. Eine direkte Nutzung als Feuchtigkeitssensor zur Lüftungssteuerung ist hingegen nicht möglich. Geeignete Aktoren sind alle dauerhaft mit Klein- oder Netzspannung versorgten Aktoren, die zum Betrieb keinen sog. Burst benötigen (Hutschienen-, Unterputz- und Wandmontage). Nicht geeignet sind demnach die batterieversorgten ein- oder vierkanaligen HM-LC-Sw(x)-BA-PCB-Aktoren oder das Empfangsmodul HM-MOD-Re-8, weil der Thermostat den zum &amp;quot;Aufwecken&amp;quot; dieser Geräte nötigen Burst nicht senden kann. &lt;br /&gt;
&lt;br /&gt;
Das Peering mit einem Schaltaktor läuft z.B. wie folgt ab:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-TC-IT-WM-W-EU_SwitchTr&amp;gt; peerChan 0 &amp;lt;HM-LC-SW1-FM&amp;gt; single set&lt;br /&gt;
&lt;br /&gt;
Dies allein ist nicht ausreichend, da der so gepeerte Aktor sich bei jedem Heizbefehl abwechselnd ein- und ausschaltet, da er die Ausschaltbefehle des Thermostaten (short trigger mit Wert 0) ignoriert. Um das zu korrigieren, wird er so programmiert, dass er, wenn eingeschaltet, auf den Ausschaltbefehl reagiert (und ihn ansonsten ignoriert):&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-LC-SW1-FM&amp;gt; regSet shCtOn ltLo &amp;lt;HM-TC-IT-WM-W-EU_SwitchTr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Möchte man mit dem Aktor ein inverses Verhalten erreichen (etwa beim Einsatz als Kühlthermostat oder für stromlos offene Ventilsteuerköpfe von Fußbodenheizungen), so setzt man &#039;&#039;&#039;stattdessen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-LC-SW1-FM&amp;gt; regSet shCtOff ltLo &amp;lt;HM-TC-IT-WM-W-EU_SwitchTr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Einstellungen ==&lt;br /&gt;
&lt;br /&gt;
Die folgenden Einstellungen werden in **Registern** des HM-TC-IT-WM-W-EU vorgenommen. Das heißt, dass diese Einstellungen im Gerät selbst gespeichert werden, nicht in der Konfigurations-Datei von FHEM.&lt;br /&gt;
&lt;br /&gt;
=== Anzeige ===&lt;br /&gt;
&lt;br /&gt;
Register im Kanal&amp;amp;nbsp;2 &#039;&#039;(_Climate)&#039;&#039; erlauben es zu konfigurieren, welche Daten der HM-TC-IT-WM-W-EU in seinem LC-Display anzeigt.&lt;br /&gt;
&lt;br /&gt;
==== showInfo time|date ====&lt;br /&gt;
&lt;br /&gt;
Wählt aus, ob die &#039;&#039;Uhrzeit&#039;&#039; (&amp;lt;code&amp;gt;time&amp;lt;/code&amp;gt;, Standard-Einstellung) oder das &#039;&#039;Datum&#039;&#039; (&amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt;) angezeigt wird. Der folgende Befehl erlaubt es das Datum anzeigen zu lassen:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt;_Climate regSet showInfo date&lt;br /&gt;
&lt;br /&gt;
==== showSetTemp actTemp|setTemp ====&lt;br /&gt;
&lt;br /&gt;
Wählt aus, ob die &#039;&#039;Ist-Temperatur&#039;&#039; (&amp;lt;code&amp;gt;actTemp&amp;lt;/code&amp;gt;, Standard-Einstellung) oder die &#039;&#039;Soll-Temperatur&#039;&#039; (&amp;lt;code&amp;gt;setTemp&amp;lt;/code&amp;gt;) im Display angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt;_Climate regSet showSetTemp setTemp&lt;br /&gt;
&lt;br /&gt;
==== showHumidity temp|tempHum ====&lt;br /&gt;
&lt;br /&gt;
Wählt aus, ob dauerhaft die &#039;&#039;Temperatur&#039;&#039; (&amp;lt;code&amp;gt;temp&amp;lt;/code&amp;gt;, Standard-Einstellung) oder &#039;&#039;Temperatur und Luftfeuchtigkeit&#039;&#039; im Wechsel (&amp;lt;code&amp;gt;tempHum&amp;lt;/code&amp;gt;) im Display angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt;_Climate regSet showHumidity tempHum&lt;br /&gt;
&lt;br /&gt;
=== Tastensperre ===&lt;br /&gt;
&lt;br /&gt;
Um zu verhindern, dass der Modus oder die Temperatur per Tasten bzw. Drehrad am HM-TC-IT-WM-W-EU verändert wird, kann eine Tastensperre gesetzt werden. Dies erfolgt mittels des Befehls:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt; regSet btnLock on&lt;br /&gt;
&lt;br /&gt;
Rückgängig machen geht per:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt; regSet btnLock off&lt;br /&gt;
&lt;br /&gt;
Diese Tastensperre kann man aber am Thermostat durch eine Tastenkombination wieder zurücksetzen. Um sie nur per FHEM rücksetzen zu können, muss&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt; regSet globalBtnLock on&lt;br /&gt;
&lt;br /&gt;
abgesetzt werden. Rückgängig wieder per:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt; regSet globalBtnLock off&lt;br /&gt;
&lt;br /&gt;
=== Temperaturlisten ===&lt;br /&gt;
&lt;br /&gt;
Die Temperaturlisten des HM-TC-IT-WM-W-EU werden identisch zu anderern HomeMatic Thermostaten verwaltet, siehe [[HomeMatic Type Thermostat#Temperaturlisten|HomeMatic Type Thermostat]]. Beim HM-TC-IT-WM-W-EU ist der Kanal&amp;amp;nbsp;2 &#039;&#039;(_Climate)&#039;&#039; für die Temperaturlisten zuständig.&lt;br /&gt;
&lt;br /&gt;
=== Luftfeuchtigkeit in SVG Plot ===&lt;br /&gt;
&lt;br /&gt;
Um die Luftfeuchtigkeit im Plot darzustellen benötigt man im Logfile folgenden Eintrag:&lt;br /&gt;
&lt;br /&gt;
 2017-10-24_22:03:12 WANDTHERMOSTAT_Weather humidity: 61&lt;br /&gt;
&lt;br /&gt;
Um diesen zu erhalten muss man in der Logfile Konfiguration evtl. das DEF um die Weather Information erweitern:&lt;br /&gt;
&lt;br /&gt;
Standardbeispiel:&lt;br /&gt;
 ./log/WANDTHERMOSTAT-%Y.log WANDTHERMOSTAT&lt;br /&gt;
&lt;br /&gt;
Erweiterung:&lt;br /&gt;
 ./log/WANDTHERMOSTAT-%Y.log WANDTHERMOSTAT|WANDTHERMOSTAT_Weather:.*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach einer Weile, sollte der Eintrag &amp;quot;WANDTHERMOSTAT_Weather humidity:&amp;quot; im SVG Plot zur Auswahl zur Verfügung stehen.&lt;br /&gt;
&lt;br /&gt;
== FHEM-Log ==&lt;br /&gt;
=== Event monitor ===&lt;br /&gt;
&lt;br /&gt;
Hier habe ich einmal die Wunschtemperatur erhöht, damit auch was passiert:&lt;br /&gt;
&lt;br /&gt;
  2014-04-09 09:35:11 CUL_HM KH_Bad_Therm CMDs_pending&lt;br /&gt;
  2014-04-09 09:35:11 CUL_HM KH_Bad_Therm_Climate set_desired-temp 18.0&lt;br /&gt;
  2014-04-09 09:35:11 CUL_HM KH_Bad_Therm CMDs_done&lt;br /&gt;
&lt;br /&gt;
Bei mir ist es so, das der SwitchTr Kanal nur mit dem gepeerten Device spricht, hier ein HM-LC-SW1-FM:&lt;br /&gt;
&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung trig_KH_Bad_Therm_SwitchTr: 200&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung trigLast: KH_Bad_Therm_SwitchTr :200&lt;br /&gt;
&lt;br /&gt;
Der hat auch prompt reagiert und die Heizung eingeschaltet:&lt;br /&gt;
&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung level: 100&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung pct: 100&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung deviceMsg: on (to KH_Bad_Therm)&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung on&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung timedOn: off&lt;br /&gt;
&lt;br /&gt;
und noch ein wenig Geplauder der vorhandenen Kanäle:&lt;br /&gt;
&lt;br /&gt;
  2014-04-09 09:36:39 CUL_HM KH_Bad_Therm_Climate measured-temp: 16.0&lt;br /&gt;
  2014-04-09 09:36:39 CUL_HM KH_Bad_Therm_Climate desired-temp: 18.0&lt;br /&gt;
  2014-04-09 09:36:39 CUL_HM KH_Bad_Therm_Climate humidity: 50&lt;br /&gt;
  2014-04-09 09:36:39 CUL_HM KH_Bad_Therm_Climate T: 16.0 desired: 18.0&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm battery: ok&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm batteryLevel: 3&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm measured-temp: 16.0&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm desired-temp: 18.0&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm_Climate measured-temp: 16.0&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm_Climate desired-temp: 18.0&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm_Climate mode: auto&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm_Climate T: 16.0 desired: 18.0&lt;br /&gt;
  2014-04-09 09:36:59 CUL_HM KH_Bad_Therm_Weather temperature: 16.0&lt;br /&gt;
  2014-04-09 09:36:59 CUL_HM KH_Bad_Therm_Weather humidity: 50&lt;br /&gt;
  2014-04-09 09:36:59 CUL_HM KH_Bad_Therm_Weather T: 16.0 H: 50&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Firmware Update ==&lt;br /&gt;
Updates für den HM-TC-IT-WM-W-EU können von der eQ-3 Webseite heruntergeladen werden. Genauere Informationen gibt es unter [[HomeMatic_Firmware_Update]]. Das Thermostat wird in den Updatemodus gebracht, indem beide äußeren Tasten gedrückt werden, während die Batterien eingesetzt werden. Das Display zeigt &amp;quot;FUP&amp;quot; an.&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
* Bei der Firmware 1.2 und dem Kanal Climate funktioniert die Einstellung der Hysterese über das Register hyst2point nicht. Der Eintrag wird ignoriert. &lt;br /&gt;
&lt;br /&gt;
Siehe auch Bericht im [http://www.elv.de/topic/hystereseeinstellung-bei-hm-tc-it-wm-w-eu-firmware-1-2-wird-ignoriert.html Forum von ELV]&lt;br /&gt;
&lt;br /&gt;
* Der Sensor sollte nur innerhalb seiner Spezifikationen (0° - 50°C) betrieben werden; bei kleineren Temperaturen werden überhöhte Temperaturen gesendet, siehe {{Link2Forum|Topic=80383|LinkText=dieser Forumsbeitrag}}.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/pdf_produkte/HM-TC-IT-WM-W-EU_UM_GE_eQ-3_web.pdf Manual]&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/pdf_produkte/Funk-Wandthermostat_132030A0_Produktdatenblatt_V1.2.pdf Produktdatenblatt] &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Feuchtesensoren]]&lt;br /&gt;
[[Kategorie:Temperatursensoren]]&lt;br /&gt;
[[Kategorie:868MHz]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erl%C3%A4uterungen&amp;diff=28619</id>
		<title>DOIF/Einsteigerleitfaden, Grundfunktionen und Erläuterungen</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erl%C3%A4uterungen&amp;diff=28619"/>
		<updated>2018-12-02T21:22:47Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: Hinweistext an merheren Stellen hinzugefügt: Hinweis: In neueren Versionen ggf. &amp;#039;&amp;#039;&amp;#039;initialized&amp;#039;&amp;#039;&amp;#039; durch &amp;#039;&amp;#039;&amp;#039;initialize&amp;#039;&amp;#039;&amp;#039; ersetzen.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[DOIF]], für FHEM-Einsteiger konzipiert, wurde über Benutzeranforderungen zu einem immer vielfältigeren Werkzeug weiter entwickelt. Damit orientiert sich die Weiterentwicklung des [[DOIF]] an praktischen Aufgabenstellungen. Im Ergebnis können einfache Probleme, sowie auch spezielle und komplexe Aufgaben in kompakter Weise gelöst werden. Damit nimmt jedoch auch die Zahl der Einstellungsmöglichkeiten über Attribute, Syntaxvarianten und deren Kombinationen zu. Das macht es für Einsteiger und Fortgeschrittene nicht leicht den Überblick zu behalten.&lt;br /&gt;
&lt;br /&gt;
Hier soll der Blick auf die Teile des DOIF beschränkt werden, die für die Einfachheit des DOIF aus seiner Anfangszeit stehen und die ausreichen 80% der Aufgabenstellungen lösen.&lt;br /&gt;
{{Randnotiz|RNTyp=g|RNText=&#039;&#039;&#039;Hinweis!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die {{Link2CmdRef|Lang=de|Anker=DOIF|Label=deutschsprachige FHEM-Befehlsreferenz (Commandref)}} zum DOIF sollte bei Fragen immer das erste Nachschlagewerk sein. Sie ist aktueller, genauer und mit Beispielen versehen. Dieser Artikel ist eine geraffte Darstellung der Grundlagen des DOIF mit einigen Erläuterungen.}}&lt;br /&gt;
&lt;br /&gt;
== Voraussetzung ==&lt;br /&gt;
&lt;br /&gt;
Die FHEM-Begriffe [[Gerät]] ([[Device]]), State (Status), [[Readings]], [[Internals]], [[Attribute]], [[Event]] ([[Ereignis]]), Befehl (Command) und deren Funktion sollen bekannt sein.&lt;br /&gt;
&lt;br /&gt;
== DOIF-Light für Einsteiger ==&lt;br /&gt;
&lt;br /&gt;
Die meisten Verknüpfungsaufgaben können mit einem Verständnis der folgenden Abschnitte der {{Link2CmdRef|Lang=de|Anker=DOIF|Label=Hilfe zum DOIF (deutschsprachige Befehlsreferenz)}} gelöst werden.&lt;br /&gt;
&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF|Label=Einleitung}}&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_Features|Label=Features}}&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_Lesbarkeit_der_Definitionen|Label=Lesbarkeit der Definitionen}}&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_Ereignissteuerung_ueber_Auswertung_von_Events|Label=Ereignissteuerung}}&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_Zeitsteuerung|Label=Zeitsteuerung}}&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_Wochentagsteuerung|Label=Wochentagsteuerung}}&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Label=Zeitsteuerung mit Zeitintervallen}}&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_Indirekten_Zeitangaben|Label=Indirekte Zeitangaben}}&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_Nutzung_von_Readings_Stati_oder_Internals_im_Ausfuehrungsteil|Label=Angaben im Ausführungsteil}}&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_do_always|Label=do always}}&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_wait|Label=wait}}&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_do_resetwait|Label=do resetwait}}&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_setList__readingList|Label=readingList, setList}} Frontendgestaltung&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_Zu_beachten|Label=zu beachten}} zusätzliche Hinweise und Tipps&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_Kurzreferenz|Label=Kurzreferenz}} als Überblick&lt;br /&gt;
&lt;br /&gt;
== Struktur und Verhalten des DOIF ==&lt;br /&gt;
&lt;br /&gt;
Der Aufbau des DOIF entspricht einer Baumstruktur mit Bedingungszweigen. {{Randnotiz|RNTyp=y|RNText=&#039;&#039;&#039;Achtung!&#039;&#039;&#039; Der Begriff &#039;&#039;&#039;Ereignis&#039;&#039;&#039; wird in diesem Artikel erweitert verwendet und umfasst ablaufende Timer und [[Event|Ereignisse]]([[Event|Events]]). }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:DOIF_Aufbau_Ablauf_nSVG.png|top|alt=&amp;quot;DOIF_Aufbau_Ablauf&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Verhaltensweise ohne steuernde Attribute ===&lt;br /&gt;
&lt;br /&gt;
==== Angaben im Bedingungsteil ====&lt;br /&gt;
Der Bedingungsteil besteht aus einer Perl-Ebene und einer Präprozessorebene.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;(&#039;&#039;&#039;&#039;&#039;Perl-Ebene&#039;&#039; &#039;&#039;&#039;[&#039;&#039;&#039;&#039;&#039;DOIF-Präprozessor&#039;&#039;&#039;&#039;&#039;]&#039;&#039;&#039; &#039;&#039;Perl-Ebene&#039;&#039; &#039;&#039;&#039;[&#039;&#039;&#039;&#039;&#039;DOIF-Präprozessor&#039;&#039;&#039;&#039;&#039;]&#039;&#039;&#039; ...&#039;&#039;&#039;)&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
Die erste Ebene der ersten runden Klammer nach den Schlüsselwörtern &#039;&#039;&#039;DOIF&#039;&#039;&#039; oder &#039;&#039;&#039;DOELSEIF&#039;&#039;&#039; umschliesst eine Bedingung.&lt;br /&gt;
&lt;br /&gt;
Für Angaben in dieser Klammer (Perl-Ebene) gilt die Perl-Syntax (Operatoren, Operanden, wie Funktionen, Variablen), ausgenommen sind die Angaben in der ersten Ebene der eckigen Klammern, sie umschliessen die Ebene des DOIF-Präprozessors, dort gilt die Syntax des DOIF-Präprozessors.&lt;br /&gt;
&lt;br /&gt;
In dieser Ebene der eckigen Klammern werden &#039;&#039;&#039;DOIF-Operanden&#039;&#039;&#039; angegeben. Die &#039;&#039;&#039;DOIF-Operanden&#039;&#039;&#039; beinhalten &#039;&#039;&#039;Auslöser&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auslöser&#039;&#039;&#039; sind Zeitpunkte, Gerätenamen(bei checkReadingEvent 0, voreingestellt bis Version 16651 2018-04-23 06:28:53Z Damian) oder die Kombination von Gerätename:Reading(bei checkReadingEvent 1, voreingestellt nach Version 16651 2018-04-23 06:28:53Z Damian) und Reguläre Ausdrücke, die auf Gerätenamen oder das &#039;&#039;&#039;Ereignis&#039;&#039;&#039; passen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ereignisse&#039;&#039;&#039; sind für DOIF ablaufende Timer oder [[Event|Ereignisse]] ([[Event|Events]]) die durch [[Gerät|Geräte]] initiiert werden.&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;&#039;DOIF-Prozess&#039;&#039;&#039; wird gestartet wenn ein &#039;&#039;&#039;Ereignis&#039;&#039;&#039; eintrifft.&lt;br /&gt;
&lt;br /&gt;
Passt ein &#039;&#039;&#039;Auslöser&#039;&#039;&#039; einer Bedingung zu dem &#039;&#039;&#039;Ereignis&#039;&#039;&#039; wird diese Bedingung geprüft.&lt;br /&gt;
&lt;br /&gt;
Ist die Bedingung &#039;&#039;&#039;wahr&#039;&#039;&#039;, werden die nach der Bedingung stehenden Befehle ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Nach der Befehlsausführung wird der &#039;&#039;&#039;Status&#039;&#039;&#039; des &#039;&#039;&#039;DOIF&#039;&#039;&#039; auf die Befehlsnummer gesetzt (&#039;&#039;&#039;cmd_x&#039;&#039;&#039;) und DOIF wartet auf das nächste &#039;&#039;&#039;Ereignis&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ist die Bedingung &#039;&#039;&#039;unwahr&#039;&#039;&#039; (&#039;&#039;&#039;falsch&#039;&#039;&#039;) wird der nächste Zweig bearbeitet.&lt;br /&gt;
&lt;br /&gt;
Ist &#039;&#039;&#039;DOELSE&#039;&#039;&#039; angegeben, es gab einen passenden &#039;&#039;&#039;Auslöser&#039;&#039;&#039; und alle geprüften Bedingungen waren &#039;&#039;&#039;unwahr&#039;&#039;&#039;, dann werden die nach &#039;&#039;&#039;DOELSE&#039;&#039;&#039; angegebenen &#039;&#039;&#039;Befehle&#039;&#039;&#039; ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;Befehle&#039;&#039;&#039; eines Zweiges werden ohne vorherigen &#039;&#039;&#039;Statuswechsel&#039;&#039;&#039; nur einmal ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Ein &#039;&#039;&#039;Statuswechsel&#039;&#039;&#039; findet statt nachdem ein anderer Bedingungszweig &#039;&#039;&#039;wahr&#039;&#039;&#039; wurde und die zugehörigen &#039;&#039;&#039;Befehle&#039;&#039;&#039; ausgeführt worden sind.&lt;br /&gt;
&lt;br /&gt;
Ein DOIF mit nur einem Zweig enthält ein internes &#039;&#039;&#039;DOELSE&#039;&#039;&#039;, d.h. bei &#039;&#039;&#039;unwahrer&#039;&#039;&#039; Bedingung und vorhandenem &#039;&#039;&#039;Auslöser&#039;&#039;&#039;, findet ein &#039;&#039;&#039;Statuswechsel&#039;&#039;&#039; auf &#039;&#039;&#039;cmd_2&#039;&#039;&#039; statt.&lt;br /&gt;
&lt;br /&gt;
==== Auslöser ====&lt;br /&gt;
&lt;br /&gt;
Auslöser können durch direkte Angabe des Gerätenamen, [[Readings]], [[Internals]] usw. angegeben werden.&lt;br /&gt;
&lt;br /&gt;
===== Readings und Internals =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Gerätename&#039;&#039;&amp;gt;&#039;&#039;&#039;]&#039;&#039;&#039; oder &#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Gerätename&#039;&#039;&amp;gt;&#039;&#039;&#039;:&amp;amp;STATE]&#039;&#039;&#039; bezieht sich auf das Internal &#039;&#039;&#039;STATE&#039;&#039;&#039; des Gerätes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Gerätename&#039;&#039;&amp;gt;&#039;&#039;&#039;:&#039;&#039;&#039;&amp;lt;&#039;&#039;Readingname&#039;&#039;&amp;gt;&#039;&#039;&#039;]&#039;&#039;&#039; bezieht sich auf das &#039;&#039;&#039;Reading&#039;&#039;&#039; des Gerätes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Gerätename&#039;&#039;&amp;gt;&#039;&#039;&#039;:&#039;&#039;&#039;&amp;lt;&#039;&#039;Readingname&#039;&#039;&amp;gt;&#039;&#039;&#039;:d]&#039;&#039;&#039; bezieht sich auf den &#039;&#039;&#039;ersten numerischen Teil&#039;&#039;&#039; des &#039;&#039;&#039;Reading-Wertes&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Gerätename&#039;&#039;&amp;gt;&#039;&#039;&#039;:&#039;&#039;&#039;&amp;lt;&#039;&#039;Readingname&#039;&#039;&amp;gt;&#039;&#039;&#039;:d&amp;lt;Anzahl der gerundeten Stellen nach dem Dezimaltrenner&amp;gt;]&#039;&#039;&#039; bezieht sich auf den &#039;&#039;&#039;ersten numerischen Teil&#039;&#039;&#039; des &#039;&#039;&#039;Reading-Wertes&#039;&#039;&#039;, der auf &#039;&#039;&#039;Anzahl&#039;&#039;&#039; Stellen gerundet ist.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Gerätename&#039;&#039;&amp;gt;&#039;&#039;&#039;:&#039;&#039;&#039;&amp;lt;&#039;&#039;Readingname&#039;&#039;&amp;gt;&#039;&#039;&#039;:sec]&#039;&#039;&#039; bezieht sich auf das &#039;&#039;&#039;Alter des Zeitstempels&#039;&#039;&#039; in Sekunden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Gerätename&#039;&#039;&amp;gt;&#039;&#039;&#039;:&amp;amp;&#039;&#039;&#039;&amp;lt;&#039;&#039;Internalname&#039;&#039;&amp;gt;&#039;&#039;&#039;]&#039;&#039;&#039; bezieht sich auf das &#039;&#039;&#039;Internal&#039;&#039;&#039; des Gerätes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Auslöserangabe&#039;&#039;&amp;gt;&#039;&#039;&#039;,&#039;&#039;&#039;&amp;lt;&#039;&#039;Vorgabewert&#039;&#039;&amp;gt;&#039;&#039;&#039;]&#039;&#039;&#039; nicht existierende &#039;&#039;&#039;Auslöser&#039;&#039;&#039; können mit einem &#039;&#039;&#039;Vorgabewert&#039;&#039;&#039; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
===== Zeitangaben =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Zeitpunkt&#039;&#039;&amp;gt;&#039;&#039;&#039;]&#039;&#039;&#039; gibt einen Zeitpunkt an&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Zeitpunkt Beginn&#039;&#039;&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;&#039;&#039;Zeitpunkt Ende&#039;&#039;&amp;gt;&#039;&#039;&#039;|&#039;&#039;&#039;&amp;lt;&#039;&#039;Wochentagangaben&#039;&#039;&amp;gt;&#039;&#039;&#039;]&#039;&#039;&#039; gibt eine Zeitspanne an, optionale Wochentagangabe&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;[[&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&amp;lt;&#039;&#039;Auslöserangabe&#039;&#039;&amp;gt;&#039;&#039;&#039;]]&#039;&#039;&#039; gibt einen Zeitpunkt indirekt an.&lt;br /&gt;
&lt;br /&gt;
Mit Zeitangaben kann gerechnet werden, Berechnungen erfolgen in runden Klammern.&lt;br /&gt;
&lt;br /&gt;
Liefert eine Perl-Funktion HH:MM:SS muss sie in geschweifte Klammern eingeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[{sunrise}]&#039;&#039;&#039; z.B. Angabe eines Zeitpunktes durch die Perl-Funktion &#039;&#039;&#039;sunrise&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Auslöser (erweitert) ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auslöser&#039;&#039;&#039; können auch allgemein formuliert werden, dazu ist die Fertigkeit erforderlich [[regulärer Ausdruck|&#039;&#039;&#039;Reguläre Ausdrücke&#039;&#039;&#039;]] (Regex) formulieren zu können.&lt;br /&gt;
&lt;br /&gt;
===== Readings und Internals =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Auslöserangabe&#039;&#039;&amp;gt;&#039;&#039;&#039;:&#039;&#039;&#039;&amp;lt;&#039;&#039;Regex Filter&#039;&#039;&amp;gt;&#039;&#039;&#039;,&#039;&#039;&#039;&amp;lt;&#039;&#039;Ausgabeformatierung&#039;&#039;&amp;gt;&#039;&#039;&#039;]&#039;&#039;&#039; &#039;&#039;&#039;Auslöser&#039;&#039;&#039; können mit einem Filter eränzt werden, die gefilterten Werte können in der Ausgabeformatierung weiterverarbeitet werden.&lt;br /&gt;
&lt;br /&gt;
===== Ereignisse =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Gerätename&#039;&#039;&amp;gt;&#039;&#039;&#039;:&amp;quot;&#039;&#039;&#039;&amp;lt;&#039;&#039;Regex Ereignisrest&#039;&#039;&amp;gt;&#039;&#039;&#039;&amp;quot;]&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&amp;quot;&#039;&#039;&#039;&amp;lt;&#039;&#039;Regex Gerätename&#039;&#039;&amp;gt;&#039;&#039;&#039;:&#039;&#039;&#039;&amp;lt;&#039;&#039;Regex Ereignisrest&#039;&#039;&amp;gt;&#039;&#039;&#039;&amp;quot;]&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&amp;quot;&#039;&#039;&#039;&amp;lt;&#039;&#039;Regex Ereignis&#039;&#039;&amp;gt;&#039;&#039;&#039;&amp;quot;,&#039;&#039;&#039;&amp;lt;&#039;&#039;Vorgabewert&#039;&#039;&amp;gt;&#039;&#039;&#039;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&amp;quot;&#039;&#039;&#039;&amp;lt;&#039;&#039;Regex Ereignis&#039;&#039;&amp;gt;&#039;&#039;&#039;&amp;quot;:&#039;&#039;&#039;&amp;lt;&#039;&#039;Regex Filter&#039;&#039;&amp;gt;&#039;&#039;&#039;,&#039;&#039;&#039;&amp;lt;&#039;&#039;Ausgabeformatierung&#039;&#039;&amp;gt;&#039;&#039;&#039;,&#039;&#039;&#039;&amp;lt;&#039;&#039;Vorgabewert&#039;&#039;&amp;gt;&#039;&#039;&#039;]&#039;&#039;&#039; optional: Filter und Formatierung, verpflichtend: Vorgabe&lt;br /&gt;
&lt;br /&gt;
===== Ereignisse mit Aggregation (Sammlung) von Werten =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Funktion&#039;&#039;&amp;gt;&#039;&#039;&#039;:&#039;&#039;&#039;&amp;lt;&#039;&#039;Format&#039;&#039;&amp;gt;&#039;&#039;&#039;:&amp;quot;&#039;&#039;&#039;&amp;lt;&#039;&#039;Regex Gerätename&#039;&#039;&amp;gt;&#039;&#039;&#039;:&#039;&#039;&#039;&amp;lt;&#039;&#039;Regex Ereignisrest&#039;&#039;&amp;gt;&#039;&#039;&#039;&amp;quot;:&#039;&#039;&#039;&amp;lt;&#039;&#039;Reading&#039;&#039;&amp;gt;&#039;&#039;&#039;:&#039;&#039;&#039;&amp;lt;&#039;&#039;Bedingung&#039;&#039;&amp;gt;&#039;&#039;&#039;,&#039;&#039;&#039;&amp;lt;&#039;&#039;Vorgabewert&#039;&#039;&amp;gt;&#039;&#039;&#039;]&#039;&#039;&#039; optional: Format, Reading, Bedingung und Vorgabewert&lt;br /&gt;
&lt;br /&gt;
==== Alle Auslöser ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[?&#039;&#039;&#039;&amp;lt;&#039;&#039;Auslöserangabe&#039;&#039;&amp;gt;&#039;&#039;&#039;]&#039;&#039;&#039; Auslöser, die mit Fragezeichen beginnen lösen nicht aus, sie werden nur abgefragt&lt;br /&gt;
&lt;br /&gt;
==== Angaben im Befehlsteil ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Befehle&#039;&#039;&#039; stehen nach einer &#039;&#039;&#039;Bedingung&#039;&#039;&#039; oder nach &#039;&#039;&#039;DOELSE&#039;&#039;&#039; in runden Klammern (erste Klammerebene), das ist die FHEM-Ebene. Befehle können direkt angegeben werden.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;(&#039;&#039;&#039;&amp;lt;&#039;&#039;FHEM-Befehle&#039;&#039;&amp;gt;&#039;&#039;&#039;)&#039;&#039;&#039;, &#039;&#039;&#039;(&amp;quot;&#039;&#039;&#039;&amp;lt;&#039;&#039;Systembefehle&#039;&#039;&amp;gt;&#039;&#039;&#039;&amp;quot;)&#039;&#039;&#039; oder &#039;&#039;&#039;{&#039;&#039;&#039;&amp;lt;&#039;&#039;Perl-Befehle&#039;&#039;&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
Befehle können zu Sequenzen gruppiert werden durch mehrere runde Klammerpaare der ersten Ebene)&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;(&#039;&#039;&#039;&amp;lt;&#039;&#039;Befehle der Sequenz 1&#039;&#039;&amp;gt;&#039;&#039;&#039;)&#039;&#039;&#039; &#039;&#039;&#039;(&#039;&#039;&#039;&amp;lt;&#039;&#039;Befehle der Sequenz 2&#039;&#039;&amp;gt;&#039;&#039;&#039;)&#039;&#039;&#039; ... &#039;&#039;&#039;(&#039;&#039;&#039;&amp;lt;&#039;&#039;Befehle der Sequenz n&#039;&#039;&amp;gt;&#039;&#039;&#039;)&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
Trennzeichen für Befehle ist das Komma, daher ist keine Verdoppelung der Trennzeichen erforderlich.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;(&#039;&#039;&#039;&amp;lt;Befehl 1&amp;gt;&#039;&#039;&#039;,&#039;&#039;&#039; &amp;lt;Befehl 2&amp;gt;&#039;&#039;&#039;,&#039;&#039;&#039; ... &amp;lt;Befehl n&amp;gt;&#039;&#039;&#039;)&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
Enthält ein Befehl ein Komma, dass kein Befehlstrennzeichen ist, dann ist der Befehl in zusätzliche runde Klammern einzuschliessen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;((&#039;&#039;&#039;&amp;lt;Befehlsteil 1a&amp;gt;&#039;&#039;&#039;,&#039;&#039;&#039;&amp;lt;Befehlsteil 1b&amp;gt;&#039;&#039;&#039;),&#039;&#039;&#039; &amp;lt;Befehl 2&amp;gt;&#039;&#039;&#039;,&#039;&#039;&#039; ... &amp;lt;Befehl n&amp;gt;&#039;&#039;&#039;)&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
Berechnungen erfolgen in geschweiften Klammern auf der Perl-Ebene und müssen unmittelbar mit einer runden Klammer beginnen.&lt;br /&gt;
&lt;br /&gt;
Der Zugriff auf [[Readings]], [[Internals]] usw. erfolgt wie im DOIF üblich, über Angaben in eckigen Klammern inklusive Ausgabeformatierung und Präprozessorersatznamen, wie &#039;&#039;&#039;$SELF&#039;&#039;&#039;, &#039;&#039;&#039;$DEVICE&#039;&#039;&#039;, &#039;&#039;&#039;$EVENT&#039;&#039;&#039;, &#039;&#039;&#039;$EVENTS&#039;&#039;&#039; (extended [[set magic]]).&lt;br /&gt;
&lt;br /&gt;
=== Häufige Attribute ===&lt;br /&gt;
&lt;br /&gt;
Attribute verändern das Standardverhalten des DOIF.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== do always ====&lt;br /&gt;
&lt;br /&gt;
Ohne &#039;&#039;&#039;do always&#039;&#039;&#039; gilt:Die Befehle eines Bedingungszweiges werden ohne vorherigen Statuswechsel nur einmal ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Das Attribut setzt diese Regel ausser Kraft. Befehle werden wiederholt im bestehenden Status ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Das interne DOELSE entfällt bei DOIF mit einem Zweig.&lt;br /&gt;
&lt;br /&gt;
Wait-Timer werden bei wiederholtem Wahrwerden der Bedingung nicht abgebrochen.&lt;br /&gt;
&lt;br /&gt;
==== wait ====&lt;br /&gt;
&lt;br /&gt;
Das Attribut verzögert die Befehlsausführung, nach wahr werden einer Bedingung.&lt;br /&gt;
&lt;br /&gt;
Laufende Wait-Timer werden bei einem eingeleiteten Statuswechsel des DOIF abgebrochen, daher werden die zu verzögernden Befehle nicht mehr ausgeführt.&lt;br /&gt;
&lt;br /&gt;
==== do resetwait ====&lt;br /&gt;
&lt;br /&gt;
Das Attribut beinhaltet &#039;&#039;&#039;do always,&#039;&#039;&#039; bricht aber die Wait-Timer bei wiederholtem Wahrwerden der Bedingung ab.&lt;br /&gt;
&lt;br /&gt;
==== readingList, setList, webCmd, widgetOverride ====&lt;br /&gt;
&lt;br /&gt;
Diese Attribute statten DOIF mit Dummy-Eigenschaften aus, so dass DOIF als erweitertes Eingabeelement im Frontend dienen kann.&lt;br /&gt;
&lt;br /&gt;
== Erste Schritte mit DOIF: Zeit- und Ereignissteuerung ==&lt;br /&gt;
Die nachfolgenden Beispiele sind aus der Einleitung der Hilfe zum DOIF entnommen. Sie werden hier weiter erläutert.&lt;br /&gt;
===Beispiel A): Ereignissteuerung ===&lt;br /&gt;
{{Randnotiz|RNText=Hinweis: Verwendung von&lt;br /&gt;
* &amp;lt;code&amp;gt;[&amp;lt;Gerätename&amp;gt;:&amp;quot;&amp;lt;Ereignis&amp;gt;&amp;quot;]&amp;lt;/code&amp;gt; zur Abfrage eines Ereignisses von einem [[Gerät]]&lt;br /&gt;
* &#039;&#039;&#039;DOELSE&#039;&#039;&#039; das Schlüsselwort leitet einen Befehlszweig ohne explizite Bedingung ein. Dieser Zweig wird ausgeführt, wenn keine geprüfte Bedingung wahr ist.&lt;br /&gt;
* &#039;&#039;&#039;devStateIcon&#039;&#039;&#039; zum direkten Ausführen eines Befehls im [[DOIF]] und zur Anzeige von Icons&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;u&amp;gt;Aufgabenstellung:&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Fernbedienung soll einen Fernseher einschalten, der über eine Funkstekdose angeschlossen ist.&lt;br /&gt;
&lt;br /&gt;
Das [[Gerät]] &#039;&#039;&#039;Fernbedienung&#039;&#039;&#039; wird durch den Dummy &#039;&#039;&#039;remotecontrol&#039;&#039;&#039; dargestellt. In der Realität könnte es die Definition eines Empfängers für eine Infrarot-Fernbedienung sein.&lt;br /&gt;
&lt;br /&gt;
Das [[Gerät]] &#039;&#039;&#039;Funksteckdose TV&#039;&#039;&#039;  wird durch den Dummy &#039;&#039;&#039;tv&#039;&#039;&#039; dargestellt. In der Realität könnte es die Definition einer Intertechno-Funkstekdose aus dem Baumarkt sein.&lt;br /&gt;
&lt;br /&gt;
Die Signale von &#039;&#039;&#039;remotecontrol&#039;&#039;&#039; werden über das DOIF &#039;&#039;&#039;di_rc_tv&#039;&#039;&#039; alias &#039;&#039;&#039;Steuerlogik&#039;&#039;&#039; in einen Befehl für die Funksteckdose &#039;&#039;&#039;tv&#039;&#039;&#039; umgesetzt.&lt;br /&gt;
&lt;br /&gt;
Das Signal ist als [[Ereignis]] im [[Event monitor|Eventmonitor]] sichtbar &amp;lt;code&amp;gt;2017-02-28 09:07:03 dummy tv on&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das [[DOIF]] reagiert durch die Angabe von &amp;lt;code&amp;gt;[remotecontrol:&amp;quot;on&amp;quot;]&amp;lt;/code&amp;gt; in der Schaltbedingung. Weil &#039;&#039;&#039;on&#039;&#039;&#039; als Wert in dem Ereignis enthalten ist, wird die Bedingung wahr. Das bewirkt das Ausführen des Befehls &amp;lt;code&amp;gt;set tv on&amp;lt;/code&amp;gt;. Danach nimmt das [[DOIF]] den Status &#039;&#039;&#039;cmd_1&#039;&#039;&#039; an.&lt;br /&gt;
&lt;br /&gt;
Falls &#039;&#039;&#039;off&#039;&#039;&#039; im Ereignis enthalten ist wird die Bedingung nicht wahr, daher wird der Befehl &amp;lt;code&amp;gt;set tv off&amp;lt;/code&amp;gt; des DOELSE-Zweiges des [[DOIF]] ausgeführt und [[DOIF]] nimmt den Status &#039;&#039;&#039;cmd_2&#039;&#039;&#039; an.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Definition:&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;define di_rc_tv DOIF ([remotecontol:&amp;quot;on&amp;quot;]) (set tv on) DOELSE (set tv off)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über das [[Attribute|Attribut]] &#039;&#039;&#039;devStateIcon&#039;&#039;&#039; können die Befehle des [[DOIF]] direkt ausgeführt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;attr di_rc_tv devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hinweis: In neueren Versionen ggf. &#039;&#039;&#039;initialized&#039;&#039;&#039; durch &#039;&#039;&#039;initialize&#039;&#039;&#039; ersetzen.&lt;br /&gt;
&lt;br /&gt;
Das erste Tripel &amp;lt;code&amp;gt;cmd_1:general_an:cmd_2&amp;lt;/code&amp;gt; hat die Bedeutung &#039;&#039;aktueller Status&#039;&#039;&#039;&#039;&#039;:&#039;&#039;&#039;&#039;&#039;Icon-Name&#039;&#039;&#039;&#039;&#039;:&#039;&#039;&#039;&#039;&#039;Status nach Betätigung des Icons&#039;&#039;. Also, wenn der Status &#039;&#039;&#039;cmd_2&#039;&#039;&#039; ist, dann zeige das Icon &#039;&#039;&#039;general_an&#039;&#039;&#039; und wenn das Icon betätigt wird, dann führe den Befehl aus, der zu &#039;&#039;&#039;cmd_1&#039;&#039;&#039; gehört.&lt;br /&gt;
&lt;br /&gt;
Das zweite Tripel hat die gleiche Funktion, jedoch wird in diesem Fall das Icon &#039;&#039;&#039;general_aus&#039;&#039;&#039; angezeigt, wenn der Status des [[DOIF]] &#039;&#039;&#039;cmd_1&#039;&#039;&#039; ist oder &#039;&#039;&#039;initialized&#039;&#039;&#039; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die nachstehende, komplette Definition für die Gruppe A) kann über &#039;&#039;&#039;[[Import von Code Snippets|Raw definition]]&#039;&#039;&#039; in [[FHEM]] importiert werden.&lt;br /&gt;
Hinweis: In neueren Versionen ggf. &#039;&#039;&#039;initialized&#039;&#039;&#039; durch &#039;&#039;&#039;initialize&#039;&#039;&#039; ersetzen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod di_rc_tv DOIF ([remotecontrol:&amp;quot;on&amp;quot;]) (set tv on) DOELSE (set tv off)&lt;br /&gt;
attr di_rc_tv alias Steuerlogik&lt;br /&gt;
attr di_rc_tv devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1&lt;br /&gt;
attr di_rc_tv group A) Fernbedienung (Ereignissteuerung)&lt;br /&gt;
attr di_rc_tv icon helper_doif&lt;br /&gt;
attr di_rc_tv room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
defmod remotecontrol dummy&lt;br /&gt;
attr remotecontrol alias Fernbedienung&lt;br /&gt;
attr remotecontrol devStateIcon .*:noIcon&lt;br /&gt;
attr remotecontrol group A) Fernbedienung (Ereignissteuerung)&lt;br /&gt;
attr remotecontrol icon it_remote&lt;br /&gt;
attr remotecontrol room Schulungsraum&lt;br /&gt;
attr remotecontrol webCmd on:off&lt;br /&gt;
&lt;br /&gt;
defmod tv dummy&lt;br /&gt;
attr tv alias Funksteckdose TV&lt;br /&gt;
attr tv devStateIcon on:it_television@red off:it_television@blue&lt;br /&gt;
attr tv group A) Fernbedienung (Ereignissteuerung)&lt;br /&gt;
attr tv icon it_television&lt;br /&gt;
attr tv room Schulungsraum&lt;br /&gt;
save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===  Beispiel B): Zeitsteuerung ===&lt;br /&gt;
{{Randnotiz|RNText=Hinweis: Verwendung von&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[&amp;lt;Zeitpunkt&amp;gt;|&amp;lt;Wochentagangabe&amp;gt;]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; zur Angabe eines Zeitpunktes mit Wochentagbeschränkung. Die Zeiten gelten für die angegebenen Wochentage.&lt;br /&gt;
* &#039;&#039;&#039;DOELSEIF&#039;&#039;&#039; das Schlüsselwort leitet einen Bedingungszweig ein und muss eine Bedingung enthalten. Dieser Zweig wird ausgeführt, wenn eine Bedingung geprüft wird und sie wahr ist.&lt;br /&gt;
* &#039;&#039;&#039;devStateIcon&#039;&#039;&#039; zum direkten Ausführen eines Befehls im [[DOIF]] und zur Anzeige von Icons&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;u&amp;gt;Aufgabenstellung:&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Radio soll werktags und am Wochenende zu unterschiedlichen Zeiten ein- u. ausgeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
Das [[Gerät]] &#039;&#039;&#039;Funksteckdose Radio&#039;&#039;&#039;  wird durch den Dummy &#039;&#039;&#039;radio&#039;&#039;&#039; dargestellt. In der Realität könnte es die Definition einer Intertechno-Funkstekdose aus dem Baumarkt sein.&lt;br /&gt;
&lt;br /&gt;
Wenn die Uhrzeit mit einem Schaltzeitpunkt übereinstimmt, wird die Zeitpunktangabe wahr. Wird dann auch die gesamte Bedingung wahr, dann wird der zu diesem Bedingungszweig gehörende Befehl ausgeführt. Das [[DOIF]]  &#039;&#039;&#039;di_clock_radio&#039;&#039;&#039; alias &#039;&#039;&#039;Zeitschaltuhr&#039;&#039;&#039; setzt dann einen Befehl zum Schalten der Funksteckdose &#039;&#039;&#039;radio&#039;&#039;&#039; ab.&lt;br /&gt;
&lt;br /&gt;
Das Zeitereignis ist im [[Event monitor|Eventmonitor]] nicht sichtbar.&lt;br /&gt;
&lt;br /&gt;
Die Zeitpunkte eines Bedingungszweiges sind &#039;&#039;&#039;or&#039;&#039;&#039;(oder) verknüpft. Im ersten Bedingungszweig steht die Einschaltbedingung, im Zweiten (DOELSEIF) die Auschaltbedingung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Definition:&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;define di_clock_radio DOIF ([06:30|Mo Di Mi] or [08:30|Do Fr Sa So]) (set radio on) DOELSEIF ([08:00|Mo Di Mi] or [09:30|Do Fr Sa So]) (set radio off)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über das [[Attribute|Attribut]] &#039;&#039;&#039;devStateIcon&#039;&#039;&#039; können die Befehle des [[DOIF]] über das WEB-Frontend unabhängig von den Schaltzeitpunkten ausgeführt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;attr ddi_clock_radio devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hinweis: In neueren Versionen ggf. &#039;&#039;&#039;initialized&#039;&#039;&#039; durch &#039;&#039;&#039;initialize&#039;&#039;&#039; ersetzen.&lt;br /&gt;
&lt;br /&gt;
Die nachstehende, komplette Definition für die Gruppe B) kann über &#039;&#039;&#039;[[Import von Code Snippets|Raw definition]]&#039;&#039;&#039; in [[FHEM]] importiert werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod di_clock_radio DOIF ([06:30|8] or [08:30|7]) (set radio on) DOELSEIF ([08:00|8] or [09:30|7]) (set radio off)&lt;br /&gt;
attr di_clock_radio alias Zeitschaltuhr&lt;br /&gt;
attr di_clock_radio devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1&lt;br /&gt;
attr di_clock_radio group B) Zeitschaltuhr (Zeitsteuerung)&lt;br /&gt;
attr di_clock_radio icon helper_doif&lt;br /&gt;
attr di_clock_radio room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
defmod radio dummy&lt;br /&gt;
attr radio alias Funksteckdose Radio&lt;br /&gt;
attr radio devStateIcon on:it_radio@red off:it_radio@blue&lt;br /&gt;
attr radio group B) Zeitschaltuhr (Zeitsteuerung)&lt;br /&gt;
attr radio icon it_radio&lt;br /&gt;
attr radio room Schulungsraum&lt;br /&gt;
save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiel C): Kombinierte Ereignis- und Zeitsteuerung ===&lt;br /&gt;
{{Randnotiz|RNText=Hinweis: Verwendung von&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[&amp;lt;Beginzeitpunkt&amp;gt;-&amp;lt;Endzeitpunkt&amp;gt;]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; zur Angabe einer Zeitspanne.&lt;br /&gt;
* &amp;lt;code&amp;gt;[&amp;lt;Gerätename&amp;gt;:&amp;lt;Reading-Name&amp;gt;]&amp;lt;/code&amp;gt; zur Abfrage eines Reading-Inhaltes.&lt;br /&gt;
* &amp;lt;code&amp;gt; &amp;lt; &amp;lt;/code&amp;gt;, eines numerischen Vergleichsoperators und Vergleich mit einer Konstanten (40).&lt;br /&gt;
* &#039;&#039;&#039;DOELSE&#039;&#039;&#039; das Schlüsselwort leitet einen Befehlszweig ohne explizite Bedingung ein. Dieser Zweig wird ausgeführt, wenn keine geprüfte Bedingung wahr ist.&lt;br /&gt;
* &#039;&#039;&#039;devStateIcon&#039;&#039;&#039; zum direkten Ausführen eines Befehls im [[DOIF]] und zur Anzeige von Icons&lt;br /&gt;
* &#039;&#039;&#039;readingList&#039;&#039;&#039;, &#039;&#039;&#039;setList&#039;&#039;&#039; und &#039;&#039;&#039;webCmd&#039;&#039;&#039; zur Erzeugung eines Eingabeelementes im Frontend&lt;br /&gt;
* &#039;&#039;&#039;stateFormat&#039;&#039;&#039; um einen benutzerdefinierten Status zu erzeugen.&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;u&amp;gt;Aufgabenstellung:&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Lampe soll in einer Zeispanne eingeschaltet werden, wenn die Helligkeit einen bestimmten Wert unterschreitet.&lt;br /&gt;
&lt;br /&gt;
Das [[Gerät]] &#039;&#039;&#039;Lampe&#039;&#039;&#039;  wird durch den Dummy &#039;&#039;&#039;lamp&#039;&#039;&#039; dargestellt. In der Realität könnte es die Definition einer funkgesteuerten Lampenfassung sein.&lt;br /&gt;
&lt;br /&gt;
Das [[Gerät]] &#039;&#039;&#039;Helligkeitssensor&#039;&#039;&#039;  wird durch den Dummy &#039;&#039;&#039;sensor&#039;&#039;&#039; dargestellt. In der Realität könnte es die Definition eines Homematic Funk-Lichtsensor sein oder ein selbstgebauter Helligkeitssensor mit TSL2561-Chip.&lt;br /&gt;
&lt;br /&gt;
Wenn die aktuelle Uhrzeit in der angegebenen Zeitspanne liegt, ist die Zeitspanne wahr. Wenn dann auch die Helligkeit unter 40 sinkt, wird die gesamte Bedingung wahr, weil Zeitspanne und Hellikeitsvergleich &#039;&#039;&#039;and&#039;&#039;&#039;(und) verknupft sind. Der zu diesem Bedingungszweig gehörende Befehl wird dann ausgeführt. Das [[DOIF]]  &#039;&#039;&#039;di_lamp&#039;&#039;&#039; alias &#039;&#039;&#039;Lampenlogik&#039;&#039;&#039; setzt dann einen Befehl zum Schalten der Lampe &#039;&#039;&#039;lamp&#039;&#039;&#039; ab.&lt;br /&gt;
Der DOELSE-Zweig wird ausgeführt, wenn die Bedingung im ersten Zweig unwahr wird.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Definition:&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;define di_lamp DOIF ([06:00-19:00] and [sensor:brightness] &amp;lt; 40) (set lamp on) DOELSE (set lamp off)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über das [[Attribute|Attribut]] &#039;&#039;&#039;devStateIcon&#039;&#039;&#039; können die Befehle des [[DOIF]] über das WEB-Frontend unabhängig von den Schaltzeitpunkten ausgeführt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;attr di_lamp devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hinweis: In neueren Versionen ggf. &#039;&#039;&#039;initialized&#039;&#039;&#039; durch &#039;&#039;&#039;initialize&#039;&#039;&#039; ersetzen.&lt;br /&gt;
&lt;br /&gt;
Das [[Attribute|Attribut]] &#039;&#039;&#039;setList&#039;&#039;&#039; zusammen mit &#039;&#039;&#039;readingList&#039;&#039;&#039; und &#039;&#039;&#039;webCmd&#039;&#039;&#039; realisiert im [[Gerät]] &#039;&#039;&#039;sensor&#039;&#039;&#039; für das Reading &#039;&#039;&#039;brightness&#039;&#039;&#039; einen Schieberegler, mit dem eine Helligkeit zwischen 0 und 100 in in Schritten von 1 simuliert werden kann und der im Frontend angezeigt wird.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr sensor readingList brightness&lt;br /&gt;
attr sensor setList brightness:slider,0,1,100&lt;br /&gt;
attr sensor webCmd brightness&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem [[Attribute|Attribut]] &#039;&#039;&#039;stateFormat&#039;&#039;&#039; wird im [[Gerät]] &#039;&#039;&#039;sensor&#039;&#039;&#039; das Reading &#039;&#039;&#039;brightness&#039;&#039;&#039; in den Status geschrieben. Damit wird der Helligkeitswert auch im Frontend sichtbar.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr sensor stateFormat brightness&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die nachstehende, komplette Definition für die Gruppe C) kann über &#039;&#039;&#039;[[Import von Code Snippets|Raw definition]]&#039;&#039;&#039; in [[FHEM]] importiert werden.&lt;br /&gt;
Hinweis: In neueren Versionen ggf. &#039;&#039;&#039;initialized&#039;&#039;&#039; durch &#039;&#039;&#039;initialize&#039;&#039;&#039; ersetzen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod di_lamp DOIF ([06:00-19:00] and [sensor:brightness] &amp;lt; 40) (set lamp on) DOELSE (set lamp off)&lt;br /&gt;
attr di_lamp alias Lampenlogik&lt;br /&gt;
attr di_lamp devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1&lt;br /&gt;
attr di_lamp group C) Kombinierte Ereignis- und Zeitsteuerung&lt;br /&gt;
attr di_lamp icon helper_doif&lt;br /&gt;
attr di_lamp room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
defmod lamp dummy&lt;br /&gt;
attr lamp alias Lampe&lt;br /&gt;
attr lamp group C) Kombinierte Ereignis- und Zeitsteuerung&lt;br /&gt;
attr lamp icon light_light&lt;br /&gt;
attr lamp room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
defmod sensor dummy&lt;br /&gt;
attr sensor alias Helligkeitssensor&lt;br /&gt;
attr sensor group C) Kombinierte Ereignis- und Zeitsteuerung&lt;br /&gt;
attr sensor icon message_light_intensity&lt;br /&gt;
attr sensor readingList brightness&lt;br /&gt;
attr sensor room Schulungsraum&lt;br /&gt;
attr sensor setList brightness:slider,0,1,100&lt;br /&gt;
attr sensor stateFormat brightness&lt;br /&gt;
attr sensor webCmd brightness&lt;br /&gt;
save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ansicht der Gruppen A) bis C) im Frontend ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:erste_schritte_DOIF.png|670px]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [[DOIF]]&lt;br /&gt;
* [[DOIF/Tipps zur leichteren Bedienung]] Erstellung, Bearbeitung, Syntaxhervorhebung, Klammerprüfung, Suchen&amp;amp;Ersetzen, Zeilennummerierung, uvm. (nicht nur) von DOIF&lt;br /&gt;
* [[Regulärer_Ausdruck]]&lt;br /&gt;
* [[Event]] Ereignisse&lt;br /&gt;
* [[Readings]]&lt;br /&gt;
* [[Internals]]&lt;br /&gt;
* [[Attribute]]&lt;br /&gt;
&lt;br /&gt;
* [http://perldoc.perl.org/perlop.html http://perldoc.perl.org/perlop.html] Perloperatoren&lt;br /&gt;
* [http://perldoc.perl.org/perlre.html http://perldoc.perl.org/perlre.html] Reguläre Ausdrücke&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Watchdog&amp;diff=28404</id>
		<title>Watchdog</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Watchdog&amp;diff=28404"/>
		<updated>2018-11-17T23:35:52Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Anwendung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:watchdog}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Zeitverzögerte Ausführung von Aktionen beim Ausbleiben von Ereignissen&lt;br /&gt;
|ModType=h&lt;br /&gt;
&amp;lt;!-- |ModCategory=?? --&amp;gt;&lt;br /&gt;
|ModCmdRef=watchdog&lt;br /&gt;
|ModTechName=91_watchdog.pm&lt;br /&gt;
|ModOwner=rudolfkoenig / [http://forum.fhem.de/index.php?action=profile;u=8 rudolfkoenig]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[watchdog]] ist ein Fhem-Erweiterungsmodul, mit dem z.&amp;amp;nbsp;B. zeitverzögert auf das Ausbleiben von Ereignissen reagiert werden kann. In Verbindung mit [[THRESHOLD]] kann auch auf das Über- oder Unterschreiten von Schwellwerten reagiert werden.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Keine.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
{{Randnotiz|RNText=Die Reaktivierung des watchdog hat mit dem Befehl &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;trigger &amp;lt;device&amp;gt; .&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; (Achtung den Punkt nicht vergessen.) oder durch Setzen des Attributs &amp;lt;code&amp;gt;autoRestart&amp;lt;/code&amp;gt; zu erfolgen. Die in Blogs und Forumsbeiträgen häufiger zu findende Variante mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;setstate&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; entspricht nicht und entsprach nie der commandref. Sie funktioniert nur &amp;quot;aus Versehen&amp;quot;. Es existiert dafür kein Bestandsschutz und unerwünschte Seiteneffekte sind nicht auszuschließen!}}&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; watchdog &amp;lt;regexp1&amp;gt; &amp;lt;timespec&amp;gt; &amp;lt;regexp2&amp;gt; &amp;lt;command&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
=== Define ===&lt;br /&gt;
Führe Befehl &amp;lt;command&amp;gt; aus, wenn nach Ereignis &amp;lt;regexp1&amp;gt; nicht innerhalb der Zeitspanne &amp;lt;timespec&amp;gt; das Ereignis &amp;lt;regexp2&amp;gt; auftritt.&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Heizungsabschaltung bei geöffnetem Fenster ===&lt;br /&gt;
Wenn der Tür-/Fensterkontakt an der Balkontür (MAX_WZ_SK) länger als 15 Sekunden geöffnet ist, wird die Heizung im Wohnzimmer (MAX_WZ) ausgeschaltet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define wd_WZ_SK_opened watchdog MAX_WZ_SK:opened.* 00:00:15 MAX_WZ_SK:closed.* set MAX_WZ desiredTemperature off;; trigger wd_WZ_SK_opened .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;lt;code&amp;gt;trigger wd_WZ_SK_opened .&amp;lt;/code&amp;gt; schaltet den watchdog nach einem Auslösen wieder in den Ursprungszustand. Ohne diesen Befehl würde der watchdog nur genau einmal auslösen. Statt über den angehängten Befehl &amp;lt;code&amp;gt;trigger wd_WZ_SK_opened .&amp;lt;/code&amp;gt; könnte man auch durch Setzen des Attributes &amp;lt;code&amp;gt;autoRestart&amp;lt;/code&amp;gt; für den watchdog (&amp;lt;code&amp;gt;attr wd_WZ_SK_opened autoRestart 1&amp;lt;/code&amp;gt;) ein automatisches Rücksetzen in den Ursprungszustand (state = &amp;quot;defined&amp;quot;) erreichen.&lt;br /&gt;
&lt;br /&gt;
Quelle: {{Link2Forum|Topic=51387}}&lt;br /&gt;
&lt;br /&gt;
=== Unterstützung der Statusermittlung für die Module RESIDENTS, ROOMMATE, GUEST ===&lt;br /&gt;
Ein watchdog kann bei der Statusermittlung eines Bewohners im Rahmen der Modulfamilie {{Link2CmdRef|Anker=RESIDENTS|Label=RESIDENTS}}, {{Link2CmdRef|Anker=ROOMMATE|Label=ROOMMATE}} und {{Link2CmdRef|Anker=GUEST|Label=GUEST}} genutzt werden. Mit folgender watchdog-Defintion wird der Status von Resident Ralf (rr_Ralf) automatisch 10 Minuten nach Umschalten auf den Status gotosleep auf asleep gesetzt, wenn keine andere Statusmeldung kommt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define wd_Ralf_gotosleep_asleep watchdog rr_Ralf:gotosleep.* 00:10:00 rr_Ralf:(home|absent|gone|none|asleep|awoken) set rr_Ralf asleep;; trigger wd_Ralf_gotosleep_asleep .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quelle: {{Link2Forum|Topic=51387}}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung einer Lösung im {{Link2Forum|Topic=23260}}, zeitverzögert auf das Ausbleiben von Temperaturwerten eines Sensors zu reagieren. (HINWEIS: Die Reaktivierung des watchdog im verlinkten Thema mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;setstate &amp;lt;device&amp;gt; defined&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; ist entsprechend commandref durch &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;trigger &amp;lt;device&amp;gt; .&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder Aktivierung des Attributs &amp;lt;code&amp;gt;autoRestart&amp;lt;/code&amp;gt; zu ersetzen.)&lt;br /&gt;
* [[Watchdog kombiniert mit Threshold]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Watchdog&amp;diff=28403</id>
		<title>Watchdog</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Watchdog&amp;diff=28403"/>
		<updated>2018-11-17T23:35:24Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Anwendung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:watchdog}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Zeitverzögerte Ausführung von Aktionen beim Ausbleiben von Ereignissen&lt;br /&gt;
|ModType=h&lt;br /&gt;
&amp;lt;!-- |ModCategory=?? --&amp;gt;&lt;br /&gt;
|ModCmdRef=watchdog&lt;br /&gt;
|ModTechName=91_watchdog.pm&lt;br /&gt;
|ModOwner=rudolfkoenig / [http://forum.fhem.de/index.php?action=profile;u=8 rudolfkoenig]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[watchdog]] ist ein Fhem-Erweiterungsmodul, mit dem z.&amp;amp;nbsp;B. zeitverzögert auf das Ausbleiben von Ereignissen reagiert werden kann. In Verbindung mit [[THRESHOLD]] kann auch auf das Über- oder Unterschreiten von Schwellwerten reagiert werden.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Keine.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
{{Randnotiz|RNText=Die Reaktivierung des watchdog hat mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;trigger &amp;lt;device&amp;gt; .&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; (Achtung den Punkt nicht vergessen.) oder durch Setzen des Attributs &amp;lt;code&amp;gt;autoRestart&amp;lt;/code&amp;gt; zu erfolgen. Die in Blogs und Forumsbeiträgen häufiger zu findende Variante mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;setstate&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; entspricht nicht und entsprach nie der commandref. Sie funktioniert nur &amp;quot;aus Versehen&amp;quot;. Es existiert dafür kein Bestandsschutz und unerwünschte Seiteneffekte sind nicht auszuschließen!}}&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; watchdog &amp;lt;regexp1&amp;gt; &amp;lt;timespec&amp;gt; &amp;lt;regexp2&amp;gt; &amp;lt;command&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
=== Define ===&lt;br /&gt;
Führe Befehl &amp;lt;command&amp;gt; aus, wenn nach Ereignis &amp;lt;regexp1&amp;gt; nicht innerhalb der Zeitspanne &amp;lt;timespec&amp;gt; das Ereignis &amp;lt;regexp2&amp;gt; auftritt.&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Heizungsabschaltung bei geöffnetem Fenster ===&lt;br /&gt;
Wenn der Tür-/Fensterkontakt an der Balkontür (MAX_WZ_SK) länger als 15 Sekunden geöffnet ist, wird die Heizung im Wohnzimmer (MAX_WZ) ausgeschaltet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define wd_WZ_SK_opened watchdog MAX_WZ_SK:opened.* 00:00:15 MAX_WZ_SK:closed.* set MAX_WZ desiredTemperature off;; trigger wd_WZ_SK_opened .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;lt;code&amp;gt;trigger wd_WZ_SK_opened .&amp;lt;/code&amp;gt; schaltet den watchdog nach einem Auslösen wieder in den Ursprungszustand. Ohne diesen Befehl würde der watchdog nur genau einmal auslösen. Statt über den angehängten Befehl &amp;lt;code&amp;gt;trigger wd_WZ_SK_opened .&amp;lt;/code&amp;gt; könnte man auch durch Setzen des Attributes &amp;lt;code&amp;gt;autoRestart&amp;lt;/code&amp;gt; für den watchdog (&amp;lt;code&amp;gt;attr wd_WZ_SK_opened autoRestart 1&amp;lt;/code&amp;gt;) ein automatisches Rücksetzen in den Ursprungszustand (state = &amp;quot;defined&amp;quot;) erreichen.&lt;br /&gt;
&lt;br /&gt;
Quelle: {{Link2Forum|Topic=51387}}&lt;br /&gt;
&lt;br /&gt;
=== Unterstützung der Statusermittlung für die Module RESIDENTS, ROOMMATE, GUEST ===&lt;br /&gt;
Ein watchdog kann bei der Statusermittlung eines Bewohners im Rahmen der Modulfamilie {{Link2CmdRef|Anker=RESIDENTS|Label=RESIDENTS}}, {{Link2CmdRef|Anker=ROOMMATE|Label=ROOMMATE}} und {{Link2CmdRef|Anker=GUEST|Label=GUEST}} genutzt werden. Mit folgender watchdog-Defintion wird der Status von Resident Ralf (rr_Ralf) automatisch 10 Minuten nach Umschalten auf den Status gotosleep auf asleep gesetzt, wenn keine andere Statusmeldung kommt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define wd_Ralf_gotosleep_asleep watchdog rr_Ralf:gotosleep.* 00:10:00 rr_Ralf:(home|absent|gone|none|asleep|awoken) set rr_Ralf asleep;; trigger wd_Ralf_gotosleep_asleep .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quelle: {{Link2Forum|Topic=51387}}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung einer Lösung im {{Link2Forum|Topic=23260}}, zeitverzögert auf das Ausbleiben von Temperaturwerten eines Sensors zu reagieren. (HINWEIS: Die Reaktivierung des watchdog im verlinkten Thema mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;setstate &amp;lt;device&amp;gt; defined&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; ist entsprechend commandref durch &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;trigger &amp;lt;device&amp;gt; .&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder Aktivierung des Attributs &amp;lt;code&amp;gt;autoRestart&amp;lt;/code&amp;gt; zu ersetzen.)&lt;br /&gt;
* [[Watchdog kombiniert mit Threshold]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Rename&amp;diff=28397</id>
		<title>Rename</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Rename&amp;diff=28397"/>
		<updated>2018-11-17T16:19:25Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: Beispiel für &amp;quot;rename&amp;quot; hinzugefügt, da es nur ein Beispiel für Homatic gab.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:rename}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Befehl zur Umbenennung von FHEM-Geräten&lt;br /&gt;
|ModType=cmd&lt;br /&gt;
|ModCmdRef=rename&lt;br /&gt;
|ModForumArea=Sonstiges&lt;br /&gt;
|ModTechName=fhem.pl (&amp;quot;Built-in&amp;quot;)&lt;br /&gt;
|ModOwner=rudolfkoenig ({{Link2FU|8|Forum}} / [[Benutzer Diskussion:Rudolfkoenig|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
Der Befehl [[rename]] ist der &amp;quot;offizielle&amp;quot; Weg, um Geräten in FHEM einen neuen Namen zu geben. Hierbei wird soweit möglich Sorge getragen, dass andere Objekte, die in Bezug zum umbenannten Device stehen, berücksichtigt und entsprechend mit behandelt werden.&lt;br /&gt;
:&amp;lt;code&amp;gt;rename &#039;&#039;&#039;&#039;&#039;meinDevice&#039;&#039;&#039;&#039;&#039; &#039;&#039;&#039;&#039;&#039;neuerName&#039;&#039;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei [[HomeMatic]] Geräten mit mehreren Kanälen, die jeweils eigene Namen (normalerweise ein angehängtes &#039;&#039;_KanalName&#039;&#039;) haben, sollte besser (sofern bei dem Gerät verfügbar) der Befehl&lt;br /&gt;
:&amp;lt;code&amp;gt;set &#039;&#039;&#039;&#039;&#039;meinDevice&#039;&#039;&#039;&#039;&#039; deviceRename &#039;&#039;&#039;&#039;&#039;neuerName&#039;&#039;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
verwendet werden. Damit bekommt das Gerät inklusive aller Kanäle konsistente neue Bezeichnungen.&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=EnOcean-FSR14-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromsto%C3%9F-Schaltrelais&amp;diff=27812</id>
		<title>EnOcean-FSR14-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromstoß-Schaltrelais</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=EnOcean-FSR14-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromsto%C3%9F-Schaltrelais&amp;diff=27812"/>
		<updated>2018-09-09T19:07:35Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* FHEM Config-Auszug */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=platzHalter.png&lt;br /&gt;
|Bildbeschreibung=todo&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Empfänger, Aktor und Sender, Sensor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=Eltako RS485-Bus&lt;br /&gt;
|HWChannels=4 Schaltkanäle (bidirektional)&lt;br /&gt;
|HWVoltage=230V~&lt;br /&gt;
|HWPowerConsumption=Standby: 0,1W, alle Kanäle geschlossen: 0,7W&lt;br /&gt;
|HWPoweredBy=12VDC&lt;br /&gt;
|HWSize=1 Teilungseinheit = 18mm breit, 58mm tief&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=Eltako&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-FSR14-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromstoß-Schaltrelais&#039;&#039;&#039; (FSR14) ist ein Aktor &lt;br /&gt;
* für:&lt;br /&gt;
** Montage auf Hutschiene&lt;br /&gt;
* angesteuert (bidirektional) über&lt;br /&gt;
** den Eltako RS485-Bus&lt;br /&gt;
***Anschlussklemmen RSA und RSB&lt;br /&gt;
* für&lt;br /&gt;
** 4 Schalt-Kanäle mit je 4A maximaler Schaltstrom (1000W Glühlampen)&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Schaltrelais (bidirektional)&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
siehe auch [[EnOcean-Eltako-RS485-Bus]]&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
Der Aktor kann nicht vollautomatisch per autocreate in FHEM angelegt werden. &lt;br /&gt;
Die Einbindung in FHEM kann entweder über die Nutzung der inoffiziellen, gerätespezifischen EEP (empfohlen) &#039;&#039;&#039;oder&#039;&#039;&#039; über die manuelle Vorgehensweise erfolgen.  &lt;br /&gt;
&lt;br /&gt;
===== Nutzung der inoffziellen EEP =====&lt;br /&gt;
* FHEM-Device &amp;lt;name&amp;gt; (hier: EnOcean_switch_FSR14) mit dem inoffiziellen EEP für den FSR14 (M5-38-08) und der Sender-ID eines FSR14-Kanals (hier: FEFF4AF8) durch Eingabe in das [[Konfiguration#Befehl-Eingabefeld|Befehls-Eingabefeld]] definieren:&lt;br /&gt;
: &amp;lt;code&amp;gt;define EnOcean_switch_FSR14 EnOcean FEFF4AF8 M5-38-08&amp;lt;/code&amp;gt;&lt;br /&gt;
: Hierdurch wird ein FHEM-Device mit allen notwendigen Attributen für den FSR14 angelegt, das nur noch am Aktor angelernt werden muss.&lt;br /&gt;
* Am Aktor &lt;br /&gt;
** Mittlerer Funktions-Drehschalter: auf LRN&lt;br /&gt;
** Unteren Funktions-Drehschalter den korrekten Kanal einstellen&lt;br /&gt;
* FHEM Eingabefeld: &amp;lt;code&amp;gt;set EnOcean_switch_FSR14 teach&amp;lt;/code&amp;gt;&lt;br /&gt;
* Am Aktor nach dem Einlernen beide Drehschalter in die ursprüngliche Position&lt;br /&gt;
&lt;br /&gt;
===== Alternative: manuelle Vorgehensweise =====&lt;br /&gt;
Der Aktor kann nicht vollautomatisch per autocreate in FHEM angelegt werden. &lt;br /&gt;
Folgende Schritte sind für jeden Kanal durchzuführen:&lt;br /&gt;
* EnOcean-FHEM-Device &amp;lt;name&amp;gt; mit der Sender-ID des FSR14-Aktors definieren&lt;br /&gt;
* Die Attribute subType, gwCmd und manufID wie nachfolgend im Config-Auszug anlegen&lt;br /&gt;
* Das Attribut subDef mit einer freien Sender-ID des TCMs anlegen ODER falls keine freie Sender-ID bekannt ist, das Attribut komplett weglassen, damit die Vergabe automatisch durch FHEM erfolgt&lt;br /&gt;
* Am Aktor anlernen&lt;br /&gt;
** Mittlerer Funktions-Drehschalter: auf LRN&lt;br /&gt;
** Unteren Funktions-Drehschalter den korrekten Kanal einstellen&lt;br /&gt;
** FHEM Eingabefeld: &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; teach&amp;lt;/code&amp;gt;&lt;br /&gt;
* Am Aktor nach dem Einlernen beide Drehschalter in die ursprüngliche Position&lt;br /&gt;
&lt;br /&gt;
=== FHEM Config-Auszug ===&lt;br /&gt;
Ein exemplarischer Auszug aus der [[Konfiguration]]:&lt;br /&gt;
 define EnOcean_switch_FSR14 EnOcean FEFF4AF8  &amp;lt;- SenderID eines FSR14-Kanals (Aktor)&lt;br /&gt;
 attr EnOcean_switch_FSR14 subDef FF834381     &amp;lt;--- FF834381 ist eine der 127 Sender-ID&#039;s des TCM&lt;br /&gt;
 attr EnOcean_switch_FSR14 eep A5-38-08&lt;br /&gt;
 attr EnOcean_switch_FSR14 manufID 00D&lt;br /&gt;
 attr EnOcean_switch_FSR14 webCmd on:off        &lt;br /&gt;
 attr EnOcean_switch_FSR14 gwCmd switching     # Wichtig für FSR14&lt;br /&gt;
 attr EnOcean_switch_FSR14 subType gateway     # Wichtig für FSR14&lt;br /&gt;
 attr EnOcean_switch_FSR14 event-on-change-reading .*     # Verhindert das massige Schreien in Logfiles&lt;br /&gt;
 define FileLog_EnOcean_switch_FSR14 FileLog ./log/EnOcean_switch_FSR14-%Y.log EnOcean_switch_FSR14&lt;br /&gt;
 attr FileLog_EnOcean_switch_FSR14 logtype text&lt;br /&gt;
&lt;br /&gt;
=== Logbeispiel ===&lt;br /&gt;
&lt;br /&gt;
== Einsatzbeispiel ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Datenblatt: [http://www.eltako.com/fileadmin/downloads/de/Datenblatt/BR14_datenblatt_FSR14-4x.pdf PDF]&lt;br /&gt;
* Anleitung: [http://www.eltako.com/fileadmin/downloads/de/_bedienung/FSR14-4x_30014001-2_dt.pdf PDF]&lt;br /&gt;
* Forum: {{Link2Forum|Topic=25068|Message=181966}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Schalter (Empfänger)]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-CC-RT-DN_Funk-Heizk%C3%B6rperthermostat&amp;diff=26310</id>
		<title>HM-CC-RT-DN Funk-Heizkörperthermostat</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-CC-RT-DN_Funk-Heizk%C3%B6rperthermostat&amp;diff=26310"/>
		<updated>2018-03-30T20:15:26Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: Auflistung und Beschreibung der Readings hinzugefügt, Vervollständigung notwendig&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-CC-RT-DN.jpg&lt;br /&gt;
|Bildbeschreibung=HM-CC-RT-DN an Heizkörper montiert&lt;br /&gt;
|HWProtocol=[[HomeMatic]]&lt;br /&gt;
|HWType=[[HomeMatic Type Thermostat|thermostat]]&lt;br /&gt;
|HWCategory=[[:Kategorie:Heizungsventile|Heizungsventile]]&lt;br /&gt;
|HWComm=868 MHz&lt;br /&gt;
|HWChannels=6&lt;br /&gt;
|HWVoltage=3&amp;amp;nbsp;V&lt;br /&gt;
|HWPowerConsumption=180&amp;amp;nbsp;mA&lt;br /&gt;
|HWPoweredBy=2x LR6/Mignon/AA&lt;br /&gt;
|HWSize=54x65x93 mm (BxHxT)&lt;br /&gt;
|HWDeviceFHEM=[[CUL_HM]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=ELV / eQ-3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HM-CC-RT-DN&#039;&#039;&#039; (häufig einfach &#039;&#039;&#039;RT&#039;&#039;&#039; genannt) ist ein Funk-&#039;&#039;Heizkörperthermostate&#039;&#039; mit integriertem &#039;&#039;Stellantrieb&#039;&#039;. Das Thermostat ist seit September&amp;amp;nbsp;2013 verfügbar und ist der Nachfolger des [[HM-CC-VD Funk-Stellantrieb]]s.&lt;br /&gt;
&lt;br /&gt;
== Vorbemerkungen ==&lt;br /&gt;
: &#039;&#039;→ Einstellungen und Informationen, die alle [[HomeMatic]] Thermostate betreffen, sind unter [[HomeMatic Type Thermostat#Temperaturlisten|HomeMatic Type Thermostat]] zu finden.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der HM-CC-RT-DN kann die Temperatur selbst messen (im Gegensatz zum [[HM-CC-VD Funk-Stellantrieb|Vorgänger]]) und verfügt über eine Fenster-Offen-Erkennung sowie eine Boost-Funktion. Der HM-CC-RT-DN &#039;&#039;kann&#039;&#039; von einem [[HM-TC-IT-WM-W-EU Funk-Wandthermostat AP]] gesteuert werden, das ist aber &#039;&#039;optional&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Das Gerät wird seit Anfang Oktober 2013 von FHEM unterstützt (siehe Diskussion im {{Link2Forum|Topic=14738|LinkText=Forum}}).&lt;br /&gt;
&lt;br /&gt;
Der HM-CC-RT-DN scheint das erste HomeMatic-Device zu sein, bei dem ein Update der Firmware auch vom Anwender durchgeführt werden kann. Ein Firmware-Update erfordert einen [[HM-CFG-USB_USB_Konfigurations-Adapter|USB Konfigurations-Adapter]] und eine auf der eQ-3 Webseite herunterladbare Firmwareupdate-Software. Weitere Details sind unter [[#Firmware Update|Firmware Update]] beschrieben.&lt;br /&gt;
{{Hinweis|Die Solltemperaturen eines HM-CC-RT-DN lassen sich &#039;&#039;nicht&#039;&#039; durch einen [[HM-CC-TC Funk-Wandthermostat]] &#039;&#039;steuern&#039;&#039;. Dieser kann nur die Ist-Temperatur an den HM-CC-RT-DN weitergeben, damit nicht die am HM-CC-RT-DN direkt gemessene Raumtemperatur zur Regelung verwendet wird.}}&lt;br /&gt;
Mit einem HM-CC-RT-DN können maximal (neben der Zentrale/FHEM):&lt;br /&gt;
* 7 HomeMatic Heizkörperthermostate&lt;br /&gt;
* 8 HomeMatic Tür-Fensterkontakte / Fenster-Drehgriffkontakte&lt;br /&gt;
* 8 Tastenpaare von HomeMatic Fernbedienungen bzw. Display-Wandtaster&lt;br /&gt;
* 1 HomeMatic Innen-Temperatur-Sensor&lt;br /&gt;
[[Peering (HomeMatic)|gepeert]] werden.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Wird für Wartungs-/Umbaumaßnahmen das Wasser der Heizung abgelassen bzw. diese neubefüllt, sind alle Stellantriebe manuell dauerhaft auf &#039;&#039;&#039;on&#039;&#039;&#039; zu setzen: set &amp;lt;HM_Stellantrieb&amp;gt;_Clima controlManu on. Beim Einsatz eines Wandthermostaten ist der Wandthermostat entsprechend einzustellen.}}&lt;br /&gt;
&lt;br /&gt;
== Technische Daten ==&lt;br /&gt;
* Betriebsspannung: 2 Stck. 1,5V LR6/Mignon/AA&lt;br /&gt;
* Stromaufnahme: 180 mA max.&lt;br /&gt;
* Abmessungen (B x H x T): 54 x 65 x 93 mm&lt;br /&gt;
* Gewicht: 180 g (ohne Batterien)&lt;br /&gt;
* Ventilanschluss: M30 x 1,5 mm&lt;br /&gt;
&lt;br /&gt;
Aktuelle Firmware: 1.4 (2018)&lt;br /&gt;
&lt;br /&gt;
== Betrieb mit FHEM ==&lt;br /&gt;
Der Funk-Heizkörperthermostat muss zuerst mit FHEM [[Pairing (HomeMatic)|gepairt]] werden. Stellen Sie sicher, dass FHEM aktuell ist ([[update]] durchführen)&lt;br /&gt;
&lt;br /&gt;
Das Pairing sollte wie in [[HomeMatic Devices pairen]] beschrieben durchgeführt werden &lt;br /&gt;
&lt;br /&gt;
=== Channels (Kanäle) ===&lt;br /&gt;
==== Channel (Kanal) 01 _Weather ====&lt;br /&gt;
&lt;br /&gt;
Dieser Kanal dient zur Einspeisung der (gemessenen) &#039;&#039;Ist-Temperatur&#039;&#039;. Als Sensor können zum Beispiel das [[HM-TC-IT-WM-W-EU Funk-Wandthermostat AP|HM-TC-IT-WM-W-EU Funk-Wandthermostat]] oder ein [[HM-WDS40-TH-I Funk-Temperatur-/Feuchtesensor innen (IT)|HM-WDS40-TH-I Funk-Temperatur-/Feuchtesensor]] dienen.&lt;br /&gt;
&lt;br /&gt;
Ein Temperatur-Sensor &#039;&#039;tempSensor&#039;&#039; kann mit dem &#039;&#039;_Weather&#039;&#039;-Kanal wie folgt [[Peering (HomeMatic)|gepeert]] werden: &lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt;_Weather peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_Weather single set&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
  set EG_Buero_WANDTHERMOSTAT_Weather peerChan 0 EG_Buero_THERMOSTAT_Weather single set&lt;br /&gt;
&lt;br /&gt;
ACHTUNG: Das Wandthermostat sowie das Thermostat Ventil (Beispiel &amp;quot;EG_Buero_WANDTHERMOSTAT&amp;quot; und EG_Buero_THERMOSTAT) werden vorher in FHEM den Status &amp;quot;CMDs_done&amp;quot; anzeigen.&lt;br /&gt;
Beim peerChan wird dann bei beiden &amp;quot;CMDs_pending&amp;quot; stehen. Wobei das Wandthermostat sehr schnell wieder auf CMDs_done zurück springt.&lt;br /&gt;
Allerdings ist dingend darauf zu achten, dass das Thermostat Ventil auch wieder auf  &amp;quot;CMDs_done&amp;quot; wechselt, bevor man den nächsten Befehl absendet.&lt;br /&gt;
Das Heizkörper Ventile kann unter umständen 3 bis 5 min benötigen bis wieder &amp;quot;CMDs_done&amp;quot; steht. Evtl. kann man dies durch die BOOST Taste beschleunigen. Da das Ventil etwa alle 3 min aufwacht, prüft und Daten sendet / empfängt. Sollte man mit dem Befehlen weiter gemacht haben, so kann es zu Problemen führen, das einer nicht mehr mit dem Pending aufhört. In dem Fall empfiehlt es sich beide Devices von Fhem abzumelden und auf Werkseinstellung zu resetten. &lt;br /&gt;
&lt;br /&gt;
Zum Test haucht man das Wandthermostat an oder hält es einige Zeit in der Hand bis die Temperatur steigt, nach etwa 3 Minuten sollte man auch am Thermostat Ventil ein Temperaturanstieg sehen.&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 02 _Climate ====&lt;br /&gt;
Dieser Kanal erlaubt es dem [[HM-TC-IT-WM-W-EU Funk-Wandthermostat AP|HM-TC-IT-WM-W-EU Funk-Wandthermostat]] den HM-CC-RT-DN zu steuern. Dazu müssen die beiden Geräte gepeert werden:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt;_Climate peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_Climate single set&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 03 _WindowRec ====&lt;br /&gt;
Mit diesem Kanal können Fensterkontakte ([[HM-SEC-SC Tür-Fensterkontakt|HM-SEC-SC]] und [[HM-Sec-RHS Funk-Fenster-Drehgriffkontakt|HM-SEC-RHS]]) ihren Fensterstatus (geöffnet / gekippt) an ein oder mehrere Thermostate senden. Die Thermostate stellen anschließend die entsprechende (konfigurierbare) Temperatur ein. Der Temperaturwert kann je Fenster-Sensor unterschiedlich definiert werden. Sind mehrere Fenster gleichzeitig geöffnet, so wird der Thermostat auf die Temperatur des Sensors mit dem geringsten Temperaturwert eingestellt. &lt;br /&gt;
Ferner wird empfohlen, bei Einsatz von externen Sensoren, die interne „Fenster auf Erkennung“ zu deaktivieren (weitere Details sind im [[HM-CC-RT-DN Funk-Heizkörperthermostat#Channel .28Kanal.29 04 _Clima|Channel (Kanal) 04 _Clima]] beschrieben).&lt;br /&gt;
&lt;br /&gt;
Der Befehl zum Peeren lautet, wobei &amp;lt;fensterSensor&amp;gt; die FHEM-Kanalbezeichnung für den Fensterkontakt ist und &amp;lt;rt_WindowRec&amp;gt; die Kanalbezeichnung für den entsprechenden Kanal des Heizkörperthermostates:&lt;br /&gt;
 set &amp;lt;fensterSensor&amp;gt; peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_WindowRec single set&lt;br /&gt;
&lt;br /&gt;
Zum Löschen (=unpeeren) dieser Kopplung:&lt;br /&gt;
 set &amp;lt;fensterSensor&amp;gt; peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_WindowRec single unset&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung&#039;&#039;&#039;: Der Peer-(Lösch)Vorgang muss erst am Fensterkontakt durch Drücken der Anlerntaste ausgelöst werden, und zwar auch dann, wenn der Fensterkontakt schon vorher mit FHEM gepairt wurde. Dann kann der oben genannte Befehl in FHEM abgesetzt werden. Wichtig scheint auch, dass der Fensterkontakt geschlossen ist wenn man die Anlerntaste drückt.&lt;br /&gt;
&lt;br /&gt;
Der Befehl zur Temperatureinstellung des Heizkörperthermostaten für den Zustand &amp;quot;Fenster offen&amp;quot; lautet, wobei &amp;lt;fensterSensor&amp;gt; die FHEM-Kanalbezeichnung für den Fensterkontakt ist und &amp;lt;rt_WindowRec&amp;gt; die Kanalbezeichnung für den entsprechenden Kanal des Heizkörperthermostates, sowie &amp;lt;Temp&amp;gt; die einzustellende Temperatur (ganzzahliger Wert):&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt;_WindowRec regSet winOpnTemp &amp;lt;Temp&amp;gt; &amp;lt;fensterSensor&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 04 _Clima ====&lt;br /&gt;
Dieser Kanal dient zum Einstellen der Betriebsparameter, auch [[#Temperaturlisten|Temperaturlisten]] sind hierauf zu übertragen.&lt;br /&gt;
Mit dem Modul [[Weekprofile|Wochenplan / Weekprofile]] können die Wochenpläne komfortabel in FHEM erstellt und an die Thermostate übertragen werden.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|In älteren Versionen von FHEM wurde dieser Kanal durch &#039;&#039;autocreate&#039;&#039; als &amp;lt;code&amp;gt;_ClimRT_tr&amp;lt;/code&amp;gt; angelegt. Der Hersteller hat hier offenbar die internen Bezeichnungen geändert, denn beim Vorläufernmodell HM-CC-TC mussten Temperaturlisten auf den Kanal &#039;&#039;Climate&#039;&#039; übertragen werden.}}&lt;br /&gt;
&lt;br /&gt;
Die maximale Öffnung des Ventils kann mittels folgendem Befehl eingestellt werden (hier auf 80 %):&lt;br /&gt;
  set &amp;lt;HM-CC-RT-DN&amp;gt;_Clima regSet valveMaxPos 80&lt;br /&gt;
&lt;br /&gt;
Die interne &amp;quot;Fenster-auf&amp;quot;-Erkennung kann man wie folgt abschalten:&lt;br /&gt;
  set &amp;lt;HM-CC-RT-DN&amp;gt;_Clima regSet winOpnMode off&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 05 _ClimaTeam ====&lt;br /&gt;
Dieser Kanal erlaubt es mehrere HM-CC-RT-DN zu einem &amp;quot;Team&amp;quot; zu gruppieren. Ein Mitglied des Teams meldet&lt;br /&gt;
* Änderungen der Temperatur am Handrad&lt;br /&gt;
* Einschalten des Boost-Modus am Taster&lt;br /&gt;
an seine &amp;quot;Teamkollegen&amp;quot; weiter. Folgende Änderungen werden &#039;&#039;&#039;nicht&#039;&#039;&#039; weitergegeben:&lt;br /&gt;
* Status der Fensterkontakte&lt;br /&gt;
* Temperaturlisten/Wochenplan und daraus folgende Änderungen&lt;br /&gt;
* Änderungen durch Fernbedienungen&lt;br /&gt;
* Änderungen durch eine HomeMatic-Zentrale&lt;br /&gt;
&lt;br /&gt;
Befehl zum Peeren, wobei &#039;&#039;&amp;lt;HM-CC-RT-DN#1&amp;gt;_ClimaTeam&#039;&#039;, &#039;&#039;&amp;lt;HM-CC-RT-DN#2&amp;gt;_ClimaTeam&#039;&#039;, ..., &#039;&#039;&amp;lt;HM-CC-RT-DN#8&amp;gt;_ClimaTeam&#039;&#039; die Kanalbezeichnungen der jeweiligen ClimaTeam-Kanäle sind:&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN#1&amp;gt;_ClimaTeam peerChan 0 &amp;lt;HM-CC-RT-DN#2&amp;gt;_ClimaTeam single&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN#1&amp;gt;_ClimaTeam peerChan 0 &amp;lt;HM-CC-RT-DN#3&amp;gt;_ClimaTeam single&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN#2&amp;gt;_ClimaTeam peerChan 0 &amp;lt;HM-CC-RT-DN#3&amp;gt;_ClimaTeam single&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 06 _remote ====&lt;br /&gt;
Dieser Kanal kann an eine Fernbedienung gekoppelt werden. Per Tastendruck kann man einen bestimmten Mode und/oder eine bestimmte Temperatur wählen. Dabei kann die Reaktion auf einen langen oder kurzen Tastendruck gesondert eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Der Befehl zum peeren lautet, wobei &amp;lt;button&amp;gt; die Kanalbezeichnung der Fernbedienung und &amp;lt;rt-remote&amp;gt; die Kanalbezeichnung des Heizkörperthermostates ist:&lt;br /&gt;
  set &amp;lt;button&amp;gt; peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_remote single&lt;br /&gt;
&lt;br /&gt;
=== Betriebsmodus Auto, Manu, Party (Urlaub) ===&lt;br /&gt;
&lt;br /&gt;
Der HM-CC-RT-DN verfügt über drei Betriebsmodus: Auto, Manu (Manuell) und Party (Urlaub). &lt;br /&gt;
&lt;br /&gt;
==== Modus Auto ====&lt;br /&gt;
Das Gerät arbeitet gemäß des gespeicherten Wochenprogramms. Manuelle Änderungen sind möglich, werden aber beim nächsten Schaltpunkt überschrieben.&lt;br /&gt;
&lt;br /&gt;
==== Modus Manu ====&lt;br /&gt;
Die Temperatur wird manuell eingestellt, das Wochenprogramm wird nicht abgearbeitet. &amp;quot;Manuell Einstellen&amp;quot; bedeutet entweder am Handrad oder durch Übermittlung eines &amp;quot;set desired temp&amp;quot;-Befehls von FHEM (oder equivalent von einer CCU).&lt;br /&gt;
&lt;br /&gt;
==== Modus Party (Urlaub) ====&lt;br /&gt;
Die eingestellte Temperatur gilt bis zu einem gegebenen Endzeitpunkt, anschließend wechselt das Thermostat in den &#039;&#039;Auto&#039;&#039;-Modus. &lt;br /&gt;
&lt;br /&gt;
==== Welchen Modus nutzen? ====&lt;br /&gt;
Im Umfeld von FHEM sind alle drei Modi einsetzbar. Betrieb in &amp;quot;Auto&amp;quot; hat den Vorteil, dass bei Ausfall der FHEM-Instanz der Thermostat trotzdem noch die eingespeicherten Wochenprogramme abarbeitet. Nachteilig ist aber, dass die Steuerung komplexer wird, weil sowohl die Einstellungen am Thermostat als auch Schaltebefehle von FHEM das Verhalten beeinflussen. Vielfach wird daher im Umfeld von FHEM der Modus &amp;quot;Manu&amp;quot; benutzt, hier wird die Temperatur nur per einzelnem FHEM Schaltbefehl gesteuert, ausgelöst z.b. durch &amp;quot;at&amp;quot; Kommandos, Anwesenheitserkennung oder Bewegungsmelder. Sollte FHEM (oder die Funkverbindung) ausfallen, bleibt der Thermostat allerdings auf der letzten eingestellten Temperatur stehen.&lt;br /&gt;
&lt;br /&gt;
Denkbar ist auch, den Modus &amp;quot;Auto&amp;quot; zu verwenden und dann die Steuerung per FHEM dadurch durchzuführen, dass durch FHEM die Wochenprogramme verändert werden. Dies verbindet zwar die Vorteil der vorgenannten Methoden, ist aber am aufwendigsen in der Programmierung und erzeugt die höchste Funklast.&lt;br /&gt;
&lt;br /&gt;
Auch der Urlaubsmodus ist einsetzbar, so kann beispielsweise bei Abwesenheit ein niedrigeres Temperaturprofil eingestellt werden, ohne dass eventuell vorhandene Temperaturlisten verändert werden müssen.&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-CC-RT-DN&amp;gt;_Clima controlParty 16 06.12.13 16:30 09.12.13 05:00&lt;br /&gt;
&lt;br /&gt;
Dadurch wird &lt;br /&gt;
* von 06.12.2013, 16:30 Uhr&lt;br /&gt;
* bis 09.12.2013, 05:00 Uhr &lt;br /&gt;
* die gewünschte Raumtemperatur auf 16 °C eingestellt.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&lt;br /&gt;
* Der Befehl muss auf dem Kanal 4 &#039;&#039;(_Clima)&#039;&#039; erfolgen.&lt;br /&gt;
* Es werden nur Uhrzeiten zu jeder vollen oder halben Stunde angenommen (Minuten also 00 oder 30).}}&lt;br /&gt;
&lt;br /&gt;
Mit der folgenden Funktion &amp;lt;code&amp;gt;Urlaub()&amp;lt;/code&amp;gt; kann man eine ganze Wohnung (also mehrere RTs) mit nur einem Befehl in den Party-Modus versetzen. Im Beispiel werden zwei Heizkörper (&amp;quot;Treppenhaus&amp;quot; und &amp;quot;Kammer&amp;quot;) angesteuert.&lt;br /&gt;
&lt;br /&gt;
Zu beachten sind folgende Dinge:&lt;br /&gt;
# Aktuelle Dateien (z.B. &amp;lt;code&amp;gt;10_CUL_HM&amp;lt;/code&amp;gt;) verwenden!&lt;br /&gt;
# Bei dem &#039;&#039;controlParty&#039;&#039;-Befehl &#039;&#039;kein&#039;&#039; Komma zwischen den Parametern.&lt;br /&gt;
# Bei der Funktion die Parameterübergabe definieren &amp;lt;code&amp;gt;($$$$$)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Aufruf:&#039;&#039;&#039;&lt;br /&gt;
:&amp;lt;code&amp;gt;{Urlaub (&amp;quot;16&amp;quot;, &amp;quot;06.12.13&amp;quot;, &amp;quot;16:30&amp;quot;, &amp;quot;09.12.13&amp;quot; ,&amp;quot;05:00&amp;quot;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Funktion:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=perl&amp;gt;&lt;br /&gt;
my $Urlaub;&lt;br /&gt;
sub&lt;br /&gt;
Urlaub($$$$$)&lt;br /&gt;
  {&lt;br /&gt;
    my ($temp, $startDate, $startTime, $endDate, $endTime) = @_;&lt;br /&gt;
 &lt;br /&gt;
    # HM-CC-RT-DN akzeptiert nur Zeiten, die auf Minute 00 oder 30 enden.&lt;br /&gt;
    # Daher $startTime und $endTime abrunden&lt;br /&gt;
    $startTime =~ s/\:[0-2].$/:00/;&lt;br /&gt;
    $startTime =~ s/\:[3-5].$/:30/;&lt;br /&gt;
    $endTime =~ s/\:[0-2].$/:00/;&lt;br /&gt;
    $endTime =~ s/\:[3-5].$/:30/;&lt;br /&gt;
&lt;br /&gt;
    # controlParty bei jedem HM-CC-RT-DN setzen.&lt;br /&gt;
    for my $rt (qw(Kammer Treppenhaus)) {&lt;br /&gt;
      fhem (&amp;quot;set $rt controlParty $temp $startDate $startTime $endDate $endTime&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tastensperre ===&lt;br /&gt;
&lt;br /&gt;
Um zu verhindern, dass der Modus oder die Temperatur per Tasten bzw. Drehrad am HM-CC-RT-DN verändert wird, kann eine Tastensperre gesetzt werden. Dies erfolgt mittels des Befehls:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet btnLock on&lt;br /&gt;
&lt;br /&gt;
Rückgängig machen geht per:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet btnLock off&lt;br /&gt;
&lt;br /&gt;
Diese Tastensperre kann man aber am HM-CC-RT-DN durch eine Tastenkombination wieder zurücksetzen. Um sie nur per FHEM rücksetzen zu können, muss&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet globalBtnLock on&lt;br /&gt;
&lt;br /&gt;
eingegeben werden. Rückgängig geht wieder per:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet globalBtnLock off&lt;br /&gt;
&lt;br /&gt;
Es gibt auch eine Tastensperre die nur das Umschalten des Modus (Auto, Manuell, Urlaub) am Gerät verhindert. Diese wird mit&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet modusBtnLock on&lt;br /&gt;
&lt;br /&gt;
eingeschaltet. Abschalten geht mit:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet modusBtnLock off&lt;br /&gt;
&lt;br /&gt;
=== Burst-Modus ===&lt;br /&gt;
Das ist ein &#039;&#039;&#039;Übertragungs&#039;&#039;&#039;modus für Nachrichten zwischen HM-Geräten und der Zentrale. Der RT erwacht alle 2,5 Minuten und dann überträgt die Zentrale die Kommandos. Wenn man einen Fensterkontakt oder eine Fernsteuerung nutzt, muss der RT sofort reagieren - dann muss man den Burst &#039;&#039;enablen&#039;&#039;. Der RT kann in diesem Fall sofort aufgeweckt werden und bearbeitet die Anforderung (Request). Das kann man auch von der Zentrale aus nutzen (so man möchte). Das ist der &#039;&#039;&#039;Vorteil&#039;&#039;&#039; des eingeschalteten Burst-Modus.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteil:&#039;&#039;&#039; Der Burst-Modus benötigt mehr Leistung, das heißt die Batterien müssen häufiger gewechselt werden: Der RT muss den Receiver ständig empfangsbereit halten. Außerdem wachen bei jedem Burst wachen &#039;&#039;alle&#039;&#039; Burst-Empfänger auf – egal an wen die Kommunikation gerichtet war.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Burst – wie es funktioniert&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Schickt ein Sender eine burst Sequenz, wachen alle burst-Empfänger auf und prüfen die Message. &lt;br /&gt;
Wenn sie betroffen sind bleiben sie eine Zeit lang wach, ansonsten schlafen sie wieder ein. &lt;br /&gt;
Man beachte also, dass Senden eines Burst  Energie in ALLEN burst-Empfängern verbraucht, egal ob sie angesprochen sind.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HMLAN und burst&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[HMLAN]] hat ein Sendebudget das über eine Stunde berechnet wird. Burst belastet diese Konto deutlich - so können nicht mehr als 100 bursts /h gesendet werden - dann geht HMLAN in overload Wenn zusätzliche Nachrichten gesendet werden sind es entsprechend weniger. &lt;br /&gt;
Es ist als nicht vorteilhaft, unnötig bursts zu senden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Burst devices&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es gibt Devices, die immer auf burst reagieren und solche bei denen es abgeschaltet werden kann. So reagiert ein Rauchmelder immer auf Burst damit er seine Team-Kollegen hören kann. &lt;br /&gt;
Ein TC oder RT hingegen hat diese Funktion abschaltbar. &#039;Per default ist dies ausgeschaltet um Batterie zu sparen&#039;. Wenn ein VD gesteuert wird ist der TC ja selbst wach.  Wird er aber mit einem Fensterkontakt gekoppelt muss es eingeschaltet werden – sonst verpasst er die Nachricht. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ConditionalBurst devices&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Devices mit abschaltbarem Burst wie z.B. der &#039;&#039;HM-CC-RT-DN&#039;&#039; haben ein Register, &#039;&#039;burstRx&#039;&#039;, mit dem das burst-Erwachen eingestellt werden kann. &lt;br /&gt;
Sendern, die einen burst-Aktor erwecken sollen, muss man sagen, welcher Peer Burst benötigt. Hier kann ggf. das Register &#039;&#039;peerNeedsBurst&#039;&#039; nach dem Peeren gesetzt werden. FHEM versucht dies automatisch beim Peeren zu erledigen. Siehe [[HomeMatic HMInfo|HMinfo]] Befehl &#039;&#039;models&#039;&#039; um herauszufinden, welche Devices welchen Modus unterstützen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Attribut burstAccess&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Devices, die abschaltbaren burst haben kann man ein attribut bustAccess 1_auto setzen. Es wird beim Abschicken eines Kommandos versucht, das Device mit burst zu wecken. Sollte es nicht funktionieren wird gewartet, bis das Device aufwacht (meist reagieren solche Devices auch auf wakeup). Das Setzen des Attributs ist angenehm – es werden aber ggf. viele bursts gesendet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kommando burstXmit&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Mit diesem Kommando, das bei Devices mit contitional-Burst zu Verfügung steht, wird der burst gezielt von User angestossen.&lt;br /&gt;
&lt;br /&gt;
Der User schickt erst seine Kommandos an das device. Die Kommandos werden im Command-stack gesammelt. &lt;br /&gt;
&lt;br /&gt;
Dann sendet der User ein set burstXmit.&lt;br /&gt;
&lt;br /&gt;
Es passiert das gleiche wie bei burstAccess.&lt;br /&gt;
&lt;br /&gt;
FHEM versucht mittels burst zu wecken und sendet bei Erfolg die Messages aus dem Kommandostack. &lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu burstAccess ist burstXmit gezielt einsetzbar und kann sparsamer verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; FHEM und burst devices&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
FHEM sendet eine burst automatisch mit Kommandos zu Devices, die nur burst unterstützen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So aktiviert man den burst-Betrieb am HM-CC-RT-DN&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Burst Mode einschalten&#039;&#039; (der Kanal 4 des Device WZ1 heisst hier WZ1_4)&lt;br /&gt;
:&amp;lt;code&amp;gt;set WZ1_4 regSet burstRx on &amp;lt;/code&amp;gt;&lt;br /&gt;
prüfen mit:&lt;br /&gt;
:&amp;lt;code&amp;gt;get WZ1_4 reg burstRx &amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;Nun in FHEM den Burst mode einschalten (sofern nicht burstXmit verwendet wird)&#039;&#039;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr WZ1 burstAccess 1_auto&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis: Das Attribut im Device und nicht im Kanal setzen, ansonsten gibt es eine Fehlermeldung.&lt;br /&gt;
&lt;br /&gt;
=== Temperaturlisten ===&lt;br /&gt;
Die Temperaturlisten des HM-CC-RT-DN werden identisch mit denen anderer HomeMatic Thermostate verwaltet (siehe [[HomeMatic Type Thermostat#Temperaturlisten|HomeMatic Type Thermostat]]). Beim HM-CC-RT-DN ist der Kanal 4 (_Clima) für die Temperaturlisten zuständig.&lt;br /&gt;
&lt;br /&gt;
==FHEM-Log==&lt;br /&gt;
In den folgenden Logs heißt Kanal 4 noch &amp;quot;_ClimRT_tr&amp;quot;. Inzwischen würde man dort &amp;quot;_Clima&amp;quot; sehen.&lt;br /&gt;
&lt;br /&gt;
=== Device-Log ===&lt;br /&gt;
 2013.10.10 20:03:24 3: CUL_HM Unknown device CUL_HM_HM_CC_RT_DN_2212BC, please define it&lt;br /&gt;
 2013.10.10 20:03:24 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC CUL_HM 2212BC A1A0184002212BC0000001000954B4551303531303031375900FFFF&lt;br /&gt;
 2013.10.10 20:03:24 3: Device CUL_HM_HM_CC_RT_DN_2212BC added to ActionDetector with 000:10 time&lt;br /&gt;
 2013.10.10 20:03:24 3: CUL_HM pair: CUL_HM_HM_CC_RT_DN_2212BC thermostat, model HM-CC-RT-DN serialNr KEQ0510017&lt;br /&gt;
 2013.10.10 20:03:24 3: LANCUL pairing (hmPairForSec) not enabled&lt;br /&gt;
 2013.10.10 20:03:24 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC-%Y.log CUL_HM_HM_CC_RT_DN_2212BC&lt;br /&gt;
 2013.10.10 20:03:24 3: Device Heizung_Wohnzimmer added to ActionDetector with 000:10 time&lt;br /&gt;
 2013.10.10 20:03:24 3: CUL_HM pair: Heizung_Wohnzimmer thermostat, model HM-CC-TC serialNr JEQ0044286&lt;br /&gt;
 2013.10.10 20:03:24 3: Device CUL_HM_HM_CC_RT_DN_2212BC added to ActionDetector with 000:10 time&lt;br /&gt;
 2013.10.10 20:03:24 3: CUL_HM pair: CUL_HM_HM_CC_RT_DN_2212BC thermostat, model HM-CC-RT-DN serialNr KEQ0510017&lt;br /&gt;
 2013.10.10 20:03:25 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_Weather CUL_HM 2212BC01&lt;br /&gt;
 2013.10.10 20:03:25 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_Weather FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_Weather-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_Weather&lt;br /&gt;
 2013.10.10 20:03:25 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_Weather FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_Weather-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_Weather&lt;br /&gt;
 2013.10.10 20:03:26 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_Climate CUL_HM 2212BC02&lt;br /&gt;
 2013.10.10 20:03:26 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_Climate FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_Climate-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_Climate&lt;br /&gt;
 2013.10.10 20:03:26 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_Climate FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_Climate-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_Climate&lt;br /&gt;
 2013.10.10 20:03:27 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_WindowRec CUL_HM 2212BC03&lt;br /&gt;
 2013.10.10 20:03:27 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_WindowRec FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_WindowRec-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_WindowRec&lt;br /&gt;
 2013.10.10 20:03:27 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_WindowRec FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_WindowRec-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_WindowRec&lt;br /&gt;
 2013.10.10 20:03:28 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr CUL_HM 2212BC04&lt;br /&gt;
 2013.10.10 20:03:28 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr&lt;br /&gt;
 2013.10.10 20:03:28 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr&lt;br /&gt;
 2013.10.10 20:03:29 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam CUL_HM 2212BC05&lt;br /&gt;
 2013.10.10 20:03:29 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam&lt;br /&gt;
 2013.10.10 20:03:29 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam&lt;br /&gt;
 2013.10.10 20:03:30 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_remote CUL_HM 2212BC06&lt;br /&gt;
 2013.10.10 20:03:30 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_remote FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_remote-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_remote&lt;br /&gt;
 2013.10.10 20:03:30 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_remote FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_remote-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_remote&lt;br /&gt;
 2013.10.10 20:03:35 3: Device CUL_HM_HM_CC_RT_DN_2212BC added to ActionDetector with 000:10 time&lt;br /&gt;
 2013.10.10 20:03:40 2: CUL_HM set CUL_HM_HM_CC_RT_DN_2212BC getSerial&lt;br /&gt;
 2013.10.10 20:03:40 2: CUL_HM set CUL_HM_HM_CC_RT_DN_2212BC getConfig&lt;br /&gt;
 2013.10.10 20:03:54 3: Device CUL_HM_HM_CC_RT_DN_2212BC added to ActionDetector with 000:10 time&lt;br /&gt;
&lt;br /&gt;
=== Event monitor ===&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr motorErr: ok&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr measured-temp: 18.4&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr desired-temp: 18&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr ValvePosition: 3 %&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr mode: manu&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr unknown0: 24&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr T: 18.4 desired: 18 valve: 3 %&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC battery: ok&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC batteryLevel: 3.1 V&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC measured-temp: 18.4&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC desired-temp: 18&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC actuator: 3 %&lt;br /&gt;
&lt;br /&gt;
== Firmware Update ==&lt;br /&gt;
Seit 24.10.2014 gibt es für den HM-CC-RT-DN die neue Firmware Version 1.4. Diese kann von der eQ-3 Webseite heruntergeladen werden. Genauere Informationen gibt es unter [[HomeMatic Firmware Update]].&lt;br /&gt;
&lt;br /&gt;
=== HM-CC-RT-DN spezifische Update Informationen ===&lt;br /&gt;
Durch gleichzeitiges Drücken der &amp;quot;Auto-/Manu&amp;quot;-Taste und der &amp;quot;Comfort-/Eco&amp;quot;-Taste am HM-CC-RT-DN während man die Batterien wieder einlegt wird der updatemodus gestartet. Während des Updates steht &amp;quot;FUP&amp;quot; im Display. Nach erfolgreichem Update erscheint &amp;quot;Ins&amp;quot; im Display und es muss eine erneute Adaptierfahrt durch drücken der Boost-Taste ausgelöst werden. Anschließend sollte der HM-CC-RT-DN wieder normal funktionieren. Die eingestellten Parameter und das Pairing mit FHEM gehen beim Update nicht verloren. Sollte das Update fehlschlagen, erscheint &amp;quot;Err&amp;quot; bzw. &amp;quot;CrC&amp;quot; im Display.&lt;br /&gt;
&lt;br /&gt;
Normalerweise sollte dann durch erneutes starten der Prozedur am PC und HM-CC-RT-DN das ganze erneut durchführbar sein.&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Readings, die nicht durch ein einfaches &#039;&#039;getConfig&#039;&#039; aktualisisert werden, z.B. &amp;quot;battery&amp;quot;(nicht batteryLevel). Um diese Readings zu bekommen, ist ein &lt;br /&gt;
:&amp;lt;code&amp;gt;set Device_Channel04 controlMode auto &amp;lt;/code&amp;gt;&lt;br /&gt;
notwendig. Daraufhin werden die Readings übertragen/aktualisiert.&lt;br /&gt;
&lt;br /&gt;
== Simulation von Fensterkontakten und externen Temperatursensoren ==&lt;br /&gt;
grober Ablauf:&lt;br /&gt;
* erstellen ein virtuelles Device&lt;br /&gt;
* erstelle dazu einen virtuellen Kanal&lt;br /&gt;
* peeren den Kanal mit dem RT (als fenster-kontakt oder als remote, wen du willst)&lt;br /&gt;
* sende ein postEvent&lt;br /&gt;
&lt;br /&gt;
=== Fensterkontakte ===&lt;br /&gt;
&#039;&#039;Entnommen aus diesem {{Link2Forum|Topic=31078|Message=236245|LinkText=Forenbeitrag}}&#039;&#039;&lt;br /&gt;
 define virSC CUL_HM 221133&lt;br /&gt;
 attr virSC autoReadReg 4_reqStatus&lt;br /&gt;
 attr virSC expert 2_full&lt;br /&gt;
 attr virSC model virtual_1&lt;br /&gt;
 attr virSC peerIDs &lt;br /&gt;
 attr virSC subType virtual&lt;br /&gt;
 attr virSC webCmd press short:press long&lt;br /&gt;
 &lt;br /&gt;
 define virtualKitchenDoor CUL_HM 22113301&lt;br /&gt;
 attr virtualKitchenDoor dummy 1&lt;br /&gt;
 attr virtualKitchenDoor expert 1&lt;br /&gt;
 attr virtualKitchenDoor group Virtual&lt;br /&gt;
 attr virtualKitchenDoor model virtual_1&lt;br /&gt;
 attr virtualKitchenDoor webCmd postEvent open:postEvent closed &lt;br /&gt;
&lt;br /&gt;
Anschließend peeren und Temperatur festlegen mit:&lt;br /&gt;
 set virtualKitchenDoor peerChan 0 &amp;lt;Thermostat_Window_Rec&amp;gt; single set&lt;br /&gt;
 set &amp;lt;Thermostat_Window_Rec&amp;gt; regSet winOpnTemp 5 virtualKitchenDoor&lt;br /&gt;
&lt;br /&gt;
Ggf noch interne &amp;quot;Fenster-auf&amp;quot; Erkennung abschalten&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt;_Clima regSet winOpnMode off&lt;br /&gt;
&lt;br /&gt;
Die virtuelle Tür wird dann entsprechend über ein Notify getriggert:&lt;br /&gt;
 define notify_virtualKitchenDoor notify (Fensterkontakt_1|Fensterkontakt_2) {if(Value(&amp;quot;Fensterkontakt&amp;quot;) eq &amp;quot;open&amp;quot; &amp;amp;&amp;amp; Value(&amp;quot;Fensterkontakt_2&amp;quot;) eq &amp;quot;open&amp;quot;){fhem(&amp;quot;set virtualKitchenDoor postEvent open&amp;quot;)}else{fhem(&amp;quot;set virtualKitchenDoor postEvent closed&amp;quot;)}}&lt;br /&gt;
&lt;br /&gt;
=== Temperatursensoren ===&lt;br /&gt;
&#039;&#039;Entnommen aus diesem {{Link2Forum|Topic=19686|Message=233788|LinkText=Forenbeitrag}}&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Virtuelles HomeMatic Device mit _deiner_ HM Id definieren:&lt;br /&gt;
 define wz_vT CUL_HM &amp;lt;hmId&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Dem Device einen virtuellen Kanal (Default ist ein virtueller Button) hinzufügen:&lt;br /&gt;
 set wz_vT virtual 1&lt;br /&gt;
&lt;br /&gt;
3. Es ist kein virtueller Button sondern ein virtueller Temperatursensor - darum rename:&lt;br /&gt;
 rename wz_vT_Btn1 wz_vT_Sensor1&lt;br /&gt;
&lt;br /&gt;
4. Virtuellen Peer Sensor mit dem Weather Channel des RT-DN peeren:&lt;br /&gt;
 set wz_vT_Sensor1 peerChan 0 &amp;lt;RT_DN&amp;gt;_Weather single&lt;br /&gt;
&lt;br /&gt;
5. Peering kontrollieren (Voraussetzung: Device &#039;&#039;hm&#039;&#039; vom Typ [[HomeMatic HMInfo|HMinfo]] existiert):&lt;br /&gt;
:&amp;lt;code&amp;gt;set hm peerXref&amp;lt;/code&amp;gt;&lt;br /&gt;
Beispiel-Ausgabe:&lt;br /&gt;
 peerXref done: &lt;br /&gt;
 x-ref list &lt;br /&gt;
    wz_Thermostat_Weather =&amp;gt; wz_vT_Sensor1 &lt;br /&gt;
    wz_vT_Sensor1 =&amp;gt; wz_Thermostat_Weather&lt;br /&gt;
&lt;br /&gt;
6. Gemessene Temperatur vom z.B. 1-Wire DS1820 dem virtuellen HM Sensor übergeben. Z.B. alle zwei Minuten per at:&lt;br /&gt;
 define at_wz_vT at +*00:02 { my $T=(ReadingsVal(&amp;quot;&amp;lt;DS1820B&amp;gt;&amp;quot;,&amp;quot;temperature&amp;quot;,20.0));; fhem &amp;quot;set wz_vT_Sensor1 virtTemp $T&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
Fertig.&lt;br /&gt;
&lt;br /&gt;
Sollte es Probleme geben, dass der RT des Öfteren wieder auf seine eigenen Messwerte wechselt, so sollte das Attr cyclicMsgOffset im Virtuellen Kanal beachtet werden. Näheres dazu ist ca. ab {{Link2Forum|Topic=45735|Message=572806|LinkText=hier}} im Forum zu finden.&lt;br /&gt;
&lt;br /&gt;
== Auflistung und Beschreibung der Readings ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-top: 2px solid #ffffff; border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#A6A6A6&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#0D0D0D&amp;quot;&amp;gt;Reading&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-top: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#A6A6A6&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#0D0D0D&amp;quot;&amp;gt;Beispielwert&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-top: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#A6A6A6&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#0D0D0D&amp;quot;&amp;gt;M&amp;amp;ouml;gliche Werte&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-top: 2px solid #ffffff; border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#A6A6A6&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#0D0D0D&amp;quot;&amp;gt;Beschreibung&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;CommandAccepted&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;yes&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;yes; no&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Letztes Komando akzeptiert (yes/ No)&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-boostPeriod&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;5 min&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;1 min bis x min&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Zeit wie lange das Ventil im Boost Modus sein soll.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-boostPos&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot; sdval=&amp;quot;0.8&amp;quot; sdnum=&amp;quot;1033;0;0%&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;80%&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot; sdnum=&amp;quot;1033;0;0%&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;0 bis 100&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Ventilposition die im Boost Modus gesetzt wird.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-btnNoBckLight&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;on; off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;35&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-dayTemp&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;21 C&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R-tempMin bis R-tempMax&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Solltemperatur die gesetzt werden soll, wenn das Sonnensymbol am Thermostat gedr&amp;amp;uuml;ckt wird.  Ebenso wird bei dieser Solltemperatur das Sonnensymbol im Display angezeigt.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-daylightSaveTime&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;on&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;on; off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-decalcTime&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot; sdval=&amp;quot;0.458333333333333&amp;quot; sdnum=&amp;quot;1033;1033;H:MM&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;11:00&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot; sdnum=&amp;quot;1033;1033;H:MM&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;00:00 bis 23:59&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Uhrzeit wann die Entkalkungsfahrt durchgef&amp;amp;uuml;hrt werden soll. &amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-decalcWeekday&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Sat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Mon; Tue; Wed; Thu; Fri; Sat; Sun&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Tag an dem die Entkalkungsfahrt durchgef&amp;amp;uuml;hrt werden soll.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-modePrioManu&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;all&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;all; ???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-modePrioParty&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;all&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;all; ???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;35&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-nightTemp&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;17 C&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R-tempMin bis R-tempMax&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Solltemperatur die gesetzt werden soll, wenn das Mondsymbol am Thermostat gedr&amp;amp;uuml;ckt wird.  Ebenso wird bei dieser Solltemperatur das Mondsymbol im Display angezeigt.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-noMinMax4Manu&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;on; off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-regAdaptive&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;on&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;on; off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-reguExtI&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot; sdval=&amp;quot;15&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;15&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-reguExtP&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot; sdval=&amp;quot;30&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;30&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-reguExtPstart&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot; sdval=&amp;quot;30&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;30&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-reguIntI&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot; sdval=&amp;quot;18&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;18&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-reguIntP&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot; sdval=&amp;quot;33&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;33&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-reguIntPstart&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot; sdval=&amp;quot;44&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;44&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-showInfo&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;time&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;date; time&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Zeige Datum oder Urzeit im Sysplay an&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-showWeekday&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;on; off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Zeige den Wochentag im Display an&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-sign&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;on; off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-tempMax&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;30.5 C&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Gr&amp;amp;ouml;&amp;amp;szlig;te einstellbare Temperatur&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-tempMin&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;4.5 C&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Kleinste einstellbare Temperatur&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-tempOffset&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;0.0K&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;0.0 bis ???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-valveErrPos&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot; sdval=&amp;quot;0.15&amp;quot; sdnum=&amp;quot;1033;0;0%&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;15%&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot; sdnum=&amp;quot;1033;0;0%&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-valveMaxPos&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot; sdval=&amp;quot;1&amp;quot; sdnum=&amp;quot;1033;0;0%&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;100%&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot; sdnum=&amp;quot;1033;0;0%&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;0 bis 100&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Maximale Ventielstellung die das Thermostat fahren darf.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-valveOffsetRt&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot; sdval=&amp;quot;0&amp;quot; sdnum=&amp;quot;1033;0;0%&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;0%&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot; sdnum=&amp;quot;1033;0;0%&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;0 Bis 100&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;52&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-winOpnBoost&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;on; off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Startet nach dem Fensterschlie&amp;amp;szlig;en die Boostfunktion um unabh&amp;amp;auml;ngig von der Raumtemperatur den Heizk&amp;amp;ouml;rper eine Zeit x aufzuheizen. (Siehe R-boostPeriod &amp;amp;amp; R-boostPos)&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-winOpnDetFall&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;1.4 K&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;0.5 bis 2.5&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Temperatur Sturz zwischen zwei Messungen, die als Fenster offen erkannt werden.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;35&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-winOpnMode&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;on; off&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Thermostat soll anhand eines schnellen Temperaturabfalls erkennen, dass das Fenster ge&amp;amp;ouml;ffnet ist.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-winOpnPeriod&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;15 min&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;1 bis ??? Minuten&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Dauer bis das Signal Fenster offen wieder entfernt wird.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R-winOpnTemp&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;12 C&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R-tempMin bis R-tempMax&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Temperatur die eingestellt werden soll, wenn das Fenster als offen erkannt wird.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;104&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;07:00 20.0 22:30 22.0 24:00 20.0&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;incomplete = Daten werden mit Thermostat abgeglichen&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Zeit/Temperaturangaben siehe Beispiel&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Tages Solltemperaturen abh&amp;amp;auml;ngig von der Uhrzeit. &amp;lt;br&amp;gt;- Der Beginn um 00:00 ist nicht einzutragen. &amp;lt;br&amp;gt;- Es sind immer Paare einzutragen (Uhrzeit Temperatur). &amp;lt;br&amp;gt;- Der letzte Eintrag muss an jeden Tag 24:00 sein.&amp;lt;br&amp;gt;- Uhrzeiten sind auf halbe Stunden beschr&amp;amp;auml;nkt. Eintr&amp;amp;auml;ge 08:00 und 08:30 sind g&amp;amp;uuml;ltig. 08:20 ist ung&amp;amp;uuml;ltig.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R_1_tempListSun&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;07:00 20.0 22:00 22.0 24:00 20.0&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R_2_tempListMon&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;04:30 20.0 07:00 22.0 12:45 20.0 22:00 22.0 24:00 20.0&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R_3_tempListTue&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;04:30 20.0 07:00 22.0 12:45 20.0 22:00 22.0 24:00 20.0&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R_4_tempListWed&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;04:30 20.0 07:00 22.0 12:45 20.0 22:00 22.0 24:00 20.0&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R_5_tempListThu&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;04:30 20.0 07:00 22.0 12:45 20.0 22:00 22.0 24:00 20.0&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R_6_tempListFri&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;04:30 20.0 07:00 22.0 12:45 20.0 22:00 22.0 24:00 20.0&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Siehe R_0_tempListSat&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;35&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;R_tempList_State&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;verified&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;incomplete = Daten werden mit Thermostat abgeglichen&amp;lt;br&amp;gt;verified = Daten sind mit Thermostat abgeglichen&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Aktualisierungsstatus der Wochen Temperatur Einstellungen&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;ValvePosition&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot; sdval=&amp;quot;36&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;36&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;0 bis 100&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;aktuelle Ventielstellung&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;35&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;boostTime&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;-&amp;lt;br&amp;gt;1 min bis n min&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Zeit wie lange der Boostmodus noch aktiv ist.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;121&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;controlMode&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;auto&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;auto = Thermostat wird nach der TempListe gesteuert&amp;lt;br&amp;gt;manual = Die eingestellte Temperatur am Thermostat wird nicht ver&amp;amp;auml;ndert, au&amp;amp;szlig;er bei Verwendung von WinOpn; &amp;lt;br&amp;gt;boost = Thermostat wird in den Boost Modus gesetzt. Siehe R-boostPeriod/Pos&amp;lt;br&amp;gt;day = Thermostat wird auf die eingestellte Tag Temperatur gesetzt (R-dayTemp).&amp;lt;br&amp;gt;night = Thermostat wird auf die eingestellte Nacht Temperatur gesetzt (R-nightTemp).&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Setzt das Thermostat in ein bestimten Modus&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;desired-temp&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot; sdval=&amp;quot;22&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;22&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;N/A&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Solltemperatur&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;measured-temp&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot; sdval=&amp;quot;23.2&amp;quot; sdnum=&amp;quot;1033;&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;23.2&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;N/A&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Isttemperatur&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;partyEnd&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Ende Datum/Zeit indem die Party Temperatur (partyTemp) gesetzt sein soll.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;partyStart&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Start Datum/Zeit indem die Party Temperatur (partyTemp) gesetzt sein soll.&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;partyTemp&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;-; 20.0&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Party Temperatur&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;21&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;recentStateType&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;ack&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-right: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#333333&amp;quot; sdnum=&amp;quot;1033;1033;M/D/YYYY H:MM&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;???&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-bottom: 2px solid #ffffff; border-left: 2px solid #ffffff&amp;quot; height=&amp;quot;23&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;state&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-bottom: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;T: 23.2 desired: 22.0 valve: 36&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-bottom: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td style=&amp;quot;border-bottom: 2px solid #ffffff&amp;quot; align=&amp;quot;left&amp;quot; valign=middle bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=2 color=&amp;quot;#CCCCCC&amp;quot;&amp;gt;Aktuelle Statusinformation&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
=== TempList: Bad format ... ===&lt;br /&gt;
Wenn Sie beim Setzen einer Temperaturliste nach dem o.a. Schema (&amp;quot;SetTempList...&amp;quot;) die Meldung&lt;br /&gt;
&lt;br /&gt;
 Bad format, use HH:MM TEMP ......&lt;br /&gt;
&lt;br /&gt;
erhalten, sollten Sie zunächst ein [[update]] von FHEM durchführen.&lt;br /&gt;
&lt;br /&gt;
=== Der Thermostat heizt über die Solltemperatur hinaus ===&lt;br /&gt;
In der Regel ist das ein ganz normales Verhalten, wenn der Thermostat nicht mit einem externen Temperaturfühler oder einem Wandthermostat gepeert ist. In dem Fall muss sich der Thermostat auf den eingebauten Temperatursensor verlassen, der sehr nahe an der Heizung selbst sitzt. Dadurch ist die gemessene Temperatur höher, als sie z.B. in der Raummitte wäre. Der Hersteller hat hier einen mehr oder weniger intelligenten Algorithmus eingebaut, um diesen Effekt zu kompensieren. Das sieht dann so aus, als ob der Thermostat nicht richtig regelt.&lt;br /&gt;
Dieses Verhalten kann man im Prinzip nur verhindern, indem man einen externen Temperatursensor oder einen Wandthermostat peert. Wie das geht ist hier beschrieben: [[#Channel (Kanal) 01 _Weather]]. Normalerweise regelt der Thermostat dann genau auf die Solltemperatur. &lt;br /&gt;
Ansonsten sollte man sich auch fragen, ob das gezeigte Verhalten vielleicht doch gut genug ist. Dazu platziert man irgendein Thermometer möglichst in der Mitte des Raums und beobachtet den Temperaturverlauf eine Weile. Wenn man dann noch eine Abweichung feststellt, kann es sinnvoll sein, diese mittels des Registers R-tempOffset zu beheben.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.eq-3.de/produkt-detail-aktoren/items/homematic-funk-heizkoerperthermostat.html Produktinfo]&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/downloads_produktkatalog/homematic/bda/HM-CC-RT-DN_UM_GE_eQ-3_web.pdf Bedienungsanleitung (PDF)]&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/downloads_produktkatalog/homematic/pdb/Funk-Heizkoerperthermostat_105155_Produktdatenblatt_V2.3.pdf Datenblatt (PDF)]&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/downloads/Ventilkompatibilitaeten.pdf Ventil-Kompatibilitätsliste (zur Zeit nicht verfügbar)]&lt;br /&gt;
* {{Link2Forum|Topic=14738|LinkText=Forenthema zum Thermostat}}&lt;br /&gt;
* {{Link2Forum|Topic=64446|LinkText=Reparatur einer durch mechanischen Stoß von außen abgerissenen Lichtschranke}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=EnOcean-FUD14-RS485-Bus-Universal-Dimmaktor&amp;diff=25688</id>
		<title>EnOcean-FUD14-RS485-Bus-Universal-Dimmaktor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=EnOcean-FUD14-RS485-Bus-Universal-Dimmaktor&amp;diff=25688"/>
		<updated>2018-03-04T20:46:23Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Definition/Anlernvorgang */  Reihenfolge der Durchzuführenden Schritte besser dargestellt. Da ein wichtiger Teil zu leicht überlesen wurde.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=platzHalter.png&lt;br /&gt;
|Bildbeschreibung=todo&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Empfänger, Aktor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=Eltako RS485-Bus&lt;br /&gt;
|HWChannels=1 Schaltkanal (unidirektional)&lt;br /&gt;
|HWVoltage=230V~&lt;br /&gt;
|HWPowerConsumption=Standby: 0,1W&lt;br /&gt;
|HWPoweredBy=12VDC&lt;br /&gt;
|HWSize=1 Teilungseinheit = 18mm breit, 58mm tief&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=Eltako&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-FUD14-RS485-Bus-Universal-Dimmaktor&#039;&#039;&#039; (FUD14) ist ein Dimmaktor &lt;br /&gt;
* für&lt;br /&gt;
** Montage auf Hutschiene&lt;br /&gt;
* angesteuert (bidirektional) über&lt;br /&gt;
** den Eltako RS485-Bus&lt;br /&gt;
* für&lt;br /&gt;
** 1 Kanal&lt;br /&gt;
* je nach Modell für 400W (FUD14/400W) respektive 800W (FUD14/800W, dann 2 TE breit, über Leistungszusätze erweiterbar)&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Dimmaktor (bidirektional)&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
siehe auch [[EnOcean-Eltako-RS485-Bus]]&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
Da der Aktor bidirektional arbeitet, kann bei auf Position 4 eingestelltem FAM14 und über FGW14 angebundenem FHEM ein Teil der erforderlichen Definition automatisch per autocreate erzeugt werden. Der Dimmer erscheint dann als&lt;br /&gt;
EnO_sensor_00000003 oder als EnO_00000003, wobei 00000003 hier exemplarisch für eine vom FAM14 vergebene Busadresse steht. Die Busadresse 3 findet man im PCT14 als &amp;quot;Adr. 3, V3.10...&amp;quot; wieder. Um zum Einen eine korrekte Statusausgabe des Dimmers zu erhalten und zum Anderen den Dimmer auch über FHEM schalten zu können,&lt;br /&gt;
müssen anschließend noch einige Attribute manuell gesetzt und schließlich noch FHEM als Schalter in den Dimmaktor eingelernt werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Schritte sind durchzuführen:&lt;br /&gt;
&lt;br /&gt;
* Die Attribute gwCmd, subType, subDef, und manufID anlegen (stateFormat und webCmd sind optional)&lt;br /&gt;
&lt;br /&gt;
 attr EnO_sensor_00000003 gwCmd dimming&lt;br /&gt;
 attr EnO_sensor_00000003 subType gateway&lt;br /&gt;
 attr EnO_sensor_00000003 subDef 01000003&lt;br /&gt;
 attr EnO_sensor_00000003 manufID 00D&lt;br /&gt;
 attr EnO_sensor_00000003 model Eltako_TF           # nur bei Aktoren mit Produktionswoche ab ca. Mitte 2016 ({{Link2Forum|Topic=57591|Message=490825}})&lt;br /&gt;
 attr EnO_sensor_00000003 webCmd on:off:dim&lt;br /&gt;
&lt;br /&gt;
* Am Aktor anlernen&lt;br /&gt;
** Oberer Funktions-Drehschalter: auf PCT einstellen (Rechtsanschlag)&lt;br /&gt;
** Mittlerer Funktions-Drehschalter: Stellung „LRN“&lt;br /&gt;
** FHEM Eingabefeld: „set &amp;lt;name&amp;gt; teach“, &amp;amp;lt;Enter&amp;amp;gt;&lt;br /&gt;
** #Beispiel: set EnO_sensor_00000003 teach&lt;br /&gt;
** Nach dem Einlernen beide Drehschalter in die ursprüngliche Position&lt;br /&gt;
&lt;br /&gt;
=== FHEM Config-Auszug ===&lt;br /&gt;
Ein exemplarischer Auszug aus der [[Konfiguration|fhem.cfg]], 00000003 ist hier die vom FAM14 vergeben ID für den FUD14, 01000003 ist eine frei gewählte, einzigartige ID, die von FHEM als Sende-ID für die Schaltkommandos verwendet wird:&lt;br /&gt;
 define EnO_sensor_00000003 EnOcean 00000003 # Wird durch autocreate von FHEM erzeugt&lt;br /&gt;
 attr EnO_sensor_00000003 gwCmd dimming&lt;br /&gt;
 attr EnO_sensor_00000003 subType gateway&lt;br /&gt;
 attr EnO_sensor_00000003 subDef 01000003&lt;br /&gt;
 attr EnO_sensor_00000003 manufID 00D&lt;br /&gt;
 attr EnO_sensor_00000003 model Eltako_TF           # nur bei Aktoren mit Produktionswoche ab ca. Mitte 2016 ({{Link2Forum|Topic=57591|Message=490825}})&lt;br /&gt;
 attr EnO_sensor_00000003 webCmd on:off:dim&lt;br /&gt;
&lt;br /&gt;
== Einsatzbeispiel ==&lt;br /&gt;
=== Fahrzeit mit höherer Auflösung senden ===&lt;br /&gt;
FHEM sendet die Fahrzeit im Standard mit einer Auflösung von 1 s. Bei neueren Eltako Jalousieaktoren (FSB14 ab Version 2.1) kann die Fahrzeit mit einer Auflösung von 1/10 s gesendet werden. Um die Fahrzeit mit höherer Genauigkeit innerhalb von FHEM zu berechnen und zu senden, ist das Attribut &amp;lt;code&amp;gt;settingAccuracy&amp;lt;/code&amp;gt; auf &amp;lt;code&amp;gt;high&amp;lt;/code&amp;gt; zu setzen. Die Eingabe der Fahrzeit oder der Position erfolgt weiterhin ohne Dezimalstellen!&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Datenblatt: [http://www.eltako.com/fileadmin/downloads/de/Datenblatt/BR14_datenblatt_FUD14.pdf PDF]&lt;br /&gt;
* Anleitung: [http://www.eltako.com/fileadmin/downloads/de/_bedienung/FUD14_30014005-2_dt.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Dimmer]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Serial/Netzwerk-RS485-Adapter&amp;diff=25357</id>
		<title>Serial/Netzwerk-RS485-Adapter</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Serial/Netzwerk-RS485-Adapter&amp;diff=25357"/>
		<updated>2018-02-17T19:57:01Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Bekannte Probleme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorbemerkungen ==&lt;br /&gt;
Alternativ zum [[HomeMatic_Wired_RS485_LAN_Gateway]], können einfache Serial/Netzwerk-RS485-Adaptern für die Kommunikation von FHEM zu HomeMatic-Wired-Geräten eingesetzt werden.&lt;br /&gt;
In diesem Artikel werden sowohl RS232-RS485-Adapter, USB-RS485-Adapter als auch Netzwerk-RS485-Adapter als Serial-RS485-Adaptern bezeichnet, denn in jedem Fall wird ein serieller Datenstrom an den RS485 Transceiver weitergeleitet.&lt;br /&gt;
&lt;br /&gt;
Da diese hier beschriebenen Interfaces keine &amp;quot;Intelligenz&amp;quot; besitzen, also die Daten lediglich auf den RS485-Bus umsetzen, wird zur Ansteuerung noch der &#039;&#039;hm485d.pl&#039;&#039;-Daemon benötigt. Dieser Prozess setzt die RAW-Befehle in das HomeMatic-Wired-Protokoll um. Der hm485d kann dabei transparent im Hintergrund arbeiten.&lt;br /&gt;
&lt;br /&gt;
=== Liste der aktuell getesteten Adapter / Schnittstellen (bitte ggf. ergänzen) ===&lt;br /&gt;
* DIGITUS DA-70157: USB-Serial Adapter mit RS485 Schnittstelle. Dieser Adapter wird derzeit wahrscheinlich am häufigsten und erfolgreichsten zusammen mit FHEM eingesetzt. In ein paar Fällen gab es jedoch Probleme mit unvollständigen Lötstellen oder anderen Fabrikationsfehlern. Dies kann sich darin äußern, dass FHEM überhaupt keine Kommunikation aufbauen kann oder entweder nur senden oder nur empfangen kann. Bevor man dann lange herumprobiert ist es in den meisten Fällen besser, sich einen zweiten Adapter zuzulegen. [http://www.reichelt.de/USB-Konverter/DIGITUS-DA-70157/3//index.html?ARTICLE=122187] &lt;br /&gt;
* Eigenbau basierend auf FT232RL und Max485 {{Link2Forum|Topic=64947|Message=562328}}&lt;br /&gt;
* Wiznet - WIZ108SR Compact RS422/RS485-to-Ethernet module [http://www.wiznet.io/product-item/wiz108sr/]&lt;br /&gt;
* Wiznet - {{Link2Forum|Topic=14096|LinkText=WIZ108SR im Hutschienengehäuse}}&lt;br /&gt;
* USB - RS485 Konverter von Sertronics [https://www.sertronics-shop.de/Raspberry-PiCo/Raspberry-Pi/KabelAdapter/USB-KabelAdapter/USB-RS485-Konverter/] Dieser Adapter wurde zwar erfolgreich getestet, ist aber trotzdem nicht zu empfehlen. Der Adapter beruht auf einem CH340 oder CH341 Chip und funktioniert im Gegensatz zur Beschreibung auf der Herstellerseite mit Raspbian nur nach der Installation eines neuen Treibers. Außerdem fehlen den CH34x-Chips die Seriennummer, was Probleme bereiten kann, wenn man mehrere serielle Schnittstellen hat (das schließt auch verschiedene Billig-Arduino-Clones ein). Des Weiteren gibt es keinen GND-Anschluss, weswegen der Busabschlusswiderstand nicht korrekt angeschlossen werden kann. Details dazu wurden hier diskutiert: {{Link2Forum|Topic=68681|Message=601863}}&lt;br /&gt;
&lt;br /&gt;
== Einbindung in FHEM ==&lt;br /&gt;
Zunächst muss man das Modul HM485_LAN installiert haben.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php?topic=19312.0]&lt;br /&gt;
&lt;br /&gt;
Zum Einbinden des Gateways braucht man ein HM485_LAN-Device mit folgender Definition:&lt;br /&gt;
&lt;br /&gt;
 define hm485 HM485_LAN localhost:2000&lt;br /&gt;
 attr hm485 hmwId 00000001&lt;br /&gt;
 attr hm485 HM485d_device &amp;amp;lt;SerialDevice&amp;amp;gt;&lt;br /&gt;
 attr hm485 HM485d_bind 1&lt;br /&gt;
 &lt;br /&gt;
Der Name &amp;quot;hm485&amp;quot; kann frei vergeben werden.&lt;br /&gt;
Bei &amp;amp;lt;SerialDevice&amp;amp;gt; muss der Gerätename angegeben werden unter dem das serielle Device anzusprechen ist.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele:&#039;&#039;&#039;&lt;br /&gt;
 # Serieller USB-RS485-Adapter&lt;br /&gt;
 attr hm485 HM485d_device /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
 # Netzwerk-RS485-Adapter&lt;br /&gt;
 attr hm485 HM485d_device 192.168.1.15:5000&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Gerätename nach einstecken des USB Dongels von DIGITUS DA-70157 unter Linux finden:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis /var/log/ in der Datei &amp;quot;messages&amp;quot; und &amp;quot;syslog&amp;quot; wird nach anstecken des Dongels folgender Eintrag geschrieben&lt;br /&gt;
 Feb 16 20:16:09 raspberrypi kernel: [72956.525494] usb 1-1.3: Detected FT232RL&lt;br /&gt;
 Feb 16 20:16:09 raspberrypi kernel: [72956.526514] usb 1-1.3: FTDI USB Serial Device converter now attached to ttyUSB0 &lt;br /&gt;
In diesem Fall ist der Name &amp;quot;ttyUSB0&amp;quot; der Gerätename und muss für RS485 Adapter mit dem Pfad zusammengebaut werden: /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HM485d_bind 1 sorgt dafür, dass der hm485d beim FHEM-Start automatisch mit gestartet wird und durch FHEM auch gesteuert, also auch beendet werden kann.&lt;br /&gt;
&lt;br /&gt;
HM485_LAN kennt weitere Attribute, die zur Kontrolle des hm485d dienen.&lt;br /&gt;
Wichtig ist vor allem, für HM485_LAN eine Adresse festzulegen. Die HMW-ID muss eine 8-stellige Hexadezimalzahl sein.&lt;br /&gt;
Theoretisch könnten die bis zu 256 HMW-LAN-GW angelegt werden. Diese Annahme ist aktuell aber nur Theorie und noch nicht getestet und ggf. mit einigen Problemen verbunden. Die HMW-ID&#039;s für die HMW-Interfaces könnten dafür im Bereich von 00000001 - 000000FF gewählt werden.&lt;br /&gt;
Da in den HMW-Geräten die HMW-ID der Zentrale aber mit 00000001 vordefiniert ist, sollte hier aktuell nur diese ID verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Zu beachten ist auch, dass der hm485d &#039;&#039;&#039;gleichzeitig&#039;&#039;&#039; nur eine Netzwerkverbindung erlaubt. Somit ist ein Gateway auch nur mit einer Zentrale / FHEM-Instanz zur gleichen Zeit nutzbar.&lt;br /&gt;
&lt;br /&gt;
=== HM485_LAN Attribute ===&lt;br /&gt;
* &#039;&#039;&#039;hmwId&#039;&#039;&#039; Hier muss die HMW-ID angegeben werden. Standardmäßig wird die 00000001 benutzt.&lt;br /&gt;
* &#039;&#039;&#039;do_not_notify&#039;&#039;&#039; FileLog/notify/inform Benachrichtigung für das Gerät ist abgeschaltet.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_bind&#039;&#039;&#039; Startet den hm485d automatisch beim Start von FHEM und ermöglicht FHEM zudem die Prozesskontrolle&lt;br /&gt;
* &#039;&#039;&#039;HM485d_startTimeout&#039;&#039;&#039; Manchmal, z.B. auf langsameren Geräten wie der FritzBox oder dem Raspberry Pi, ist es erforderlich den hm485d verzögert zu starten. Hier kann die Verzögerung in Sekunden angegeben werden.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_device&#039;&#039;&#039; Das serielle Gerät zum Interface (siehe Beispiel oben).&lt;br /&gt;
* &#039;&#039;&#039;HM485d_serialNumber&#039;&#039;&#039; Die Seriennummer die der hm485d an die Zentrale (FHEM) melden soll.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_logfile&#039;&#039;&#039; Der hm485d kann ein eigenes Logfile schreiben. Hier kann dafür ein Dateiname angegeben werden.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_detatch&#039;&#039;&#039; Wenn der hm485d mit FHEM zusammen gestartet wird (siehe HM485d_bind) so kann der Prozess hier von FHEM entkoppelt werden. Der Prozess wird dann auch nicht zusammen mit FHEM beendet.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_logVerbose&#039;&#039;&#039; Der Loglevel vom hm485d.&lt;br /&gt;
&lt;br /&gt;
Die folgenden drei Attribute können verwendet werden, wenn der hm485d über einen einfachen UART ohne Flusskontrolle z.B. über den UART des Raspberry Pi, an einen RS485 Transceiver angeschlossen wird. Dafür müssen ggf. GPIO-Pins zur Steuerung des RS485 Transceivers (Senden/Empfangen) definiert werden:&lt;br /&gt;
* &#039;&#039;&#039;HM485d_gpioTxenInit&#039;&#039;&#039; Shell-Befehl zum Initialisieren des benutzten GPIO-Pins für die Sendekontrolle&lt;br /&gt;
* &#039;&#039;&#039;HM485d_gpioTxenCmd0&#039;&#039;&#039; Shell-Befehl um den Sende-GPIO-Pin zurück zu setzen&lt;br /&gt;
* &#039;&#039;&#039;HM485d_gpioTxenCmd1&#039;&#039;&#039; Shell-Befehl um den Sende-GPIO-Pin zu setzen&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis&#039;&#039;&#039;&lt;br /&gt;
Da auch der hm485d sich noch in Entwicklung befindet, ist es möglich dass es in einigen Fällen noch zu Fehlverhalten kommen kann.&lt;br /&gt;
&lt;br /&gt;
== Pairen von Geräten ==&lt;br /&gt;
Jedes HM Geräte muss vor Verwendung mit der Zentrale, hier also FHEM, gepairt werden. Anders als bei den HomeMatic-Funk-Geräten erfolgt das Pairing bei HMW automatisch, sobald ein Gerät das erste Mal eine Nachricht über den Bus versendet. Alternativ kann das Pairing auch durch das Absetzen eines Discovery-Befehls ausgelöst werden.&lt;br /&gt;
Beim Pairen werden die Geräteadressen FHEM bekannt gemacht. Die Adresse der HMW Geräte ist nicht frei wählbar, sondern fest in den Geräten eingestellt. Alle HMW-Geräte haben standardmäßig die Adresse 00000001 als Zentralen-Adresse gespeichert.&lt;br /&gt;
&lt;br /&gt;
=== Discovery ===&lt;br /&gt;
Mit dem discovery-Befehl wird der gesamte RS485-Bus nach unbekannten HMW Geräten durchsucht.&lt;br /&gt;
Dieser Befehl funktioniert allerdings NICHT mit dem Original eq3-Lan-Gateway!&lt;br /&gt;
&lt;br /&gt;
 set HM485_LAN discovery start&lt;br /&gt;
&lt;br /&gt;
Nachdem neue Geräte gefunden wurden, werden diese automatisch mit FHEM gepairt.&lt;br /&gt;
&lt;br /&gt;
== RAW-Befehle ==&lt;br /&gt;
Über den HM485_LAN können so genannte RAW-Befehle an die am Bus angeschlossenen Geräte gesendet werden. Mit diesen RAW-Befehlen können z.B. Funktionen ausgelöst werden, die aktuell für ein Gerät noch nicht in FHEM implementiert sind.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 DDDDDD&lt;br /&gt;
&lt;br /&gt;
* 01234567 - entspricht hier der Adresse des Gerätes an das der Befehl gesendet werden soll&lt;br /&gt;
* 98 - das so genannte Steuerzeichen (Siehe HMW-Protokoll-Dokumentation)&lt;br /&gt;
* 00000001 - die HMW-ID der Zentrale (FHEM)&lt;br /&gt;
* DDDDDD - das sind die zu sendenden Daten.&lt;br /&gt;
&lt;br /&gt;
Da zum Senden von RAW-Befehlen Kenntnisse über das HMW-Protokoll vorhanden sein sollten, lohnt sich ein Blick in die [http://forum.fhem.de/index.php?action=dlattach;topic=10027.0;attach=2441 HMW-Protokoll-Doku]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Funktionale Beispiele:&#039;&#039;&#039;&lt;br /&gt;
 # Rollladenaktor öffnen&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 7802C8&lt;br /&gt;
 &lt;br /&gt;
 # Rollladenaktor stoppen&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 7802C9&lt;br /&gt;
 &lt;br /&gt;
 # Rollladenaktor schließen&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 780200&lt;br /&gt;
 &lt;br /&gt;
 # erster Ausgang (Relais) eines HMW-IO-12-Sw14-DR ein&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 730003FF&lt;br /&gt;
 &lt;br /&gt;
 # erster Ausgang (Relais) eines HMW-IO-12-Sw14-DR aus&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 73000000&lt;br /&gt;
&lt;br /&gt;
== Wechsel von Serial/Netzwerk-RS485-Adaptern zu HMW-LAN-GW ==&lt;br /&gt;
Der Wechsel zwischen den verschiedenen Interface-Typen geht einfach und erfordert kein neues Pairing.&lt;br /&gt;
Ggf. müssen einige interfacespezifische Attribute in der [[Konfiguration]] hinzugefügt bzw. gelöscht werden. &lt;br /&gt;
&lt;br /&gt;
==Bekannte Probleme==&lt;br /&gt;
===Disconnects mit WIZ108SR===&lt;br /&gt;
Bei Verwendung eines auf WIZ108SR (oder ähnlich) basierenden Adapters kann es zu regelmäßigen disconnects kommen. Im Log erscheint dann in etwa Folgendes:&lt;br /&gt;
 2015.09.13 20:17:11.809 2: HM485d: DISCONNECTED&lt;br /&gt;
 2015.09.13 20:17:11.812 2: HM485d: SERIAL connected to device 192.168.nnn.nnn:pppp&lt;br /&gt;
 2015.09.13 20:17:11.813 2: HM485d: RECONNECTED&lt;br /&gt;
Das Problem lässt sich in der Regel lösen, indem man in der Konfiguration des WIZ108SR den &amp;quot;Inactivity Timer&amp;quot; auf 0 setzt. Siehe auch diesen {{Link2Forum|Topic=41054|LinkText=Thread im Forum}}.&lt;br /&gt;
&lt;br /&gt;
===Disconnects mit DIGITUS DA-70157===&lt;br /&gt;
Sollte nach der Erstkonfiguration der Status Disconnected erscheinen, so hilft evtl. ein einfacher FHEM neustart um den Status opened zu erhalten.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.reichelt.de/USB-Konverter/DIGITUS-DA-70157/3//index.html?ARTICLE=122187 DIGITUS DA-70157: USB-Serial Adapter]&lt;br /&gt;
* [http://www.wiznet.io/product-item/wiz108sr/ Wiznet - WIZ108SR Compact RS422/RS485-to-Ethernet module]&lt;br /&gt;
* {{Link2Forum|Topic=14096|LinkText=Wiznet - WIZ108SR im Hutschienengehäuse}}&lt;br /&gt;
* [http://forum.fhem.de/index.php?action=dlattach;topic=10027.0;attach=2441 HMW-Protokoll-Doku]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Serial/Netzwerk-RS485-Adapter&amp;diff=25356</id>
		<title>Serial/Netzwerk-RS485-Adapter</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Serial/Netzwerk-RS485-Adapter&amp;diff=25356"/>
		<updated>2018-02-17T19:42:26Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Einbindung in FHEM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorbemerkungen ==&lt;br /&gt;
Alternativ zum [[HomeMatic_Wired_RS485_LAN_Gateway]], können einfache Serial/Netzwerk-RS485-Adaptern für die Kommunikation von FHEM zu HomeMatic-Wired-Geräten eingesetzt werden.&lt;br /&gt;
In diesem Artikel werden sowohl RS232-RS485-Adapter, USB-RS485-Adapter als auch Netzwerk-RS485-Adapter als Serial-RS485-Adaptern bezeichnet, denn in jedem Fall wird ein serieller Datenstrom an den RS485 Transceiver weitergeleitet.&lt;br /&gt;
&lt;br /&gt;
Da diese hier beschriebenen Interfaces keine &amp;quot;Intelligenz&amp;quot; besitzen, also die Daten lediglich auf den RS485-Bus umsetzen, wird zur Ansteuerung noch der &#039;&#039;hm485d.pl&#039;&#039;-Daemon benötigt. Dieser Prozess setzt die RAW-Befehle in das HomeMatic-Wired-Protokoll um. Der hm485d kann dabei transparent im Hintergrund arbeiten.&lt;br /&gt;
&lt;br /&gt;
=== Liste der aktuell getesteten Adapter / Schnittstellen (bitte ggf. ergänzen) ===&lt;br /&gt;
* DIGITUS DA-70157: USB-Serial Adapter mit RS485 Schnittstelle. Dieser Adapter wird derzeit wahrscheinlich am häufigsten und erfolgreichsten zusammen mit FHEM eingesetzt. In ein paar Fällen gab es jedoch Probleme mit unvollständigen Lötstellen oder anderen Fabrikationsfehlern. Dies kann sich darin äußern, dass FHEM überhaupt keine Kommunikation aufbauen kann oder entweder nur senden oder nur empfangen kann. Bevor man dann lange herumprobiert ist es in den meisten Fällen besser, sich einen zweiten Adapter zuzulegen. [http://www.reichelt.de/USB-Konverter/DIGITUS-DA-70157/3//index.html?ARTICLE=122187] &lt;br /&gt;
* Eigenbau basierend auf FT232RL und Max485 {{Link2Forum|Topic=64947|Message=562328}}&lt;br /&gt;
* Wiznet - WIZ108SR Compact RS422/RS485-to-Ethernet module [http://www.wiznet.io/product-item/wiz108sr/]&lt;br /&gt;
* Wiznet - {{Link2Forum|Topic=14096|LinkText=WIZ108SR im Hutschienengehäuse}}&lt;br /&gt;
* USB - RS485 Konverter von Sertronics [https://www.sertronics-shop.de/Raspberry-PiCo/Raspberry-Pi/KabelAdapter/USB-KabelAdapter/USB-RS485-Konverter/] Dieser Adapter wurde zwar erfolgreich getestet, ist aber trotzdem nicht zu empfehlen. Der Adapter beruht auf einem CH340 oder CH341 Chip und funktioniert im Gegensatz zur Beschreibung auf der Herstellerseite mit Raspbian nur nach der Installation eines neuen Treibers. Außerdem fehlen den CH34x-Chips die Seriennummer, was Probleme bereiten kann, wenn man mehrere serielle Schnittstellen hat (das schließt auch verschiedene Billig-Arduino-Clones ein). Des Weiteren gibt es keinen GND-Anschluss, weswegen der Busabschlusswiderstand nicht korrekt angeschlossen werden kann. Details dazu wurden hier diskutiert: {{Link2Forum|Topic=68681|Message=601863}}&lt;br /&gt;
&lt;br /&gt;
== Einbindung in FHEM ==&lt;br /&gt;
Zunächst muss man das Modul HM485_LAN installiert haben.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php?topic=19312.0]&lt;br /&gt;
&lt;br /&gt;
Zum Einbinden des Gateways braucht man ein HM485_LAN-Device mit folgender Definition:&lt;br /&gt;
&lt;br /&gt;
 define hm485 HM485_LAN localhost:2000&lt;br /&gt;
 attr hm485 hmwId 00000001&lt;br /&gt;
 attr hm485 HM485d_device &amp;amp;lt;SerialDevice&amp;amp;gt;&lt;br /&gt;
 attr hm485 HM485d_bind 1&lt;br /&gt;
 &lt;br /&gt;
Der Name &amp;quot;hm485&amp;quot; kann frei vergeben werden.&lt;br /&gt;
Bei &amp;amp;lt;SerialDevice&amp;amp;gt; muss der Gerätename angegeben werden unter dem das serielle Device anzusprechen ist.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele:&#039;&#039;&#039;&lt;br /&gt;
 # Serieller USB-RS485-Adapter&lt;br /&gt;
 attr hm485 HM485d_device /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
 # Netzwerk-RS485-Adapter&lt;br /&gt;
 attr hm485 HM485d_device 192.168.1.15:5000&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Gerätename nach einstecken des USB Dongels von DIGITUS DA-70157 unter Linux finden:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis /var/log/ in der Datei &amp;quot;messages&amp;quot; und &amp;quot;syslog&amp;quot; wird nach anstecken des Dongels folgender Eintrag geschrieben&lt;br /&gt;
 Feb 16 20:16:09 raspberrypi kernel: [72956.525494] usb 1-1.3: Detected FT232RL&lt;br /&gt;
 Feb 16 20:16:09 raspberrypi kernel: [72956.526514] usb 1-1.3: FTDI USB Serial Device converter now attached to ttyUSB0 &lt;br /&gt;
In diesem Fall ist der Name &amp;quot;ttyUSB0&amp;quot; der Gerätename und muss für RS485 Adapter mit dem Pfad zusammengebaut werden: /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HM485d_bind 1 sorgt dafür, dass der hm485d beim FHEM-Start automatisch mit gestartet wird und durch FHEM auch gesteuert, also auch beendet werden kann.&lt;br /&gt;
&lt;br /&gt;
HM485_LAN kennt weitere Attribute, die zur Kontrolle des hm485d dienen.&lt;br /&gt;
Wichtig ist vor allem, für HM485_LAN eine Adresse festzulegen. Die HMW-ID muss eine 8-stellige Hexadezimalzahl sein.&lt;br /&gt;
Theoretisch könnten die bis zu 256 HMW-LAN-GW angelegt werden. Diese Annahme ist aktuell aber nur Theorie und noch nicht getestet und ggf. mit einigen Problemen verbunden. Die HMW-ID&#039;s für die HMW-Interfaces könnten dafür im Bereich von 00000001 - 000000FF gewählt werden.&lt;br /&gt;
Da in den HMW-Geräten die HMW-ID der Zentrale aber mit 00000001 vordefiniert ist, sollte hier aktuell nur diese ID verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Zu beachten ist auch, dass der hm485d &#039;&#039;&#039;gleichzeitig&#039;&#039;&#039; nur eine Netzwerkverbindung erlaubt. Somit ist ein Gateway auch nur mit einer Zentrale / FHEM-Instanz zur gleichen Zeit nutzbar.&lt;br /&gt;
&lt;br /&gt;
=== HM485_LAN Attribute ===&lt;br /&gt;
* &#039;&#039;&#039;hmwId&#039;&#039;&#039; Hier muss die HMW-ID angegeben werden. Standardmäßig wird die 00000001 benutzt.&lt;br /&gt;
* &#039;&#039;&#039;do_not_notify&#039;&#039;&#039; FileLog/notify/inform Benachrichtigung für das Gerät ist abgeschaltet.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_bind&#039;&#039;&#039; Startet den hm485d automatisch beim Start von FHEM und ermöglicht FHEM zudem die Prozesskontrolle&lt;br /&gt;
* &#039;&#039;&#039;HM485d_startTimeout&#039;&#039;&#039; Manchmal, z.B. auf langsameren Geräten wie der FritzBox oder dem Raspberry Pi, ist es erforderlich den hm485d verzögert zu starten. Hier kann die Verzögerung in Sekunden angegeben werden.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_device&#039;&#039;&#039; Das serielle Gerät zum Interface (siehe Beispiel oben).&lt;br /&gt;
* &#039;&#039;&#039;HM485d_serialNumber&#039;&#039;&#039; Die Seriennummer die der hm485d an die Zentrale (FHEM) melden soll.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_logfile&#039;&#039;&#039; Der hm485d kann ein eigenes Logfile schreiben. Hier kann dafür ein Dateiname angegeben werden.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_detatch&#039;&#039;&#039; Wenn der hm485d mit FHEM zusammen gestartet wird (siehe HM485d_bind) so kann der Prozess hier von FHEM entkoppelt werden. Der Prozess wird dann auch nicht zusammen mit FHEM beendet.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_logVerbose&#039;&#039;&#039; Der Loglevel vom hm485d.&lt;br /&gt;
&lt;br /&gt;
Die folgenden drei Attribute können verwendet werden, wenn der hm485d über einen einfachen UART ohne Flusskontrolle z.B. über den UART des Raspberry Pi, an einen RS485 Transceiver angeschlossen wird. Dafür müssen ggf. GPIO-Pins zur Steuerung des RS485 Transceivers (Senden/Empfangen) definiert werden:&lt;br /&gt;
* &#039;&#039;&#039;HM485d_gpioTxenInit&#039;&#039;&#039; Shell-Befehl zum Initialisieren des benutzten GPIO-Pins für die Sendekontrolle&lt;br /&gt;
* &#039;&#039;&#039;HM485d_gpioTxenCmd0&#039;&#039;&#039; Shell-Befehl um den Sende-GPIO-Pin zurück zu setzen&lt;br /&gt;
* &#039;&#039;&#039;HM485d_gpioTxenCmd1&#039;&#039;&#039; Shell-Befehl um den Sende-GPIO-Pin zu setzen&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis&#039;&#039;&#039;&lt;br /&gt;
Da auch der hm485d sich noch in Entwicklung befindet, ist es möglich dass es in einigen Fällen noch zu Fehlverhalten kommen kann.&lt;br /&gt;
&lt;br /&gt;
== Pairen von Geräten ==&lt;br /&gt;
Jedes HM Geräte muss vor Verwendung mit der Zentrale, hier also FHEM, gepairt werden. Anders als bei den HomeMatic-Funk-Geräten erfolgt das Pairing bei HMW automatisch, sobald ein Gerät das erste Mal eine Nachricht über den Bus versendet. Alternativ kann das Pairing auch durch das Absetzen eines Discovery-Befehls ausgelöst werden.&lt;br /&gt;
Beim Pairen werden die Geräteadressen FHEM bekannt gemacht. Die Adresse der HMW Geräte ist nicht frei wählbar, sondern fest in den Geräten eingestellt. Alle HMW-Geräte haben standardmäßig die Adresse 00000001 als Zentralen-Adresse gespeichert.&lt;br /&gt;
&lt;br /&gt;
=== Discovery ===&lt;br /&gt;
Mit dem discovery-Befehl wird der gesamte RS485-Bus nach unbekannten HMW Geräten durchsucht.&lt;br /&gt;
Dieser Befehl funktioniert allerdings NICHT mit dem Original eq3-Lan-Gateway!&lt;br /&gt;
&lt;br /&gt;
 set HM485_LAN discovery start&lt;br /&gt;
&lt;br /&gt;
Nachdem neue Geräte gefunden wurden, werden diese automatisch mit FHEM gepairt.&lt;br /&gt;
&lt;br /&gt;
== RAW-Befehle ==&lt;br /&gt;
Über den HM485_LAN können so genannte RAW-Befehle an die am Bus angeschlossenen Geräte gesendet werden. Mit diesen RAW-Befehlen können z.B. Funktionen ausgelöst werden, die aktuell für ein Gerät noch nicht in FHEM implementiert sind.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 DDDDDD&lt;br /&gt;
&lt;br /&gt;
* 01234567 - entspricht hier der Adresse des Gerätes an das der Befehl gesendet werden soll&lt;br /&gt;
* 98 - das so genannte Steuerzeichen (Siehe HMW-Protokoll-Dokumentation)&lt;br /&gt;
* 00000001 - die HMW-ID der Zentrale (FHEM)&lt;br /&gt;
* DDDDDD - das sind die zu sendenden Daten.&lt;br /&gt;
&lt;br /&gt;
Da zum Senden von RAW-Befehlen Kenntnisse über das HMW-Protokoll vorhanden sein sollten, lohnt sich ein Blick in die [http://forum.fhem.de/index.php?action=dlattach;topic=10027.0;attach=2441 HMW-Protokoll-Doku]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Funktionale Beispiele:&#039;&#039;&#039;&lt;br /&gt;
 # Rollladenaktor öffnen&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 7802C8&lt;br /&gt;
 &lt;br /&gt;
 # Rollladenaktor stoppen&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 7802C9&lt;br /&gt;
 &lt;br /&gt;
 # Rollladenaktor schließen&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 780200&lt;br /&gt;
 &lt;br /&gt;
 # erster Ausgang (Relais) eines HMW-IO-12-Sw14-DR ein&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 730003FF&lt;br /&gt;
 &lt;br /&gt;
 # erster Ausgang (Relais) eines HMW-IO-12-Sw14-DR aus&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 73000000&lt;br /&gt;
&lt;br /&gt;
== Wechsel von Serial/Netzwerk-RS485-Adaptern zu HMW-LAN-GW ==&lt;br /&gt;
Der Wechsel zwischen den verschiedenen Interface-Typen geht einfach und erfordert kein neues Pairing.&lt;br /&gt;
Ggf. müssen einige interfacespezifische Attribute in der [[Konfiguration]] hinzugefügt bzw. gelöscht werden. &lt;br /&gt;
&lt;br /&gt;
==Bekannte Probleme==&lt;br /&gt;
===Disconnects mit WIZ108SR===&lt;br /&gt;
Bei Verwendung eines auf WIZ108SR (oder ähnlich) basierenden Adapters kann es zu regelmäßigen disconnects kommen. Im Log erscheint dann in etwa Folgendes:&lt;br /&gt;
 2015.09.13 20:17:11.809 2: HM485d: DISCONNECTED&lt;br /&gt;
 2015.09.13 20:17:11.812 2: HM485d: SERIAL connected to device 192.168.nnn.nnn:pppp&lt;br /&gt;
 2015.09.13 20:17:11.813 2: HM485d: RECONNECTED&lt;br /&gt;
Das Problem lässt sich in der Regel lösen, indem man in der Konfiguration des WIZ108SR den &amp;quot;Inactivity Timer&amp;quot; auf 0 setzt. Siehe auch diesen {{Link2Forum|Topic=41054|LinkText=Thread im Forum}}.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.reichelt.de/USB-Konverter/DIGITUS-DA-70157/3//index.html?ARTICLE=122187 DIGITUS DA-70157: USB-Serial Adapter]&lt;br /&gt;
* [http://www.wiznet.io/product-item/wiz108sr/ Wiznet - WIZ108SR Compact RS422/RS485-to-Ethernet module]&lt;br /&gt;
* {{Link2Forum|Topic=14096|LinkText=Wiznet - WIZ108SR im Hutschienengehäuse}}&lt;br /&gt;
* [http://forum.fhem.de/index.php?action=dlattach;topic=10027.0;attach=2441 HMW-Protokoll-Doku]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Serial/Netzwerk-RS485-Adapter&amp;diff=25346</id>
		<title>Serial/Netzwerk-RS485-Adapter</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Serial/Netzwerk-RS485-Adapter&amp;diff=25346"/>
		<updated>2018-02-16T21:46:15Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: Nochmalige Anpassung Gerätename für DIGITUS DA-70157 unter Linux finden.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorbemerkungen ==&lt;br /&gt;
Alternativ zum [[HomeMatic_Wired_RS485_LAN_Gateway]], können einfache Serial/Netzwerk-RS485-Adaptern für die Kommunikation von FHEM zu HomeMatic-Wired-Geräten eingesetzt werden.&lt;br /&gt;
In diesem Artikel werden sowohl RS232-RS485-Adapter, USB-RS485-Adapter als auch Netzwerk-RS485-Adapter als Serial-RS485-Adaptern bezeichnet, denn in jedem Fall wird ein serieller Datenstrom an den RS485 Transceiver weitergeleitet.&lt;br /&gt;
&lt;br /&gt;
Da diese hier beschriebenen Interfaces keine &amp;quot;Intelligenz&amp;quot; besitzen, also die Daten lediglich auf den RS485-Bus umsetzen, wird zur Ansteuerung noch der &#039;&#039;hm485d.pl&#039;&#039;-Daemon benötigt. Dieser Prozess setzt die RAW-Befehle in das HomeMatic-Wired-Protokoll um. Der hm485d kann dabei transparent im Hintergrund arbeiten.&lt;br /&gt;
&lt;br /&gt;
=== Liste der aktuell getesteten Adapter / Schnittstellen (bitte ggf. ergänzen) ===&lt;br /&gt;
* DIGITUS DA-70157: USB-Serial Adapter mit RS485 Schnittstelle. Dieser Adapter wird derzeit wahrscheinlich am häufigsten und erfolgreichsten zusammen mit FHEM eingesetzt. In ein paar Fällen gab es jedoch Probleme mit unvollständigen Lötstellen oder anderen Fabrikationsfehlern. Dies kann sich darin äußern, dass FHEM überhaupt keine Kommunikation aufbauen kann oder entweder nur senden oder nur empfangen kann. Bevor man dann lange herumprobiert ist es in den meisten Fällen besser, sich einen zweiten Adapter zuzulegen. [http://www.reichelt.de/USB-Konverter/DIGITUS-DA-70157/3//index.html?ARTICLE=122187] &lt;br /&gt;
* Eigenbau basierend auf FT232RL und Max485 {{Link2Forum|Topic=64947|Message=562328}}&lt;br /&gt;
* Wiznet - WIZ108SR Compact RS422/RS485-to-Ethernet module [http://www.wiznet.io/product-item/wiz108sr/]&lt;br /&gt;
* Wiznet - {{Link2Forum|Topic=14096|LinkText=WIZ108SR im Hutschienengehäuse}}&lt;br /&gt;
* USB - RS485 Konverter von Sertronics [https://www.sertronics-shop.de/Raspberry-PiCo/Raspberry-Pi/KabelAdapter/USB-KabelAdapter/USB-RS485-Konverter/] Dieser Adapter wurde zwar erfolgreich getestet, ist aber trotzdem nicht zu empfehlen. Der Adapter beruht auf einem CH340 oder CH341 Chip und funktioniert im Gegensatz zur Beschreibung auf der Herstellerseite mit Raspbian nur nach der Installation eines neuen Treibers. Außerdem fehlen den CH34x-Chips die Seriennummer, was Probleme bereiten kann, wenn man mehrere serielle Schnittstellen hat (das schließt auch verschiedene Billig-Arduino-Clones ein). Des Weiteren gibt es keinen GND-Anschluss, weswegen der Busabschlusswiderstand nicht korrekt angeschlossen werden kann. Details dazu wurden hier diskutiert: {{Link2Forum|Topic=68681|Message=601863}}&lt;br /&gt;
&lt;br /&gt;
== Einbindung in FHEM ==&lt;br /&gt;
Zunächst muss man das Modul HM485_LAN installiert haben.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php?topic=19312.0]&lt;br /&gt;
&lt;br /&gt;
Zum Einbinden des Gateways braucht man ein HM485_LAN-Device mit folgender Definition:&lt;br /&gt;
&lt;br /&gt;
 define hm485 HM485_LAN localhost:2000&lt;br /&gt;
 attr HM485_LAN hmwId 00000001&lt;br /&gt;
 attr HM485_LAN HM485d_device &amp;amp;lt;SerialDevice&amp;amp;gt;&lt;br /&gt;
 attr HM485_LAN HM485d_bind 1&lt;br /&gt;
 &lt;br /&gt;
Der Name &amp;quot;HM485_LAN&amp;quot; kann frei vergeben werden.&lt;br /&gt;
Bei &amp;amp;lt;SerialDevice&amp;amp;gt; muss der Gerätename angegeben werden unter dem das serielle Device anzusprechen ist.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele:&#039;&#039;&#039;&lt;br /&gt;
 # Serieller USB-RS485-Adapter&lt;br /&gt;
 attr HM485_LAN HM485d_device /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
 # Netzwerk-RS485-Adapter&lt;br /&gt;
 attr HM485_LAN HM485d_device 192.168.1.15:5000&lt;br /&gt;
&lt;br /&gt;
 # Serieller DIGITUS DA-70157&lt;br /&gt;
 attr HM485_LAN HM485d_device FT232RL&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Gerätename nach einstecken des USB Dongels von DIGITUS DA-70157 unter Linux finden:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis /var/log/ in der Datei messages und syslog wird nach anstecken des Dongels folgender Eintrag geschrieben&lt;br /&gt;
 Feb 16 20:16:09 raspberrypi kernel: [72956.525494] usb 1-1.3: Detected FT232RL&lt;br /&gt;
 Feb 16 20:16:09 raspberrypi kernel: [72956.526514] usb 1-1.3: FTDI USB Serial Device converter now attached to ttyUSB0 &lt;br /&gt;
In diesem Fall ist der Name &amp;quot;FT232RL&amp;quot; der Gerätename&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HM485d_bind 1 sorgt dafür, dass der hm485d beim FHEM-Start automatisch mit gestartet wird und durch FHEM auch gesteuert, also auch beendet werden kann.&lt;br /&gt;
&lt;br /&gt;
HM485_LAN kennt weitere Attribute, die zur Kontrolle des hm485d dienen.&lt;br /&gt;
Wichtig ist vor allem, für HM485_LAN eine Adresse festzulegen. Die HMW-ID muss eine 8-stellige Hexadezimalzahl sein.&lt;br /&gt;
Theoretisch könnten die bis zu 256 HMW-LAN-GW angelegt werden. Diese Annahme ist aktuell aber nur Theorie und noch nicht getestet und ggf. mit einigen Problemen verbunden. Die HMW-ID&#039;s für die HMW-Interfaces könnten dafür im Bereich von 00000001 - 000000FF gewählt werden.&lt;br /&gt;
Da in den HMW-Geräten die HMW-ID der Zentrale aber mit 00000001 vordefiniert ist, sollte hier aktuell nur diese ID verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Zu beachten ist auch, dass der hm485d &#039;&#039;&#039;gleichzeitig&#039;&#039;&#039; nur eine Netzwerkverbindung erlaubt. Somit ist ein Gateway auch nur mit einer Zentrale / FHEM-Instanz zur gleichen Zeit nutzbar.&lt;br /&gt;
&lt;br /&gt;
=== HM485_LAN Attribute ===&lt;br /&gt;
* &#039;&#039;&#039;hmwId&#039;&#039;&#039; Hier muss die HMW-ID angegeben werden. Standardmäßig wird die 00000001 benutzt.&lt;br /&gt;
* &#039;&#039;&#039;do_not_notify&#039;&#039;&#039; FileLog/notify/inform Benachrichtigung für das Gerät ist abgeschaltet.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_bind&#039;&#039;&#039; Startet den hm485d automatisch beim Start von FHEM und ermöglicht FHEM zudem die Prozesskontrolle&lt;br /&gt;
* &#039;&#039;&#039;HM485d_startTimeout&#039;&#039;&#039; Manchmal, z.B. auf langsameren Geräten wie der FritzBox oder dem Raspberry Pi, ist es erforderlich den hm485d verzögert zu starten. Hier kann die Verzögerung in Sekunden angegeben werden.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_device&#039;&#039;&#039; Das serielle Gerät zum Interface (siehe Beispiel oben).&lt;br /&gt;
* &#039;&#039;&#039;HM485d_serialNumber&#039;&#039;&#039; Die Seriennummer die der hm485d an die Zentrale (FHEM) melden soll.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_logfile&#039;&#039;&#039; Der hm485d kann ein eigenes Logfile schreiben. Hier kann dafür ein Dateiname angegeben werden.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_detatch&#039;&#039;&#039; Wenn der hm485d mit FHEM zusammen gestartet wird (siehe HM485d_bind) so kann der Prozess hier von FHEM entkoppelt werden. Der Prozess wird dann auch nicht zusammen mit FHEM beendet.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_logVerbose&#039;&#039;&#039; Der Loglevel vom hm485d.&lt;br /&gt;
&lt;br /&gt;
Die folgenden drei Attribute können verwendet werden, wenn der hm485d über einen einfachen UART ohne Flusskontrolle z.B. über den UART des Raspberry Pi, an einen RS485 Transceiver angeschlossen wird. Dafür müssen ggf. GPIO-Pins zur Steuerung des RS485 Transceivers (Senden/Empfangen) definiert werden:&lt;br /&gt;
* &#039;&#039;&#039;HM485d_gpioTxenInit&#039;&#039;&#039; Shell-Befehl zum Initialisieren des benutzten GPIO-Pins für die Sendekontrolle&lt;br /&gt;
* &#039;&#039;&#039;HM485d_gpioTxenCmd0&#039;&#039;&#039; Shell-Befehl um den Sende-GPIO-Pin zurück zu setzen&lt;br /&gt;
* &#039;&#039;&#039;HM485d_gpioTxenCmd1&#039;&#039;&#039; Shell-Befehl um den Sende-GPIO-Pin zu setzen&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis&#039;&#039;&#039;&lt;br /&gt;
Da auch der hm485d sich noch in Entwicklung befindet, ist es möglich dass es in einigen Fällen noch zu Fehlverhalten kommen kann.&lt;br /&gt;
&lt;br /&gt;
== Pairen von Geräten ==&lt;br /&gt;
Jedes HM Geräte muss vor Verwendung mit der Zentrale, hier also FHEM, gepairt werden. Anders als bei den HomeMatic-Funk-Geräten erfolgt das Pairing bei HMW automatisch, sobald ein Gerät das erste Mal eine Nachricht über den Bus versendet. Alternativ kann das Pairing auch durch das Absetzen eines Discovery-Befehls ausgelöst werden.&lt;br /&gt;
Beim Pairen werden die Geräteadressen FHEM bekannt gemacht. Die Adresse der HMW Geräte ist nicht frei wählbar, sondern fest in den Geräten eingestellt. Alle HMW-Geräte haben standardmäßig die Adresse 00000001 als Zentralen-Adresse gespeichert.&lt;br /&gt;
&lt;br /&gt;
=== Discovery ===&lt;br /&gt;
Mit dem discovery-Befehl wird der gesamte RS485-Bus nach unbekannten HMW Geräten durchsucht.&lt;br /&gt;
Dieser Befehl funktioniert allerdings NICHT mit dem Original eq3-Lan-Gateway!&lt;br /&gt;
&lt;br /&gt;
 set HM485_LAN discovery start&lt;br /&gt;
&lt;br /&gt;
Nachdem neue Geräte gefunden wurden, werden diese automatisch mit FHEM gepairt.&lt;br /&gt;
&lt;br /&gt;
== RAW-Befehle ==&lt;br /&gt;
Über den HM485_LAN können so genannte RAW-Befehle an die am Bus angeschlossenen Geräte gesendet werden. Mit diesen RAW-Befehlen können z.B. Funktionen ausgelöst werden, die aktuell für ein Gerät noch nicht in FHEM implementiert sind.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 DDDDDD&lt;br /&gt;
&lt;br /&gt;
* 01234567 - entspricht hier der Adresse des Gerätes an das der Befehl gesendet werden soll&lt;br /&gt;
* 98 - das so genannte Steuerzeichen (Siehe HMW-Protokoll-Dokumentation)&lt;br /&gt;
* 00000001 - die HMW-ID der Zentrale (FHEM)&lt;br /&gt;
* DDDDDD - das sind die zu sendenden Daten.&lt;br /&gt;
&lt;br /&gt;
Da zum Senden von RAW-Befehlen Kenntnisse über das HMW-Protokoll vorhanden sein sollten, lohnt sich ein Blick in die [http://forum.fhem.de/index.php?action=dlattach;topic=10027.0;attach=2441 HMW-Protokoll-Doku]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Funktionale Beispiele:&#039;&#039;&#039;&lt;br /&gt;
 # Rollladenaktor öffnen&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 7802C8&lt;br /&gt;
 &lt;br /&gt;
 # Rollladenaktor stoppen&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 7802C9&lt;br /&gt;
 &lt;br /&gt;
 # Rollladenaktor schließen&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 780200&lt;br /&gt;
 &lt;br /&gt;
 # erster Ausgang (Relais) eines HMW-IO-12-Sw14-DR ein&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 730003FF&lt;br /&gt;
 &lt;br /&gt;
 # erster Ausgang (Relais) eines HMW-IO-12-Sw14-DR aus&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 73000000&lt;br /&gt;
&lt;br /&gt;
== Wechsel von Serial/Netzwerk-RS485-Adaptern zu HMW-LAN-GW ==&lt;br /&gt;
Der Wechsel zwischen den verschiedenen Interface-Typen geht einfach und erfordert kein neues Pairing.&lt;br /&gt;
Ggf. müssen einige interfacespezifische Attribute in der [[Konfiguration]] hinzugefügt bzw. gelöscht werden. &lt;br /&gt;
&lt;br /&gt;
==Bekannte Probleme==&lt;br /&gt;
===Disconnects mit WIZ108SR===&lt;br /&gt;
Bei Verwendung eines auf WIZ108SR (oder ähnlich) basierenden Adapters kann es zu regelmäßigen disconnects kommen. Im Log erscheint dann in etwa Folgendes:&lt;br /&gt;
 2015.09.13 20:17:11.809 2: HM485d: DISCONNECTED&lt;br /&gt;
 2015.09.13 20:17:11.812 2: HM485d: SERIAL connected to device 192.168.nnn.nnn:pppp&lt;br /&gt;
 2015.09.13 20:17:11.813 2: HM485d: RECONNECTED&lt;br /&gt;
Das Problem lässt sich in der Regel lösen, indem man in der Konfiguration des WIZ108SR den &amp;quot;Inactivity Timer&amp;quot; auf 0 setzt. Siehe auch diesen {{Link2Forum|Topic=41054|LinkText=Thread im Forum}}.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.reichelt.de/USB-Konverter/DIGITUS-DA-70157/3//index.html?ARTICLE=122187 DIGITUS DA-70157: USB-Serial Adapter]&lt;br /&gt;
* [http://www.wiznet.io/product-item/wiz108sr/ Wiznet - WIZ108SR Compact RS422/RS485-to-Ethernet module]&lt;br /&gt;
* {{Link2Forum|Topic=14096|LinkText=Wiznet - WIZ108SR im Hutschienengehäuse}}&lt;br /&gt;
* [http://forum.fhem.de/index.php?action=dlattach;topic=10027.0;attach=2441 HMW-Protokoll-Doku]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Serial/Netzwerk-RS485-Adapter&amp;diff=25345</id>
		<title>Serial/Netzwerk-RS485-Adapter</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Serial/Netzwerk-RS485-Adapter&amp;diff=25345"/>
		<updated>2018-02-16T21:29:57Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: Installation HM485_LAN Modul&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorbemerkungen ==&lt;br /&gt;
Alternativ zum [[HomeMatic_Wired_RS485_LAN_Gateway]], können einfache Serial/Netzwerk-RS485-Adaptern für die Kommunikation von FHEM zu HomeMatic-Wired-Geräten eingesetzt werden.&lt;br /&gt;
In diesem Artikel werden sowohl RS232-RS485-Adapter, USB-RS485-Adapter als auch Netzwerk-RS485-Adapter als Serial-RS485-Adaptern bezeichnet, denn in jedem Fall wird ein serieller Datenstrom an den RS485 Transceiver weitergeleitet.&lt;br /&gt;
&lt;br /&gt;
Da diese hier beschriebenen Interfaces keine &amp;quot;Intelligenz&amp;quot; besitzen, also die Daten lediglich auf den RS485-Bus umsetzen, wird zur Ansteuerung noch der &#039;&#039;hm485d.pl&#039;&#039;-Daemon benötigt. Dieser Prozess setzt die RAW-Befehle in das HomeMatic-Wired-Protokoll um. Der hm485d kann dabei transparent im Hintergrund arbeiten.&lt;br /&gt;
&lt;br /&gt;
=== Liste der aktuell getesteten Adapter / Schnittstellen (bitte ggf. ergänzen) ===&lt;br /&gt;
* DIGITUS DA-70157: USB-Serial Adapter mit RS485 Schnittstelle. Dieser Adapter wird derzeit wahrscheinlich am häufigsten und erfolgreichsten zusammen mit FHEM eingesetzt. In ein paar Fällen gab es jedoch Probleme mit unvollständigen Lötstellen oder anderen Fabrikationsfehlern. Dies kann sich darin äußern, dass FHEM überhaupt keine Kommunikation aufbauen kann oder entweder nur senden oder nur empfangen kann. Bevor man dann lange herumprobiert ist es in den meisten Fällen besser, sich einen zweiten Adapter zuzulegen. [http://www.reichelt.de/USB-Konverter/DIGITUS-DA-70157/3//index.html?ARTICLE=122187] &lt;br /&gt;
* Eigenbau basierend auf FT232RL und Max485 {{Link2Forum|Topic=64947|Message=562328}}&lt;br /&gt;
* Wiznet - WIZ108SR Compact RS422/RS485-to-Ethernet module [http://www.wiznet.io/product-item/wiz108sr/]&lt;br /&gt;
* Wiznet - {{Link2Forum|Topic=14096|LinkText=WIZ108SR im Hutschienengehäuse}}&lt;br /&gt;
* USB - RS485 Konverter von Sertronics [https://www.sertronics-shop.de/Raspberry-PiCo/Raspberry-Pi/KabelAdapter/USB-KabelAdapter/USB-RS485-Konverter/] Dieser Adapter wurde zwar erfolgreich getestet, ist aber trotzdem nicht zu empfehlen. Der Adapter beruht auf einem CH340 oder CH341 Chip und funktioniert im Gegensatz zur Beschreibung auf der Herstellerseite mit Raspbian nur nach der Installation eines neuen Treibers. Außerdem fehlen den CH34x-Chips die Seriennummer, was Probleme bereiten kann, wenn man mehrere serielle Schnittstellen hat (das schließt auch verschiedene Billig-Arduino-Clones ein). Des Weiteren gibt es keinen GND-Anschluss, weswegen der Busabschlusswiderstand nicht korrekt angeschlossen werden kann. Details dazu wurden hier diskutiert: {{Link2Forum|Topic=68681|Message=601863}}&lt;br /&gt;
&lt;br /&gt;
== Einbindung in FHEM ==&lt;br /&gt;
Zunächst muss man das Modul HM485_LAN installiert haben.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php?topic=19312.0]&lt;br /&gt;
&lt;br /&gt;
Zum Einbinden des Gateways braucht man ein HM485_LAN-Device mit folgender Definition:&lt;br /&gt;
&lt;br /&gt;
 define hm485 HM485_LAN localhost:2000&lt;br /&gt;
 attr hm485 hmwId 00000001&lt;br /&gt;
 attr hm485 HM485d_device &amp;amp;lt;SerialDevice&amp;amp;gt;&lt;br /&gt;
 attr hm485 HM485d_bind 1&lt;br /&gt;
 &lt;br /&gt;
Der Name &amp;quot;hm485&amp;quot; kann frei vergeben werden.&lt;br /&gt;
Bei &amp;amp;lt;SerialDevice&amp;amp;gt; muss der Gerätename angegeben werden unter dem das serielle Device anzusprechen ist.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele:&#039;&#039;&#039;&lt;br /&gt;
 # Serieller USB-RS485-Adapter&lt;br /&gt;
 attr HM485_LAN HM485d_device /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
 # Netzwerk-RS485-Adapter&lt;br /&gt;
 attr HM485_LAN HM485d_device 192.168.1.15:5000&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele:&#039;&#039;&#039;&lt;br /&gt;
Gerätename nach einstecken des USB Dongels von DIGITUS DA-70157 unter Linux finden:&lt;br /&gt;
 ls -al /dev/serial/by-id&lt;br /&gt;
Ergebnis:&lt;br /&gt;
 total 0&lt;br /&gt;
 drwxr-xr-x 2 root root 60 Feb 16 20:16 .&lt;br /&gt;
 drwxr-xr-x 4 root root 80 Feb 16 20:16 ..&lt;br /&gt;
 lrwxrwxrwx 1 root root 13 Feb 16 20:16 usb-FTDI_FT232R_USB_UART_AO000KS2-if00-port0 -&amp;gt; ../../ttyUSB0&lt;br /&gt;
Das &amp;quot;ttyUSB0&amp;quot; ist in dem Fall der Gerätename und sollte dann unter folgenden Pfad gefunden werden.&lt;br /&gt;
 cd /dev/&lt;br /&gt;
 ls&lt;br /&gt;
&lt;br /&gt;
HM485d_bind 1 sorgt dafür, dass der hm485d beim FHEM-Start automatisch mit gestartet wird und durch FHEM auch gesteuert, also auch beendet werden kann.&lt;br /&gt;
&lt;br /&gt;
HM485_LAN kennt weitere Attribute, die zur Kontrolle des hm485d dienen.&lt;br /&gt;
Wichtig ist vor allem, für HM485_LAN eine Adresse festzulegen. Die HMW-ID muss eine 8-stellige Hexadezimalzahl sein.&lt;br /&gt;
Theoretisch könnten die bis zu 256 HMW-LAN-GW angelegt werden. Diese Annahme ist aktuell aber nur Theorie und noch nicht getestet und ggf. mit einigen Problemen verbunden. Die HMW-ID&#039;s für die HMW-Interfaces könnten dafür im Bereich von 00000001 - 000000FF gewählt werden.&lt;br /&gt;
Da in den HMW-Geräten die HMW-ID der Zentrale aber mit 00000001 vordefiniert ist, sollte hier aktuell nur diese ID verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Zu beachten ist auch, dass der hm485d &#039;&#039;&#039;gleichzeitig&#039;&#039;&#039; nur eine Netzwerkverbindung erlaubt. Somit ist ein Gateway auch nur mit einer Zentrale / FHEM-Instanz zur gleichen Zeit nutzbar.&lt;br /&gt;
&lt;br /&gt;
=== HM485_LAN Attribute ===&lt;br /&gt;
* &#039;&#039;&#039;hmwId&#039;&#039;&#039; Hier muss die HMW-ID angegeben werden. Standardmäßig wird die 00000001 benutzt.&lt;br /&gt;
* &#039;&#039;&#039;do_not_notify&#039;&#039;&#039; FileLog/notify/inform Benachrichtigung für das Gerät ist abgeschaltet.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_bind&#039;&#039;&#039; Startet den hm485d automatisch beim Start von FHEM und ermöglicht FHEM zudem die Prozesskontrolle&lt;br /&gt;
* &#039;&#039;&#039;HM485d_startTimeout&#039;&#039;&#039; Manchmal, z.B. auf langsameren Geräten wie der FritzBox oder dem Raspberry Pi, ist es erforderlich den hm485d verzögert zu starten. Hier kann die Verzögerung in Sekunden angegeben werden.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_device&#039;&#039;&#039; Das serielle Gerät zum Interface (siehe Beispiel oben).&lt;br /&gt;
* &#039;&#039;&#039;HM485d_serialNumber&#039;&#039;&#039; Die Seriennummer die der hm485d an die Zentrale (FHEM) melden soll.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_logfile&#039;&#039;&#039; Der hm485d kann ein eigenes Logfile schreiben. Hier kann dafür ein Dateiname angegeben werden.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_detatch&#039;&#039;&#039; Wenn der hm485d mit FHEM zusammen gestartet wird (siehe HM485d_bind) so kann der Prozess hier von FHEM entkoppelt werden. Der Prozess wird dann auch nicht zusammen mit FHEM beendet.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_logVerbose&#039;&#039;&#039; Der Loglevel vom hm485d.&lt;br /&gt;
&lt;br /&gt;
Die folgenden drei Attribute können verwendet werden, wenn der hm485d über einen einfachen UART ohne Flusskontrolle z.B. über den UART des Raspberry Pi, an einen RS485 Transceiver angeschlossen wird. Dafür müssen ggf. GPIO-Pins zur Steuerung des RS485 Transceivers (Senden/Empfangen) definiert werden:&lt;br /&gt;
* &#039;&#039;&#039;HM485d_gpioTxenInit&#039;&#039;&#039; Shell-Befehl zum Initialisieren des benutzten GPIO-Pins für die Sendekontrolle&lt;br /&gt;
* &#039;&#039;&#039;HM485d_gpioTxenCmd0&#039;&#039;&#039; Shell-Befehl um den Sende-GPIO-Pin zurück zu setzen&lt;br /&gt;
* &#039;&#039;&#039;HM485d_gpioTxenCmd1&#039;&#039;&#039; Shell-Befehl um den Sende-GPIO-Pin zu setzen&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis&#039;&#039;&#039;&lt;br /&gt;
Da auch der hm485d sich noch in Entwicklung befindet, ist es möglich dass es in einigen Fällen noch zu Fehlverhalten kommen kann.&lt;br /&gt;
&lt;br /&gt;
== Pairen von Geräten ==&lt;br /&gt;
Jedes HM Geräte muss vor Verwendung mit der Zentrale, hier also FHEM, gepairt werden. Anders als bei den HomeMatic-Funk-Geräten erfolgt das Pairing bei HMW automatisch, sobald ein Gerät das erste Mal eine Nachricht über den Bus versendet. Alternativ kann das Pairing auch durch das Absetzen eines Discovery-Befehls ausgelöst werden.&lt;br /&gt;
Beim Pairen werden die Geräteadressen FHEM bekannt gemacht. Die Adresse der HMW Geräte ist nicht frei wählbar, sondern fest in den Geräten eingestellt. Alle HMW-Geräte haben standardmäßig die Adresse 00000001 als Zentralen-Adresse gespeichert.&lt;br /&gt;
&lt;br /&gt;
=== Discovery ===&lt;br /&gt;
Mit dem discovery-Befehl wird der gesamte RS485-Bus nach unbekannten HMW Geräten durchsucht.&lt;br /&gt;
Dieser Befehl funktioniert allerdings NICHT mit dem Original eq3-Lan-Gateway!&lt;br /&gt;
&lt;br /&gt;
 set HM485_LAN discovery start&lt;br /&gt;
&lt;br /&gt;
Nachdem neue Geräte gefunden wurden, werden diese automatisch mit FHEM gepairt.&lt;br /&gt;
&lt;br /&gt;
== RAW-Befehle ==&lt;br /&gt;
Über den HM485_LAN können so genannte RAW-Befehle an die am Bus angeschlossenen Geräte gesendet werden. Mit diesen RAW-Befehlen können z.B. Funktionen ausgelöst werden, die aktuell für ein Gerät noch nicht in FHEM implementiert sind.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 DDDDDD&lt;br /&gt;
&lt;br /&gt;
* 01234567 - entspricht hier der Adresse des Gerätes an das der Befehl gesendet werden soll&lt;br /&gt;
* 98 - das so genannte Steuerzeichen (Siehe HMW-Protokoll-Dokumentation)&lt;br /&gt;
* 00000001 - die HMW-ID der Zentrale (FHEM)&lt;br /&gt;
* DDDDDD - das sind die zu sendenden Daten.&lt;br /&gt;
&lt;br /&gt;
Da zum Senden von RAW-Befehlen Kenntnisse über das HMW-Protokoll vorhanden sein sollten, lohnt sich ein Blick in die [http://forum.fhem.de/index.php?action=dlattach;topic=10027.0;attach=2441 HMW-Protokoll-Doku]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Funktionale Beispiele:&#039;&#039;&#039;&lt;br /&gt;
 # Rollladenaktor öffnen&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 7802C8&lt;br /&gt;
 &lt;br /&gt;
 # Rollladenaktor stoppen&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 7802C9&lt;br /&gt;
 &lt;br /&gt;
 # Rollladenaktor schließen&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 780200&lt;br /&gt;
 &lt;br /&gt;
 # erster Ausgang (Relais) eines HMW-IO-12-Sw14-DR ein&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 730003FF&lt;br /&gt;
 &lt;br /&gt;
 # erster Ausgang (Relais) eines HMW-IO-12-Sw14-DR aus&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 73000000&lt;br /&gt;
&lt;br /&gt;
== Wechsel von Serial/Netzwerk-RS485-Adaptern zu HMW-LAN-GW ==&lt;br /&gt;
Der Wechsel zwischen den verschiedenen Interface-Typen geht einfach und erfordert kein neues Pairing.&lt;br /&gt;
Ggf. müssen einige interfacespezifische Attribute in der [[Konfiguration]] hinzugefügt bzw. gelöscht werden. &lt;br /&gt;
&lt;br /&gt;
==Bekannte Probleme==&lt;br /&gt;
===Disconnects mit WIZ108SR===&lt;br /&gt;
Bei Verwendung eines auf WIZ108SR (oder ähnlich) basierenden Adapters kann es zu regelmäßigen disconnects kommen. Im Log erscheint dann in etwa Folgendes:&lt;br /&gt;
 2015.09.13 20:17:11.809 2: HM485d: DISCONNECTED&lt;br /&gt;
 2015.09.13 20:17:11.812 2: HM485d: SERIAL connected to device 192.168.nnn.nnn:pppp&lt;br /&gt;
 2015.09.13 20:17:11.813 2: HM485d: RECONNECTED&lt;br /&gt;
Das Problem lässt sich in der Regel lösen, indem man in der Konfiguration des WIZ108SR den &amp;quot;Inactivity Timer&amp;quot; auf 0 setzt. Siehe auch diesen {{Link2Forum|Topic=41054|LinkText=Thread im Forum}}.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.reichelt.de/USB-Konverter/DIGITUS-DA-70157/3//index.html?ARTICLE=122187 DIGITUS DA-70157: USB-Serial Adapter]&lt;br /&gt;
* [http://www.wiznet.io/product-item/wiz108sr/ Wiznet - WIZ108SR Compact RS422/RS485-to-Ethernet module]&lt;br /&gt;
* {{Link2Forum|Topic=14096|LinkText=Wiznet - WIZ108SR im Hutschienengehäuse}}&lt;br /&gt;
* [http://forum.fhem.de/index.php?action=dlattach;topic=10027.0;attach=2441 HMW-Protokoll-Doku]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Serial/Netzwerk-RS485-Adapter&amp;diff=25344</id>
		<title>Serial/Netzwerk-RS485-Adapter</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Serial/Netzwerk-RS485-Adapter&amp;diff=25344"/>
		<updated>2018-02-16T20:51:08Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: Beschreibung Gerätename unter Linux Finden&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorbemerkungen ==&lt;br /&gt;
Alternativ zum [[HomeMatic_Wired_RS485_LAN_Gateway]], können einfache Serial/Netzwerk-RS485-Adaptern für die Kommunikation von FHEM zu HomeMatic-Wired-Geräten eingesetzt werden.&lt;br /&gt;
In diesem Artikel werden sowohl RS232-RS485-Adapter, USB-RS485-Adapter als auch Netzwerk-RS485-Adapter als Serial-RS485-Adaptern bezeichnet, denn in jedem Fall wird ein serieller Datenstrom an den RS485 Transceiver weitergeleitet.&lt;br /&gt;
&lt;br /&gt;
Da diese hier beschriebenen Interfaces keine &amp;quot;Intelligenz&amp;quot; besitzen, also die Daten lediglich auf den RS485-Bus umsetzen, wird zur Ansteuerung noch der &#039;&#039;hm485d.pl&#039;&#039;-Daemon benötigt. Dieser Prozess setzt die RAW-Befehle in das HomeMatic-Wired-Protokoll um. Der hm485d kann dabei transparent im Hintergrund arbeiten.&lt;br /&gt;
&lt;br /&gt;
=== Liste der aktuell getesteten Adapter / Schnittstellen (bitte ggf. ergänzen) ===&lt;br /&gt;
* DIGITUS DA-70157: USB-Serial Adapter mit RS485 Schnittstelle. Dieser Adapter wird derzeit wahrscheinlich am häufigsten und erfolgreichsten zusammen mit FHEM eingesetzt. In ein paar Fällen gab es jedoch Probleme mit unvollständigen Lötstellen oder anderen Fabrikationsfehlern. Dies kann sich darin äußern, dass FHEM überhaupt keine Kommunikation aufbauen kann oder entweder nur senden oder nur empfangen kann. Bevor man dann lange herumprobiert ist es in den meisten Fällen besser, sich einen zweiten Adapter zuzulegen. [http://www.reichelt.de/USB-Konverter/DIGITUS-DA-70157/3//index.html?ARTICLE=122187] &lt;br /&gt;
* Eigenbau basierend auf FT232RL und Max485 {{Link2Forum|Topic=64947|Message=562328}}&lt;br /&gt;
* Wiznet - WIZ108SR Compact RS422/RS485-to-Ethernet module [http://www.wiznet.io/product-item/wiz108sr/]&lt;br /&gt;
* Wiznet - {{Link2Forum|Topic=14096|LinkText=WIZ108SR im Hutschienengehäuse}}&lt;br /&gt;
* USB - RS485 Konverter von Sertronics [https://www.sertronics-shop.de/Raspberry-PiCo/Raspberry-Pi/KabelAdapter/USB-KabelAdapter/USB-RS485-Konverter/] Dieser Adapter wurde zwar erfolgreich getestet, ist aber trotzdem nicht zu empfehlen. Der Adapter beruht auf einem CH340 oder CH341 Chip und funktioniert im Gegensatz zur Beschreibung auf der Herstellerseite mit Raspbian nur nach der Installation eines neuen Treibers. Außerdem fehlen den CH34x-Chips die Seriennummer, was Probleme bereiten kann, wenn man mehrere serielle Schnittstellen hat (das schließt auch verschiedene Billig-Arduino-Clones ein). Des Weiteren gibt es keinen GND-Anschluss, weswegen der Busabschlusswiderstand nicht korrekt angeschlossen werden kann. Details dazu wurden hier diskutiert: {{Link2Forum|Topic=68681|Message=601863}}&lt;br /&gt;
&lt;br /&gt;
== Einbindung in FHEM ==&lt;br /&gt;
Zum Einbinden des Gateways braucht man ein HM485_LAN-Device mit folgender Definition:&lt;br /&gt;
&lt;br /&gt;
 define hm485 HM485_LAN localhost:2000&lt;br /&gt;
 attr hm485 hmwId 00000001&lt;br /&gt;
 attr hm485 HM485d_device &amp;amp;lt;SerialDevice&amp;amp;gt;&lt;br /&gt;
 attr hm485 HM485d_bind 1&lt;br /&gt;
 &lt;br /&gt;
Der Name &amp;quot;hm485&amp;quot; kann frei vergeben werden.&lt;br /&gt;
Bei &amp;amp;lt;SerialDevice&amp;amp;gt; muss der Gerätename angegeben werden unter dem das serielle Device anzusprechen ist.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele:&#039;&#039;&#039;&lt;br /&gt;
 # Serieller USB-RS485-Adapter&lt;br /&gt;
 attr HM485_LAN HM485d_device /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
 # Netzwerk-RS485-Adapter&lt;br /&gt;
 attr HM485_LAN HM485d_device 192.168.1.15:5000&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele:&#039;&#039;&#039;&lt;br /&gt;
Gerätename nach einstecken des USB Dongels von DIGITUS DA-70157 unter Linux finden:&lt;br /&gt;
 ls -al /dev/serial/by-id&lt;br /&gt;
Ergebnis:&lt;br /&gt;
 total 0&lt;br /&gt;
 drwxr-xr-x 2 root root 60 Feb 16 20:16 .&lt;br /&gt;
 drwxr-xr-x 4 root root 80 Feb 16 20:16 ..&lt;br /&gt;
 lrwxrwxrwx 1 root root 13 Feb 16 20:16 usb-FTDI_FT232R_USB_UART_AO000KS2-if00-port0 -&amp;gt; ../../ttyUSB0&lt;br /&gt;
Das &amp;quot;ttyUSB0&amp;quot; ist in dem Fall der Gerätename und sollte dann unter folgenden Pfad gefunden werden.&lt;br /&gt;
 cd /dev/&lt;br /&gt;
 ls&lt;br /&gt;
&lt;br /&gt;
HM485d_bind 1 sorgt dafür, dass der hm485d beim FHEM-Start automatisch mit gestartet wird und durch FHEM auch gesteuert, also auch beendet werden kann.&lt;br /&gt;
&lt;br /&gt;
HM485_LAN kennt weitere Attribute, die zur Kontrolle des hm485d dienen.&lt;br /&gt;
Wichtig ist vor allem, für HM485_LAN eine Adresse festzulegen. Die HMW-ID muss eine 8-stellige Hexadezimalzahl sein.&lt;br /&gt;
Theoretisch könnten die bis zu 256 HMW-LAN-GW angelegt werden. Diese Annahme ist aktuell aber nur Theorie und noch nicht getestet und ggf. mit einigen Problemen verbunden. Die HMW-ID&#039;s für die HMW-Interfaces könnten dafür im Bereich von 00000001 - 000000FF gewählt werden.&lt;br /&gt;
Da in den HMW-Geräten die HMW-ID der Zentrale aber mit 00000001 vordefiniert ist, sollte hier aktuell nur diese ID verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Zu beachten ist auch, dass der hm485d &#039;&#039;&#039;gleichzeitig&#039;&#039;&#039; nur eine Netzwerkverbindung erlaubt. Somit ist ein Gateway auch nur mit einer Zentrale / FHEM-Instanz zur gleichen Zeit nutzbar.&lt;br /&gt;
&lt;br /&gt;
=== HM485_LAN Attribute ===&lt;br /&gt;
* &#039;&#039;&#039;hmwId&#039;&#039;&#039; Hier muss die HMW-ID angegeben werden. Standardmäßig wird die 00000001 benutzt.&lt;br /&gt;
* &#039;&#039;&#039;do_not_notify&#039;&#039;&#039; FileLog/notify/inform Benachrichtigung für das Gerät ist abgeschaltet.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_bind&#039;&#039;&#039; Startet den hm485d automatisch beim Start von FHEM und ermöglicht FHEM zudem die Prozesskontrolle&lt;br /&gt;
* &#039;&#039;&#039;HM485d_startTimeout&#039;&#039;&#039; Manchmal, z.B. auf langsameren Geräten wie der FritzBox oder dem Raspberry Pi, ist es erforderlich den hm485d verzögert zu starten. Hier kann die Verzögerung in Sekunden angegeben werden.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_device&#039;&#039;&#039; Das serielle Gerät zum Interface (siehe Beispiel oben).&lt;br /&gt;
* &#039;&#039;&#039;HM485d_serialNumber&#039;&#039;&#039; Die Seriennummer die der hm485d an die Zentrale (FHEM) melden soll.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_logfile&#039;&#039;&#039; Der hm485d kann ein eigenes Logfile schreiben. Hier kann dafür ein Dateiname angegeben werden.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_detatch&#039;&#039;&#039; Wenn der hm485d mit FHEM zusammen gestartet wird (siehe HM485d_bind) so kann der Prozess hier von FHEM entkoppelt werden. Der Prozess wird dann auch nicht zusammen mit FHEM beendet.&lt;br /&gt;
* &#039;&#039;&#039;HM485d_logVerbose&#039;&#039;&#039; Der Loglevel vom hm485d.&lt;br /&gt;
&lt;br /&gt;
Die folgenden drei Attribute können verwendet werden, wenn der hm485d über einen einfachen UART ohne Flusskontrolle z.B. über den UART des Raspberry Pi, an einen RS485 Transceiver angeschlossen wird. Dafür müssen ggf. GPIO-Pins zur Steuerung des RS485 Transceivers (Senden/Empfangen) definiert werden:&lt;br /&gt;
* &#039;&#039;&#039;HM485d_gpioTxenInit&#039;&#039;&#039; Shell-Befehl zum Initialisieren des benutzten GPIO-Pins für die Sendekontrolle&lt;br /&gt;
* &#039;&#039;&#039;HM485d_gpioTxenCmd0&#039;&#039;&#039; Shell-Befehl um den Sende-GPIO-Pin zurück zu setzen&lt;br /&gt;
* &#039;&#039;&#039;HM485d_gpioTxenCmd1&#039;&#039;&#039; Shell-Befehl um den Sende-GPIO-Pin zu setzen&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis&#039;&#039;&#039;&lt;br /&gt;
Da auch der hm485d sich noch in Entwicklung befindet, ist es möglich dass es in einigen Fällen noch zu Fehlverhalten kommen kann.&lt;br /&gt;
&lt;br /&gt;
== Pairen von Geräten ==&lt;br /&gt;
Jedes HM Geräte muss vor Verwendung mit der Zentrale, hier also FHEM, gepairt werden. Anders als bei den HomeMatic-Funk-Geräten erfolgt das Pairing bei HMW automatisch, sobald ein Gerät das erste Mal eine Nachricht über den Bus versendet. Alternativ kann das Pairing auch durch das Absetzen eines Discovery-Befehls ausgelöst werden.&lt;br /&gt;
Beim Pairen werden die Geräteadressen FHEM bekannt gemacht. Die Adresse der HMW Geräte ist nicht frei wählbar, sondern fest in den Geräten eingestellt. Alle HMW-Geräte haben standardmäßig die Adresse 00000001 als Zentralen-Adresse gespeichert.&lt;br /&gt;
&lt;br /&gt;
=== Discovery ===&lt;br /&gt;
Mit dem discovery-Befehl wird der gesamte RS485-Bus nach unbekannten HMW Geräten durchsucht.&lt;br /&gt;
Dieser Befehl funktioniert allerdings NICHT mit dem Original eq3-Lan-Gateway!&lt;br /&gt;
&lt;br /&gt;
 set HM485_LAN discovery start&lt;br /&gt;
&lt;br /&gt;
Nachdem neue Geräte gefunden wurden, werden diese automatisch mit FHEM gepairt.&lt;br /&gt;
&lt;br /&gt;
== RAW-Befehle ==&lt;br /&gt;
Über den HM485_LAN können so genannte RAW-Befehle an die am Bus angeschlossenen Geräte gesendet werden. Mit diesen RAW-Befehlen können z.B. Funktionen ausgelöst werden, die aktuell für ein Gerät noch nicht in FHEM implementiert sind.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 DDDDDD&lt;br /&gt;
&lt;br /&gt;
* 01234567 - entspricht hier der Adresse des Gerätes an das der Befehl gesendet werden soll&lt;br /&gt;
* 98 - das so genannte Steuerzeichen (Siehe HMW-Protokoll-Dokumentation)&lt;br /&gt;
* 00000001 - die HMW-ID der Zentrale (FHEM)&lt;br /&gt;
* DDDDDD - das sind die zu sendenden Daten.&lt;br /&gt;
&lt;br /&gt;
Da zum Senden von RAW-Befehlen Kenntnisse über das HMW-Protokoll vorhanden sein sollten, lohnt sich ein Blick in die [http://forum.fhem.de/index.php?action=dlattach;topic=10027.0;attach=2441 HMW-Protokoll-Doku]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Funktionale Beispiele:&#039;&#039;&#039;&lt;br /&gt;
 # Rollladenaktor öffnen&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 7802C8&lt;br /&gt;
 &lt;br /&gt;
 # Rollladenaktor stoppen&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 7802C9&lt;br /&gt;
 &lt;br /&gt;
 # Rollladenaktor schließen&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 780200&lt;br /&gt;
 &lt;br /&gt;
 # erster Ausgang (Relais) eines HMW-IO-12-Sw14-DR ein&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 730003FF&lt;br /&gt;
 &lt;br /&gt;
 # erster Ausgang (Relais) eines HMW-IO-12-Sw14-DR aus&lt;br /&gt;
 set HM485_LAN RAW 01234567 98 00000001 73000000&lt;br /&gt;
&lt;br /&gt;
== Wechsel von Serial/Netzwerk-RS485-Adaptern zu HMW-LAN-GW ==&lt;br /&gt;
Der Wechsel zwischen den verschiedenen Interface-Typen geht einfach und erfordert kein neues Pairing.&lt;br /&gt;
Ggf. müssen einige interfacespezifische Attribute in der [[Konfiguration]] hinzugefügt bzw. gelöscht werden. &lt;br /&gt;
&lt;br /&gt;
==Bekannte Probleme==&lt;br /&gt;
===Disconnects mit WIZ108SR===&lt;br /&gt;
Bei Verwendung eines auf WIZ108SR (oder ähnlich) basierenden Adapters kann es zu regelmäßigen disconnects kommen. Im Log erscheint dann in etwa Folgendes:&lt;br /&gt;
 2015.09.13 20:17:11.809 2: HM485d: DISCONNECTED&lt;br /&gt;
 2015.09.13 20:17:11.812 2: HM485d: SERIAL connected to device 192.168.nnn.nnn:pppp&lt;br /&gt;
 2015.09.13 20:17:11.813 2: HM485d: RECONNECTED&lt;br /&gt;
Das Problem lässt sich in der Regel lösen, indem man in der Konfiguration des WIZ108SR den &amp;quot;Inactivity Timer&amp;quot; auf 0 setzt. Siehe auch diesen {{Link2Forum|Topic=41054|LinkText=Thread im Forum}}.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.reichelt.de/USB-Konverter/DIGITUS-DA-70157/3//index.html?ARTICLE=122187 DIGITUS DA-70157: USB-Serial Adapter]&lt;br /&gt;
* [http://www.wiznet.io/product-item/wiz108sr/ Wiznet - WIZ108SR Compact RS422/RS485-to-Ethernet module]&lt;br /&gt;
* {{Link2Forum|Topic=14096|LinkText=Wiznet - WIZ108SR im Hutschienengehäuse}}&lt;br /&gt;
* [http://forum.fhem.de/index.php?action=dlattach;topic=10027.0;attach=2441 HMW-Protokoll-Doku]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HomeMatic_Devices_pairen&amp;diff=23328</id>
		<title>HomeMatic Devices pairen</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HomeMatic_Devices_pairen&amp;diff=23328"/>
		<updated>2017-11-19T17:13:07Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Pairing lösen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HomeMatic Geräte müssen mit dem für das HomeMatic-Protokoll eingesetzten IO-Device (zB [[CUL]], CUN,  [[HomeMatic|Homematic IO&#039;s]]) &#039;&#039;[[Pairing (HomeMatic)|gepairt]]&#039;&#039; (deutsch: &amp;quot;gepaart&amp;quot;) werden, damit sie von FHEM gesteuert oder ausgelesen werden können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Adresse eines HomeMatic Gerätes ist nicht frei einstellbar, sondern für jedes Gerät fest vorgegeben. Da die HM-Geräte über eine sehr komplexe Kanalstruktur verfügen, empfiehlt sich daher, die Geräte in FHEM per &#039;&#039;autocreate&#039;&#039; Funktion anlegen zu lassen, Eine nachträgliche Umbenennung oder manuelle Bearbeitung der erzeugten Konfigurationsdaten ist problemlos möglich.&lt;br /&gt;
&lt;br /&gt;
Zunächst mal muss man einen [[HomeMatic_Installieren|CUL/CUN/Homematic IO installieren]]. &lt;br /&gt;
&lt;br /&gt;
Einige Geräte werden mit aktivierter [[AES Encryption]] ausgeliefert (Meistens, aber nicht immer mit SEC im Namen). Das Anlernen an HM IO&#039;s funktioniert ohne Probleme, für alle CUL Derivate muss unbedingt der Hinweis im Artikel AES Encryption im Abschnitt I/O-Device &amp;lt;-&amp;gt; Gerät beachtet werden. &#039;&#039;&#039;Die dort beschriebene Installation sollte generell vorgenommen werden!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Danach geht es hier weiter:&lt;br /&gt;
&lt;br /&gt;
= Grundlagen=&lt;br /&gt;
Durch das Pairing wird ein HM-Gerät genau einem IO-Device (zB CUL) zugeordnet. Wenn ein Gerät mit dem IO-Device gepairt ist, kann es darüber gesteuert werden.  &lt;br /&gt;
  &lt;br /&gt;
Beim Pairing wird die HMID des IO-Device in das Gerät geschrieben. Das Pairing findet also im Wesentlichen im Gerät statt, nicht in FHEM selbst.&lt;br /&gt;
&lt;br /&gt;
Zu bemerken ist, dass ein IO-Device (zB CUL) standardmäßig die ID F11034 von FHEM erhält. Da viele HM-Geräte das IO-Device nur anhand der HMIDs erkennen, können alle in Reichweite der HM-Geräte befindlichen IO-Devices mit der in das HM-Gerät geschriebenen HMID das HM-Gerät steuern. Hinzu kommt, dass die &#039;&#039;autocreate&#039;&#039; Funktion die in Reichweite befindlichen HM-Geräte findet und automatisch einbindet. Nachbarn, die IO-Devices mit der gleichen HMID betreiben, können also HM-Geräte untereinander sehen und steuern!&lt;br /&gt;
&lt;br /&gt;
Es ist daher dringen zu empfehlen, die HMID vor dem Pairing der HM-Geräte mit: &lt;br /&gt;
&lt;br /&gt;
  attr &amp;lt;CUL&amp;gt; hmId &amp;lt;6-stellige Hexadresse&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zu individualisieren.  &lt;br /&gt;
&lt;br /&gt;
Gepairt wird nur das Device. Die Channels sind dem Device untergeordnet und somit implizit auch gepairt. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Ist ein Device gepairt werden Konfigurationsänderungen über die Zentrale (FHEM) vorgenommen. Man kann u.a. keine Kanäle mehr &#039;&#039;direkt&#039;&#039; peeren (verknüpfen). Stattdessen verwendet man Kommandos in FHEM. Siehe &amp;lt;u&amp;gt;[[Homematic_Peering_Beispiele|peeren]]&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= IO-Device in den Pairing-Modus versetzen =&lt;br /&gt;
* CUL/CUN/HMLAN Konfigurator in den &amp;quot;Akzeptiere-Pairing-Requests-Modus&amp;quot; bringen:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;CUL&amp;gt; hmPairForSec 600&lt;br /&gt;
&lt;br /&gt;
600 bedeutet hier, dass das IO-Device 600 Sekunden, also 10 Minuten lang im Pairing-Modus ist.&lt;br /&gt;
&lt;br /&gt;
Bei aktivem Pairing-Modus gibt das IO-Device folgende &#039;&#039;Internals&#039;&#039; Variable zurück: &lt;br /&gt;
&lt;br /&gt;
  hmPair 1&lt;br /&gt;
&lt;br /&gt;
Alternativ kann &lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;CUL&amp;gt; hmPairSerial &amp;lt;serial&amp;gt;&lt;br /&gt;
&lt;br /&gt;
genutzt werden.&lt;br /&gt;
&lt;br /&gt;
= Devices pairen =&lt;br /&gt;
&lt;br /&gt;
Das Gerät wird in den Anlern- oder auch Konfigurationsmode versetzt. Es sendet hierzu eine entsprechende Nachricht an alle. &lt;br /&gt;
Das Vorgehen ist stark vom Gerät(Typ) abhängig, bitte unbedingt das Handbuch lesen: Stichwort &amp;quot;anlernen&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Falls das Gerät einen separaten Anlernknopf hat, ist der normalerweise nur ganz kurz zu drücken. &lt;br /&gt;
Danach beginnt die LED regelmäßig zu blinken.&lt;br /&gt;
 &lt;br /&gt;
Hat das Gerät keinen separaten Anlernknopf, muss in der Regel eine Taste solange gedrückt werden, bis die LED anfängt regelmäßig zu blinken.&lt;br /&gt;
&lt;br /&gt;
Kommt der Anlernvorgang in Gang, wird dies durch ein wechselndes, schnelles  Blinken signalisiert. Kommt kein Anlernvorgang zustande, blinkt die LED regelmäßig für einen bestimmten Zeitraum (ca. 20 sec). &lt;br /&gt;
Ist das Gerät schon gepairt, werden bei batteriebetriebenen Geräten eventuell auch noch nicht übertragende Daten gesendet. Dabei blinkt die LED auch unregelmäßig.&lt;br /&gt;
{{Randnotiz|RNText=Hinweis: Das genaue Vorgehen ist bei jedem Gerätetyp anders -&amp;gt; unbedingt Handbuch genau lesen!}}&lt;br /&gt;
In FHEM werden nun:&lt;br /&gt;
* alle fehlenden Devices und Channels angelegt&lt;br /&gt;
* das Register pairCentral im Device gesetzt. &lt;br /&gt;
&lt;br /&gt;
Ein save danach sichert die neu gepairten Geräte in der Konfiguration.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Auch mit hmPairForSec kann jeweils nur &#039;&#039;&#039;ein&#039;&#039;&#039; Device gepaired werden. Für mehrere Devices den Vorgang bitte wiederholen.&lt;br /&gt;
&lt;br /&gt;
= Pairing verifizieren =&lt;br /&gt;
Nur weil ein Gerät angelegt wurde, heißt das &#039;&#039;&#039;nicht&#039;&#039;&#039;, dass es auch gepaired ist. In den Readings eines Devices muss stehen (list &amp;lt;name&amp;gt; oder im Webinterface):&lt;br /&gt;
&lt;br /&gt;
  R_pairCentral  0xABCDEF&lt;br /&gt;
&lt;br /&gt;
ABCDEF steht dabei für die HMID des IO-Device (zB CUL). Wurde für das IO-Device kein attribute mit einer individuellen HMID gesetzt, sollte hier die Standard-ID F11034 stehen. Die führende 0x steht für den Hinweis auf eine HEX-Adresse. &lt;br /&gt;
&lt;br /&gt;
Ist das Pairing noch nicht abgeschlossen, kann man nach kurzer Pause den Befehl: &lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-Gerät&amp;gt; getConfig &lt;br /&gt;
&lt;br /&gt;
absetzen, um zu prüfen, ob sich der Status zwischenzeitlich geändert hat. Wenn das Reading R_pairCentral nicht auftaucht oder der Wert mit set_ beginnt hat das Pairing &#039;&#039;&#039;nicht&#039;&#039;&#039; geklappt. Man kann entweder:&lt;br /&gt;
* noch einmal probieren, ein getConfig auszulösen - vielleicht hat das Lesen nicht funktioniert&lt;br /&gt;
* noch einmal pairen - das schadet nichts&lt;br /&gt;
* die Anlerntaste / Configtaste / irgendeine Taste am Gerät (hängt vom konkreten Device ab) wiederholt drücken um die Datenübertragung anzustoßen.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann man auch mit HMinfo einen Config check durchführen:&lt;br /&gt;
&lt;br /&gt;
  define hm HMInfo&lt;br /&gt;
  get hm configCheck&lt;br /&gt;
&lt;br /&gt;
= Vorgehen bei Problemen =&lt;br /&gt;
&lt;br /&gt;
Wenn das Pairing nicht erfolgreich ist, das Gerät sich also nicht steuern lässt, ist es möglich, dass es schon bzw. noch mit einem anderen IO-Device gepairt ist. Dann das Gerät in den Auslieferungszustand bringen (siehe Handbuch, oft Knopf mindestens 5 Sekunden drücken, bis es blinkt, dann loslassen und nochmals 5 Sekunden drücken, bis es schneller blinkt) und danach erneut pairen. &lt;br /&gt;
&lt;br /&gt;
Alternativ kann das Pairing per Befehl gelöst werden. Siehe dazu unten. &lt;br /&gt;
&lt;br /&gt;
Wenn das zu pairende Geräte ein Empfänger ist, kann mit FHEM per Telnet oder in der Kommandozeile des Webinterfaces folgendes Kommando abgesetzt werden:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;CUL&amp;gt; hmPairSerial &amp;lt;10-stellige Seriennummer&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die 10-stellige Seriennummer ist beim Empfängern idR. auf der Rückseite des Geräte aufgedruckt. Die Seriennummer fängt normalerweise mit Buchstaben an und endet mit Zahlen.&lt;br /&gt;
&lt;br /&gt;
Es gilt auch sicherzustellen, dass das zu pairende Gerät nicht bereits zuvor mit der Homematic Config Software gepairt wurde. Ist dies der Fall, so sollte das Pairing in der Homematic Config Software gelöscht und das Pairing in FHEM erneut durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Beim Pairen ist, wie im normalen Betrieb auch, ein Mindestabstand (etwa 1-2 Meter) zwischen dem Sender der Zentrale (CUL, HMLAN etc.) einzuhalten, da die Funkempfänger sonst mit Übersteuerung reagieren und keine Kommunikation zustande kommt.&lt;br /&gt;
Außerdem kann die Funklast beim Auslesen einer unfangreichen Konfiguration eines Gerätes bereits nach wenigen Versuchen das Limit der 1%-Regel erreichen. Sollte also scheinbar keine Kommunikation stattfinden können, ist auch zu prüfen, ob der Zentralensender sich deswegen temporär deaktiviert hat.&lt;br /&gt;
&lt;br /&gt;
= Gezieltes Pairing =&lt;br /&gt;
Bei bereits bekanntem HM-Gerät kann man mit:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;Name HM-Gerät&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
das pairing überschreiben. Es funktioniert aber nur, wenn schon ein IO-Device eingetragen ist.&lt;br /&gt;
&lt;br /&gt;
= Pairing lösen =&lt;br /&gt;
Das Pairing kann mit:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;Name HM-Gerät&amp;gt; unpair&lt;br /&gt;
&lt;br /&gt;
gelöst werden. Wichtig ist dabei, dass das IO-Device, das entpairt werden soll, mit der ursprünglich in das HM-Gerät geschriebenen HMID konfiguriert ist.  &lt;br /&gt;
&lt;br /&gt;
Sollte man z.B. ein HomeMatic HM-CC-RT-DN Funk-Heizkörperthermostat und ein Fensterkontakt verbunden haben, so steht unter THERMOSTAT_WindowRec im Attribut peerIDs die ID des Fensterkontakts.&lt;br /&gt;
Bei einem Defekt des Fensterkontakts sollte man wie im HM-CC-RT-DN beschrieben das unset durchführen. Hat man aber das Device Fensterkontakt gelöscht und das Pairing nicht durchgeführt, so kann man die Zuordnung im Heizkörperthermostat dennoch mit folgenden Befehl aufheben.&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;Name HM-Gerät&amp;gt;_WindowRec peerBulk &amp;lt;peerID&amp;gt; unset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HomeMatic_Devices_pairen&amp;diff=23327</id>
		<title>HomeMatic Devices pairen</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HomeMatic_Devices_pairen&amp;diff=23327"/>
		<updated>2017-11-19T17:12:08Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Pairing lösen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HomeMatic Geräte müssen mit dem für das HomeMatic-Protokoll eingesetzten IO-Device (zB [[CUL]], CUN,  [[HomeMatic|Homematic IO&#039;s]]) &#039;&#039;[[Pairing (HomeMatic)|gepairt]]&#039;&#039; (deutsch: &amp;quot;gepaart&amp;quot;) werden, damit sie von FHEM gesteuert oder ausgelesen werden können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Adresse eines HomeMatic Gerätes ist nicht frei einstellbar, sondern für jedes Gerät fest vorgegeben. Da die HM-Geräte über eine sehr komplexe Kanalstruktur verfügen, empfiehlt sich daher, die Geräte in FHEM per &#039;&#039;autocreate&#039;&#039; Funktion anlegen zu lassen, Eine nachträgliche Umbenennung oder manuelle Bearbeitung der erzeugten Konfigurationsdaten ist problemlos möglich.&lt;br /&gt;
&lt;br /&gt;
Zunächst mal muss man einen [[HomeMatic_Installieren|CUL/CUN/Homematic IO installieren]]. &lt;br /&gt;
&lt;br /&gt;
Einige Geräte werden mit aktivierter [[AES Encryption]] ausgeliefert (Meistens, aber nicht immer mit SEC im Namen). Das Anlernen an HM IO&#039;s funktioniert ohne Probleme, für alle CUL Derivate muss unbedingt der Hinweis im Artikel AES Encryption im Abschnitt I/O-Device &amp;lt;-&amp;gt; Gerät beachtet werden. &#039;&#039;&#039;Die dort beschriebene Installation sollte generell vorgenommen werden!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Danach geht es hier weiter:&lt;br /&gt;
&lt;br /&gt;
= Grundlagen=&lt;br /&gt;
Durch das Pairing wird ein HM-Gerät genau einem IO-Device (zB CUL) zugeordnet. Wenn ein Gerät mit dem IO-Device gepairt ist, kann es darüber gesteuert werden.  &lt;br /&gt;
  &lt;br /&gt;
Beim Pairing wird die HMID des IO-Device in das Gerät geschrieben. Das Pairing findet also im Wesentlichen im Gerät statt, nicht in FHEM selbst.&lt;br /&gt;
&lt;br /&gt;
Zu bemerken ist, dass ein IO-Device (zB CUL) standardmäßig die ID F11034 von FHEM erhält. Da viele HM-Geräte das IO-Device nur anhand der HMIDs erkennen, können alle in Reichweite der HM-Geräte befindlichen IO-Devices mit der in das HM-Gerät geschriebenen HMID das HM-Gerät steuern. Hinzu kommt, dass die &#039;&#039;autocreate&#039;&#039; Funktion die in Reichweite befindlichen HM-Geräte findet und automatisch einbindet. Nachbarn, die IO-Devices mit der gleichen HMID betreiben, können also HM-Geräte untereinander sehen und steuern!&lt;br /&gt;
&lt;br /&gt;
Es ist daher dringen zu empfehlen, die HMID vor dem Pairing der HM-Geräte mit: &lt;br /&gt;
&lt;br /&gt;
  attr &amp;lt;CUL&amp;gt; hmId &amp;lt;6-stellige Hexadresse&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zu individualisieren.  &lt;br /&gt;
&lt;br /&gt;
Gepairt wird nur das Device. Die Channels sind dem Device untergeordnet und somit implizit auch gepairt. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Ist ein Device gepairt werden Konfigurationsänderungen über die Zentrale (FHEM) vorgenommen. Man kann u.a. keine Kanäle mehr &#039;&#039;direkt&#039;&#039; peeren (verknüpfen). Stattdessen verwendet man Kommandos in FHEM. Siehe &amp;lt;u&amp;gt;[[Homematic_Peering_Beispiele|peeren]]&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= IO-Device in den Pairing-Modus versetzen =&lt;br /&gt;
* CUL/CUN/HMLAN Konfigurator in den &amp;quot;Akzeptiere-Pairing-Requests-Modus&amp;quot; bringen:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;CUL&amp;gt; hmPairForSec 600&lt;br /&gt;
&lt;br /&gt;
600 bedeutet hier, dass das IO-Device 600 Sekunden, also 10 Minuten lang im Pairing-Modus ist.&lt;br /&gt;
&lt;br /&gt;
Bei aktivem Pairing-Modus gibt das IO-Device folgende &#039;&#039;Internals&#039;&#039; Variable zurück: &lt;br /&gt;
&lt;br /&gt;
  hmPair 1&lt;br /&gt;
&lt;br /&gt;
Alternativ kann &lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;CUL&amp;gt; hmPairSerial &amp;lt;serial&amp;gt;&lt;br /&gt;
&lt;br /&gt;
genutzt werden.&lt;br /&gt;
&lt;br /&gt;
= Devices pairen =&lt;br /&gt;
&lt;br /&gt;
Das Gerät wird in den Anlern- oder auch Konfigurationsmode versetzt. Es sendet hierzu eine entsprechende Nachricht an alle. &lt;br /&gt;
Das Vorgehen ist stark vom Gerät(Typ) abhängig, bitte unbedingt das Handbuch lesen: Stichwort &amp;quot;anlernen&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Falls das Gerät einen separaten Anlernknopf hat, ist der normalerweise nur ganz kurz zu drücken. &lt;br /&gt;
Danach beginnt die LED regelmäßig zu blinken.&lt;br /&gt;
 &lt;br /&gt;
Hat das Gerät keinen separaten Anlernknopf, muss in der Regel eine Taste solange gedrückt werden, bis die LED anfängt regelmäßig zu blinken.&lt;br /&gt;
&lt;br /&gt;
Kommt der Anlernvorgang in Gang, wird dies durch ein wechselndes, schnelles  Blinken signalisiert. Kommt kein Anlernvorgang zustande, blinkt die LED regelmäßig für einen bestimmten Zeitraum (ca. 20 sec). &lt;br /&gt;
Ist das Gerät schon gepairt, werden bei batteriebetriebenen Geräten eventuell auch noch nicht übertragende Daten gesendet. Dabei blinkt die LED auch unregelmäßig.&lt;br /&gt;
{{Randnotiz|RNText=Hinweis: Das genaue Vorgehen ist bei jedem Gerätetyp anders -&amp;gt; unbedingt Handbuch genau lesen!}}&lt;br /&gt;
In FHEM werden nun:&lt;br /&gt;
* alle fehlenden Devices und Channels angelegt&lt;br /&gt;
* das Register pairCentral im Device gesetzt. &lt;br /&gt;
&lt;br /&gt;
Ein save danach sichert die neu gepairten Geräte in der Konfiguration.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Auch mit hmPairForSec kann jeweils nur &#039;&#039;&#039;ein&#039;&#039;&#039; Device gepaired werden. Für mehrere Devices den Vorgang bitte wiederholen.&lt;br /&gt;
&lt;br /&gt;
= Pairing verifizieren =&lt;br /&gt;
Nur weil ein Gerät angelegt wurde, heißt das &#039;&#039;&#039;nicht&#039;&#039;&#039;, dass es auch gepaired ist. In den Readings eines Devices muss stehen (list &amp;lt;name&amp;gt; oder im Webinterface):&lt;br /&gt;
&lt;br /&gt;
  R_pairCentral  0xABCDEF&lt;br /&gt;
&lt;br /&gt;
ABCDEF steht dabei für die HMID des IO-Device (zB CUL). Wurde für das IO-Device kein attribute mit einer individuellen HMID gesetzt, sollte hier die Standard-ID F11034 stehen. Die führende 0x steht für den Hinweis auf eine HEX-Adresse. &lt;br /&gt;
&lt;br /&gt;
Ist das Pairing noch nicht abgeschlossen, kann man nach kurzer Pause den Befehl: &lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-Gerät&amp;gt; getConfig &lt;br /&gt;
&lt;br /&gt;
absetzen, um zu prüfen, ob sich der Status zwischenzeitlich geändert hat. Wenn das Reading R_pairCentral nicht auftaucht oder der Wert mit set_ beginnt hat das Pairing &#039;&#039;&#039;nicht&#039;&#039;&#039; geklappt. Man kann entweder:&lt;br /&gt;
* noch einmal probieren, ein getConfig auszulösen - vielleicht hat das Lesen nicht funktioniert&lt;br /&gt;
* noch einmal pairen - das schadet nichts&lt;br /&gt;
* die Anlerntaste / Configtaste / irgendeine Taste am Gerät (hängt vom konkreten Device ab) wiederholt drücken um die Datenübertragung anzustoßen.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann man auch mit HMinfo einen Config check durchführen:&lt;br /&gt;
&lt;br /&gt;
  define hm HMInfo&lt;br /&gt;
  get hm configCheck&lt;br /&gt;
&lt;br /&gt;
= Vorgehen bei Problemen =&lt;br /&gt;
&lt;br /&gt;
Wenn das Pairing nicht erfolgreich ist, das Gerät sich also nicht steuern lässt, ist es möglich, dass es schon bzw. noch mit einem anderen IO-Device gepairt ist. Dann das Gerät in den Auslieferungszustand bringen (siehe Handbuch, oft Knopf mindestens 5 Sekunden drücken, bis es blinkt, dann loslassen und nochmals 5 Sekunden drücken, bis es schneller blinkt) und danach erneut pairen. &lt;br /&gt;
&lt;br /&gt;
Alternativ kann das Pairing per Befehl gelöst werden. Siehe dazu unten. &lt;br /&gt;
&lt;br /&gt;
Wenn das zu pairende Geräte ein Empfänger ist, kann mit FHEM per Telnet oder in der Kommandozeile des Webinterfaces folgendes Kommando abgesetzt werden:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;CUL&amp;gt; hmPairSerial &amp;lt;10-stellige Seriennummer&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die 10-stellige Seriennummer ist beim Empfängern idR. auf der Rückseite des Geräte aufgedruckt. Die Seriennummer fängt normalerweise mit Buchstaben an und endet mit Zahlen.&lt;br /&gt;
&lt;br /&gt;
Es gilt auch sicherzustellen, dass das zu pairende Gerät nicht bereits zuvor mit der Homematic Config Software gepairt wurde. Ist dies der Fall, so sollte das Pairing in der Homematic Config Software gelöscht und das Pairing in FHEM erneut durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Beim Pairen ist, wie im normalen Betrieb auch, ein Mindestabstand (etwa 1-2 Meter) zwischen dem Sender der Zentrale (CUL, HMLAN etc.) einzuhalten, da die Funkempfänger sonst mit Übersteuerung reagieren und keine Kommunikation zustande kommt.&lt;br /&gt;
Außerdem kann die Funklast beim Auslesen einer unfangreichen Konfiguration eines Gerätes bereits nach wenigen Versuchen das Limit der 1%-Regel erreichen. Sollte also scheinbar keine Kommunikation stattfinden können, ist auch zu prüfen, ob der Zentralensender sich deswegen temporär deaktiviert hat.&lt;br /&gt;
&lt;br /&gt;
= Gezieltes Pairing =&lt;br /&gt;
Bei bereits bekanntem HM-Gerät kann man mit:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;Name HM-Gerät&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
das pairing überschreiben. Es funktioniert aber nur, wenn schon ein IO-Device eingetragen ist.&lt;br /&gt;
&lt;br /&gt;
= Pairing lösen =&lt;br /&gt;
Das Pairing kann mit:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;Name HM-Gerät&amp;gt; unpair&lt;br /&gt;
&lt;br /&gt;
gelöst werden. Wichtig ist dabei, dass das IO-Device, das entpairt werden soll, mit der ursprünglich in das HM-Gerät geschriebenen HMID konfiguriert ist.  &lt;br /&gt;
&lt;br /&gt;
Sollte man z.B. ein HomeMatic HM-CC-RT-DN Funk-Heizkörperthermostat und ein Fensterkontakt verbunden haben, so steht unter THERMOSTAT_WindowRec im Attribut peerIDs die ID des Fensterkontakts.&lt;br /&gt;
Bei einem Defekt des Fensterkontakts sollte man wie im HM-CC-RT-DN beschrieben das unset durchführen. Hat man aber das Device Fensterkontakt gelöscht und das Pairing nicht durchgeführt, so kann man die Zuordnung im Heizkörperthermostat dennoch mit folgenden Befehl aufheben.&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;Name HM-Gerät&amp;gt;_WindowRec peerBulk &amp;lt;peerID&amp;gt; unset&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-TC-IT-WM-W-EU_Funk-Wandthermostat_AP&amp;diff=23044</id>
		<title>HM-TC-IT-WM-W-EU Funk-Wandthermostat AP</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-TC-IT-WM-W-EU_Funk-Wandthermostat_AP&amp;diff=23044"/>
		<updated>2017-10-24T20:11:45Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: Information um die Luftfeuchtigkeit im Plot zu erhalten&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-TC-IT-WM-W-EU.jpg&lt;br /&gt;
|Bildbeschreibung=HM-TC-IT-WM-W-EU mit Standard-Einstellungen&lt;br /&gt;
|HWProtocol=[[HomeMatic]]&lt;br /&gt;
|HWType=[[HomeMatic Type Thermostat|thermostat]]&lt;br /&gt;
|HWCategory=[[:Kategorie:Temperatursensoren|Temperatursensoren]] [[:Kategorie:Feuchtesensoren|Feuchtesensoren]]&lt;br /&gt;
|HWComm=868,3 MHz&lt;br /&gt;
|HWChannels=7&lt;br /&gt;
|HWVoltage=3 V&lt;br /&gt;
|HWPowerConsumption=40 mA (max)&lt;br /&gt;
|HWPoweredBy=2 x LR6/Mignon/AA&lt;br /&gt;
|HWSize=ohne Rahmen: 55&amp;amp;#8239;x&amp;amp;#8239;55&amp;amp;#8239;x&amp;amp;#8239;20&amp;amp;nbsp;mm&amp;lt;br /&amp;gt;mit Rahmen: 86&amp;amp;#8239;x&amp;amp;#8239;86&amp;amp;#8239;x&amp;amp;#8239;21,5&amp;amp;nbsp;mm&lt;br /&gt;
|HWDeviceFHEM=[[CUL_HM]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=ELV / eQ-3&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;HM-TC-IT-WM-W-EU Funk-Wandthermostat AP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
HomeMatic-Wandthermostat Aufputz. Verfügbar seit Februar 2014. Nachfolger des [[HM-CC-TC_Funk-Wandthermostat|HM-CC-TC]].&lt;br /&gt;
&lt;br /&gt;
== Vorbemerkungen ==&lt;br /&gt;
: &#039;&#039;→ Allgemeine Informationen, die alle HomeMatic Thermostate betreffen, sind unter [[HomeMatic Type Thermostat]] zu finden.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;&#039;HM-TC-IT-WM-W-EU Funk-Wandthermostat&#039;&#039;&#039; misst die Raumtemperatur und Luftfeuchtigkeit. Er verfügt über individuell einstellbare Wochenprogramme und Programmierung direkt am Gerät. Zusätzlich ist auch eine Boost-Funktion vorhanden (ermöglicht ein schnelles, kurzzeitiges Aufheizen des Heizkörpers). Er verfügt über ein eigenes Anzeigedisplay für Soll- und Isttemperatur sowie Luftfeuchtigkeit. Er kann mittels Klebestreifen irgendwo aufgeklebt werden, soll aber auch in Mehrfachrahmen von Berker, ELSO, Gira, Merten und JUNG passen.&lt;br /&gt;
&lt;br /&gt;
Der Hauptnutzen gegenüber den Heizkörperthermostaten besteht neben einer weitaus bequemeren Bedienung und der möglichen Anzeige von Istwerten von Temperatur und Luftfeuchte auch in einer Entkopplung der Raumtemperaturreglung aus der räumlichen Nähe des Heizkörpers. Zusätzlich oder alternativ zur Heizkörpersteuerung ist auch die Anbindung von Fußbodenheizung oder anderen Wärmequellen über einen funkgesteuerten Schaltaktor durch einen separaten Schaltkanal möglich.&lt;br /&gt;
&lt;br /&gt;
== Technische Daten ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technische Daten:&#039;&#039;&#039;&lt;br /&gt;
* Versorgungsspannung: 2 Stck. 1,5 V LR03/Micro/AAA&lt;br /&gt;
* Stromaufnahme (max.): 40 mA&lt;br /&gt;
* Schutzart: IP20&lt;br /&gt;
* Schutzklasse: III&lt;br /&gt;
* Abmessungen (BxHxT ohne Rahmen): 55 x 55 x 20 mm&lt;br /&gt;
* Abmessungen (BxHxT mit Rahmen): 86 x 86 x 21,5 mm&lt;br /&gt;
* Gewicht (ohne Batterien): 74 g&lt;br /&gt;
* Temperaturwahl in Schritten von: 0,5 °C&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zum HM-CC-TC kann der HM-TC-IT-WM-W-EU auch andere HomeMatic-Schaltaktoren (z.B. [[HM-LC-SW1-FM_Schaltaktor_1-fach_UP|HM-LC-SW1-FM]]) über den Channel 07 SwitchTr direkt anlernen, womit z.B. die Steuerung elektrischer Heizungen möglich wird. Der HM-CC-TC konnte direkt nur die HM-CC-VD steuern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Betrieb mit FHEM ==&lt;br /&gt;
&lt;br /&gt;
Zuerst muss das Wandthermostat mit FHEM gepairt werden. &lt;br /&gt;
&lt;br /&gt;
Das [[Pairing (HomeMatic)|Pairing]] sollte wie in [[HomeMatic Devices pairen]] beschrieben durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Danach kann das [[Peering (HomeMatic)|Peering]] mit den Heizkörperthermostaten des betreffenden Raumes stattfinden:&lt;br /&gt;
&lt;br /&gt;
=== Channels (Kanäle) ===&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 01 _Weather ====&lt;br /&gt;
Damit das [[HM-CC-RT-DN Funk-Heizkörperthermostat]] die Temperatur des Wandthermostats übernimmt, muss der Weather Kanal gepeert werden:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-TC-IT-WM-W-EU-Gerät&amp;gt;_Weather peerChan 0 &amp;lt;HM-CC-RT-DN-Gerät&amp;gt;_Weather single set&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 02 _Climate ====&lt;br /&gt;
Damit der Heizkörperthermostat vom Wandthermostat auch eingestellt werden kann (Soll-Temperatur, Mode etc.), muss der Climate Kanal gepeert werden:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-TC-IT-WM-W-EU-Gerät&amp;gt;_Climate peerChan 0 &amp;lt;HM-CC-RT-DN-Gerät&amp;gt;_Climate single set&lt;br /&gt;
Dies muss für jedes zu steuernde Heizkörperthermostat wiederholt werden.&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 03 _WindowRec ====&lt;br /&gt;
Mit diesem Kanal lassen sich Fensterkontakte (HM-SEC-SC oder HM-SEC-RHS) peeren, die ihren Fensterstatus (geöffnet/gekippt) an ein oder mehrere Thermostate senden. Die Thermostate stellen anschließend die entsprechende (konfigurierbare) Temperatur ein. Der Temperaturwert kann je Fenster-Sensor unterschiedlich definiert werden. Sind mehrere Fenster gleichzeitig geöffnet, so wird der Thermostat auf die Temperatur des Sensors mit dem geringsten Temperaturwert eingestellt. &lt;br /&gt;
&lt;br /&gt;
Damit der Tür-Fensterkontakt den Thermostat aufwecken kann, muss zuerst der Burst-Modus aktiviert werden, siehe dazu [[HM-SEC-SC_Tür-Fensterkontakt#Problembehebung]].&lt;br /&gt;
&lt;br /&gt;
Das eigentliche Peering mit einem Tür-Fensterkontakt läuft wie folgt ab:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-Sec-SC&amp;gt; peerChan 0 &amp;lt;HM-TC-IT-WM-W-EU-Gerät&amp;gt;_WindowRec single set&lt;br /&gt;
&lt;br /&gt;
Der Befehl zur Temperatureinstellung des Heizkörperthermostaten für den Zustand &amp;quot;Fenster offen&amp;quot; lautet, wobei &amp;lt;fensterSensor&amp;gt; die FHEM-Kanalbezeichnung für den Fensterkontakt ist und &amp;lt;tc_WindowRec&amp;gt; die Kanalbezeichnung für den entsprechenden Kanal des Heizkörperthermostates, sowie &amp;lt;Temp&amp;gt; die einzustellende Temperatur (ganzzahliger Wert):&lt;br /&gt;
 set &amp;lt;tc_WindowRec&amp;gt; regSet winOpnTemp &amp;lt;Temp&amp;gt; &amp;lt;fensterSensor&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 06 _remote ====&lt;br /&gt;
Dieser Kanal kann an eine Fernbedienung gekoppelt werden. Per Tastendruck kann man einen bestimmten Mode und/oder eine bestimmte Temperatur wählen. Dabei kann die Reaktion auf einen langen oder kurzen Tastendruck gesondert eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Der Befehl zum peeren lautet, wobei &amp;lt;button&amp;gt; die Kanalbezeichnung der Fernbedienung und &amp;lt;tc-remote&amp;gt; die Kanalbezeichnung des Heizkörperthermostates ist:&lt;br /&gt;
&amp;lt;pre&amp;gt;set &amp;lt;button&amp;gt; peerChan 0 &amp;lt;rt-remote&amp;gt; single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 07 _SwitchTr ====&lt;br /&gt;
Dieser Kanal kann direkt mit einem HomeMatic-Schaltaktor verknüpft (gepeert) werden, um temperaturgesteuerte Schaltvorgänge auszulösen. Eine direkte Nutzung als Feuchtigkeitssensor zur Lüftungssteuerung ist hingegen nicht möglich. Geeignete Aktoren sind alle dauerhaft mit Klein- oder Netzspannung versorgten Aktoren, die zum Betrieb keinen sog. Burst benötigen (Hutschienen-, Unterputz- und Wandmontage). Nicht geeignet sind demnach die batterieversorgten ein- oder vierkanaligen HM-LC-Sw(x)-BA-PCB-Aktoren oder das Empfangsmodul HM-MOD-Re-8, weil der Thermostat den zum &amp;quot;Aufwecken&amp;quot; dieser Geräte nötigen Burst nicht senden kann. &lt;br /&gt;
&lt;br /&gt;
Das Peering mit einem Schaltaktor läuft z.B. wie folgt ab:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-TC-IT-WM-W-EU_SwitchTr&amp;gt; peerChan 0 &amp;lt;HM-LC-SW1-FM&amp;gt; single set&lt;br /&gt;
&lt;br /&gt;
Dies allein ist nicht ausreichend, da der so gepeerte Aktor sich bei jedem Heizbefehl abwechselnd ein- und ausschaltet, da er die Ausschaltbefehle des Thermostaten (short trigger mit Wert 0) ignoriert. Um das zu korrigieren, wird er so programmiert, dass er, wenn eingeschaltet, auf den Ausschaltbefehl reagiert (und ihn ansonsten ignoriert):&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-LC-SW1-FM&amp;gt; regSet shCtOn ltLo &amp;lt;HM-TC-IT-WM-W-EU_SwitchTr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Möchte man mit dem Aktor ein inverses Verhalten erreichen (etwa beim Einsatz als Kühlthermostat oder für stromlos offene Ventilsteuerköpfe von Fußbodenheizungen), so setzt man &#039;&#039;&#039;stattdessen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-LC-SW1-FM&amp;gt; regSet shCt[[Off]] ltLo &amp;lt;HM-TC-IT-WM-W-EU_SwitchTr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Einstellungen ==&lt;br /&gt;
&lt;br /&gt;
Die folgenden Einstellungen werden in **Registern** des HM-TC-IT-WM-W-EU vorgenommen. Das heißt, dass diese Einstellungen im Gerät selbst gespeichert werden, nicht in der Konfigurations-Datei von FHEM.&lt;br /&gt;
&lt;br /&gt;
=== Anzeige ===&lt;br /&gt;
&lt;br /&gt;
Register im Kanal&amp;amp;nbsp;2 &#039;&#039;(_Climate)&#039;&#039; erlauben es zu konfigurieren, welche Daten der HM-TC-IT-WM-W-EU in seinem LC-Display anzeigt.&lt;br /&gt;
&lt;br /&gt;
==== showInfo time|date ====&lt;br /&gt;
&lt;br /&gt;
Wählt aus, ob die &#039;&#039;Uhrzeit&#039;&#039; (&amp;lt;code&amp;gt;time&amp;lt;/code&amp;gt;, Standard-Einstellung) oder das &#039;&#039;Datum&#039;&#039; (&amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt;) angezeigt wird. Der folgende Befehl erlaubt es das Datum anzeigen zu lassen:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt;_Climate regSet showInfo date&lt;br /&gt;
&lt;br /&gt;
==== showSetTemp actTemp|setTemp ====&lt;br /&gt;
&lt;br /&gt;
Wählt aus, ob die &#039;&#039;Ist-Temperatur&#039;&#039; (&amp;lt;code&amp;gt;actTemp&amp;lt;/code&amp;gt;, Standard-Einstellung) oder die &#039;&#039;Soll-Temperatur&#039;&#039; (&amp;lt;code&amp;gt;setTemp&amp;lt;/code&amp;gt;) im Display angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt;_Climate regSet showSetTemp setTemp&lt;br /&gt;
&lt;br /&gt;
==== showHumidity temp|tempHum ====&lt;br /&gt;
&lt;br /&gt;
Wählt aus, ob dauerhaft die &#039;&#039;Temperatur&#039;&#039; (&amp;lt;code&amp;gt;temp&amp;lt;/code&amp;gt;, Standard-Einstellung) oder &#039;&#039;Temperatur und Luftfeuchtigkeit&#039;&#039; im Wechsel (&amp;lt;code&amp;gt;tempHum&amp;lt;/code&amp;gt;) im Display angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt;_Climate regSet showHumidity tempHum&lt;br /&gt;
&lt;br /&gt;
=== Tastensperre ===&lt;br /&gt;
&lt;br /&gt;
Um zu verhindern, dass der Modus oder die Temperatur per Tasten bzw. Drehrad am HM-TC-IT-WM-W-EU verändert wird, kann eine Tastensperre gesetzt werden. Dies erfolgt mittels des Befehls:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt; regSet btnLock on&lt;br /&gt;
&lt;br /&gt;
Rückgängig machen geht per:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt; regSet btnLock off&lt;br /&gt;
&lt;br /&gt;
Diese Tastensperre kann man aber am Thermostat durch eine Tastenkombination wieder zurücksetzen. Um sie nur per FHEM rücksetzen zu können, muss&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt; regSet globalBtnLock on&lt;br /&gt;
&lt;br /&gt;
abgesetzt werden. Rückgängig wieder per:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt; regSet globalBtnLock off&lt;br /&gt;
&lt;br /&gt;
=== Temperaturlisten ===&lt;br /&gt;
&lt;br /&gt;
Die Temperaturlisten des HM-TC-IT-WM-W-EU werden identisch zu anderern HomeMatic Thermostaten verwaltet, siehe [[HomeMatic Type Thermostat#Temperaturlisten|HomeMatic Type Thermostat]]. Beim HM-TC-IT-WM-W-EU ist der Kanal&amp;amp;nbsp;2 &#039;&#039;(_Climate)&#039;&#039; für die Temperaturlisten zuständig.&lt;br /&gt;
&lt;br /&gt;
=== Luftfeuchtigkeit in Plot ===&lt;br /&gt;
&lt;br /&gt;
Um die Luftfeuchtigkeit im Plot darzustellen benötigt man im Logfile folgenden Eintrag:&lt;br /&gt;
&lt;br /&gt;
 2017-10-24_22:03:12 WANDTHERMOSTAT_Weather humidity: 61&lt;br /&gt;
&lt;br /&gt;
Um diesen zu erhalten muss man in der Logfile Konfiguration evtl. das DEF um die Weather Information erweitern:&lt;br /&gt;
&lt;br /&gt;
Standardbeispiel:&lt;br /&gt;
 ./log/WANDTHERMOSTAT-%Y.log WANDTHERMOSTAT&lt;br /&gt;
&lt;br /&gt;
Erweiterung:&lt;br /&gt;
 ./log/WANDTHERMOSTAT-%Y.log WANDTHERMOSTAT|WANDTHERMOSTAT_Weather:.*&lt;br /&gt;
&lt;br /&gt;
== FHEM-Log ==&lt;br /&gt;
=== Event monitor ===&lt;br /&gt;
&lt;br /&gt;
Hier habe ich einmal die Wunschtemperatur erhöht, damit auch was passiert:&lt;br /&gt;
&lt;br /&gt;
  2014-04-09 09:35:11 CUL_HM KH_Bad_Therm CMDs_pending&lt;br /&gt;
  2014-04-09 09:35:11 CUL_HM KH_Bad_Therm_Climate set_desired-temp 18.0&lt;br /&gt;
  2014-04-09 09:35:11 CUL_HM KH_Bad_Therm CMDs_done&lt;br /&gt;
&lt;br /&gt;
Bei mir ist es so, das der SwitchTr Kanal nur mit dem gepeerten Device spricht, hier ein HM-LC-SW1-FM:&lt;br /&gt;
&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung trig_KH_Bad_Therm_SwitchTr: 200&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung trigLast: KH_Bad_Therm_SwitchTr :200&lt;br /&gt;
&lt;br /&gt;
Der hat auch prompt reagiert und die Heizung eingeschaltet:&lt;br /&gt;
&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung level: 100&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung pct: 100&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung deviceMsg: on (to KH_Bad_Therm)&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung on&lt;br /&gt;
  2014-04-09 09:35:17 CUL_HM KH_Bad_Heizung timedOn: off&lt;br /&gt;
&lt;br /&gt;
und noch ein wenig Geplauder der vorhandenen Kanäle:&lt;br /&gt;
&lt;br /&gt;
  2014-04-09 09:36:39 CUL_HM KH_Bad_Therm_Climate measured-temp: 16.0&lt;br /&gt;
  2014-04-09 09:36:39 CUL_HM KH_Bad_Therm_Climate desired-temp: 18.0&lt;br /&gt;
  2014-04-09 09:36:39 CUL_HM KH_Bad_Therm_Climate humidity: 50&lt;br /&gt;
  2014-04-09 09:36:39 CUL_HM KH_Bad_Therm_Climate T: 16.0 desired: 18.0&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm battery: ok&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm batteryLevel: 3&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm measured-temp: 16.0&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm desired-temp: 18.0&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm_Climate measured-temp: 16.0&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm_Climate desired-temp: 18.0&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm_Climate mode: auto&lt;br /&gt;
  2014-04-09 09:36:49 CUL_HM KH_Bad_Therm_Climate T: 16.0 desired: 18.0&lt;br /&gt;
  2014-04-09 09:36:59 CUL_HM KH_Bad_Therm_Weather temperature: 16.0&lt;br /&gt;
  2014-04-09 09:36:59 CUL_HM KH_Bad_Therm_Weather humidity: 50&lt;br /&gt;
  2014-04-09 09:36:59 CUL_HM KH_Bad_Therm_Weather T: 16.0 H: 50&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Firmware Update ==&lt;br /&gt;
Updates für den HM-TC-IT-WM-W-EU können von der eQ-3 Webseite heruntergeladen werden. Genauere Informationen gibt es unter [[HomeMatic_Firmware_Update]]. Das Thermostat wird in den Updatemodus gebracht, indem beide äußeren Tasten gedrückt werden, während die Batterien eingesetzt werden. Das Display zeigt &amp;quot;FUP&amp;quot; an.&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Bei der Firmware 1.2 und dem Kanal Climate funktioniert die Einstellung der Hysterese über das Register hyst2point nicht. Der Eintrag wird ignoriert. &lt;br /&gt;
&lt;br /&gt;
Siehe auch Bericht im [http://www.elv.de/topic/hystereseeinstellung-bei-hm-tc-it-wm-w-eu-firmware-1-2-wird-ignoriert.html Forum von ELV]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/pdf_produkte/HM-TC-IT-WM-W-EU_UM_GE_eQ-3_web.pdf Manual]&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/pdf_produkte/Funk-Wandthermostat_132030A0_Produktdatenblatt_V1.2.pdf Produktdatenblatt] &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Feuchtesensoren]]&lt;br /&gt;
[[Kategorie:Temperatursensoren]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-CC-RT-DN_Funk-Heizk%C3%B6rperthermostat&amp;diff=22712</id>
		<title>HM-CC-RT-DN Funk-Heizkörperthermostat</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-CC-RT-DN_Funk-Heizk%C3%B6rperthermostat&amp;diff=22712"/>
		<updated>2017-09-24T19:27:18Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Channel (Kanal) 01 _Weather */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-CC-RT-DN.jpg&lt;br /&gt;
|Bildbeschreibung=HM-CC-RT-DN an Heizkörper montiert&lt;br /&gt;
|HWProtocol=[[HomeMatic]]&lt;br /&gt;
|HWType=[[HomeMatic Type Thermostat|thermostat]]&lt;br /&gt;
|HWCategory=[[:Kategorie:Heizungsventile|Heizungsventile]]&lt;br /&gt;
|HWComm=868 MHz&lt;br /&gt;
|HWChannels=6&lt;br /&gt;
|HWVoltage=3&amp;amp;nbsp;V&lt;br /&gt;
|HWPowerConsumption=180&amp;amp;nbsp;mA&lt;br /&gt;
|HWPoweredBy=2x LR6/Mignon/AA&lt;br /&gt;
|HWSize=54x65x93 mm (BxHxT)&lt;br /&gt;
|HWDeviceFHEM=[[CUL_HM]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=ELV / eQ-3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HM-CC-RT-DN&#039;&#039;&#039; (häufig einfach &#039;&#039;&#039;RT&#039;&#039;&#039; genannt) ist ein Funk-&#039;&#039;Heizkörperthermostate&#039;&#039; mit integriertem &#039;&#039;Stellantrieb&#039;&#039;. Das Thermostat ist seit September&amp;amp;nbsp;2013 verfügbar und ist der Nachfolger des [[HM-CC-VD Funk-Stellantrieb]]s.&lt;br /&gt;
&lt;br /&gt;
== Vorbemerkungen ==&lt;br /&gt;
: &#039;&#039;→ Einstellungen und Informationen, die alle [[HomeMatic]] Thermostate betreffen, sind unter [[HomeMatic Type Thermostat#Temperaturlisten|HomeMatic Type Thermostat]] zu finden.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der HM-CC-RT-DN kann die Temperatur selbst messen (im Gegensatz zum [[HM-CC-VD Funk-Stellantrieb|Vorgänger]]) und verfügt über eine Fenster-Offen-Erkennung sowie eine Boost-Funktion. Der HM-CC-RT-DN &#039;&#039;kann&#039;&#039; von einem [[HM-TC-IT-WM-W-EU Funk-Wandthermostat AP]] gesteuert werden, das ist aber &#039;&#039;optional&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Das Gerät wird seit Anfang Oktober 2013 von FHEM unterstützt (siehe Diskussion im {{Link2Forum|Topic=14738|LinkText=Forum}}).&lt;br /&gt;
&lt;br /&gt;
Der HM-CC-RT-DN scheint das erste HomeMatic-Device zu sein, bei dem ein Update der Firmware auch vom Anwender durchgeführt werden kann. Ein Firmware-Update erfordert einen [[HM-CFG-USB_USB_Konfigurations-Adapter|USB Konfigurations-Adapter]] und eine auf der eQ-3 Webseite herunterladbare Firmwareupdate-Software. Weitere Details sind unter [[#Firmware Update|Firmware Update]] beschrieben.&lt;br /&gt;
{{Hinweis|Die Solltemperaturen eines HM-CC-RT-DN lassen sich &#039;&#039;nicht&#039;&#039; durch einen [[HM-CC-TC Funk-Wandthermostat]] &#039;&#039;steuern&#039;&#039;. Dieser kann nur die Ist-Temperatur an den HM-CC-RT-DN weitergeben, damit nicht die am HM-CC-RT-DN direkt gemessene Raumtemperatur zur Regelung verwendet wird.}}&lt;br /&gt;
Mit einem HM-CC-RT-DN können maximal (neben der Zentrale/FHEM):&lt;br /&gt;
* 7 HomeMatic Heizkörperthermostate&lt;br /&gt;
* 8 HomeMatic Tür-Fensterkontakte / Fenster-Drehgriffkontakte&lt;br /&gt;
* 8 Tastenpaare von HomeMatic Fernbedienungen bzw. Display-Wandtaster&lt;br /&gt;
* 1 HomeMatic Innen-Temperatur-Sensor&lt;br /&gt;
[[Peering (HomeMatic)|gepeert]] werden.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Wird für Wartungs-/Umbaumaßnahmen das Wasser der Heizung abgelassen bzw. diese neubefüllt, sind alle Stellantriebe manuell dauerhaft auf &#039;&#039;&#039;on&#039;&#039;&#039; zu setzen: set &amp;lt;HM_Stellantrieb&amp;gt;_Clima controlManu on. Beim Einsatz eines Wandthermostaten ist der Wandthermostat entsprechend einzustellen.}}&lt;br /&gt;
&lt;br /&gt;
== Technische Daten ==&lt;br /&gt;
* Betriebsspannung: 2 Stck. 1,5V LR6/Mignon/AA&lt;br /&gt;
* Stromaufnahme: 180 mA max.&lt;br /&gt;
* Abmessungen (B x H x T): 54 x 65 x 93 mm&lt;br /&gt;
* Gewicht: 180 g (ohne Batterien)&lt;br /&gt;
* Ventilanschluss: M30 x 1,5 mm&lt;br /&gt;
&lt;br /&gt;
Aktuelle Firmware: 1.4&lt;br /&gt;
&lt;br /&gt;
== Betrieb mit FHEM ==&lt;br /&gt;
Der Funk-Heizkörperthermostat muss zuerst mit FHEM [[Pairing (HomeMatic)|gepairt]] werden. Stellen Sie sicher, dass FHEM aktuell ist (update durchführen)&lt;br /&gt;
&lt;br /&gt;
Das Pairing sollte wie in [[HomeMatic Devices pairen]] beschrieben durchgeführt werden &lt;br /&gt;
&lt;br /&gt;
=== Channels (Kanäle) ===&lt;br /&gt;
==== Channel (Kanal) 01 _Weather ====&lt;br /&gt;
&lt;br /&gt;
Dieser Kanal dient zur Einspeisung der (gemessenen) &#039;&#039;Ist-Temperatur&#039;&#039;. Als Sensor können zum Beispiel das [[HM-TC-IT-WM-W-EU Funk-Wandthermostat AP|HM-TC-IT-WM-W-EU Funk-Wandthermostat]] oder ein [[HM-WDS40-TH-I Funk-Temperatur-/Feuchtesensor innen (IT)|HM-WDS40-TH-I Funk-Temperatur-/Feuchtesensor]] dienen.&lt;br /&gt;
&lt;br /&gt;
Ein Temperatur-Sensor &#039;&#039;tempSensor&#039;&#039; kann mit dem &#039;&#039;_Weather&#039;&#039;-Kanal wie folgt [[Peering (HomeMatic)|gepeert]] werden: &lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt;_Weather peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_Weather single set&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
  set EG_Buero_WANDTHERMOSTAT_Weather peerChan 0 EG_Buero_THERMOSTAT_Weather single set&lt;br /&gt;
&lt;br /&gt;
ACHTUNG: Das Wandthermostat sowie das Thermostat Ventil (Beispiel &amp;quot;EG_Buero_WANDTHERMOSTAT&amp;quot; und EG_Buero_THERMOSTAT) werden vorher in FHEM den Status &amp;quot;CMDs_done&amp;quot; anzeigen.&lt;br /&gt;
Beim peerChan wird dann bei beiden &amp;quot;CMDs_pending&amp;quot; stehen. Wobei das Wandthermostat sehr schnell wieder auf CMDs_done zurück springt.&lt;br /&gt;
Allerdings ist dingend darauf zu achten, dass das Thermostat Ventil auch wieder auf  &amp;quot;CMDs_done&amp;quot; wechselt, bevor man den nächsten Befehl absendet.&lt;br /&gt;
Das Heizkörper Ventile kann unter umständen 3 bis 5 min benötigen bis wieder &amp;quot;CMDs_done&amp;quot; steht. Evtl. kann man dies durch die BOOST Taste beschleunigen. Da das Ventil etwa alle 3 min aufwacht, prüft und Daten sendet / empfängt. Sollte man mit dem Befehlen weiter gemacht haben, so kann es zu Problemen führen, das einer nicht mehr mit dem Pending aufhört. In dem Fall empfiehlt es sich beide Devices von Fhem abzumelden und auf Werkseinstellung zu resetten. &lt;br /&gt;
&lt;br /&gt;
Zum Test haucht man das Wandthermostat an oder hält es einige Zeit in der Hand bis die Temperatur steigt, nach etwa 3 Minuten sollte man auch am Thermostat Ventil ein Temperaturanstieg sehen.&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 02 _Climate ====&lt;br /&gt;
Dieser Kanal erlaubt es dem [[HM-TC-IT-WM-W-EU Funk-Wandthermostat AP|HM-TC-IT-WM-W-EU Funk-Wandthermostat]] den HM-CC-RT-DN zu steuern. Dazu müssen die beiden Geräte gepeert werden:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt;_Climate peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_Climate single set&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 03 _WindowRec ====&lt;br /&gt;
Mit diesem Kanal können Fensterkontakte ([[HM-SEC-SC Tür-Fensterkontakt|HM-SEC-SC]] und [[HM-Sec-RHS Funk-Fenster-Drehgriffkontakt|HM-SEC-RHS]]) ihren Fensterstatus (geöffnet / gekippt) an ein oder mehrere Thermostate senden. Die Thermostate stellen anschließend die entsprechende (konfigurierbare) Temperatur ein. Der Temperaturwert kann je Fenster-Sensor unterschiedlich definiert werden. Sind mehrere Fenster gleichzeitig geöffnet, so wird der Thermostat auf die Temperatur des Sensors mit dem geringsten Temperaturwert eingestellt. &lt;br /&gt;
Ferner wird empfohlen, bei Einsatz von externen Sensoren, die interne „Fenster auf Erkennung“ zu deaktivieren (weitere Details sind im [[HM-CC-RT-DN Funk-Heizkörperthermostat#Channel .28Kanal.29 04 _Clima|Channel (Kanal) 04 _Clima]] beschrieben).&lt;br /&gt;
&lt;br /&gt;
Der Befehl zum Peeren lautet, wobei &amp;lt;fensterSensor&amp;gt; die FHEM-Kanalbezeichnung für den Fensterkontakt ist und &amp;lt;rt_WindowRec&amp;gt; die Kanalbezeichnung für den entsprechenden Kanal des Heizkörperthermostates:&lt;br /&gt;
 set &amp;lt;fensterSensor&amp;gt; peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_WindowRec single set&lt;br /&gt;
&lt;br /&gt;
Zum Löschen (=unpeeren) dieser Kopplung:&lt;br /&gt;
 set &amp;lt;fensterSensor&amp;gt; peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_WindowRec single unset&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung&#039;&#039;&#039;: Der Peer-(Lösch)Vorgang muss erst am Fensterkontakt durch Drücken der Anlerntaste ausgelöst werden, und zwar auch dann, wenn der Fensterkontakt schon vorher mit FHEM gepairt wurde. Dann kann der oben genannte Befehl in FHEM abgesetzt werden. Wichtig scheint auch, dass der Fensterkontakt geschlossen ist wenn man die Anlerntaste drückt.&lt;br /&gt;
&lt;br /&gt;
Der Befehl zur Temperatureinstellung des Heizkörperthermostaten für den Zustand &amp;quot;Fenster offen&amp;quot; lautet, wobei &amp;lt;fensterSensor&amp;gt; die FHEM-Kanalbezeichnung für den Fensterkontakt ist und &amp;lt;rt_WindowRec&amp;gt; die Kanalbezeichnung für den entsprechenden Kanal des Heizkörperthermostates, sowie &amp;lt;Temp&amp;gt; die einzustellende Temperatur (ganzzahliger Wert):&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt;_WindowRec regSet winOpnTemp &amp;lt;Temp&amp;gt; &amp;lt;fensterSensor&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 04 _Clima ====&lt;br /&gt;
Dieser Kanal dient zum Einstellen der Betriebsparameter, auch [[#Temperaturlisten|Temperaturlisten]] sind hierauf zu übertragen.&lt;br /&gt;
Mit dem Modul [[Weekprofile|Wochenplan / Weekprofile]] können die Wochenpläne komfortabel in FHEM erstellt und an die Thermostate übertragen werden.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|In älteren Versionen von FHEM wurde dieser Kanal durch &#039;&#039;autocreate&#039;&#039; als &amp;lt;code&amp;gt;_ClimRT_tr&amp;lt;/code&amp;gt; angelegt. Der Hersteller hat hier offenbar die internen Bezeichnungen geändert, denn beim Vorläufernmodell HM-CC-TC mussten Temperaturlisten auf den Kanal &#039;&#039;Climate&#039;&#039; übertragen werden.}}&lt;br /&gt;
&lt;br /&gt;
Die maximale Öffnung des Ventils kann mittels folgendem Befehl eingestellt werden (hier auf 80 %):&lt;br /&gt;
  set &amp;lt;HM-CC-RT-DN&amp;gt;_Clima regSet valveMaxPos 80&lt;br /&gt;
&lt;br /&gt;
Die interne &amp;quot;Fenster-auf&amp;quot;-Erkennung kann man wie folgt abschalten:&lt;br /&gt;
  set &amp;lt;HM-CC-RT-DN&amp;gt;_Clima regSet winOpnMode off&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 05 _ClimaTeam ====&lt;br /&gt;
Dieser Kanal erlaubt es mehrere HM-CC-RT-DN zu einem &amp;quot;Team&amp;quot; zu gruppieren. Ein Mitglied des Teams meldet&lt;br /&gt;
* Änderungen der Temperatur am Handrad&lt;br /&gt;
* Einschalten des Boost-Modus am Taster&lt;br /&gt;
an seine &amp;quot;Teamkollegen&amp;quot; weiter. Folgende Änderungen werden &#039;&#039;&#039;nicht&#039;&#039;&#039; weitergegeben:&lt;br /&gt;
* Status der Fensterkontakte&lt;br /&gt;
* Temperaturlisten/Wochenplan und daraus folgende Änderungen&lt;br /&gt;
* Änderungen durch Fernbedienungen&lt;br /&gt;
* Änderungen durch eine HomeMatic-Zentrale&lt;br /&gt;
&lt;br /&gt;
Befehl zum Peeren, wobei &#039;&#039;&amp;lt;HM-CC-RT-DN#1&amp;gt;_ClimaTeam&#039;&#039;, &#039;&#039;&amp;lt;HM-CC-RT-DN#2&amp;gt;_ClimaTeam&#039;&#039;, ..., &#039;&#039;&amp;lt;HM-CC-RT-DN#8&amp;gt;_ClimaTeam&#039;&#039; die Kanalbezeichnungen der jeweiligen ClimaTeam-Kanäle sind:&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN#1&amp;gt;_ClimaTeam peerChan 0 &amp;lt;HM-CC-RT-DN#2&amp;gt;_ClimaTeam single&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN#1&amp;gt;_ClimaTeam peerChan 0 &amp;lt;HM-CC-RT-DN#3&amp;gt;_ClimaTeam single&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN#2&amp;gt;_ClimaTeam peerChan 0 &amp;lt;HM-CC-RT-DN#3&amp;gt;_ClimaTeam single&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 06 _remote ====&lt;br /&gt;
Dieser Kanal kann an eine Fernbedienung gekoppelt werden. Per Tastendruck kann man einen bestimmten Mode und/oder eine bestimmte Temperatur wählen. Dabei kann die Reaktion auf einen langen oder kurzen Tastendruck gesondert eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Der Befehl zum peeren lautet, wobei &amp;lt;button&amp;gt; die Kanalbezeichnung der Fernbedienung und &amp;lt;rt-remote&amp;gt; die Kanalbezeichnung des Heizkörperthermostates ist:&lt;br /&gt;
  set &amp;lt;button&amp;gt; peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_remote single&lt;br /&gt;
&lt;br /&gt;
=== Betriebsmodus Auto, Manu, Party (Urlaub) ===&lt;br /&gt;
&lt;br /&gt;
Der HM-CC-RT-DN verfügt über drei Betriebsmodus: Auto, Manu (Manuell) und Party (Urlaub).&lt;br /&gt;
&lt;br /&gt;
==== Modus Auto ====&lt;br /&gt;
Das Gerät arbeitet gemäß des gespeicherten Wochenprogramms. Manuelle Änderungen sind möglich, werden aber beim nächsten Schaltpunkt überschrieben.&lt;br /&gt;
&lt;br /&gt;
==== Modus Manu ====&lt;br /&gt;
Die Temperatur wird manuell eingestellt, das Wochenprogramm wird nicht abgearbeitet.&lt;br /&gt;
&lt;br /&gt;
==== Modus Party (Urlaub) ====&lt;br /&gt;
Die eingestellte Temperatur gilt bis zu einem gegebenen Endzeitpunkt, anschließend wechselt das Thermostat in den &#039;&#039;Auto&#039;&#039;-Modus. So kann beispielsweise bei Abwesenheit ein niedrigeres Temperaturprofil eingestellt werden ohne dass die Temperaturlisten verändert werden müssen.&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-CC-RT-DN&amp;gt;_Clima controlParty 16 06.12.13 16:30 09.12.13 05:00&lt;br /&gt;
&lt;br /&gt;
Dadurch wird &lt;br /&gt;
* von 06.12.2013, 16:30 Uhr&lt;br /&gt;
* bis 09.12.2013, 05:00 Uhr &lt;br /&gt;
* die gewünschte Raumtemperatur auf 16 °C eingestellt.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&lt;br /&gt;
* Der Befehl muss auf dem Kanal 4 &#039;&#039;(_Clima)&#039;&#039; erfolgen.&lt;br /&gt;
* Es werden nur Uhrzeiten zu jeder vollen oder halben Stunde angenommen (Minuten also 00 oder 30).}}&lt;br /&gt;
&lt;br /&gt;
Mit der folgenden Funktion &amp;lt;code&amp;gt;Urlaub()&amp;lt;/code&amp;gt; kann man eine ganze Wohnung (also mehrere RTs) mit nur einem Befehl in den Party-Modus versetzen. Im Beispiel werden zwei Heizkörper (&amp;quot;Treppenhaus&amp;quot; und &amp;quot;Kammer&amp;quot;) angesteuert.&lt;br /&gt;
&lt;br /&gt;
Zu beachten sind folgende Dinge:&lt;br /&gt;
# Aktuelle Dateien (z.B. &amp;lt;code&amp;gt;10_CUL_HM&amp;lt;/code&amp;gt;) verwenden!&lt;br /&gt;
# Bei dem &#039;&#039;controlParty&#039;&#039;-Befehl &#039;&#039;kein&#039;&#039; Komma zwischen den Parametern.&lt;br /&gt;
# Bei der Funktion die Parameterübergabe definieren &amp;lt;code&amp;gt;($$$$$)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Aufruf:&#039;&#039;&#039;&lt;br /&gt;
:&amp;lt;code&amp;gt;{Urlaub (&amp;quot;16&amp;quot;, &amp;quot;06.12.13&amp;quot;, &amp;quot;16:30&amp;quot;, &amp;quot;09.12.13&amp;quot; ,&amp;quot;05:00&amp;quot;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Funktion:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=perl&amp;gt;&lt;br /&gt;
my $Urlaub;&lt;br /&gt;
sub&lt;br /&gt;
Urlaub($$$$$)&lt;br /&gt;
  {&lt;br /&gt;
    my ($temp, $startDate, $startTime, $endDate, $endTime) = @_;&lt;br /&gt;
 &lt;br /&gt;
    # HM-CC-RT-DN akzeptiert nur Zeiten, die auf Minute 00 oder 30 enden.&lt;br /&gt;
    # Daher $startTime und $endTime abrunden&lt;br /&gt;
    $startTime =~ s/\:[0-2].$/:00/;&lt;br /&gt;
    $startTime =~ s/\:[3-5].$/:30/;&lt;br /&gt;
    $endTime =~ s/\:[0-2].$/:00/;&lt;br /&gt;
    $endTime =~ s/\:[3-5].$/:30/;&lt;br /&gt;
&lt;br /&gt;
    # controlParty bei jedem HM-CC-RT-DN setzen.&lt;br /&gt;
    for my $rt (qw(Kammer Treppenhaus)) {&lt;br /&gt;
      fhem (&amp;quot;set $rt controlParty $temp $startDate $startTime $endDate $endTime&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tastensperre ===&lt;br /&gt;
&lt;br /&gt;
Um zu verhindern, dass der Modus oder die Temperatur per Tasten bzw. Drehrad am HM-CC-RT-DN verändert wird, kann eine Tastensperre gesetzt werden. Dies erfolgt mittels des Befehls:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet btnLock on&lt;br /&gt;
&lt;br /&gt;
Rückgängig machen geht per:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet btnLock off&lt;br /&gt;
&lt;br /&gt;
Diese Tastensperre kann man aber am HM-CC-RT-DN durch eine Tastenkombination wieder zurücksetzen. Um sie nur per FHEM rücksetzen zu können, muss&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet globalBtnLock on&lt;br /&gt;
&lt;br /&gt;
eingegeben werden. Rückgängig geht wieder per:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet globalBtnLock off&lt;br /&gt;
&lt;br /&gt;
Es gibt auch eine Tastensperre die nur das Umschalten des Modus (Auto, Manuell, Urlaub) am Gerät verhindert. Diese wird mit&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet modusBtnLock on&lt;br /&gt;
&lt;br /&gt;
eingeschaltet. Abschalten geht mit:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet modusBtnLock off&lt;br /&gt;
&lt;br /&gt;
=== Burst-Modus ===&lt;br /&gt;
Das ist ein &#039;&#039;&#039;Übertragungs&#039;&#039;&#039;modus für Nachrichten zwischen HM-Geräten und der Zentrale. Der RT erwacht alle 2,5 Minuten und dann überträgt die Zentrale die Kommandos. Wenn man einen Fensterkontakt oder eine Fernsteuerung nutzt, muss der RT sofort reagieren - dann muss man den Burst &#039;&#039;enablen&#039;&#039;. Der RT kann in diesem Fall sofort aufgeweckt werden und bearbeitet die Anforderung (Request). Das kann man auch von der Zentrale aus nutzen (so man möchte). Das ist der &#039;&#039;&#039;Vorteil&#039;&#039;&#039; des eingeschalteten Burst-Modus.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteil:&#039;&#039;&#039; Der Burst-Modus benötigt mehr Leistung, das heißt die Batterien müssen häufiger gewechselt werden: Der RT muss den Receiver ständig empfangsbereit halten. Außerdem wachen bei jedem Burst wachen &#039;&#039;alle&#039;&#039; Burst-Empfänger auf – egal an wen die Kommunikation gerichtet war.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Burst – wie es funktioniert&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Schickt ein Sender eine burst Sequenz, wachen alle burst-Empfänger auf und prüfen die Message. &lt;br /&gt;
Wenn sie betroffen sind bleiben sie eine Zeit lang wach, ansonsten schlafen sie wieder ein. &lt;br /&gt;
Man beachte also, dass Senden eines Burst  Energie in ALLEN burst-Empfängern verbraucht, egal ob sie angesprochen sind.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HMLAN und burst&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[HMLAN]] hat ein Sendebudget das über eine Stunde berechnet wird. Burst belastet diese Konto deutlich - so können nicht mehr als 100 bursts /h gesendet werden - dann geht HMLAN in overload Wenn zusätzliche Nachrichten gesendet werden sind es entsprechend weniger. &lt;br /&gt;
Es ist als nicht vorteilhaft, unnötig bursts zu senden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Burst devices&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es gibt Devices, die immer auf burst reagieren und solche bei denen es abgeschaltet werden kann. So reagiert ein Rauchmelder immer auf Burst damit er seine Team-Kollegen hören kann. &lt;br /&gt;
Ein TC oder RT hingegen hat diese Funktion abschaltbar. &#039;Per default ist dies ausgeschaltet um Batterie zu sparen&#039;. Wenn ein VD gesteuert wird ist der TC ja selbst wach.  Wird er aber mit einem Fensterkontakt gekoppelt muss es eingeschaltet werden – sonst verpasst er die Nachricht. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ConditionalBurst devices&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Devices mit abschaltbarem Burst wie z.B. der &#039;&#039;HM-CC-RT-DN&#039;&#039; haben ein Register, &#039;&#039;burstRx&#039;&#039;, mit dem das burst-Erwachen eingestellt werden kann. &lt;br /&gt;
Sendern, die einen burst-Aktor erwecken sollen, muss man sagen, welcher Peer Burst benötigt. Hier kann ggf. das Register &#039;&#039;peerNeedsBurst&#039;&#039; nach dem Peeren gesetzt werden. FHEM versucht dies automatisch beim Peeren zu erledigen. Siehe [[HomeMatic HMInfo|HMinfo]] Befehl &#039;&#039;models&#039;&#039; um herauszufinden, welche Devices welchen Modus unterstützen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Attribut burstAccess&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Devices, die abschaltbaren burst haben kann man ein attribut bustAccess 1_auto setzen. Es wird beim Abschicken eines Kommandos versucht, das Device mit burst zu wecken. Sollte es nicht funktionieren wird gewartet, bis das Device aufwacht (meist reagieren solche Devices auch auf wakeup). Das Setzen des Attributs ist angenehm – es werden aber ggf. viele bursts gesendet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kommando burstXmit&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Mit diesem Kommando, das bei Devices mit contitional-Burst zu Verfügung steht, wird der burst gezielt von User angestossen.&lt;br /&gt;
&lt;br /&gt;
Der User schickt erst seine Kommandos an das device. Die Kommandos werden im Command-stack gesammelt. &lt;br /&gt;
&lt;br /&gt;
Dann sendet der User ein set burstXmit.&lt;br /&gt;
&lt;br /&gt;
Es passiert das gleiche wie bei burstAccess.&lt;br /&gt;
&lt;br /&gt;
FHEM versucht mittels burst zu wecken und sendet bei Erfolg die Messages aus dem Kommandostack. &lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu burstAccess ist burstXmit gezielt einsetzbar und kann sparsamer verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; FHEM und burst devices&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
FHEM sendet eine burst automatisch mit Kommandos zu Devices, die nur burst unterstützen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So aktiviert man den burst-Betrieb am HM-CC-RT-DN&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Burst Mode einschalten&#039;&#039; (der Kanal 4 des Device WZ1 heisst hier WZ1_4)&lt;br /&gt;
:&amp;lt;code&amp;gt;set WZ1_4 regSet burstRx on &amp;lt;/code&amp;gt;&lt;br /&gt;
prüfen mit:&lt;br /&gt;
:&amp;lt;code&amp;gt;get WZ1_4 reg burstRx &amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;Nun in FHEM den Burst mode einschalten (sofern nicht burstXmit verwendet wird)&#039;&#039;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr WZ1 burstAccess 1_auto&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis: Das Attribut im Device und nicht im Kanal setzen, ansonsten gibt es eine Fehlermeldung.&lt;br /&gt;
&lt;br /&gt;
=== Temperaturlisten ===&lt;br /&gt;
Die Temperaturlisten des HM-CC-RT-DN werden identisch mit denen anderer HomeMatic Thermostate verwaltet (siehe [[HomeMatic Type Thermostat#Temperaturlisten|HomeMatic Type Thermostat]]). Beim HM-CC-RT-DN ist der Kanal 4 (_Clima) für die Temperaturlisten zuständig.&lt;br /&gt;
&lt;br /&gt;
==FHEM-Log==&lt;br /&gt;
In den folgenden Logs heißt Kanal 4 noch &amp;quot;_ClimRT_tr&amp;quot;. Inzwischen würde man dort &amp;quot;_Clima&amp;quot; sehen.&lt;br /&gt;
&lt;br /&gt;
=== Device-Log ===&lt;br /&gt;
 2013.10.10 20:03:24 3: CUL_HM Unknown device CUL_HM_HM_CC_RT_DN_2212BC, please define it&lt;br /&gt;
 2013.10.10 20:03:24 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC CUL_HM 2212BC A1A0184002212BC0000001000954B4551303531303031375900FFFF&lt;br /&gt;
 2013.10.10 20:03:24 3: Device CUL_HM_HM_CC_RT_DN_2212BC added to ActionDetector with 000:10 time&lt;br /&gt;
 2013.10.10 20:03:24 3: CUL_HM pair: CUL_HM_HM_CC_RT_DN_2212BC thermostat, model HM-CC-RT-DN serialNr KEQ0510017&lt;br /&gt;
 2013.10.10 20:03:24 3: LANCUL pairing (hmPairForSec) not enabled&lt;br /&gt;
 2013.10.10 20:03:24 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC-%Y.log CUL_HM_HM_CC_RT_DN_2212BC&lt;br /&gt;
 2013.10.10 20:03:24 3: Device Heizung_Wohnzimmer added to ActionDetector with 000:10 time&lt;br /&gt;
 2013.10.10 20:03:24 3: CUL_HM pair: Heizung_Wohnzimmer thermostat, model HM-CC-TC serialNr JEQ0044286&lt;br /&gt;
 2013.10.10 20:03:24 3: Device CUL_HM_HM_CC_RT_DN_2212BC added to ActionDetector with 000:10 time&lt;br /&gt;
 2013.10.10 20:03:24 3: CUL_HM pair: CUL_HM_HM_CC_RT_DN_2212BC thermostat, model HM-CC-RT-DN serialNr KEQ0510017&lt;br /&gt;
 2013.10.10 20:03:25 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_Weather CUL_HM 2212BC01&lt;br /&gt;
 2013.10.10 20:03:25 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_Weather FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_Weather-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_Weather&lt;br /&gt;
 2013.10.10 20:03:25 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_Weather FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_Weather-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_Weather&lt;br /&gt;
 2013.10.10 20:03:26 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_Climate CUL_HM 2212BC02&lt;br /&gt;
 2013.10.10 20:03:26 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_Climate FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_Climate-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_Climate&lt;br /&gt;
 2013.10.10 20:03:26 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_Climate FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_Climate-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_Climate&lt;br /&gt;
 2013.10.10 20:03:27 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_WindowRec CUL_HM 2212BC03&lt;br /&gt;
 2013.10.10 20:03:27 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_WindowRec FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_WindowRec-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_WindowRec&lt;br /&gt;
 2013.10.10 20:03:27 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_WindowRec FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_WindowRec-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_WindowRec&lt;br /&gt;
 2013.10.10 20:03:28 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr CUL_HM 2212BC04&lt;br /&gt;
 2013.10.10 20:03:28 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr&lt;br /&gt;
 2013.10.10 20:03:28 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr&lt;br /&gt;
 2013.10.10 20:03:29 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam CUL_HM 2212BC05&lt;br /&gt;
 2013.10.10 20:03:29 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam&lt;br /&gt;
 2013.10.10 20:03:29 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam&lt;br /&gt;
 2013.10.10 20:03:30 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_remote CUL_HM 2212BC06&lt;br /&gt;
 2013.10.10 20:03:30 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_remote FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_remote-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_remote&lt;br /&gt;
 2013.10.10 20:03:30 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_remote FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_remote-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_remote&lt;br /&gt;
 2013.10.10 20:03:35 3: Device CUL_HM_HM_CC_RT_DN_2212BC added to ActionDetector with 000:10 time&lt;br /&gt;
 2013.10.10 20:03:40 2: CUL_HM set CUL_HM_HM_CC_RT_DN_2212BC getSerial&lt;br /&gt;
 2013.10.10 20:03:40 2: CUL_HM set CUL_HM_HM_CC_RT_DN_2212BC getConfig&lt;br /&gt;
 2013.10.10 20:03:54 3: Device CUL_HM_HM_CC_RT_DN_2212BC added to ActionDetector with 000:10 time&lt;br /&gt;
&lt;br /&gt;
=== Event monitor ===&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr motorErr: ok&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr measured-temp: 18.4&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr desired-temp: 18&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr ValvePosition: 3 %&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr mode: manu&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr unknown0: 24&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr T: 18.4 desired: 18 valve: 3 %&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC battery: ok&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC batteryLevel: 3.1 V&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC measured-temp: 18.4&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC desired-temp: 18&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC actuator: 3 %&lt;br /&gt;
&lt;br /&gt;
== Firmware Update ==&lt;br /&gt;
Seit 24.10.2014 gibt es für den HM-CC-RT-DN die neue Firmware Version 1.4. Diese kann von der eQ-3 Webseite heruntergeladen werden. Genauere Informationen gibt es unter [[HomeMatic Firmware Update]].&lt;br /&gt;
&lt;br /&gt;
=== HM-CC-RT-DN spezifische Update Informationen ===&lt;br /&gt;
Durch gleichzeitiges Drücken der &amp;quot;Auto-/Manu&amp;quot;-Taste und der &amp;quot;Comfort-/Eco&amp;quot;-Taste am HM-CC-RT-DN während man die Batterien wieder einlegt wird der updatemodus gestartet. Während des Updates steht &amp;quot;FUP&amp;quot; im Display. Nach erfolgreichem Update erscheint &amp;quot;Ins&amp;quot; im Display und es muss eine erneute Adaptierfahrt durch drücken der Boost-Taste ausgelöst werden. Anschließend sollte der HM-CC-RT-DN wieder normal funktionieren. Die eingestellten Parameter und das Pairing mit FHEM gehen beim Update nicht verloren. Sollte das Update fehlschlagen, erscheint &amp;quot;Err&amp;quot; bzw. &amp;quot;CrC&amp;quot; im Display.&lt;br /&gt;
&lt;br /&gt;
Normalerweise sollte dann durch erneutes starten der Prozedur am PC und HM-CC-RT-DN das ganze erneut durchführbar sein.&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Readings, die nicht durch ein einfaches &#039;&#039;getConfig&#039;&#039; aktualisisert werden, z.B. &amp;quot;battery&amp;quot;(nicht batteryLevel). Um diese Readings zu bekommen, ist ein &lt;br /&gt;
:&amp;lt;code&amp;gt;set Device_Channel04 controlMode auto &amp;lt;/code&amp;gt;&lt;br /&gt;
notwendig. Daraufhin werden die Readings übertragen/aktualisiert.&lt;br /&gt;
&lt;br /&gt;
== Simulation von Fensterkontakten und externen Temperatursensoren ==&lt;br /&gt;
grober Ablauf:&lt;br /&gt;
* erstellen ein virtuelles Device&lt;br /&gt;
* erstelle dazu einen virtuellen Kanal&lt;br /&gt;
* peeren den Kanal mit dem RT (als fenster-kontakt oder als remote, wen du willst)&lt;br /&gt;
* sende ein postEvent&lt;br /&gt;
&lt;br /&gt;
=== Fensterkontakte ===&lt;br /&gt;
&#039;&#039;Entnommen aus diesem {{Link2Forum|Topic=31078|Message=236245|LinkText=Forenbeitrag}}&#039;&#039;&lt;br /&gt;
 define virSC CUL_HM 221133&lt;br /&gt;
 attr virSC autoReadReg 4_reqStatus&lt;br /&gt;
 attr virSC expert 2_full&lt;br /&gt;
 attr virSC model virtual_1&lt;br /&gt;
 attr virSC peerIDs &lt;br /&gt;
 attr virSC subType virtual&lt;br /&gt;
 attr virSC webCmd press short:press long&lt;br /&gt;
 &lt;br /&gt;
 define virtualKitchenDoor CUL_HM 22113301&lt;br /&gt;
 attr virtualKitchenDoor dummy 1&lt;br /&gt;
 attr virtualKitchenDoor expert 1&lt;br /&gt;
 attr virtualKitchenDoor group Virtual&lt;br /&gt;
 attr virtualKitchenDoor model virtual_1&lt;br /&gt;
 attr virtualKitchenDoor webCmd postEvent open:postEvent closed &lt;br /&gt;
&lt;br /&gt;
Anschließend peeren und Temperatur festlegen mit:&lt;br /&gt;
 set virtualKitchenDoor peerChan 0 &amp;lt;Thermostat_Window_Rec&amp;gt; single set&lt;br /&gt;
 set &amp;lt;Thermostat_Window_Rec&amp;gt; regSet winOpnTemp 5 virtualKitchenDoor&lt;br /&gt;
&lt;br /&gt;
Ggf noch interne &amp;quot;Fenster-auf&amp;quot; Erkennung abschalten&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt;_Clima regSet winOpnMode off&lt;br /&gt;
&lt;br /&gt;
Die virtuelle Tür wird dann entsprechend über ein Notify getriggert:&lt;br /&gt;
 define notify_virtualKitchenDoor notify (Fensterkontakt_1|Fensterkontakt_2) {if(Value(&amp;quot;Fensterkontakt&amp;quot;) eq &amp;quot;open&amp;quot; &amp;amp;&amp;amp; Value(&amp;quot;Fensterkontakt_2&amp;quot;) eq &amp;quot;open&amp;quot;){fhem(&amp;quot;set virtualKitchenDoor postEvent open&amp;quot;)}else{fhem(&amp;quot;set virtualKitchenDoor postEvent closed&amp;quot;)}}&lt;br /&gt;
&lt;br /&gt;
=== Temperatursensoren ===&lt;br /&gt;
&#039;&#039;Entnommen aus diesem {{Link2Forum|Topic=19686|Message=233788|LinkText=Forenbeitrag}}&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Virtuelles HomeMatic Device mit _deiner_ HM Id definieren:&lt;br /&gt;
 define wz_vT CUL_HM &amp;lt;hmId&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Dem Device einen virtuellen Kanal (Default ist ein virtueller Button) hinzufügen:&lt;br /&gt;
 set wz_vT virtual 1&lt;br /&gt;
&lt;br /&gt;
3. Es ist kein virtueller Button sondern ein virtueller Temperatursensor - darum rename:&lt;br /&gt;
 rename wz_vT_Btn1 wz_vT_Sensor1&lt;br /&gt;
&lt;br /&gt;
4. Virtuellen Peer Sensor mit dem Weather Channel des RT-DN peeren:&lt;br /&gt;
 set wz_vT_Sensor1 peerChan 0 &amp;lt;RT_DN&amp;gt;_Weather single&lt;br /&gt;
&lt;br /&gt;
5. Peering kontrollieren (Voraussetzung: Device &#039;&#039;hm&#039;&#039; vom Typ [[HomeMatic HMInfo|HMinfo]] existiert):&lt;br /&gt;
:&amp;lt;code&amp;gt;set hm peerXref&amp;lt;/code&amp;gt;&lt;br /&gt;
Beispiel-Ausgabe:&lt;br /&gt;
 peerXref done: &lt;br /&gt;
 x-ref list &lt;br /&gt;
    wz_Thermostat_Weather =&amp;gt; wz_vT_Sensor1 &lt;br /&gt;
    wz_vT_Sensor1 =&amp;gt; wz_Thermostat_Weather&lt;br /&gt;
&lt;br /&gt;
6. Gemessene Temperatur vom z.B. 1-Wire DS1820 dem virtuellen HM Sensor übergeben. Z.B. alle zwei Minuten per at:&lt;br /&gt;
 define at_wz_vT at +*00:02 { my $T=(ReadingsVal(&amp;quot;&amp;lt;DS1820B&amp;gt;&amp;quot;,&amp;quot;temperature&amp;quot;,20.0)); fhem &amp;quot;set wz_vT_Sensor1 virtTemp $T&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
Fertig.&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
=== TempList: Bad format ... ===&lt;br /&gt;
Wenn Sie beim Setzen einer Temperaturliste nach dem o.a. Schema (&amp;quot;SetTempList...&amp;quot;) die Meldung&lt;br /&gt;
&lt;br /&gt;
 Bad format, use HH:MM TEMP ......&lt;br /&gt;
&lt;br /&gt;
erhalten, sollten Sie zunächst ein [[update]] von FHEM durchführen.&lt;br /&gt;
&lt;br /&gt;
=== Der Thermostat heizt über die Solltemperatur hinaus ===&lt;br /&gt;
In der Regel ist das ein ganz normales Verhalten, wenn der Thermostat nicht mit einem externen Temperaturfühler oder einem Wandthermostat gepeert ist. In dem Fall muss sich der Thermostat auf den eingebauten Temperatursensor verlassen, der sehr nahe an der Heizung selbst sitzt. Dadurch ist die gemessene Temperatur höher, als sie z.B. in der Raummitte wäre. Der Hersteller hat hier einen mehr oder weniger intelligenten Algorithmus eingebaut, um diesen Effekt zu kompensieren. Das sieht dann so aus, als ob der Thermostat nicht richtig regelt.&lt;br /&gt;
Dieses Verhalten kann man im Prinzip nur verhindern, indem man einen externen Temperatursensor oder einen Wandthermostat peert. Wie das geht ist hier beschrieben: [[#Channel (Kanal) 01 _Weather]]. Normalerweise regelt der Thermostat dann genau auf die Solltemperatur. &lt;br /&gt;
Ansonsten sollte man sich auch fragen, ob das gezeigte Verhalten vielleicht doch gut genug ist. Dazu platziert man irgendein Thermometer möglichst in der Mitte des Raums und beobachtet den Temperaturverlauf eine Weile. Wenn man dann noch eine Abweichung feststellt, kann es sinnvoll sein, diese mittels des Registers R-tempOffset zu beheben.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.eq-3.de/produkt-detail-aktoren/items/homematic-funk-heizkoerperthermostat.html Produktinfo]&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/downloads_produktkatalog/homematic/bda/HM-CC-RT-DN_UM_GE_eQ-3_web.pdf Bedienungsanleitung (PDF)]&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/downloads_produktkatalog/homematic/pdb/Funk-Heizkoerperthermostat_105155_Produktdatenblatt_V2.3.pdf Datenblatt (PDF)]&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/downloads/Ventilkompatibilitaeten.pdf Ventil-Kompatibilitätsliste (zur Zeit nicht verfügbar)]&lt;br /&gt;
* {{Link2Forum|Topic=14738|LinkText=Forenthema zum Thermostat}}&lt;br /&gt;
* {{Link2Forum|Topic=64446|LinkText=Reparatur einer durch mechanischen Stoß von außen abgerissenen Lichtschranke}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-CC-RT-DN_Funk-Heizk%C3%B6rperthermostat&amp;diff=22666</id>
		<title>HM-CC-RT-DN Funk-Heizkörperthermostat</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-CC-RT-DN_Funk-Heizk%C3%B6rperthermostat&amp;diff=22666"/>
		<updated>2017-09-22T19:47:47Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: Beschreibung set EG_Buero_WANDTHERMOSTAT_Weather peerChan... und wichtiger Hinweis bevor man weitere Befehle sendet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-CC-RT-DN.jpg&lt;br /&gt;
|Bildbeschreibung=HM-CC-RT-DN an Heizkörper montiert&lt;br /&gt;
|HWProtocol=[[HomeMatic]]&lt;br /&gt;
|HWType=[[HomeMatic Type Thermostat|thermostat]]&lt;br /&gt;
|HWCategory=[[:Kategorie:Heizungsventile|Heizungsventile]]&lt;br /&gt;
|HWComm=868 MHz&lt;br /&gt;
|HWChannels=6&lt;br /&gt;
|HWVoltage=3&amp;amp;nbsp;V&lt;br /&gt;
|HWPowerConsumption=180&amp;amp;nbsp;mA&lt;br /&gt;
|HWPoweredBy=2x LR6/Mignon/AA&lt;br /&gt;
|HWSize=54x65x93 mm (BxHxT)&lt;br /&gt;
|HWDeviceFHEM=[[CUL_HM]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=ELV / eQ-3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HM-CC-RT-DN&#039;&#039;&#039; (häufig einfach &#039;&#039;&#039;RT&#039;&#039;&#039; genannt) ist ein Funk-&#039;&#039;Heizkörperthermostate&#039;&#039; mit integriertem &#039;&#039;Stellantrieb&#039;&#039;. Das Thermostat ist seit September&amp;amp;nbsp;2013 verfügbar und ist der Nachfolger des [[HM-CC-VD Funk-Stellantrieb]]s.&lt;br /&gt;
&lt;br /&gt;
== Vorbemerkungen ==&lt;br /&gt;
: &#039;&#039;→ Einstellungen und Informationen, die alle [[HomeMatic]] Thermostate betreffen, sind unter [[HomeMatic Type Thermostat#Temperaturlisten|HomeMatic Type Thermostat]] zu finden.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der HM-CC-RT-DN kann die Temperatur selbst messen (im Gegensatz zum [[HM-CC-VD Funk-Stellantrieb|Vorgänger]]) und verfügt über eine Fenster-Offen-Erkennung sowie eine Boost-Funktion. Der HM-CC-RT-DN &#039;&#039;kann&#039;&#039; von einem [[HM-TC-IT-WM-W-EU Funk-Wandthermostat AP]] gesteuert werden, das ist aber &#039;&#039;optional&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Das Gerät wird seit Anfang Oktober 2013 von FHEM unterstützt (siehe Diskussion im {{Link2Forum|Topic=14738|LinkText=Forum}}).&lt;br /&gt;
&lt;br /&gt;
Der HM-CC-RT-DN scheint das erste HomeMatic-Device zu sein, bei dem ein Update der Firmware auch vom Anwender durchgeführt werden kann. Ein Firmware-Update erfordert einen [[HM-CFG-USB_USB_Konfigurations-Adapter|USB Konfigurations-Adapter]] und eine auf der eQ-3 Webseite herunterladbare Firmwareupdate-Software. Weitere Details sind unter [[#Firmware Update|Firmware Update]] beschrieben.&lt;br /&gt;
{{Hinweis|Die Solltemperaturen eines HM-CC-RT-DN lassen sich &#039;&#039;nicht&#039;&#039; durch einen [[HM-CC-TC Funk-Wandthermostat]] &#039;&#039;steuern&#039;&#039;. Dieser kann nur die Ist-Temperatur an den HM-CC-RT-DN weitergeben, damit nicht die am HM-CC-RT-DN direkt gemessene Raumtemperatur zur Regelung verwendet wird.}}&lt;br /&gt;
Mit einem HM-CC-RT-DN können maximal (neben der Zentrale/FHEM):&lt;br /&gt;
* 7 HomeMatic Heizkörperthermostate&lt;br /&gt;
* 8 HomeMatic Tür-Fensterkontakte / Fenster-Drehgriffkontakte&lt;br /&gt;
* 8 Tastenpaare von HomeMatic Fernbedienungen bzw. Display-Wandtaster&lt;br /&gt;
* 1 HomeMatic Innen-Temperatur-Sensor&lt;br /&gt;
[[Peering (HomeMatic)|gepeert]] werden.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Wird für Wartungs-/Umbaumaßnahmen das Wasser der Heizung abgelassen bzw. diese neubefüllt, sind alle Stellantriebe manuell dauerhaft auf &#039;&#039;&#039;on&#039;&#039;&#039; zu setzen: set &amp;lt;HM_Stellantrieb&amp;gt;_Clima controlManu on. Beim Einsatz eines Wandthermostaten ist der Wandthermostat entsprechend einzustellen.}}&lt;br /&gt;
&lt;br /&gt;
== Technische Daten ==&lt;br /&gt;
* Betriebsspannung: 2 Stck. 1,5V LR6/Mignon/AA&lt;br /&gt;
* Stromaufnahme: 180 mA max.&lt;br /&gt;
* Abmessungen (B x H x T): 54 x 65 x 93 mm&lt;br /&gt;
* Gewicht: 180 g (ohne Batterien)&lt;br /&gt;
* Ventilanschluss: M30 x 1,5 mm&lt;br /&gt;
&lt;br /&gt;
Aktuelle Firmware: 1.4&lt;br /&gt;
&lt;br /&gt;
== Betrieb mit FHEM ==&lt;br /&gt;
Der Funk-Heizkörperthermostat muss zuerst mit FHEM [[Pairing (HomeMatic)|gepairt]] werden. Stellen Sie sicher, dass FHEM aktuell ist (update durchführen)&lt;br /&gt;
&lt;br /&gt;
Das Pairing sollte wie in [[HomeMatic Devices pairen]] beschrieben durchgeführt werden &lt;br /&gt;
&lt;br /&gt;
=== Channels (Kanäle) ===&lt;br /&gt;
==== Channel (Kanal) 01 _Weather ====&lt;br /&gt;
&lt;br /&gt;
Dieser Kanal dient zur Einspeisung der (gemessenen) &#039;&#039;Ist-Temperatur&#039;&#039;. Als Sensor können zum Beispiel das [[HM-TC-IT-WM-W-EU Funk-Wandthermostat AP|HM-TC-IT-WM-W-EU Funk-Wandthermostat]] oder ein [[HM-WDS40-TH-I Funk-Temperatur-/Feuchtesensor innen (IT)|HM-WDS40-TH-I Funk-Temperatur-/Feuchtesensor]] dienen.&lt;br /&gt;
&lt;br /&gt;
Ein Temperatur-Sensor &#039;&#039;tempSensor&#039;&#039; kann mit dem &#039;&#039;_Weather&#039;&#039;-Kanal wie folgt [[Peering (HomeMatic)|gepeert]] werden: &lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt;_Weather peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_Weather single&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
  set EG_Buero_WANDTHERMOSTAT_Weather peerChan 0 EG_Buero_THERMOSTAT_Weather single set&lt;br /&gt;
&lt;br /&gt;
ACHTUNG: Das Wandthermostat sowie das Thermostat Ventil (Beispiel &amp;quot;EG_Buero_WANDTHERMOSTAT&amp;quot; und EG_Buero_THERMOSTAT) werden vorher in FHEM den Status &amp;quot;CMDs_done&amp;quot; anzeigen.&lt;br /&gt;
Beim peerChan wird dann bei beiden &amp;quot;CMDs_pending&amp;quot; stehen. Wobei das Wandthermostat sehr schnell wieder auf CMDs_done zurück springt.&lt;br /&gt;
Allerdings ist dingend darauf zu achten, dass das Thermostat Ventil auch wieder auf  &amp;quot;CMDs_done&amp;quot; wechselt, bevor man den nächsten Befehl absendet.&lt;br /&gt;
Das Heizkörper Ventile kann unter umständen 3 bis 5 min benötigen bis wieder &amp;quot;CMDs_done&amp;quot; steht. Evtl. kann man dies durch die BOOST Taste beschleunigen. Da das Ventil etwa alle 3 min aufwacht, prüft und Daten sendet / empfängt. Sollte man mit dem Befehlen weiter gemacht haben, so kann es zu Problemen führen, das einer nicht mehr mit dem Pending aufhört. In dem Fall empfiehlt es sich beide Devices von Fhem abzumelden und auf Werkseinstellung zu resetten. &lt;br /&gt;
&lt;br /&gt;
Zum Test haucht man das Wandthermostat an oder hält es einige Zeit in der Hand bis die Temperatur steigt, nach etwa 3 Minuten sollte man auch am Thermostat Ventil ein Temperaturanstieg sehen.&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 02 _Climate ====&lt;br /&gt;
Dieser Kanal erlaubt es dem [[HM-TC-IT-WM-W-EU Funk-Wandthermostat AP|HM-TC-IT-WM-W-EU Funk-Wandthermostat]] den HM-CC-RT-DN zu steuern. Dazu müssen die beiden Geräte gepeert werden:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt;_Climate peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_Climate single set&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 03 _WindowRec ====&lt;br /&gt;
Mit diesem Kanal können Fensterkontakte ([[HM-SEC-SC Tür-Fensterkontakt|HM-SEC-SC]] und [[HM-Sec-RHS Funk-Fenster-Drehgriffkontakt|HM-SEC-RHS]]) ihren Fensterstatus (geöffnet / gekippt) an ein oder mehrere Thermostate senden. Die Thermostate stellen anschließend die entsprechende (konfigurierbare) Temperatur ein. Der Temperaturwert kann je Fenster-Sensor unterschiedlich definiert werden. Sind mehrere Fenster gleichzeitig geöffnet, so wird der Thermostat auf die Temperatur des Sensors mit dem geringsten Temperaturwert eingestellt. &lt;br /&gt;
Ferner wird empfohlen, bei Einsatz von externen Sensoren, die interne „Fenster auf Erkennung“ zu deaktivieren (weitere Details sind im [[HM-CC-RT-DN Funk-Heizkörperthermostat#Channel .28Kanal.29 04 _Clima|Channel (Kanal) 04 _Clima]] beschrieben).&lt;br /&gt;
&lt;br /&gt;
Der Befehl zum Peeren lautet, wobei &amp;lt;fensterSensor&amp;gt; die FHEM-Kanalbezeichnung für den Fensterkontakt ist und &amp;lt;rt_WindowRec&amp;gt; die Kanalbezeichnung für den entsprechenden Kanal des Heizkörperthermostates:&lt;br /&gt;
 set &amp;lt;fensterSensor&amp;gt; peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_WindowRec single set&lt;br /&gt;
&lt;br /&gt;
Zum Löschen (=unpeeren) dieser Kopplung:&lt;br /&gt;
 set &amp;lt;fensterSensor&amp;gt; peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_WindowRec single unset&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung&#039;&#039;&#039;: Der Peer-(Lösch)Vorgang muss erst am Fensterkontakt durch Drücken der Anlerntaste ausgelöst werden, und zwar auch dann, wenn der Fensterkontakt schon vorher mit FHEM gepairt wurde. Dann kann der oben genannte Befehl in FHEM abgesetzt werden. Wichtig scheint auch, dass der Fensterkontakt geschlossen ist wenn man die Anlerntaste drückt.&lt;br /&gt;
&lt;br /&gt;
Der Befehl zur Temperatureinstellung des Heizkörperthermostaten für den Zustand &amp;quot;Fenster offen&amp;quot; lautet, wobei &amp;lt;fensterSensor&amp;gt; die FHEM-Kanalbezeichnung für den Fensterkontakt ist und &amp;lt;rt_WindowRec&amp;gt; die Kanalbezeichnung für den entsprechenden Kanal des Heizkörperthermostates, sowie &amp;lt;Temp&amp;gt; die einzustellende Temperatur (ganzzahliger Wert):&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt;_WindowRec regSet winOpnTemp &amp;lt;Temp&amp;gt; &amp;lt;fensterSensor&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 04 _Clima ====&lt;br /&gt;
Dieser Kanal dient zum Einstellen der Betriebsparameter, auch [[#Temperaturlisten|Temperaturlisten]] sind hierauf zu übertragen.&lt;br /&gt;
Mit dem Modul [[Weekprofile|Wochenplan / Weekprofile]] können die Wochenpläne komfortabel in FHEM erstellt und an die Thermostate übertragen werden.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|In älteren Versionen von FHEM wurde dieser Kanal durch &#039;&#039;autocreate&#039;&#039; als &amp;lt;code&amp;gt;_ClimRT_tr&amp;lt;/code&amp;gt; angelegt. Der Hersteller hat hier offenbar die internen Bezeichnungen geändert, denn beim Vorläufernmodell HM-CC-TC mussten Temperaturlisten auf den Kanal &#039;&#039;Climate&#039;&#039; übertragen werden.}}&lt;br /&gt;
&lt;br /&gt;
Die maximale Öffnung des Ventils kann mittels folgendem Befehl eingestellt werden (hier auf 80 %):&lt;br /&gt;
  set &amp;lt;HM-CC-RT-DN&amp;gt;_Clima regSet valveMaxPos 80&lt;br /&gt;
&lt;br /&gt;
Die interne &amp;quot;Fenster-auf&amp;quot;-Erkennung kann man wie folgt abschalten:&lt;br /&gt;
  set &amp;lt;HM-CC-RT-DN&amp;gt;_Clima regSet winOpnMode off&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 05 _ClimaTeam ====&lt;br /&gt;
Dieser Kanal erlaubt es mehrere HM-CC-RT-DN zu einem &amp;quot;Team&amp;quot; zu gruppieren. Ein Mitglied des Teams meldet&lt;br /&gt;
* Änderungen der Temperatur am Handrad&lt;br /&gt;
* Einschalten des Boost-Modus am Taster&lt;br /&gt;
an seine &amp;quot;Teamkollegen&amp;quot; weiter. Folgende Änderungen werden &#039;&#039;&#039;nicht&#039;&#039;&#039; weitergegeben:&lt;br /&gt;
* Status der Fensterkontakte&lt;br /&gt;
* Temperaturlisten/Wochenplan und daraus folgende Änderungen&lt;br /&gt;
* Änderungen durch Fernbedienungen&lt;br /&gt;
* Änderungen durch eine HomeMatic-Zentrale&lt;br /&gt;
&lt;br /&gt;
Befehl zum Peeren, wobei &#039;&#039;&amp;lt;HM-CC-RT-DN#1&amp;gt;_ClimaTeam&#039;&#039;, &#039;&#039;&amp;lt;HM-CC-RT-DN#2&amp;gt;_ClimaTeam&#039;&#039;, ..., &#039;&#039;&amp;lt;HM-CC-RT-DN#8&amp;gt;_ClimaTeam&#039;&#039; die Kanalbezeichnungen der jeweiligen ClimaTeam-Kanäle sind:&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN#1&amp;gt;_ClimaTeam peerChan 0 &amp;lt;HM-CC-RT-DN#2&amp;gt;_ClimaTeam single&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN#1&amp;gt;_ClimaTeam peerChan 0 &amp;lt;HM-CC-RT-DN#3&amp;gt;_ClimaTeam single&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN#2&amp;gt;_ClimaTeam peerChan 0 &amp;lt;HM-CC-RT-DN#3&amp;gt;_ClimaTeam single&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 06 _remote ====&lt;br /&gt;
Dieser Kanal kann an eine Fernbedienung gekoppelt werden. Per Tastendruck kann man einen bestimmten Mode und/oder eine bestimmte Temperatur wählen. Dabei kann die Reaktion auf einen langen oder kurzen Tastendruck gesondert eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Der Befehl zum peeren lautet, wobei &amp;lt;button&amp;gt; die Kanalbezeichnung der Fernbedienung und &amp;lt;rt-remote&amp;gt; die Kanalbezeichnung des Heizkörperthermostates ist:&lt;br /&gt;
  set &amp;lt;button&amp;gt; peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_remote single&lt;br /&gt;
&lt;br /&gt;
=== Betriebsmodus Auto, Manu, Party (Urlaub) ===&lt;br /&gt;
&lt;br /&gt;
Der HM-CC-RT-DN verfügt über drei Betriebsmodus: Auto, Manu (Manuell) und Party (Urlaub).&lt;br /&gt;
&lt;br /&gt;
==== Modus Auto ====&lt;br /&gt;
Das Gerät arbeitet gemäß des gespeicherten Wochenprogramms. Manuelle Änderungen sind möglich, werden aber beim nächsten Schaltpunkt überschrieben.&lt;br /&gt;
&lt;br /&gt;
==== Modus Manu ====&lt;br /&gt;
Die Temperatur wird manuell eingestellt, das Wochenprogramm wird nicht abgearbeitet.&lt;br /&gt;
&lt;br /&gt;
==== Modus Party (Urlaub) ====&lt;br /&gt;
Die eingestellte Temperatur gilt bis zu einem gegebenen Endzeitpunkt, anschließend wechselt das Thermostat in den &#039;&#039;Auto&#039;&#039;-Modus. So kann beispielsweise bei Abwesenheit ein niedrigeres Temperaturprofil eingestellt werden ohne dass die Temperaturlisten verändert werden müssen.&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-CC-RT-DN&amp;gt;_Clima controlParty 16 06.12.13 16:30 09.12.13 05:00&lt;br /&gt;
&lt;br /&gt;
Dadurch wird &lt;br /&gt;
* von 06.12.2013, 16:30 Uhr&lt;br /&gt;
* bis 09.12.2013, 05:00 Uhr &lt;br /&gt;
* die gewünschte Raumtemperatur auf 16 °C eingestellt.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&lt;br /&gt;
* Der Befehl muss auf dem Kanal 4 &#039;&#039;(_Clima)&#039;&#039; erfolgen.&lt;br /&gt;
* Es werden nur Uhrzeiten zu jeder vollen oder halben Stunde angenommen (Minuten also 00 oder 30).}}&lt;br /&gt;
&lt;br /&gt;
Mit der folgenden Funktion &amp;lt;code&amp;gt;Urlaub()&amp;lt;/code&amp;gt; kann man eine ganze Wohnung (also mehrere RTs) mit nur einem Befehl in den Party-Modus versetzen. Im Beispiel werden zwei Heizkörper (&amp;quot;Treppenhaus&amp;quot; und &amp;quot;Kammer&amp;quot;) angesteuert.&lt;br /&gt;
&lt;br /&gt;
Zu beachten sind folgende Dinge:&lt;br /&gt;
# Aktuelle Dateien (z.B. &amp;lt;code&amp;gt;10_CUL_HM&amp;lt;/code&amp;gt;) verwenden!&lt;br /&gt;
# Bei dem &#039;&#039;controlParty&#039;&#039;-Befehl &#039;&#039;kein&#039;&#039; Komma zwischen den Parametern.&lt;br /&gt;
# Bei der Funktion die Parameterübergabe definieren &amp;lt;code&amp;gt;($$$$$)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Aufruf:&#039;&#039;&#039;&lt;br /&gt;
:&amp;lt;code&amp;gt;{Urlaub (&amp;quot;16&amp;quot;, &amp;quot;06.12.13&amp;quot;, &amp;quot;16:30&amp;quot;, &amp;quot;09.12.13&amp;quot; ,&amp;quot;05:00&amp;quot;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Funktion:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=perl&amp;gt;&lt;br /&gt;
my $Urlaub;&lt;br /&gt;
sub&lt;br /&gt;
Urlaub($$$$$)&lt;br /&gt;
  {&lt;br /&gt;
    my ($temp, $startDate, $startTime, $endDate, $endTime) = @_;&lt;br /&gt;
 &lt;br /&gt;
    # HM-CC-RT-DN akzeptiert nur Zeiten, die auf Minute 00 oder 30 enden.&lt;br /&gt;
    # Daher $startTime und $endTime abrunden&lt;br /&gt;
    $startTime =~ s/\:[0-2].$/:00/;&lt;br /&gt;
    $startTime =~ s/\:[3-5].$/:30/;&lt;br /&gt;
    $endTime =~ s/\:[0-2].$/:00/;&lt;br /&gt;
    $endTime =~ s/\:[3-5].$/:30/;&lt;br /&gt;
&lt;br /&gt;
    # controlParty bei jedem HM-CC-RT-DN setzen.&lt;br /&gt;
    for my $rt (qw(Kammer Treppenhaus)) {&lt;br /&gt;
      fhem (&amp;quot;set $rt controlParty $temp $startDate $startTime $endDate $endTime&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tastensperre ===&lt;br /&gt;
&lt;br /&gt;
Um zu verhindern, dass der Modus oder die Temperatur per Tasten bzw. Drehrad am HM-CC-RT-DN verändert wird, kann eine Tastensperre gesetzt werden. Dies erfolgt mittels des Befehls:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet btnLock on&lt;br /&gt;
&lt;br /&gt;
Rückgängig machen geht per:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet btnLock off&lt;br /&gt;
&lt;br /&gt;
Diese Tastensperre kann man aber am HM-CC-RT-DN durch eine Tastenkombination wieder zurücksetzen. Um sie nur per FHEM rücksetzen zu können, muss&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet globalBtnLock on&lt;br /&gt;
&lt;br /&gt;
eingegeben werden. Rückgängig geht wieder per:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet globalBtnLock off&lt;br /&gt;
&lt;br /&gt;
Es gibt auch eine Tastensperre die nur das Umschalten des Modus (Auto, Manuell, Urlaub) am Gerät verhindert. Diese wird mit&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet modusBtnLock on&lt;br /&gt;
&lt;br /&gt;
eingeschaltet. Abschalten geht mit:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet modusBtnLock off&lt;br /&gt;
&lt;br /&gt;
=== Burst-Modus ===&lt;br /&gt;
Das ist ein &#039;&#039;&#039;Übertragungs&#039;&#039;&#039;modus für Nachrichten zwischen HM-Geräten und der Zentrale. Der RT erwacht alle 2,5 Minuten und dann überträgt die Zentrale die Kommandos. Wenn man einen Fensterkontakt oder eine Fernsteuerung nutzt, muss der RT sofort reagieren - dann muss man den Burst &#039;&#039;enablen&#039;&#039;. Der RT kann in diesem Fall sofort aufgeweckt werden und bearbeitet die Anforderung (Request). Das kann man auch von der Zentrale aus nutzen (so man möchte). Das ist der &#039;&#039;&#039;Vorteil&#039;&#039;&#039; des eingeschalteten Burst-Modus.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteil:&#039;&#039;&#039; Der Burst-Modus benötigt mehr Leistung, das heißt die Batterien müssen häufiger gewechselt werden: Der RT muss den Receiver ständig empfangsbereit halten. Außerdem wachen bei jedem Burst wachen &#039;&#039;alle&#039;&#039; Burst-Empfänger auf – egal an wen die Kommunikation gerichtet war.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Burst – wie es funktioniert&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Schickt ein Sender eine burst Sequenz, wachen alle burst-Empfänger auf und prüfen die Message. &lt;br /&gt;
Wenn sie betroffen sind bleiben sie eine Zeit lang wach, ansonsten schlafen sie wieder ein. &lt;br /&gt;
Man beachte also, dass Senden eines Burst  Energie in ALLEN burst-Empfängern verbraucht, egal ob sie angesprochen sind.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HMLAN und burst&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[HMLAN]] hat ein Sendebudget das über eine Stunde berechnet wird. Burst belastet diese Konto deutlich - so können nicht mehr als 100 bursts /h gesendet werden - dann geht HMLAN in overload Wenn zusätzliche Nachrichten gesendet werden sind es entsprechend weniger. &lt;br /&gt;
Es ist als nicht vorteilhaft, unnötig bursts zu senden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Burst devices&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es gibt Devices, die immer auf burst reagieren und solche bei denen es abgeschaltet werden kann. So reagiert ein Rauchmelder immer auf Burst damit er seine Team-Kollegen hören kann. &lt;br /&gt;
Ein TC oder RT hingegen hat diese Funktion abschaltbar. &#039;Per default ist dies ausgeschaltet um Batterie zu sparen&#039;. Wenn ein VD gesteuert wird ist der TC ja selbst wach.  Wird er aber mit einem Fensterkontakt gekoppelt muss es eingeschaltet werden – sonst verpasst er die Nachricht. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ConditionalBurst devices&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Devices mit abschaltbarem Burst wie z.B. der &#039;&#039;HM-CC-RT-DN&#039;&#039; haben ein Register, &#039;&#039;burstRx&#039;&#039;, mit dem das burst-Erwachen eingestellt werden kann. &lt;br /&gt;
Sendern, die einen burst-Aktor erwecken sollen, muss man sagen, welcher Peer Burst benötigt. Hier kann ggf. das Register &#039;&#039;peerNeedsBurst&#039;&#039; nach dem Peeren gesetzt werden. FHEM versucht dies automatisch beim Peeren zu erledigen. Siehe [[HomeMatic HMInfo|HMinfo]] Befehl &#039;&#039;models&#039;&#039; um herauszufinden, welche Devices welchen Modus unterstützen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Attribut burstAccess&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Devices, die abschaltbaren burst haben kann man ein attribut bustAccess 1_auto setzen. Es wird beim Abschicken eines Kommandos versucht, das Device mit burst zu wecken. Sollte es nicht funktionieren wird gewartet, bis das Device aufwacht (meist reagieren solche Devices auch auf wakeup). Das Setzen des Attributs ist angenehm – es werden aber ggf. viele bursts gesendet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kommando burstXmit&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Mit diesem Kommando, das bei Devices mit contitional-Burst zu Verfügung steht, wird der burst gezielt von User angestossen.&lt;br /&gt;
&lt;br /&gt;
Der User schickt erst seine Kommandos an das device. Die Kommandos werden im Command-stack gesammelt. &lt;br /&gt;
&lt;br /&gt;
Dann sendet der User ein set burstXmit.&lt;br /&gt;
&lt;br /&gt;
Es passiert das gleiche wie bei burstAccess.&lt;br /&gt;
&lt;br /&gt;
FHEM versucht mittels burst zu wecken und sendet bei Erfolg die Messages aus dem Kommandostack. &lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu burstAccess ist burstXmit gezielt einsetzbar und kann sparsamer verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; FHEM und burst devices&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
FHEM sendet eine burst automatisch mit Kommandos zu Devices, die nur burst unterstützen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So aktiviert man den burst-Betrieb am HM-CC-RT-DN&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Burst Mode einschalten&#039;&#039; (der Kanal 4 des Device WZ1 heisst hier WZ1_4)&lt;br /&gt;
:&amp;lt;code&amp;gt;set WZ1_4 regSet burstRx on &amp;lt;/code&amp;gt;&lt;br /&gt;
prüfen mit:&lt;br /&gt;
:&amp;lt;code&amp;gt;get WZ1_4 reg burstRx &amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;Nun in FHEM den Burst mode einschalten (sofern nicht burstXmit verwendet wird)&#039;&#039;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr WZ1 burstAccess 1_auto&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis: Das Attribut im Device und nicht im Kanal setzen, ansonsten gibt es eine Fehlermeldung.&lt;br /&gt;
&lt;br /&gt;
=== Temperaturlisten ===&lt;br /&gt;
Die Temperaturlisten des HM-CC-RT-DN werden identisch mit denen anderer HomeMatic Thermostate verwaltet (siehe [[HomeMatic Type Thermostat#Temperaturlisten|HomeMatic Type Thermostat]]). Beim HM-CC-RT-DN ist der Kanal 4 (_Clima) für die Temperaturlisten zuständig.&lt;br /&gt;
&lt;br /&gt;
==FHEM-Log==&lt;br /&gt;
In den folgenden Logs heißt Kanal 4 noch &amp;quot;_ClimRT_tr&amp;quot;. Inzwischen würde man dort &amp;quot;_Clima&amp;quot; sehen.&lt;br /&gt;
&lt;br /&gt;
=== Device-Log ===&lt;br /&gt;
 2013.10.10 20:03:24 3: CUL_HM Unknown device CUL_HM_HM_CC_RT_DN_2212BC, please define it&lt;br /&gt;
 2013.10.10 20:03:24 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC CUL_HM 2212BC A1A0184002212BC0000001000954B4551303531303031375900FFFF&lt;br /&gt;
 2013.10.10 20:03:24 3: Device CUL_HM_HM_CC_RT_DN_2212BC added to ActionDetector with 000:10 time&lt;br /&gt;
 2013.10.10 20:03:24 3: CUL_HM pair: CUL_HM_HM_CC_RT_DN_2212BC thermostat, model HM-CC-RT-DN serialNr KEQ0510017&lt;br /&gt;
 2013.10.10 20:03:24 3: LANCUL pairing (hmPairForSec) not enabled&lt;br /&gt;
 2013.10.10 20:03:24 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC-%Y.log CUL_HM_HM_CC_RT_DN_2212BC&lt;br /&gt;
 2013.10.10 20:03:24 3: Device Heizung_Wohnzimmer added to ActionDetector with 000:10 time&lt;br /&gt;
 2013.10.10 20:03:24 3: CUL_HM pair: Heizung_Wohnzimmer thermostat, model HM-CC-TC serialNr JEQ0044286&lt;br /&gt;
 2013.10.10 20:03:24 3: Device CUL_HM_HM_CC_RT_DN_2212BC added to ActionDetector with 000:10 time&lt;br /&gt;
 2013.10.10 20:03:24 3: CUL_HM pair: CUL_HM_HM_CC_RT_DN_2212BC thermostat, model HM-CC-RT-DN serialNr KEQ0510017&lt;br /&gt;
 2013.10.10 20:03:25 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_Weather CUL_HM 2212BC01&lt;br /&gt;
 2013.10.10 20:03:25 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_Weather FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_Weather-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_Weather&lt;br /&gt;
 2013.10.10 20:03:25 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_Weather FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_Weather-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_Weather&lt;br /&gt;
 2013.10.10 20:03:26 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_Climate CUL_HM 2212BC02&lt;br /&gt;
 2013.10.10 20:03:26 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_Climate FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_Climate-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_Climate&lt;br /&gt;
 2013.10.10 20:03:26 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_Climate FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_Climate-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_Climate&lt;br /&gt;
 2013.10.10 20:03:27 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_WindowRec CUL_HM 2212BC03&lt;br /&gt;
 2013.10.10 20:03:27 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_WindowRec FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_WindowRec-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_WindowRec&lt;br /&gt;
 2013.10.10 20:03:27 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_WindowRec FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_WindowRec-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_WindowRec&lt;br /&gt;
 2013.10.10 20:03:28 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr CUL_HM 2212BC04&lt;br /&gt;
 2013.10.10 20:03:28 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr&lt;br /&gt;
 2013.10.10 20:03:28 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr&lt;br /&gt;
 2013.10.10 20:03:29 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam CUL_HM 2212BC05&lt;br /&gt;
 2013.10.10 20:03:29 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam&lt;br /&gt;
 2013.10.10 20:03:29 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam&lt;br /&gt;
 2013.10.10 20:03:30 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_remote CUL_HM 2212BC06&lt;br /&gt;
 2013.10.10 20:03:30 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_remote FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_remote-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_remote&lt;br /&gt;
 2013.10.10 20:03:30 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_remote FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_remote-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_remote&lt;br /&gt;
 2013.10.10 20:03:35 3: Device CUL_HM_HM_CC_RT_DN_2212BC added to ActionDetector with 000:10 time&lt;br /&gt;
 2013.10.10 20:03:40 2: CUL_HM set CUL_HM_HM_CC_RT_DN_2212BC getSerial&lt;br /&gt;
 2013.10.10 20:03:40 2: CUL_HM set CUL_HM_HM_CC_RT_DN_2212BC getConfig&lt;br /&gt;
 2013.10.10 20:03:54 3: Device CUL_HM_HM_CC_RT_DN_2212BC added to ActionDetector with 000:10 time&lt;br /&gt;
&lt;br /&gt;
=== Event monitor ===&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr motorErr: ok&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr measured-temp: 18.4&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr desired-temp: 18&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr ValvePosition: 3 %&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr mode: manu&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr unknown0: 24&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr T: 18.4 desired: 18 valve: 3 %&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC battery: ok&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC batteryLevel: 3.1 V&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC measured-temp: 18.4&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC desired-temp: 18&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC actuator: 3 %&lt;br /&gt;
&lt;br /&gt;
== Firmware Update ==&lt;br /&gt;
Seit 24.10.2014 gibt es für den HM-CC-RT-DN die neue Firmware Version 1.4. Diese kann von der eQ-3 Webseite heruntergeladen werden. Genauere Informationen gibt es unter [[HomeMatic Firmware Update]].&lt;br /&gt;
&lt;br /&gt;
=== HM-CC-RT-DN spezifische Update Informationen ===&lt;br /&gt;
Durch gleichzeitiges Drücken der &amp;quot;Auto-/Manu&amp;quot;-Taste und der &amp;quot;Comfort-/Eco&amp;quot;-Taste am HM-CC-RT-DN während man die Batterien wieder einlegt wird der updatemodus gestartet. Während des Updates steht &amp;quot;FUP&amp;quot; im Display. Nach erfolgreichem Update erscheint &amp;quot;Ins&amp;quot; im Display und es muss eine erneute Adaptierfahrt durch drücken der Boost-Taste ausgelöst werden. Anschließend sollte der HM-CC-RT-DN wieder normal funktionieren. Die eingestellten Parameter und das Pairing mit FHEM gehen beim Update nicht verloren. Sollte das Update fehlschlagen, erscheint &amp;quot;Err&amp;quot; bzw. &amp;quot;CrC&amp;quot; im Display.&lt;br /&gt;
&lt;br /&gt;
Normalerweise sollte dann durch erneutes starten der Prozedur am PC und HM-CC-RT-DN das ganze erneut durchführbar sein.&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Readings, die nicht durch ein einfaches &#039;&#039;getConfig&#039;&#039; aktualisisert werden, z.B. &amp;quot;battery&amp;quot;(nicht batteryLevel). Um diese Readings zu bekommen, ist ein &lt;br /&gt;
:&amp;lt;code&amp;gt;set Device_Channel04 controlMode auto &amp;lt;/code&amp;gt;&lt;br /&gt;
notwendig. Daraufhin werden die Readings übertragen/aktualisiert.&lt;br /&gt;
&lt;br /&gt;
== Simulation von Fensterkontakten und externen Temperatursensoren ==&lt;br /&gt;
grober Ablauf:&lt;br /&gt;
* erstellen ein virtuelles Device&lt;br /&gt;
* erstelle dazu einen virtuellen Kanal&lt;br /&gt;
* peeren den Kanal mit dem RT (als fenster-kontakt oder als remote, wen du willst)&lt;br /&gt;
* sende ein postEvent&lt;br /&gt;
&lt;br /&gt;
=== Fensterkontakte ===&lt;br /&gt;
&#039;&#039;Entnommen aus diesem {{Link2Forum|Topic=31078|Message=236245|LinkText=Forenbeitrag}}&#039;&#039;&lt;br /&gt;
 define virSC CUL_HM 221133&lt;br /&gt;
 attr virSC autoReadReg 4_reqStatus&lt;br /&gt;
 attr virSC expert 2_full&lt;br /&gt;
 attr virSC model virtual_1&lt;br /&gt;
 attr virSC peerIDs &lt;br /&gt;
 attr virSC subType virtual&lt;br /&gt;
 attr virSC webCmd press short:press long&lt;br /&gt;
 &lt;br /&gt;
 define virtualKitchenDoor CUL_HM 22113301&lt;br /&gt;
 attr virtualKitchenDoor dummy 1&lt;br /&gt;
 attr virtualKitchenDoor expert 1&lt;br /&gt;
 attr virtualKitchenDoor group Virtual&lt;br /&gt;
 attr virtualKitchenDoor model virtual_1&lt;br /&gt;
 attr virtualKitchenDoor webCmd postEvent open:postEvent closed &lt;br /&gt;
&lt;br /&gt;
Anschließend peeren und Temperatur festlegen mit:&lt;br /&gt;
 set virtualKitchenDoor peerChan 0 &amp;lt;Thermostat_Window_Rec&amp;gt; single set&lt;br /&gt;
 set &amp;lt;Thermostat_Window_Rec&amp;gt; regSet winOpnTemp 5 virtualKitchenDoor&lt;br /&gt;
&lt;br /&gt;
Ggf noch interne &amp;quot;Fenster-auf&amp;quot; Erkennung abschalten&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt;_Clima regSet winOpnMode off&lt;br /&gt;
&lt;br /&gt;
Die virtuelle Tür wird dann entsprechend über ein Notify getriggert:&lt;br /&gt;
 define notify_virtualKitchenDoor notify (Fensterkontakt_1|Fensterkontakt_2) {if(Value(&amp;quot;Fensterkontakt&amp;quot;) eq &amp;quot;open&amp;quot; &amp;amp;&amp;amp; Value(&amp;quot;Fensterkontakt_2&amp;quot;) eq &amp;quot;open&amp;quot;){fhem(&amp;quot;set virtualKitchenDoor postEvent open&amp;quot;)}else{fhem(&amp;quot;set virtualKitchenDoor postEvent closed&amp;quot;)}}&lt;br /&gt;
&lt;br /&gt;
=== Temperatursensoren ===&lt;br /&gt;
&#039;&#039;Entnommen aus diesem {{Link2Forum|Topic=19686|Message=233788|LinkText=Forenbeitrag}}&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Virtuelles HomeMatic Device mit _deiner_ HM Id definieren:&lt;br /&gt;
 define wz_vT CUL_HM &amp;lt;hmId&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Dem Device einen virtuellen Kanal (Default ist ein virtueller Button) hinzufügen:&lt;br /&gt;
 set wz_vT virtual 1&lt;br /&gt;
&lt;br /&gt;
3. Es ist kein virtueller Button sondern ein virtueller Temperatursensor - darum rename:&lt;br /&gt;
 rename wz_vT_Btn1 wz_vT_Sensor1&lt;br /&gt;
&lt;br /&gt;
4. Virtuellen Peer Sensor mit dem Weather Channel des RT-DN peeren:&lt;br /&gt;
 set wz_vT_Sensor1 peerChan 0 &amp;lt;RT_DN&amp;gt;_Weather single&lt;br /&gt;
&lt;br /&gt;
5. Peering kontrollieren (Voraussetzung: Device &#039;&#039;hm&#039;&#039; vom Typ [[HomeMatic HMInfo|HMinfo]] existiert):&lt;br /&gt;
:&amp;lt;code&amp;gt;set hm peerXref&amp;lt;/code&amp;gt;&lt;br /&gt;
Beispiel-Ausgabe:&lt;br /&gt;
 peerXref done: &lt;br /&gt;
 x-ref list &lt;br /&gt;
    wz_Thermostat_Weather =&amp;gt; wz_vT_Sensor1 &lt;br /&gt;
    wz_vT_Sensor1 =&amp;gt; wz_Thermostat_Weather&lt;br /&gt;
&lt;br /&gt;
6. Gemessene Temperatur vom z.B. 1-Wire DS1820 dem virtuellen HM Sensor übergeben. Z.B. alle zwei Minuten per at:&lt;br /&gt;
 define at_wz_vT at +*00:02 { my $T=(ReadingsVal(&amp;quot;&amp;lt;DS1820B&amp;gt;&amp;quot;,&amp;quot;temperature&amp;quot;,20.0)); fhem &amp;quot;set wz_vT_Sensor1 virtTemp $T&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
Fertig.&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
=== TempList: Bad format ... ===&lt;br /&gt;
Wenn Sie beim Setzen einer Temperaturliste nach dem o.a. Schema (&amp;quot;SetTempList...&amp;quot;) die Meldung&lt;br /&gt;
&lt;br /&gt;
 Bad format, use HH:MM TEMP ......&lt;br /&gt;
&lt;br /&gt;
erhalten, sollten Sie zunächst ein [[update]] von FHEM durchführen.&lt;br /&gt;
&lt;br /&gt;
=== Der Thermostat heizt über die Solltemperatur hinaus ===&lt;br /&gt;
In der Regel ist das ein ganz normales Verhalten, wenn der Thermostat nicht mit einem externen Temperaturfühler oder einem Wandthermostat gepeert ist. In dem Fall muss sich der Thermostat auf den eingebauten Temperatursensor verlassen, der sehr nahe an der Heizung selbst sitzt. Dadurch ist die gemessene Temperatur höher, als sie z.B. in der Raummitte wäre. Der Hersteller hat hier einen mehr oder weniger intelligenten Algorithmus eingebaut, um diesen Effekt zu kompensieren. Das sieht dann so aus, als ob der Thermostat nicht richtig regelt.&lt;br /&gt;
Dieses Verhalten kann man im Prinzip nur verhindern, indem man einen externen Temperatursensor oder einen Wandthermostat peert. Wie das geht ist hier beschrieben: [[#Channel (Kanal) 01 _Weather]]. Normalerweise regelt der Thermostat dann genau auf die Solltemperatur. &lt;br /&gt;
Ansonsten sollte man sich auch fragen, ob das gezeigte Verhalten vielleicht doch gut genug ist. Dazu platziert man irgendein Thermometer möglichst in der Mitte des Raums und beobachtet den Temperaturverlauf eine Weile. Wenn man dann noch eine Abweichung feststellt, kann es sinnvoll sein, diese mittels des Registers R-tempOffset zu beheben.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.eq-3.de/produkt-detail-aktoren/items/homematic-funk-heizkoerperthermostat.html Produktinfo]&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/downloads_produktkatalog/homematic/bda/HM-CC-RT-DN_UM_GE_eQ-3_web.pdf Bedienungsanleitung (PDF)]&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/downloads_produktkatalog/homematic/pdb/Funk-Heizkoerperthermostat_105155_Produktdatenblatt_V2.3.pdf Datenblatt (PDF)]&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/downloads/Ventilkompatibilitaeten.pdf Ventil-Kompatibilitätsliste (zur Zeit nicht verfügbar)]&lt;br /&gt;
* {{Link2Forum|Topic=14738|LinkText=Forenthema zum Thermostat}}&lt;br /&gt;
* {{Link2Forum|Topic=64446|LinkText=Reparatur einer durch mechanischen Stoß von außen abgerissenen Lichtschranke}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SUNRISE_EL&amp;diff=21544</id>
		<title>SUNRISE EL</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SUNRISE_EL&amp;diff=21544"/>
		<updated>2017-05-13T17:00:15Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: Google Maps-Hilfe (Breiten- und Längengrad finden oder eingeben) hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:SUNRISE_EL}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Funktionen für Sonnenstandsabhängige Aktionen &lt;br /&gt;
|ModType=h&lt;br /&gt;
&amp;lt;!-- |ModCategory=?? --&amp;gt;&lt;br /&gt;
|ModCmdRef=SUNRISE_EL&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=99_SUNRISE_EL.pm&lt;br /&gt;
|ModOwner=rudolfkoenig ({{Link2FU|8|Forum}}] / [[Benutzer Diskussion:Rudolfkoenig|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das Hilfsmodul [[SUNRISE_EL]] bietet Funktionen, um Aktionen abhängig von Sonnenauf- und -untergangszeiten durchzuführen.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
In der [[Konfiguration]] (fhem.cfg) muss der gewünschte Standort definiert werden, da der Sonnenauf- und -untergang nicht nur vom Datum, sondern auch vom Längen- und Breitengrad des Standortes abhängig sind. Dazu sind die folgenden Definitionen erforderlich:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr global latitude 52.51626 &amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr global longitude 13.37778 &amp;lt;/code&amp;gt;&lt;br /&gt;
und zwar in genau dieser Schreibweise. Die Koordinaten können entweder mit Hilfe eines GPS-Systems oder über einen entsprechenden Internet-Dienst ermittelt werden.&lt;br /&gt;
&lt;br /&gt;
Als Internet-Dienst eignet sich beipielsweise [https://support.google.com/maps/answer/18539?source=gsearch&amp;amp;hl=de Google Maps-Hilfe (Breiten- und Längengrad finden oder eingeben)] oder [http://www.openstreetmap.org/#map=12/52.51626/13.37778 OpenStreetMap]. Die Werte &#039;&#039;latitude&#039;&#039; und &#039;&#039;longitude&#039;&#039; können aus der URL abgelesen werden. In diesem Beispiel &#039;&#039;latitude&#039;&#039; 52.51626 und &#039;&#039;longitude&#039;&#039; 13.37778 (Brandenburger Tor in Berlin).&lt;br /&gt;
&lt;br /&gt;
== Funktionen ==&lt;br /&gt;
Das Modul SUNRISE_EL stellt die folgenden Funktionen zur Verfügung:&lt;br /&gt;
* sunrise / sunset geben die absolute Zeit des nächsten Sonnenauf- bzw. -untergangs zurück, wobei 24 Stunden addiert werden, sofern das entsprechende Ereignis am nächsten Tag stattfindet&lt;br /&gt;
* sunrise_rel / sunset_rel geben die relative Zeit bis zum nächsten Sonnenauf- bzw. -untergang zurück&lt;br /&gt;
* sunrise_abs / sunset_abs geben die absolute Zeit für den aktuellen Tag zurück&lt;br /&gt;
Diese Funktionen können jeweils mit einem speziellen und drei weiteren (optionalen) Parametern aufgerufen werden: &lt;br /&gt;
: &amp;lt;code&amp;gt;...(offset,min,max)&amp;lt;/code&amp;gt;&lt;br /&gt;
: mit der Bedeutung&lt;br /&gt;
:* Horizont; nur einer der Werte REAL, CIVIL, NAUTIC, ASTRONOMIC (in genau dieser Schreibweise) bzw. HORIZON= ist erlaubt&lt;br /&gt;
:* offset = Sekunden (Ganzzahl), die auf die Zeit addiert werden&lt;br /&gt;
:* min = frühester Zeitpunkt (in Stunden:Minuten - hh:mm), der zurückgegeben werden soll&lt;br /&gt;
:* max = spätester Zeitpunkt (in Stunden:Minuten - hh:mm), der zurückgegeben werden soll&lt;br /&gt;
* isday() kann benutzt werden um festzustellen, ob der aktuelle Zeitpunkt nach Sonnenauf- aber vor Sonnenuntergang des aktuellen Tages liegt&lt;br /&gt;
&lt;br /&gt;
== Steuerung ==&lt;br /&gt;
Mittels folgender Anweisungen in der Konfiguration:&lt;br /&gt;
 Außenlampe - Steuerung An-/Ausschaltzeit&lt;br /&gt;
 define AussenlampeAn1 at *{sunset(0,&amp;quot;17:00&amp;quot;,&amp;quot;22:00&amp;quot;)} set EG.Diele.Aussenlampe on&lt;br /&gt;
 define AussenlampeAus1 at *{sunrise(0,&amp;quot;05:00&amp;quot;,&amp;quot;07:30&amp;quot;)} set EG.Diele.Aussenlampe off&lt;br /&gt;
&lt;br /&gt;
wird der Funk-Lichtschalter für die Außenbeleuchtung (hier das FHEM-Gerät mit dem Namen &#039;&#039;EG.Diele.Aussenlampe&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
* morgens zum Sonnenaufgang, aber nicht vor 05:00 und nicht nach 07:30 Uhr ausgeschaltet&lt;br /&gt;
&lt;br /&gt;
und&lt;br /&gt;
&lt;br /&gt;
* abends zum Sonnenuntergang eingeschaltet, aber nicht vor 17:00 Uhr und nicht nach 22:00 Uhr.&lt;br /&gt;
&lt;br /&gt;
Im FHEM-Standard wird der sogenannte bürgerliche Sonnenuntergang/-aufgang genutzt. &lt;br /&gt;
&lt;br /&gt;
Bis bzw. ab dieser Zeit ist das Lesen ohne zusätzliche Beleuchtung möglich.&lt;br /&gt;
Da dies nicht immer gewünscht ist, ist es möglich bei den sunrise/sunset-Funktionen *optional* als ersten Parameter vorne REAL, CIVIL, NAUTIC, ASTRONOMIC oder z.B. HORIZON=-6.0 oder &amp;quot;HORIZON -6.0&amp;quot; anzustellen: &lt;br /&gt;
&lt;br /&gt;
  # Normales Verhalten wie im obigen Beispiel: &lt;br /&gt;
  {sunset(0,&amp;quot;17:00&amp;quot;,&amp;quot;22:00&amp;quot;)}&lt;br /&gt;
  Ergebnis (als Beispiel): 19:59:22 &lt;br /&gt;
&lt;br /&gt;
  # Gleiches Beispiel mit CIVIL als 1. Parameter:  &lt;br /&gt;
  {sunset(&amp;quot;CIVIL&amp;quot;,0,&amp;quot;17:00&amp;quot;,&amp;quot;22:00&amp;quot;)} &lt;br /&gt;
  Ergebnis (als Beispiel):   19:59:22 &lt;br /&gt;
&lt;br /&gt;
  # Gleiches Beispiel mit Eingabe der Höhe über Horizont als 1. Parameter: &lt;br /&gt;
  {sunset(&amp;quot;HORIZON=-6.0&amp;quot;,0,&amp;quot;17:00&amp;quot;,&amp;quot;22:00&amp;quot;)} &lt;br /&gt;
  Ergebnis (als Beispiel):   19:59:22 &lt;br /&gt;
&lt;br /&gt;
  # Gleiches Beispiel mit dem realen Sonnenuntergang auf 0 Grad als 1. Parameter: &lt;br /&gt;
  {sunset(&amp;quot;REAL&amp;quot;,0,&amp;quot;17:00&amp;quot;,&amp;quot;22:00&amp;quot;);;} &lt;br /&gt;
  Ergebnis (als Beispiel):   19:22:07&lt;br /&gt;
&lt;br /&gt;
== Kontrolle ==&lt;br /&gt;
Um die Zeiten zu kontrollieren können Sie in der FHEM-Befehlszeile den Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
list AussenlampeAn1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
eingeben und mit der &amp;amp;lt;Enter&amp;amp;gt;-Taste (nicht &amp;quot;save-Button&amp;quot;) bestätigen. Sie sehen dann (hier eine Ausgabe vom 17.01.2013) z.B. folgendes:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Internals:&lt;br /&gt;
  DEF    *{sunset(0,&amp;amp;quot;17:00&amp;amp;quot;,&amp;amp;quot;22:00&amp;amp;quot;)} set EG.Diele.Aussenlampe on&lt;br /&gt;
  NAME    AussenlampeAn1&lt;br /&gt;
  NR     225&lt;br /&gt;
  NTM    17:37:09&lt;br /&gt;
  REP    -1&lt;br /&gt;
  STATE   Next: 17:37:09&lt;br /&gt;
  TRIGGERTIME 1358527029&lt;br /&gt;
  TYPE    at&lt;br /&gt;
Attributes:&lt;br /&gt;
  room    Diele&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Der Sonnenuntergang liegt am genannten Tag &#039;&#039;&#039;innerhalb&#039;&#039;&#039; des Start-/Ende-Zeitraums, so dass die Lampe um 17:37 Uhr eingeschaltet wird.&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe (gleiches Datum) von&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
list AussenlampeAus1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
lautet:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Internals:&lt;br /&gt;
  DEF    *{sunrise(0,&amp;amp;quot;05:00&amp;amp;quot;,&amp;amp;quot;07:30&amp;amp;quot;)} set EG.Diele.Aussenlampe off&lt;br /&gt;
  NAME    AussenlampeAus1&lt;br /&gt;
  NR     228&lt;br /&gt;
  NTM    07:30:00&lt;br /&gt;
  REP    -1&lt;br /&gt;
  STATE   Next: 07:30:00&lt;br /&gt;
  TRIGGERTIME 1358490600&lt;br /&gt;
  TYPE    at&lt;br /&gt;
Attributes:&lt;br /&gt;
  room    Diele&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Hier liegt der Sonnenaufgang noch &#039;&#039;&#039;außerhalb&#039;&#039;&#039; des Start-/Ende-Zeitraums, so dass die Lampe um 07:30 Uhr ausgeschaltet wird.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Workaround um die Zeiten für Sonnenaufgang und -untergang anpassen zu können: [[Trick der Woche#isday]]&lt;br /&gt;
* Diskussion über das Modul im {{Link2Forum|Topic=8527|LinkText=Fhem Forum}}&lt;br /&gt;
&lt;br /&gt;
== Hinweise ==&lt;br /&gt;
* Die &#039;&#039;sunset / sunrise&#039;&#039; Einstellungen arbeiten meist erst &#039;&#039;&#039;am nächsten Tag&#039;&#039;&#039; richtig. Das hängt zusammen mit einer Falschberechnung beim setzen dieses &#039;&#039;defines&#039;&#039;. An einer Korrektur wird gearbeitet (Stand Januar 2013).&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Rolladensteuerung_mit_Eingabem%C3%B6glichkeiten&amp;diff=21543</id>
		<title>Rolladensteuerung mit Eingabemöglichkeiten</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Rolladensteuerung_mit_Eingabem%C3%B6glichkeiten&amp;diff=21543"/>
		<updated>2017-05-13T16:58:00Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* ATs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In diesem Artikel beschreibe ich, wie ich meine Rollläden steuere.&lt;br /&gt;
&lt;br /&gt;
==Grundsätzliche Beschreibung==&lt;br /&gt;
Mein erstes große Projekt in Sachen FHEM war es meine Rolläden automatisiert zu steuern, so dass man möglichst wenig manuell eingreifen muss.&lt;br /&gt;
Da der ein und andere Riemen der manuellen Steuerung den Geist aufgegeben hat, habe ich nach und nach alle Rolläden mit Motoren und HM Aktoren versehen.&lt;br /&gt;
&lt;br /&gt;
Da ich eine Photovoltaikanlage besitze habe ich ein kleines Modul geschrieben, welches mir die Ertragsleistung in FHEM darstellt.&lt;br /&gt;
Anhand dieser Werte steuere ich Rolläden, welche zur Südseite gerichtet sind. Dadurch wird dann dynamisch die Sonneneinstrahlung und damit die Erwärmung der Zimmer eingestellt. &lt;br /&gt;
Zwischenzeitlich ist ein Helligkeitssensor installiert worden. Dieser sorgt für das Herunterfahren der Rolläden bei Eintreten der Dunkelheit.&lt;br /&gt;
&lt;br /&gt;
Dieser Wert korreliert zwar mit den Werten der PV Anlage, dies habe ich aber bislang noch nicht aufgelöst.&lt;br /&gt;
&lt;br /&gt;
==Komponenten==&lt;br /&gt;
1. HM Funk-Jalousieaktor HM-LC-Bi1PBU-FM&lt;br /&gt;
&lt;br /&gt;
2. Solarlog-Modul&lt;br /&gt;
&lt;br /&gt;
3. Helligkeitssensor aus diesem Posting&lt;br /&gt;
   {{Link2Forum|Topic=20620|LinkText=Selbstbau HM_WDS10_TH_O mit Luftdruckmessung}}&lt;br /&gt;
 &lt;br /&gt;
==Visualisierung==&lt;br /&gt;
Hier ist der Status eines jeden Rolladens ersichtlich und dieser ist bedienbar.&lt;br /&gt;
Die Darstellung habe ich mittels [[Dashboard]] umgesetzt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Dashboard01.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Über diese Einstellungsseite können diverse Parameter der Steuerung gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Dashboard02.png]]&lt;br /&gt;
&lt;br /&gt;
==Einstellungen==&lt;br /&gt;
;&#039;&#039;&#039;Automatik aktiv:&#039;&#039;&#039;&lt;br /&gt;
:Hiermit wird die komplette Steuerung der Rolläden ein- bzw ausgeschaltet.&lt;br /&gt;
:Sofern der Modus &amp;quot;aus&amp;quot; aktiv ist, werden meine Rolläden lediglich über die Aktoren direkt oder eine HM Fernbedienung gesteuert.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;Art:&#039;&#039;&#039;&lt;br /&gt;
:Hier werden derzeit drei Modi unterstützt:&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;1. Normal&#039;&#039;&lt;br /&gt;
:Bei diesem Modus fahren die Rollläden zu den definierten Zeiten hoch. Dabei wird eine Unterscheidung zwischen Wochentagen und Wochenenden berücksichtigt. Ausserdem werden mit Hilfe einer Holiday-Datei auch Feiertage und Urlaube berücksichtigt.&lt;br /&gt;
:Abends ist ein Zeitraum und ein Helligkeitswert definiert. Sobald dieser Helligkeitswert in dem Zeitfenster unterschritten wird, fahren die Rolläden runter. Spätestens aber zum Ende des Zeitfensters.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;2. Weihnachten&#039;&#039;&lt;br /&gt;
:Vom Prinzip arbeitet dieser Modus wie der Modus &amp;quot;Normal&amp;quot;. Lediglich ein Rolladen fährt zum Ende des Zeitfensters runter und nicht bei Unterschreitung des Helligkeitswertes, damit die Weihnachtsaussenbeleuchtung auch von innen begutachtet werden kann.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;3. Urlaub&#039;&#039;&lt;br /&gt;
:Dieser Modus schaltet die Rolläden genauso wie der Modus &amp;quot;Normal&amp;quot;. Des Weiteren aktiviere ich noch eine Zufallssteuerung für eine Anwesenheitsbeleuchtung.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;PV:&#039;&#039;&#039;&lt;br /&gt;
:Hiermit wird der Ertrag der Photovoltaikanlage mit einbezogen, damit die Rolläden zur Südseite anhand definierter Werte geschaltet werden.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;Zeit hoch:&#039;&#039;&#039;&lt;br /&gt;
:Hier wird der Zeitpunkt definiert, wann die Rollläden an Werktagen geöffnet werden sollen.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;Zeit hoch WE:&#039;&#039;&#039;&lt;br /&gt;
:Dies definiert die Zeit, wann die Rolläden am Wochenende bzw an Tagen, welche in einer Holiday Datei definiert sind hoch gehen sollen.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;Helligkeit runter:&#039;&#039;&#039;&lt;br /&gt;
:Dieser Wert ist der untere Schwellwert des Helligkeitssensors, ab wann die Rolläden in dem definierten Zeitraum geschlossen werden sollen.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;Zeit runter:&#039;&#039;&#039;&lt;br /&gt;
:Zu dieser Zeit fahren die Rolläden runter, egal ob der angegebene Hellgleitswert erreicht wurde. Sofern eventuelle Tür-/Fensterkontakte den Status &amp;quot;open&amp;quot; aufweisen, bleiben diese oben.&lt;br /&gt;
&lt;br /&gt;
==Codierung==&lt;br /&gt;
Meine Aktoren haben den folgenden Aufbau, was den Namen angeht:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OG_ki1_RO_Carport&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die ersten zwei Zeichen geben das Geschoss an.&lt;br /&gt;
Die Zeichen 4-6 beschreiben das Zimmer.&lt;br /&gt;
Die Zeichen 8 und 9 stellen die Art des Aktors dar.&lt;br /&gt;
Ab Zeichen 11 wird noch weiter beschrieben wo sich der Aktor befindet bzw was für eine Funktion dieser besitzt.&lt;br /&gt;
&lt;br /&gt;
===Dummys===&lt;br /&gt;
Beginnen möchte ich hier mit den Dummys, welche die Konfiguration der Steuerung darstellen.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;Automatik aktiv:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;NAME       du_Rollo_Master &lt;br /&gt;
TYPE       dummy &lt;br /&gt;
&lt;br /&gt;
Attributes: &lt;br /&gt;
alias      Automatik aktiv: &lt;br /&gt;
devStateIcon .*:rc_BLANK &lt;br /&gt;
group      Rollos_Settings &lt;br /&gt;
icon       fts_shutter_automatic &lt;br /&gt;
room       LichtRollo &lt;br /&gt;
setList    state:an,aus &lt;br /&gt;
sortby     01 &lt;br /&gt;
webCmd     state&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;Art:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;NAME       du_Rollo_Art &lt;br /&gt;
TYPE       dummy &lt;br /&gt;
&lt;br /&gt;
Attributes: &lt;br /&gt;
alias      Art: &lt;br /&gt;
devStateIcon .*:rc_BLANK &lt;br /&gt;
group      Rollos_Settings &lt;br /&gt;
icon       fts_shutter_updown &lt;br /&gt;
room       LichtRollo &lt;br /&gt;
setList    state:Normal,Urlaub,Weihnachten &lt;br /&gt;
sortby     02 &lt;br /&gt;
webCmd     state&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;PV:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;NAME       du_Rollo_PV &lt;br /&gt;
TYPE       dummy &lt;br /&gt;
&lt;br /&gt;
Attributes: &lt;br /&gt;
alias      PV: &lt;br /&gt;
devStateIcon .*:rc_BLANK &lt;br /&gt;
group      Rollos_Settings &lt;br /&gt;
icon       weather_sun &lt;br /&gt;
room       LichtRollo &lt;br /&gt;
setList    state:an,aus &lt;br /&gt;
sortby     03 &lt;br /&gt;
webCmd     state&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;Zeit hoch:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;NAME       du_Rollo_Zeit_ho &lt;br /&gt;
TYPE       dummy &lt;br /&gt;
&lt;br /&gt;
Attributes: &lt;br /&gt;
alias      Zeit hoch: &lt;br /&gt;
devStateIcon .*:rc_BLANK &lt;br /&gt;
group      Rollos_Settings &lt;br /&gt;
icon       icoUhr &lt;br /&gt;
room       LichtRollo &lt;br /&gt;
setList    state:time &lt;br /&gt;
sortby     10 &lt;br /&gt;
webCmd     state&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;Zeit hoch WE:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; NAME       du_Rollo_Zeit_ho_WE &lt;br /&gt;
   TYPE       dummy &lt;br /&gt;
&lt;br /&gt;
Attributes: &lt;br /&gt;
alias      Zeit hoch WE: &lt;br /&gt;
devStateIcon .*:rc_BLANK &lt;br /&gt;
group      Rollos_Settings &lt;br /&gt;
icon       icoUhr &lt;br /&gt;
room       LichtRollo &lt;br /&gt;
setList    state:time &lt;br /&gt;
sortby     11 &lt;br /&gt;
webCmd     state&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;Helligkeit runter:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;NAME       du_Rollo_Luminosity_ru &lt;br /&gt;
TYPE       dummy &lt;br /&gt;
&lt;br /&gt;
Attributes: &lt;br /&gt;
alias      Helligkeit runter &lt;br /&gt;
devStateIcon .*:rc_BLANK &lt;br /&gt;
group      Rollos_Settings &lt;br /&gt;
icon       sani_solar &lt;br /&gt;
room       LichtRollo &lt;br /&gt;
setList    state:textField &lt;br /&gt;
sortby     20 &lt;br /&gt;
webCmd     state&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;Zeit runter:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;NAME       du_Rollo_Zeit_ru&lt;br /&gt;
TYPE       dummy &lt;br /&gt;
&lt;br /&gt;
Attributes: &lt;br /&gt;
alias      Zeit runter:&lt;br /&gt;
devStateIcon .*:rc_BLANK &lt;br /&gt;
group      Rollos_Settings &lt;br /&gt;
icon       icoUhr &lt;br /&gt;
room       LichtRollo &lt;br /&gt;
setList    state:time &lt;br /&gt;
sortby     21 &lt;br /&gt;
webCmd     state&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;Tageslicht:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dieser Dummy beinhaltet den Wert &amp;quot;hell&amp;quot; oder &amp;quot;dunkel&amp;quot;.&lt;br /&gt;
Diese beiden Werte werden von zwei at&#039;s in Abhängigkeit von Sunset/Sunrise gesetzt.&lt;br /&gt;
Dadurch gehen die Rollos hoch, wenn im Dunkeln eine Tür geöffnet wird. Wird die Tür geschlossen. Geht der Rollo auch wieder runter.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;NAME       du_Tageslicht &lt;br /&gt;
TYPE       dummy &lt;br /&gt;
&lt;br /&gt;
Attributes: &lt;br /&gt;
alias      Tageslicht &lt;br /&gt;
devStateIcon devStateIcon hell:hell dunkel:nacht@crimson &lt;br /&gt;
icon       sani_solar &lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ATs===&lt;br /&gt;
&lt;br /&gt;
Für beide ATs muss [[:SUNRISE_EL|SUNRISE_EL]] konfiguriert sein.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;at_LichtRollo_hell&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;NAME       at_LichtRollo_hell&lt;br /&gt;
DEF        *{sunrise(1200)} set du_Tageslicht hell &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;at_LichtRollo_dunkel&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;NAME       at_LichtRollo_dunkel&lt;br /&gt;
DEF        *{sunset(1200)} set du_Tageslicht dunkel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===DOIFs===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;di_EG_ku_RO_StrasseLinks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dieses DOIF beachtet den Helligkeitswert und den Modus &amp;quot;Weihnachten&amp;quot;.&lt;br /&gt;
D.h., daß dieser Rollo erst am Ende des definierten Zeitraums herunterfährt.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;(([EG_dr_TS_Terrasse:luminosity] &amp;lt; [du_Rollo_Luminosity_ru] and [du_Rollo_Art] ne &amp;quot;Weihnachten&amp;quot; and [du_Tageslicht:state] eq &amp;quot;dunkel&amp;quot;) or [{ReadingsVal(&amp;quot;du_Rollo_Zeit_ru&amp;quot;, &amp;quot;state&amp;quot;, &amp;quot;22:00:00&amp;quot;)}]) &lt;br /&gt;
    ({if (ReadingsVal(&amp;quot;EG_ku_RO_StrasseLinks&amp;quot;, &amp;quot;state&amp;quot;, &amp;quot;---&amp;quot;) ne &amp;quot;off&amp;quot;) {fhem(&amp;quot;set EG_ku_RO_StrasseLinks off&amp;quot;)}})&lt;br /&gt;
  DOELSEIF (([[du_Rollo_Zeit_ho]|8] or [[du_Rollo_Zeit_ho_WE]|7]))&lt;br /&gt;
    ({if (ReadingsVal(&amp;quot;EG_ku_RO_StrasseLinks&amp;quot;, &amp;quot;state&amp;quot;, &amp;quot;---&amp;quot;) ne &amp;quot;on&amp;quot;) {fhem(&amp;quot;set EG_ku_RO_StrasseLinks on&amp;quot;)}})&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;di_EG_ku_RO_StrasseRechts&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hier wird ein Fensterkontakt mit in die Schaltung einbezogen.&lt;br /&gt;
D.h. während des definierten Zeitraums gehen Rollos hoch, wenn eine Tür oder ein Fenster geöffnet wird. Ebenso wieder runter, sofern der Kontakt wieder geschlossen wird.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;([EG_ku_TK_Strasse] eq &amp;quot;closed&amp;quot; and ([EG_dr_TS_Terrasse:luminosity] &amp;lt; [du_Rollo_Luminosity_ru:state] and [du_Tageslicht:state] eq &amp;quot;dunkel&amp;quot;) or [[du_Rollo_Zeit_ru]]) &lt;br /&gt;
    ({if (ReadingsVal(&amp;quot;EG_ku_RO_StrasseRechts&amp;quot;, &amp;quot;state&amp;quot;, &amp;quot;---&amp;quot;) ne &amp;quot;off&amp;quot;) {fhem(&amp;quot;set EG_ku_RO_StrasseRechts off&amp;quot;)}}) &lt;br /&gt;
  DOELSEIF (([[du_Rollo_Zeit_ho]|8] or [[du_Rollo_Zeit_ho_WE]|7]) or ([EG_ku_TK_Strasse:state] eq &amp;quot;open&amp;quot;) and ([du_Tageslicht:state] eq &amp;quot;dunkel&amp;quot;))&lt;br /&gt;
    ({if (ReadingsVal(&amp;quot;EG_ku_RO_StrasseRechts&amp;quot;, &amp;quot;state&amp;quot;, &amp;quot;---&amp;quot;) ne &amp;quot;on&amp;quot;) {fhem(&amp;quot;set EG_ku_RO_StrasseRechts on&amp;quot;)}})&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;di_EG_wz_RO_TerrasseLinks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dieses DOIF beachtet einen Fensterkontakt und bezieht die Photovoltaikanlage mit ein.&lt;br /&gt;
Dieser Rollo geht während des Zeitraums der Dunkelheit rauf und runter, sofern der Türkontakt geöffnet oder geschlossen wird.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;([EG_wz_TK_Terrasse:state] eq &amp;quot;closed&amp;quot; and (([EG_dr_TS_Terrasse:luminosity] &amp;lt; [du_Rollo_Luminosity_ru:state] and [du_Tageslicht:state] eq &amp;quot;dunkel&amp;quot;) or [[du_Rollo_Zeit_ru]])) &lt;br /&gt;
    ({if (ReadingsVal(&amp;quot;EG_wz_RO_TerrasseLinks&amp;quot;, &amp;quot;state&amp;quot;, &amp;quot;---&amp;quot;) ne &amp;quot;off&amp;quot;) {fhem(&amp;quot;set EG_wz_RO_TerrasseLinks off&amp;quot;)}})&lt;br /&gt;
  DOELSEIF (([[du_Rollo_Zeit_ho]|8] or [[du_Rollo_Zeit_ho_WE]|7]) or (([EG_wz_TK_Terrasse:state] eq &amp;quot;open&amp;quot;) and [du_Tageslicht:state] eq &amp;quot;dunkel&amp;quot;))&lt;br /&gt;
    ({if (ReadingsVal(&amp;quot;EG_wz_RO_TerrasseLinks&amp;quot;, &amp;quot;state&amp;quot;, &amp;quot;---&amp;quot;) ne &amp;quot;on&amp;quot;) {fhem(&amp;quot;set EG_wz_RO_TerrasseLinks on&amp;quot;)}})&lt;br /&gt;
  DOELSEIF ([du_Rollo_PV] eq &amp;quot;an&amp;quot; and [EG_wz_TK_Terrasse] eq &amp;quot;closed&amp;quot; and [mySL:Pac_avg] &amp;gt;= 2100)&lt;br /&gt;
    (set EG_wz_RO_TerrasseLinks 0)&lt;br /&gt;
  DOELSEIF ([du_Rollo_PV] eq &amp;quot;an&amp;quot; and [EG_wz_TK_Terrasse] eq &amp;quot;closed&amp;quot; and [mySL:Pac_avg] &amp;gt;= 1501)&lt;br /&gt;
    (set EG_wz_RO_TerrasseLinks 30)&lt;br /&gt;
  DOELSEIF ([du_Rollo_PV] eq &amp;quot;aus&amp;quot;)&lt;br /&gt;
    (set EG_wz_RO_TerrasseLinks on)&lt;br /&gt;
&lt;br /&gt;
wait       0:0:300:300:0 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle anderen Aktoren sind vereinfachte Versionen der genannten DOIFs und werden daher hier nicht genannt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;di_Rollo_Art&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dieses DOIF enabled und disabled einen Randomtimer, welcher ein Zufallslicht schaltet.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;([du_Rollo_Art:state] eq &amp;quot;Urlaub&amp;quot;) (attr UrlaubTimer disable 0, attr at_Urlaub_DG_hz_SD_Zirkpumpe disable 0) &lt;br /&gt;
DOELSE ([du_Rollo_Art:state] ne &amp;quot;Urlaub&amp;quot;) (attr UrlaubTimer disable 1, attr at_Urlaub_DG_hz_SD_Zirkpumpe disable 1)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ReadingsGroup===&lt;br /&gt;
&lt;br /&gt;
Hier seien noch die beiden ReadingsGroup aufgeführt, welche im Dashboard dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Funktionen sind in der myRollosUtils.pm gespeichert und dienen der Bedienung ausgehend aus den ReadingsGroups.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;############## Rollos hoch/runter in Readingsgroup&lt;br /&gt;
&lt;br /&gt;
sub myRollosUtils_RollosUpDown($$) {&lt;br /&gt;
  my($DEVICE,$CMD) = @_;&lt;br /&gt;
 &lt;br /&gt;
  my $icon = $CMD;&lt;br /&gt;
  my $link;&lt;br /&gt;
 &lt;br /&gt;
  if( $CMD eq &amp;quot;up&amp;quot; ) {&lt;br /&gt;
    $icon = &amp;quot;remotecontrol/black_btn_CHUP&amp;quot;;&lt;br /&gt;
    $link = &amp;quot;setreading $DEVICE cmd-new on&amp;quot;;&lt;br /&gt;
  } elsif( $CMD eq &amp;quot;down&amp;quot; ) {&lt;br /&gt;
    $icon = &amp;quot;remotecontrol/black_btn_CHDOWN&amp;quot;;&lt;br /&gt;
    $link = &amp;quot;setreading $DEVICE cmd-new off&amp;quot;;&lt;br /&gt;
  } elsif( $CMD eq &amp;quot;stop&amp;quot; ) {&lt;br /&gt;
    $icon = &amp;quot;remotecontrol/black_btn_STOP&amp;quot;;&lt;br /&gt;
    $link = &amp;quot;setreading $DEVICE cmd-new stop&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  my $notify = &amp;quot;no_RollosUpDown&amp;quot;;&lt;br /&gt;
  if( !defined($defs{$notify}) ) {&lt;br /&gt;
    CommandDefine(undef,&lt;br /&gt;
                   &amp;quot;$notify notify .*:cmd-new.* &amp;quot;&lt;br /&gt;
                   .&amp;quot;{ myRollos_RollosUpDownNotify(\$NAME,\$EVTPART1); }&amp;quot; );&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  my $ret = &amp;quot;%$icon&amp;quot;;&lt;br /&gt;
  $ret .= &amp;quot;%$link&amp;quot; if( $link );&lt;br /&gt;
 &lt;br /&gt;
  return $ret;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub myRollosUtils_RollosUpDownNotify($$) {&lt;br /&gt;
  my($DEVICE,$CMD) = @_;&lt;br /&gt;
 &lt;br /&gt;
  return if( $CMD eq &amp;quot;&amp;quot; );&lt;br /&gt;
  &lt;br /&gt;
  CommandSet(undef, &amp;quot;$DEVICE $CMD&amp;quot;);&lt;br /&gt;
   &lt;br /&gt;
  return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub myRollosUtils_RollosIcon($) {&lt;br /&gt;
  my($DEVICE) = @_;&lt;br /&gt;
  my $level = ReadingsVal($DEVICE,&amp;quot;level&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
  my $pct = ReadingsVal($DEVICE, &amp;quot;pct&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  my $ret = int((100 - $level)/10)*10;&lt;br /&gt;
 &lt;br /&gt;
  my $icon;&lt;br /&gt;
  if ($ret eq &amp;quot;0&amp;quot;) {&lt;br /&gt;
    $icon = &amp;quot;fts_window_2w\@orange&amp;quot;;&lt;br /&gt;
  } else {&lt;br /&gt;
    $icon = &amp;quot;fts_shutter_&amp;quot;.$ret.&amp;quot;\@orange&amp;quot;;  &lt;br /&gt;
  }&lt;br /&gt;
   &lt;br /&gt;
  return $pct.&amp;quot; %&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EG_rg_Rolllaeden&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;EG.*_RO_S.*:level,&amp;lt;{myRollosUtils_RollosUpDown($DEVICE,&amp;quot;up&amp;quot;)}&amp;gt;,&amp;lt;{myRollosUtils_RollosUpDown($DEVICE,&amp;quot;stop&amp;quot;)}&amp;gt;,&lt;br /&gt;
&amp;lt;{myRollosUtils_RollosUpDown($DEVICE,&amp;quot;down&amp;quot;)}&amp;gt; EG.*_RO_C.*:level,&amp;lt;{myRollosUtils_RollosUpDown($DEVICE,&amp;quot;up&amp;quot;)}&amp;gt;,&lt;br /&gt;
&amp;lt;{myRollosUtils_RollosUpDown($DEVICE,&amp;quot;stop&amp;quot;)}&amp;gt;,&amp;lt;{myRollosUtils_RollosUpDown($DEVICE,&amp;quot;down&amp;quot;)}&amp;gt; EG.*_RO_T.*:level,&lt;br /&gt;
&amp;lt;{myRollosUtils_RollosUpDown($DEVICE,&amp;quot;up&amp;quot;)}&amp;gt;,&amp;lt;{myRollosUtils_RollosUpDown($DEVICE,&amp;quot;stop&amp;quot;)}&amp;gt;,&lt;br /&gt;
&amp;lt;{myRollosUtils_RollosUpDown($DEVICE,&amp;quot;down&amp;quot;)}&amp;gt; EG.*_RO_M.*:level,&amp;lt;{myRollosUtils_RollosUpDown($DEVICE,&amp;quot;up&amp;quot;)}&amp;gt;,&lt;br /&gt;
&amp;lt;{myRollosUtils_RollosUpDown($DEVICE,&amp;quot;stop&amp;quot;)}&amp;gt;,&amp;lt;{myRollosUtils_RollosUpDown($DEVICE,&amp;quot;down&amp;quot;)}&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attributes: &lt;br /&gt;
group      Rollos/Markise_EG &lt;br /&gt;
mapping    %ALIAS &lt;br /&gt;
valueFormat {pct =&amp;gt; &amp;quot;%.1f&amp;quot;} &lt;br /&gt;
valueIcon  %VALUE &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Notify===&lt;br /&gt;
&lt;br /&gt;
Ein Notify ist für die Bedienung ausgehend aus den ReadingsGroup notwendig.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;DEF        .*:cmd-new.* { myRollosUtils_RollosUpDownNotify($NAME,$EVTPART1); } &lt;br /&gt;
NAME       no_RollosUpDown &lt;br /&gt;
TYPE       notify &lt;br /&gt;
&lt;br /&gt;
Attributes: &lt;br /&gt;
group      notify&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Weekprofile&amp;diff=20071</id>
		<title>Weekprofile</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Weekprofile&amp;diff=20071"/>
		<updated>2017-02-17T20:33:47Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: EG_Bad_THERMOSTAT_Clima zu EG_Bad_THERMOSTAT_Climate&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:weekprofile}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Verwaltung von Wochenprofilen für Heizungssteuerung&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModForumArea=Frontends&lt;br /&gt;
|ModCmdRef=weekprofile&lt;br /&gt;
|ModTechName=98_weekprofile.pm&lt;br /&gt;
|ModOwner={{Link2FU|7869|Risiko}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[weekprofile]] stellt Funktionen zur Verwaltung von Wochenprofilen\Wochenplänen für Heizkörperthermostate zur Verfügung. Aktuell werden folgenden Systeme unterstützt:&lt;br /&gt;
* [[MAX]]&lt;br /&gt;
* [[HomeMatic]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Es ist möglich, verschiedene Wochenprofile anzulegen, zu kopieren, zu ändern und zu löschen. Außerdem können die erstellten Profile den entsprechenden Devices zugewiesen werden. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Bei HomeMatic müssen die Kanäle &amp;quot;Clima&amp;quot; bzw. &amp;quot;_Climate&amp;quot; verwendet werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Voraussetzung ==&lt;br /&gt;
Zum einwandfreien Betrieb des Moduls wird JSON benötigt. Dieses kann z.B. über folgendes installiert werden&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sudo apt-get install libjson-pp-perl&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== FHEMWEB Widget ==&lt;br /&gt;
Zur Bedienung des Moduls existiert ein passendes widget für FHEMWEB.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Weekprofile_master.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
Alle notwendigen Aufgaben wie bspw. Kopieren, Bearbeiten, Zuweisen, etc. können über die FHEMWEB Oberfläche erfolgen.&amp;lt;br&amp;gt;&lt;br /&gt;
Ein direkte Verwendung der Befehle für get und set ist somit nicht zwingend erforderlich.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Betriebsarten ==&lt;br /&gt;
Das Modul besitzt 3 unterschiedliche Betriebsarten, die im Folgenden beschrieben werden. Obwohl auch Mischformen möglich sind, sollte man sich der Übersichtlichkeit halber für eine Betriebsart entscheiden.&lt;br /&gt;
&lt;br /&gt;
Bei allen Änderungen sollte man immer bedenken, dass die Änderung an die entsprechenden Thermostaten übertragen werden müssen, was je nach Menge etwas Zeit in Anspruch nehmen kann.&lt;br /&gt;
&lt;br /&gt;
=== Assoziiertes Master Gerät ===&lt;br /&gt;
Dieses ist der einfachste Betriebsmodus, bei dem jeder Definition genau ein Thermostat zugeordnet ist. D.h. entsprechend der Anzahl der Thermostaten, die man steuern möchte, benötigt man eine passende Anzahl von Weekprofile-Definitionen.&lt;br /&gt;
Bei der Definition des Moduls wird das zu steuernde Thermostat direkt mit angegeben.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; weekprofile &amp;lt;device&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
:&amp;lt;code&amp;gt;define EG_Bad_WEEKPROFILE weekprofile EG_Bad_THERMOSTAT_Climate&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Bei HomeMatic müssen die Kanäle &amp;quot;Clima&amp;quot; bzw. &amp;quot;_Climate&amp;quot; verwendet werden.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Bei der Definition wird automatisch ein Wochenplan mit dem Namen &#039;master&#039; angelegt.&lt;br /&gt;
Der Wochenplan entspricht dem im Device hinterlegtem Profil. &lt;br /&gt;
&lt;br /&gt;
Dieser spezielle Masterplan kann nicht gelöscht werden, da er immer dem aktuellen Profil im Device entspricht.&lt;br /&gt;
Ändert man das Profil direkt über das Device, wird der Masterplan automatisch aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Wird der Masterplan über das Modul weekprofile geändert\gespeichert, wird das Profil automatisch zum assoziiertem Device übertragen.&lt;br /&gt;
&lt;br /&gt;
Wird in dieser Betriebsart für einen Befehl kein spezielles Device angegeben, wird immer das assoziierte Device verwendet. So wird bspw. bei&lt;br /&gt;
:&amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; send_to_device urlaub&amp;lt;/code&amp;gt;&lt;br /&gt;
das Profil &#039;urlaub&#039; an das bei define angegebene Thermostat übertragen.&lt;br /&gt;
&lt;br /&gt;
==== Funktionen des Wigets ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Button&lt;br /&gt;
! Funktion&lt;br /&gt;
|-&lt;br /&gt;
| Zahnräder&lt;br /&gt;
| Beabeitungsmodus öffnen; Auf der dann angezeigten Seite kann über &amp;quot;--&amp;gt;&amp;quot; der Plan eines Tages auf einen anderen kopiert werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;DropDown&#039;&lt;br /&gt;
| Profil für Ansicht/Bearbeitung auswählen&lt;br /&gt;
|-&lt;br /&gt;
| &#039;+&#039;&lt;br /&gt;
| Neues Profil durch Kopie erstellen&lt;br /&gt;
|-&lt;br /&gt;
| &#039;-&#039;&lt;br /&gt;
| Profil löschen&lt;br /&gt;
|-&lt;br /&gt;
| &#039;--&amp;gt;&#039;&lt;br /&gt;
| Profil an ein oder mehrere Thermostate übertragen, die nicht dem assoziierten Mastergerät entsprechen. Dabei bietet das Modul alle kompatiblen gefundenen Thermostaten automatisch zur Auswahl an.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Standard Verwaltung ===&lt;br /&gt;
Diese Betriebsart ist für die einfache Verwaltung von Wochenplänen gedacht, welche dann an unterschiedliche Thermostate manuell übertragen werden können.&lt;br /&gt;
Für diese Betriebsart sollte kein assoziiertes Master Gerät bei define angegeben werden.&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; weekprofile&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Fall wird beim erstmaligen Anlegen ein Default-Profil mit dem Namen &#039;default&#039; angelegt.&lt;br /&gt;
Dieses bildet die Grundlage zur Erstellung weiterer Pläne durch kopieren.&lt;br /&gt;
Existieren mindestens. 2 Profile, kann das Default-Profil gelöscht werden.&lt;br /&gt;
Die einzelnen Wochenpläne können mittels &amp;lt;code&amp;gt;send_to_device&amp;lt;/code&amp;gt; an ein oder mehrere Thermostate übertragen werden.&lt;br /&gt;
&lt;br /&gt;
==== Funktionen des Wigets ====&lt;br /&gt;
Siehe Betriebsmodus assoziiertes Master Gerät.&lt;br /&gt;
&lt;br /&gt;
=== Topics ===&lt;br /&gt;
Dieser Betriebsmodus erlaubt es mit Hilfe von Topics oder Kategorien wie bspw. (Urlaub, Sommer, Winter, Party, etc.) komplexeren Verwaltung von Wochenplänen zu realisieren.&lt;br /&gt;
Dieses Feature wird mittels dem Atribute &amp;lt;code&amp;gt;useTopics&amp;lt;/code&amp;gt; aktiviert.&lt;br /&gt;
Innerhalb eines Topics kann es mehrere Wochenpläne geben. Sinnvollerweise für jedes Thermostat ein Wochenplan.&lt;br /&gt;
Mit dem Befehl &amp;lt;code&amp;gt;restore_topic&amp;lt;/code&amp;gt; kann man dann zwischen unterschiedlichen Kategorien wechseln. Die Wochenpläne werden automatisch an die Thermostate übertragen. Dazu muss im Thermostat ein User-Attribut &#039;weekprofile&#039; mit dem Namen des verbundenen Wochenplans hinterlegt sein.&lt;br /&gt;
&lt;br /&gt;
Bei der Verwendung von Topics wird beim erstmaligen Anlegen automatisch die Topic &#039;default&#039; mit den Default-Wochenprofil &#039;default&#039; angelegt.&lt;br /&gt;
In dieser Topic kann man beispielsweise Pläne ablegen, die bei mehreren Thermostaten oder anderen Kategorien verwendet werden sollen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Bei der Verwendung von Topics, besteht der Profilname immer aus &amp;lt;code&amp;gt;Topicname:Planname&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wird kein Topicname angegeben, wird immer &#039;default&#039; als Topicnamen verwendet.&lt;br /&gt;
&lt;br /&gt;
==== Verwendung von Referenzen ====&lt;br /&gt;
Mittels Referenzierung kann man auf dieser Pläne verweisen und muss so nur einen Plan ändern, um gleich für eine Vielzahl von Thermostaten die Pläne zu ändern.&lt;br /&gt;
So könnte bspw. &#039;&#039;Sommer:Plan_WZ&#039;&#039; nur eine Referenz auf &#039;&#039;default:Fest_24h&#039;&#039; sein. &amp;lt;br&amp;gt;&lt;br /&gt;
Existiert &#039;&#039;default:Fest_24h&#039;&#039;, wird der Verweis so angelegt:&lt;br /&gt;
:&amp;lt;code&amp;gt;set weekprf reference_profile default:Fest_24h Sommer:Plan_WZ&amp;lt;/code&amp;gt;&lt;br /&gt;
Referenzen können nicht bearbeitet werden. Im Beispiel wäre der Plan &#039;&#039;Sommer:Plan_WZ&#039;&#039; nicht bearbeitbar.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für das Anlegen eines Wochenplans, der auf einen anderen referenziert, wählt man den Quellplan im Dropdown aus und erstellt dann einen neuen, indem man den entsprechenden Haken beim Erstellen aktiviert.&lt;br /&gt;
&lt;br /&gt;
==== Funktionen des Wigets ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Button&lt;br /&gt;
! Funktion&lt;br /&gt;
|-&lt;br /&gt;
| Zahnräder&lt;br /&gt;
| Beabeitungsmodus öffnen; Auf der dann angezeigten Seite kann über &amp;quot;--&amp;gt;&amp;quot; der Plan eines Tages auf einen anderen kopiert werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;DropDown&#039;&lt;br /&gt;
| Profil für Ansicht/Bearbeitung/Referenzierung auswählen&lt;br /&gt;
|-&lt;br /&gt;
| &#039;+&#039;&lt;br /&gt;
| Neues Profil durch Kopie erstellen&lt;br /&gt;
|-&lt;br /&gt;
| &#039;-&#039;&lt;br /&gt;
| Profil löschen&lt;br /&gt;
|-&lt;br /&gt;
| &#039;T&#039;&lt;br /&gt;
| Topic aktiviert und die entsprechenden Wochenpläne an die Thermostaten übertragen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
User-Attribut im Thermostat definieren:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
MAX Thermostate:&lt;br /&gt;
define WT_Wohnzimmer MAX WallMountedThermostat 0d657f&amp;lt;br&amp;gt;&lt;br /&gt;
attr WT_Wohnzimmer userattr weekprofile&amp;lt;br&amp;gt;&lt;br /&gt;
attr WT_Wohnzimmer weekprofile Plan_WZ&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HomeMatic Thermostate:&amp;lt;br&amp;gt;&lt;br /&gt;
Fügen Sie ein [[HM-CC-RT-DN Funk-Heizkörperthermostat]] über hmPairForSec hinzu (Beispiel DeviceName HM_123456)&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;attr HM_123456_Clima userattr weekprofile&amp;lt;br&amp;gt;&lt;br /&gt;
attr HM_123456_Clima weekprofile Plan_WZ&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Weiter wird angenommen, dass es die Topics Winter und Sommer mit jeweils einem Wochenplan Namens &#039;Plan_WZ&#039; im Modul &#039;weekprf&#039; gibt.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
define weekprf weekprofile&amp;lt;br&amp;gt;&lt;br /&gt;
attr weekprf useTopics 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Die Abfrage mittels &amp;lt;code&amp;gt;get weekprf profile_names *&amp;lt;/code&amp;gt; muss ergeben:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Winter:Plan_WZ,Sommer:Plan_WZ&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wechselt man nun mit &amp;lt;code&amp;gt;set weekprf restore_topic Sommer&amp;lt;/code&amp;gt; auf Sommer, wird der Plan &#039;&#039;Sommer:Plan_WZ&#039;&#039; an das Thermostat &#039;&#039;WT_Wohnzimmer&#039;&#039; übertragen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Befehle und Attribute ==&lt;br /&gt;
&lt;br /&gt;
=== Modul Befehle: set ===&lt;br /&gt;
&lt;br /&gt;
==== Wochenprofile kopieren ====&lt;br /&gt;
Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
====  Wochenprofile löschen ====&lt;br /&gt;
Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
====  Wochenprofile an ein Device übertragen ====&lt;br /&gt;
Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
==== Wochenprofile per Datei konfigurieren ====&lt;br /&gt;
&lt;br /&gt;
Die Wochenprofile werden mit dem Befehl &lt;br /&gt;
:&amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; profile_data &amp;lt;profilename&amp;gt; &amp;lt;json data&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
angelegt/geändert (überschrieben). Die eigentlichen Daten müssen dabei in einer [https://de.wikipedia.org/wiki/JavaScript_Object_Notation JSON] Datenstruktur angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Für jeden Tag müssen die Schaltzeiten und die Solltemperaturen in Form von Listen angegeben werden. &lt;br /&gt;
Die Datenstruktur sieht bspw. wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:350px;&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;Sun&amp;quot;: {&lt;br /&gt;
    &amp;quot;time&amp;quot;: [&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&lt;br /&gt;
    &amp;quot;temp&amp;quot;: [&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Sat&amp;quot;: {&lt;br /&gt;
    &amp;quot;time&amp;quot;: [&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&lt;br /&gt;
    &amp;quot;temp&amp;quot;: [&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Thu&amp;quot;: {&lt;br /&gt;
    &amp;quot;time&amp;quot;: [&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&lt;br /&gt;
    &amp;quot;temp&amp;quot;: [&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Fri&amp;quot;: {&lt;br /&gt;
    &amp;quot;time&amp;quot;: [&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&lt;br /&gt;
    &amp;quot;temp&amp;quot;: [&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Tue&amp;quot;: {&lt;br /&gt;
    &amp;quot;time&amp;quot;: [&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&lt;br /&gt;
    &amp;quot;temp&amp;quot;: [&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Wed&amp;quot;: {&lt;br /&gt;
     &amp;quot;time&amp;quot;: [&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&lt;br /&gt;
    &amp;quot;temp&amp;quot;: [&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Mon&amp;quot;: {&lt;br /&gt;
    &amp;quot;time&amp;quot;: [&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&lt;br /&gt;
    &amp;quot;temp&amp;quot;: [&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es handelt sich dabei um eine unsortierte Liste von &amp;quot;Tages-Objekten&amp;quot;, die wiederum eine unsortierte Liste von Schlüssel-Werte Paaren enthält. Die beiden verwendeten Schlüssel &amp;quot;time&amp;quot; und &amp;quot;temp&amp;quot; für Zeit und Temperatur verweisen jeweils auf eine sortierte Liste mit Werten. &lt;br /&gt;
&lt;br /&gt;
Der Schlüssel &amp;quot;time&amp;quot; enthält die Liste der gewünschten Zeitpunkte, zu denen ein Temperaturwechsel stattfinden soll. Die Zeitangaben müssen im Format &amp;quot;hh:mm&amp;quot; angegeben werden. Falls für den ganzen Tag nur eine Temperatur verwendet werden soll, so ist als Zeitpunkt &amp;quot;24:00&amp;quot; anzugeben.&lt;br /&gt;
&lt;br /&gt;
Der Schlüssel &amp;quot;temp&amp;quot; enthält die Temperaturen, die zu den in &amp;quot;time&amp;quot; hinterlegten Schaltzeitpunkten eingestellt werden sollen. Dabei entspricht die Reihenfolge der Temperaturen der Reihenfolge der Zeitpunkte in &amp;quot;time&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Zur Übergabe an FHEM sollte die JSON Struktur von sämtlichen Formatierungen (Zeilenumbrüche, Tabs, überflüssige Leerzeichen) bereinigt werden, so dass ein einzeiliger String entsteht. Für das oben angegebene Beispiel würde das dann so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;Sun&amp;quot;:{&amp;quot;time&amp;quot;:[&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&amp;quot;temp&amp;quot;:[&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]},&amp;quot;Sat&amp;quot;:{&amp;quot;time&amp;quot;:[&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&amp;quot;temp&amp;quot;:[&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]},&amp;quot;Thu&amp;quot;:{&amp;quot;time&amp;quot;:[&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&amp;quot;temp&amp;quot;:[&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]},&amp;quot;Fri&amp;quot;:{&amp;quot;time&amp;quot;:[&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&amp;quot;temp&amp;quot;:[&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]},&amp;quot;Tue&amp;quot;:{&amp;quot;time&amp;quot;:[&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&amp;quot;temp&amp;quot;:[&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]},&amp;quot;Wed&amp;quot;:{&amp;quot;time&amp;quot;:[&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&amp;quot;temp&amp;quot;:[&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]},&amp;quot;Mon&amp;quot;:{&amp;quot;time&amp;quot;:[&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&amp;quot;temp&amp;quot;:[&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Referenzprofil konfigurieren ====&lt;br /&gt;
Dieser Befehl kommt nur zum Tragen, wenn per Attribut useTopics die Verwendung von Topics aktiviert wurde.&lt;br /&gt;
&lt;br /&gt;
Siehe Commandref.&lt;br /&gt;
&lt;br /&gt;
==== Topic wiederherstellen ====&lt;br /&gt;
Dieser Befehl kommt nur zum Tragen, wenn per Attribut useTopics die Verwendung von Topics aktiviert wurde.&lt;br /&gt;
&lt;br /&gt;
Siehe Commandref.&lt;br /&gt;
&lt;br /&gt;
=== Modul Befehle: get ===&lt;br /&gt;
&lt;br /&gt;
==== Wochenprofile exportieren ====&lt;br /&gt;
Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
==== Wochenprofilnamen exportieren ====&lt;br /&gt;
Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
==== Wochenprofil-Refrenzen exportieren ====&lt;br /&gt;
Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
=== Modul Attribute ===&lt;br /&gt;
Die meisten Attribute sind selbsterklärend. Daher wird an dieser Stelle zumeist auf die Informationen in der Commandref verwiesen.&lt;br /&gt;
&lt;br /&gt;
==== Namen der Wochentage festlegen ====&lt;br /&gt;
widgetWeekdays: Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
==== Anzeigeart: Anzahl der Spalten====&lt;br /&gt;
widgetEditDaysInRow: Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
==== Anzeigeart: editieren auf neuer Seite ====&lt;br /&gt;
widgetEditOnNewPage: Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
==== Pfad zur Konfigurationsdatei ====&lt;br /&gt;
configFile: Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
==== Verwendung von Topics ====&lt;br /&gt;
useTopics: Aktiviert den Betriebsmodus: Topics&lt;br /&gt;
&lt;br /&gt;
== bekannte Probleme ==&lt;br /&gt;
* Derzeit (Version: 10924) können keine Leerzeichen oder Umlaute verwendet werden. Leerzeichen werden bei der Eingabe abgefangen. Hat man versehentlich doch Umlaute verwendet, müssen in der Datei ./log/weekprofile-&amp;lt;name&amp;gt;.cfg die entsprechenden Zeilen manuell gelöscht/umbenennt werden und danach ein rereadcfg ausführt werden.&lt;br /&gt;
* Speichert man einen Wochenplan, wird die Änderung erst nach einem reload der Seite angezeigt.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
*[http://forum.fhem.de/index.php/topic,46117.0.html Thread] im FHEM-Forum&lt;br /&gt;
*[http://www.jsoneditoronline.org/ JSON-Editor] für eine einfache Bearbeitung der JSON Daten&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Weekprofile&amp;diff=19045</id>
		<title>Weekprofile</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Weekprofile&amp;diff=19045"/>
		<updated>2017-01-25T19:21:02Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Beispiel */  Homematic Beispiel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:weekprofile}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Verwaltung von Wochenprofilen für Heizungssteuerung&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModForumArea=Frontends&lt;br /&gt;
|ModCmdRef=weekprofile&lt;br /&gt;
|ModTechName=98_weekprofile.pm&lt;br /&gt;
|ModOwner={{Link2FU|7869|Risiko}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[weekprofile]] stellt Funktionen zur Verwaltung von Wochenprofilen\Wochenplänen für Heizkörperthermostate zur Verfügung. Aktuell werden folgenden Systeme unterstützt:&lt;br /&gt;
* [[MAX]]&lt;br /&gt;
* [[HomeMatic]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Es ist möglich, verschiedene Wochenprofile anzulegen, zu kopieren, zu ändern und zu löschen. Außerdem können die erstellten Profile den entsprechenden Devices zugewiesen werden. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Bei HomeMatic müssen die Kanäle &amp;quot;Clima&amp;quot; bzw. &amp;quot;_Climate&amp;quot; verwendet werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Voraussetzung ==&lt;br /&gt;
Zum einwandfreien Betrieb des Moduls wird JSON benötigt. Dieses kann z.B. über folgendes installiert werden&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sudo apt-get install libjson-pp-perl&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== FHEMWEB Widget ==&lt;br /&gt;
Zur Bedienung des Moduls existiert ein passendes widget für FHEMWEB.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Weekprofile_master.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
Alle notwendigen Aufgaben wie bspw. Kopieren, Bearbeiten, Zuweisen, etc. können über die FHEMWEB Oberfläche erfolgen.&amp;lt;br&amp;gt;&lt;br /&gt;
Ein direkte Verwendung der Befehle für get und set ist somit nicht zwingend erforderlich.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Betriebsarten ==&lt;br /&gt;
Das Modul besitzt 3 unterschiedliche Betriebsarten, die im Folgenden beschrieben werden. Obwohl auch Mischformen möglich sind, sollte man sich der Übersichtlichkeit halber für eine Betriebsart entscheiden.&lt;br /&gt;
&lt;br /&gt;
Bei allen Änderungen sollte man immer bedenken, dass die Änderung an die entsprechenden Thermostaten übertragen werden müssen, was je nach Menge etwas Zeit in Anspruch nehmen kann.&lt;br /&gt;
&lt;br /&gt;
=== Assoziiertes Master Gerät ===&lt;br /&gt;
Dieses ist der einfachste Betriebsmodus, bei dem jeder Definition genau ein Thermostat zugeordnet ist. D.h. entsprechend der Anzahl der Thermostaten, die man steuern möchte, benötigt man eine passende Anzahl von Weekprofile-Definitionen.&lt;br /&gt;
Bei der Definition des Moduls wird das zu steuernde Thermostat direkt mit angegeben.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; weekprofile &amp;lt;device&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
:&amp;lt;code&amp;gt;define EG_Bad_WEEKPROFILE weekprofile EG_Bad_THERMOSTAT_Clima&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Bei HomeMatic müssen die Kanäle &amp;quot;Clima&amp;quot; bzw. &amp;quot;_Climate&amp;quot; verwendet werden.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Bei der Definition wird automatisch ein Wochenplan mit dem Namen &#039;master&#039; angelegt.&lt;br /&gt;
Der Wochenplan entspricht dem im Device hinterlegtem Profil. &lt;br /&gt;
&lt;br /&gt;
Dieser spezielle Masterplan kann nicht gelöscht werden, da er immer dem aktuellen Profil im Device entspricht.&lt;br /&gt;
Ändert man das Profil direkt über das Device, wird der Masterplan automatisch aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Wird der Masterplan über das Modul weekprofile geändert\gespeichert, wird das Profil automatisch zum assoziiertem Device übertragen.&lt;br /&gt;
&lt;br /&gt;
Wird in dieser Betriebsart für einen Befehl kein spezielles Device angegeben, wird immer das assoziierte Device verwendet. So wird bspw. bei&lt;br /&gt;
:&amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; send_to_device urlaub&amp;lt;/code&amp;gt;&lt;br /&gt;
das Profil &#039;urlaub&#039; an das bei define angegebene Thermostat übertragen.&lt;br /&gt;
&lt;br /&gt;
==== Funktionen des Wigets ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Button&lt;br /&gt;
! Funktion&lt;br /&gt;
|-&lt;br /&gt;
| Zahnräder&lt;br /&gt;
| Beabeitungsmodus öffnen; Auf der dann angezeigten Seite kann über &amp;quot;--&amp;gt;&amp;quot; der Plan eines Tages auf einen anderen kopiert werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;DropDown&#039;&lt;br /&gt;
| Profil für Ansicht/Bearbeitung auswählen&lt;br /&gt;
|-&lt;br /&gt;
| &#039;+&#039;&lt;br /&gt;
| Neues Profil durch Kopie erstellen&lt;br /&gt;
|-&lt;br /&gt;
| &#039;-&#039;&lt;br /&gt;
| Profil löschen&lt;br /&gt;
|-&lt;br /&gt;
| &#039;--&amp;gt;&#039;&lt;br /&gt;
| Profil an ein oder mehrere Thermostate übertragen, die nicht dem assoziierten Mastergerät entsprechen. Dabei bietet das Modul alle kompatiblen gefundenen Thermostaten automatisch zur Auswahl an.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Standard Verwaltung ===&lt;br /&gt;
Diese Betriebsart ist für die einfache Verwaltung von Wochenplänen gedacht, welche dann an unterschiedliche Thermostate manuell übertragen werden können.&lt;br /&gt;
Für diese Betriebsart sollte kein assoziiertes Master Gerät bei define angegeben werden.&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; weekprofile&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Fall wird beim erstmaligen Anlegen ein Default-Profil mit dem Namen &#039;default&#039; angelegt.&lt;br /&gt;
Dieses bildet die Grundlage zur Erstellung weiterer Pläne durch kopieren.&lt;br /&gt;
Existieren mindestens. 2 Profile, kann das Default-Profil gelöscht werden.&lt;br /&gt;
Die einzelnen Wochenpläne können mittels &amp;lt;code&amp;gt;send_to_device&amp;lt;/code&amp;gt; an ein oder mehrere Thermostate übertragen werden.&lt;br /&gt;
&lt;br /&gt;
==== Funktionen des Wigets ====&lt;br /&gt;
Siehe Betriebsmodus assoziiertes Master Gerät.&lt;br /&gt;
&lt;br /&gt;
=== Topics ===&lt;br /&gt;
Dieser Betriebsmodus erlaubt es mit Hilfe von Topics oder Kategorien wie bspw. (Urlaub, Sommer, Winter, Party, etc.) komplexeren Verwaltung von Wochenplänen zu realisieren.&lt;br /&gt;
Dieses Feature wird mittels dem Atribute &amp;lt;code&amp;gt;useTopics&amp;lt;/code&amp;gt; aktiviert.&lt;br /&gt;
Innerhalb eines Topics kann es mehrere Wochenpläne geben. Sinnvollerweise für jedes Thermostat ein Wochenplan.&lt;br /&gt;
Mit dem Befehl &amp;lt;code&amp;gt;restore_topic&amp;lt;/code&amp;gt; kann man dann zwischen unterschiedlichen Kategorien wechseln. Die Wochenpläne werden automatisch an die Thermostate übertragen. Dazu muss im Thermostat ein User-Attribut &#039;weekprofile&#039; mit dem Namen des verbundenen Wochenplans hinterlegt sein.&lt;br /&gt;
&lt;br /&gt;
Bei der Verwendung von Topics wird beim erstmaligen Anlegen automatisch die Topic &#039;default&#039; mit den Default-Wochenprofil &#039;default&#039; angelegt.&lt;br /&gt;
In dieser Topic kann man beispielsweise Pläne ablegen, die bei mehreren Thermostaten oder anderen Kategorien verwendet werden sollen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Bei der Verwendung von Topics, besteht der Profilname immer aus &amp;lt;code&amp;gt;Topicname:Planname&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wird kein Topicname angegeben, wird immer &#039;default&#039; als Topicnamen verwendet.&lt;br /&gt;
&lt;br /&gt;
==== Verwendung von Referenzen ====&lt;br /&gt;
Mittels Referenzierung kann man auf dieser Pläne verweisen und muss so nur einen Plan ändern, um gleich für eine Vielzahl von Thermostaten die Pläne zu ändern.&lt;br /&gt;
So könnte bspw. &#039;&#039;Sommer:Plan_WZ&#039;&#039; nur eine Referenz auf &#039;&#039;default:Fest_24h&#039;&#039; sein. &amp;lt;br&amp;gt;&lt;br /&gt;
Existiert &#039;&#039;default:Fest_24h&#039;&#039;, wird der Verweis so angelegt:&lt;br /&gt;
:&amp;lt;code&amp;gt;set weekprf reference_profile default:Fest_24h Sommer:Plan_WZ&amp;lt;/code&amp;gt;&lt;br /&gt;
Referenzen können nicht bearbeitet werden. Im Beispiel wäre der Plan &#039;&#039;Sommer:Plan_WZ&#039;&#039; nicht bearbeitbar.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für das Anlegen eines Wochenplans, der auf einen anderen referenziert, wählt man den Quellplan im Dropdown aus und erstellt dann einen neuen, indem man den entsprechenden Haken beim Erstellen aktiviert.&lt;br /&gt;
&lt;br /&gt;
==== Funktionen des Wigets ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Button&lt;br /&gt;
! Funktion&lt;br /&gt;
|-&lt;br /&gt;
| Zahnräder&lt;br /&gt;
| Beabeitungsmodus öffnen; Auf der dann angezeigten Seite kann über &amp;quot;--&amp;gt;&amp;quot; der Plan eines Tages auf einen anderen kopiert werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;DropDown&#039;&lt;br /&gt;
| Profil für Ansicht/Bearbeitung/Referenzierung auswählen&lt;br /&gt;
|-&lt;br /&gt;
| &#039;+&#039;&lt;br /&gt;
| Neues Profil durch Kopie erstellen&lt;br /&gt;
|-&lt;br /&gt;
| &#039;-&#039;&lt;br /&gt;
| Profil löschen&lt;br /&gt;
|-&lt;br /&gt;
| &#039;T&#039;&lt;br /&gt;
| Topic aktiviert und die entsprechenden Wochenpläne an die Thermostaten übertragen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
User-Attribut im Thermostat definieren:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
MAX Thermostate:&lt;br /&gt;
define WT_Wohnzimmer MAX WallMountedThermostat 0d657f&amp;lt;br&amp;gt;&lt;br /&gt;
attr WT_Wohnzimmer userattr weekprofile&amp;lt;br&amp;gt;&lt;br /&gt;
attr WT_Wohnzimmer weekprofile Plan_WZ&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HomeMatic Thermostate:&amp;lt;br&amp;gt;&lt;br /&gt;
Fügen Sie ein [[HM-CC-RT-DN Funk-Heizkörperthermostat]] über hmPairForSec hinzu (Beispiel DeviceName HM_123456)&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;attr HM_123456_Clima userattr weekprofile&amp;lt;br&amp;gt;&lt;br /&gt;
attr HM_123456_Clima weekprofile Plan_WZ&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Weiter wird angenommen, dass es die Topics Winter und Sommer mit jeweils einem Wochenplan Namens &#039;Plan_WZ&#039; im Modul &#039;weekprf&#039; gibt.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
define weekprf weekprofile&amp;lt;br&amp;gt;&lt;br /&gt;
attr weekprf useTopics 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Die Abfrage mittels &amp;lt;code&amp;gt;get weekprf profile_names *&amp;lt;/code&amp;gt; muss ergeben:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Winter:Plan_WZ,Sommer:Plan_WZ&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wechselt man nun mit &amp;lt;code&amp;gt;set weekprf restore_topic Sommer&amp;lt;/code&amp;gt; auf Sommer, wird der Plan &#039;&#039;Sommer:Plan_WZ&#039;&#039; an das Thermostat &#039;&#039;WT_Wohnzimmer&#039;&#039; übertragen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Befehle und Attribute ==&lt;br /&gt;
&lt;br /&gt;
=== Modul Befehle: set ===&lt;br /&gt;
&lt;br /&gt;
==== Wochenprofile kopieren ====&lt;br /&gt;
Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
====  Wochenprofile löschen ====&lt;br /&gt;
Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
====  Wochenprofile an ein Device übertragen ====&lt;br /&gt;
Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
==== Wochenprofile per Datei konfigurieren ====&lt;br /&gt;
&lt;br /&gt;
Die Wochenprofile werden mit dem Befehl &lt;br /&gt;
:&amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; profile_data &amp;lt;profilename&amp;gt; &amp;lt;json data&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
angelegt/geändert (überschrieben). Die eigentlichen Daten müssen dabei in einer [https://de.wikipedia.org/wiki/JavaScript_Object_Notation JSON] Datenstruktur angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Für jeden Tag müssen die Schaltzeiten und die Solltemperaturen in Form von Listen angegeben werden. &lt;br /&gt;
Die Datenstruktur sieht bspw. wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:350px;&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;Sun&amp;quot;: {&lt;br /&gt;
    &amp;quot;time&amp;quot;: [&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&lt;br /&gt;
    &amp;quot;temp&amp;quot;: [&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Sat&amp;quot;: {&lt;br /&gt;
    &amp;quot;time&amp;quot;: [&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&lt;br /&gt;
    &amp;quot;temp&amp;quot;: [&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Thu&amp;quot;: {&lt;br /&gt;
    &amp;quot;time&amp;quot;: [&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&lt;br /&gt;
    &amp;quot;temp&amp;quot;: [&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Fri&amp;quot;: {&lt;br /&gt;
    &amp;quot;time&amp;quot;: [&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&lt;br /&gt;
    &amp;quot;temp&amp;quot;: [&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Tue&amp;quot;: {&lt;br /&gt;
    &amp;quot;time&amp;quot;: [&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&lt;br /&gt;
    &amp;quot;temp&amp;quot;: [&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Wed&amp;quot;: {&lt;br /&gt;
     &amp;quot;time&amp;quot;: [&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&lt;br /&gt;
    &amp;quot;temp&amp;quot;: [&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Mon&amp;quot;: {&lt;br /&gt;
    &amp;quot;time&amp;quot;: [&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&lt;br /&gt;
    &amp;quot;temp&amp;quot;: [&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es handelt sich dabei um eine unsortierte Liste von &amp;quot;Tages-Objekten&amp;quot;, die wiederum eine unsortierte Liste von Schlüssel-Werte Paaren enthält. Die beiden verwendeten Schlüssel &amp;quot;time&amp;quot; und &amp;quot;temp&amp;quot; für Zeit und Temperatur verweisen jeweils auf eine sortierte Liste mit Werten. &lt;br /&gt;
&lt;br /&gt;
Der Schlüssel &amp;quot;time&amp;quot; enthält die Liste der gewünschten Zeitpunkte, zu denen ein Temperaturwechsel stattfinden soll. Die Zeitangaben müssen im Format &amp;quot;hh:mm&amp;quot; angegeben werden. Falls für den ganzen Tag nur eine Temperatur verwendet werden soll, so ist als Zeitpunkt &amp;quot;24:00&amp;quot; anzugeben.&lt;br /&gt;
&lt;br /&gt;
Der Schlüssel &amp;quot;temp&amp;quot; enthält die Temperaturen, die zu den in &amp;quot;time&amp;quot; hinterlegten Schaltzeitpunkten eingestellt werden sollen. Dabei entspricht die Reihenfolge der Temperaturen der Reihenfolge der Zeitpunkte in &amp;quot;time&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Zur Übergabe an FHEM sollte die JSON Struktur von sämtlichen Formatierungen (Zeilenumbrüche, Tabs, überflüssige Leerzeichen) bereinigt werden, so dass ein einzeiliger String entsteht. Für das oben angegebene Beispiel würde das dann so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;Sun&amp;quot;:{&amp;quot;time&amp;quot;:[&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&amp;quot;temp&amp;quot;:[&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]},&amp;quot;Sat&amp;quot;:{&amp;quot;time&amp;quot;:[&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&amp;quot;temp&amp;quot;:[&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]},&amp;quot;Thu&amp;quot;:{&amp;quot;time&amp;quot;:[&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&amp;quot;temp&amp;quot;:[&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]},&amp;quot;Fri&amp;quot;:{&amp;quot;time&amp;quot;:[&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&amp;quot;temp&amp;quot;:[&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]},&amp;quot;Tue&amp;quot;:{&amp;quot;time&amp;quot;:[&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&amp;quot;temp&amp;quot;:[&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]},&amp;quot;Wed&amp;quot;:{&amp;quot;time&amp;quot;:[&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&amp;quot;temp&amp;quot;:[&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]},&amp;quot;Mon&amp;quot;:{&amp;quot;time&amp;quot;:[&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&amp;quot;temp&amp;quot;:[&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Referenzprofil konfigurieren ====&lt;br /&gt;
Dieser Befehl kommt nur zum Tragen, wenn per Attribut useTopics die Verwendung von Topics aktiviert wurde.&lt;br /&gt;
&lt;br /&gt;
Siehe Commandref.&lt;br /&gt;
&lt;br /&gt;
==== Topic wiederherstellen ====&lt;br /&gt;
Dieser Befehl kommt nur zum Tragen, wenn per Attribut useTopics die Verwendung von Topics aktiviert wurde.&lt;br /&gt;
&lt;br /&gt;
Siehe Commandref.&lt;br /&gt;
&lt;br /&gt;
=== Modul Befehle: get ===&lt;br /&gt;
&lt;br /&gt;
==== Wochenprofile exportieren ====&lt;br /&gt;
Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
==== Wochenprofilnamen exportieren ====&lt;br /&gt;
Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
==== Wochenprofil-Refrenzen exportieren ====&lt;br /&gt;
Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
=== Modul Attribute ===&lt;br /&gt;
Die meisten Attribute sind selbsterklärend. Daher wird an dieser Stelle zumeist auf die Informationen in der Commandref verwiesen.&lt;br /&gt;
&lt;br /&gt;
==== Namen der Wochentage festlegen ====&lt;br /&gt;
widgetWeekdays: Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
==== Anzeigeart: Anzahl der Spalten====&lt;br /&gt;
widgetEditDaysInRow: Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
==== Anzeigeart: editieren auf neuer Seite ====&lt;br /&gt;
widgetEditOnNewPage: Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
==== Pfad zur Konfigurationsdatei ====&lt;br /&gt;
configFile: Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
==== Verwendung von Topics ====&lt;br /&gt;
useTopics: Aktiviert den Betriebsmodus: Topics&lt;br /&gt;
&lt;br /&gt;
== bekannte Probleme ==&lt;br /&gt;
* Derzeit (Version: 10924) können keine Leerzeichen oder Umlaute verwendet werden. Leerzeichen werden bei der Eingabe abgefangen. Hat man versehentlich doch Umlaute verwendet, müssen in der Datei ./log/weekprofile-&amp;lt;name&amp;gt;.cfg die entsprechenden Zeilen manuell gelöscht/umbenennt werden und danach ein rereadcfg ausführt werden.&lt;br /&gt;
* Speichert man einen Wochenplan, wird die Änderung erst nach einem reload der Seite angezeigt.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
*[http://forum.fhem.de/index.php/topic,46117.0.html Thread] im FHEM-Forum&lt;br /&gt;
*[http://www.jsoneditoronline.org/ JSON-Editor] für eine einfache Bearbeitung der JSON Daten&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Weekprofile&amp;diff=19043</id>
		<title>Weekprofile</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Weekprofile&amp;diff=19043"/>
		<updated>2017-01-25T19:01:53Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Assoziiertes Master Gerät */  Beispiel erstellt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:weekprofile}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Verwaltung von Wochenprofilen für Heizungssteuerung&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModForumArea=Frontends&lt;br /&gt;
|ModCmdRef=weekprofile&lt;br /&gt;
|ModTechName=98_weekprofile.pm&lt;br /&gt;
|ModOwner={{Link2FU|7869|Risiko}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[weekprofile]] stellt Funktionen zur Verwaltung von Wochenprofilen\Wochenplänen für Heizkörperthermostate zur Verfügung. Aktuell werden folgenden Systeme unterstützt:&lt;br /&gt;
* [[MAX]]&lt;br /&gt;
* [[HomeMatic]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Es ist möglich, verschiedene Wochenprofile anzulegen, zu kopieren, zu ändern und zu löschen. Außerdem können die erstellten Profile den entsprechenden Devices zugewiesen werden. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Bei HomeMatic müssen die Kanäle &amp;quot;Clima&amp;quot; bzw. &amp;quot;_Climate&amp;quot; verwendet werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Voraussetzung ==&lt;br /&gt;
Zum einwandfreien Betrieb des Moduls wird JSON benötigt. Dieses kann z.B. über folgendes installiert werden&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sudo apt-get install libjson-pp-perl&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== FHEMWEB Widget ==&lt;br /&gt;
Zur Bedienung des Moduls existiert ein passendes widget für FHEMWEB.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Weekprofile_master.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
Alle notwendigen Aufgaben wie bspw. Kopieren, Bearbeiten, Zuweisen, etc. können über die FHEMWEB Oberfläche erfolgen.&amp;lt;br&amp;gt;&lt;br /&gt;
Ein direkte Verwendung der Befehle für get und set ist somit nicht zwingend erforderlich.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Betriebsarten ==&lt;br /&gt;
Das Modul besitzt 3 unterschiedliche Betriebsarten, die im Folgenden beschrieben werden. Obwohl auch Mischformen möglich sind, sollte man sich der Übersichtlichkeit halber für eine Betriebsart entscheiden.&lt;br /&gt;
&lt;br /&gt;
Bei allen Änderungen sollte man immer bedenken, dass die Änderung an die entsprechenden Thermostaten übertragen werden müssen, was je nach Menge etwas Zeit in Anspruch nehmen kann.&lt;br /&gt;
&lt;br /&gt;
=== Assoziiertes Master Gerät ===&lt;br /&gt;
Dieses ist der einfachste Betriebsmodus, bei dem jeder Definition genau ein Thermostat zugeordnet ist. D.h. entsprechend der Anzahl der Thermostaten, die man steuern möchte, benötigt man eine passende Anzahl von Weekprofile-Definitionen.&lt;br /&gt;
Bei der Definition des Moduls wird das zu steuernde Thermostat direkt mit angegeben.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; weekprofile &amp;lt;device&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
:&amp;lt;code&amp;gt;define EG_Bad_WEEKPROFILE weekprofile EG_Bad_THERMOSTAT_Clima&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Bei HomeMatic müssen die Kanäle &amp;quot;Clima&amp;quot; bzw. &amp;quot;_Climate&amp;quot; verwendet werden.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Bei der Definition wird automatisch ein Wochenplan mit dem Namen &#039;master&#039; angelegt.&lt;br /&gt;
Der Wochenplan entspricht dem im Device hinterlegtem Profil. &lt;br /&gt;
&lt;br /&gt;
Dieser spezielle Masterplan kann nicht gelöscht werden, da er immer dem aktuellen Profil im Device entspricht.&lt;br /&gt;
Ändert man das Profil direkt über das Device, wird der Masterplan automatisch aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Wird der Masterplan über das Modul weekprofile geändert\gespeichert, wird das Profil automatisch zum assoziiertem Device übertragen.&lt;br /&gt;
&lt;br /&gt;
Wird in dieser Betriebsart für einen Befehl kein spezielles Device angegeben, wird immer das assoziierte Device verwendet. So wird bspw. bei&lt;br /&gt;
:&amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; send_to_device urlaub&amp;lt;/code&amp;gt;&lt;br /&gt;
das Profil &#039;urlaub&#039; an das bei define angegebene Thermostat übertragen.&lt;br /&gt;
&lt;br /&gt;
==== Funktionen des Wigets ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Button&lt;br /&gt;
! Funktion&lt;br /&gt;
|-&lt;br /&gt;
| Zahnräder&lt;br /&gt;
| Beabeitungsmodus öffnen; Auf der dann angezeigten Seite kann über &amp;quot;--&amp;gt;&amp;quot; der Plan eines Tages auf einen anderen kopiert werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;DropDown&#039;&lt;br /&gt;
| Profil für Ansicht/Bearbeitung auswählen&lt;br /&gt;
|-&lt;br /&gt;
| &#039;+&#039;&lt;br /&gt;
| Neues Profil durch Kopie erstellen&lt;br /&gt;
|-&lt;br /&gt;
| &#039;-&#039;&lt;br /&gt;
| Profil löschen&lt;br /&gt;
|-&lt;br /&gt;
| &#039;--&amp;gt;&#039;&lt;br /&gt;
| Profil an ein oder mehrere Thermostate übertragen, die nicht dem assoziierten Mastergerät entsprechen. Dabei bietet das Modul alle kompatiblen gefundenen Thermostaten automatisch zur Auswahl an.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Standard Verwaltung ===&lt;br /&gt;
Diese Betriebsart ist für die einfache Verwaltung von Wochenplänen gedacht, welche dann an unterschiedliche Thermostate manuell übertragen werden können.&lt;br /&gt;
Für diese Betriebsart sollte kein assoziiertes Master Gerät bei define angegeben werden.&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; weekprofile&amp;lt;/code&amp;gt;&lt;br /&gt;
In diesem Fall wird beim erstmaligen Anlegen ein Default-Profil mit dem Namen &#039;default&#039; angelegt.&lt;br /&gt;
Dieses bildet die Grundlage zur Erstellung weiterer Pläne durch kopieren.&lt;br /&gt;
Existieren mindestens. 2 Profile, kann das Default-Profil gelöscht werden.&lt;br /&gt;
Die einzelnen Wochenpläne können mittels &amp;lt;code&amp;gt;send_to_device&amp;lt;/code&amp;gt; an ein oder mehrere Thermostate übertragen werden.&lt;br /&gt;
&lt;br /&gt;
==== Funktionen des Wigets ====&lt;br /&gt;
Siehe Betriebsmodus assoziiertes Master Gerät.&lt;br /&gt;
&lt;br /&gt;
=== Topics ===&lt;br /&gt;
Dieser Betriebsmodus erlaubt es mit Hilfe von Topics oder Kategorien wie bspw. (Urlaub, Sommer, Winter, Party, etc.) komplexeren Verwaltung von Wochenplänen zu realisieren.&lt;br /&gt;
Dieses Feature wird mittels dem Atribute &amp;lt;code&amp;gt;useTopics&amp;lt;/code&amp;gt; aktiviert.&lt;br /&gt;
Innerhalb eines Topics kann es mehrere Wochenpläne geben. Sinnvollerweise für jedes Thermostat ein Wochenplan.&lt;br /&gt;
Mit dem Befehl &amp;lt;code&amp;gt;restore_topic&amp;lt;/code&amp;gt; kann man dann zwischen unterschiedlichen Kategorien wechseln. Die Wochenpläne werden automatisch an die Thermostate übertragen. Dazu muss im Thermostat ein User-Attribut &#039;weekprofile&#039; mit dem Namen des verbundenen Wochenplans hinterlegt sein.&lt;br /&gt;
&lt;br /&gt;
Bei der Verwendung von Topics wird beim erstmaligen Anlegen automatisch die Topic &#039;default&#039; mit den Default-Wochenprofil &#039;default&#039; angelegt.&lt;br /&gt;
In dieser Topic kann man beispielsweise Pläne ablegen, die bei mehreren Thermostaten oder anderen Kategorien verwendet werden sollen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Bei der Verwendung von Topics, besteht der Profilname immer aus &amp;lt;code&amp;gt;Topicname:Planname&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wird kein Topicname angegeben, wird immer &#039;default&#039; als Topicnamen verwendet.&lt;br /&gt;
&lt;br /&gt;
==== Verwendung von Referenzen ====&lt;br /&gt;
Mittels Referenzierung kann man auf dieser Pläne verweisen und muss so nur einen Plan ändern, um gleich für eine Vielzahl von Thermostaten die Pläne zu ändern.&lt;br /&gt;
So könnte bspw. &#039;&#039;Sommer:Plan_WZ&#039;&#039; nur eine Referenz auf &#039;&#039;default:Fest_24h&#039;&#039; sein. &amp;lt;br&amp;gt;&lt;br /&gt;
Existiert &#039;&#039;default:Fest_24h&#039;&#039;, wird der Verweis so angelegt:&lt;br /&gt;
:&amp;lt;code&amp;gt;set weekprf reference_profile default:Fest_24h Sommer:Plan_WZ&amp;lt;/code&amp;gt;&lt;br /&gt;
Referenzen können nicht bearbeitet werden. Im Beispiel wäre der Plan &#039;&#039;Sommer:Plan_WZ&#039;&#039; nicht bearbeitbar.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für das Anlegen eines Wochenplans, der auf einen anderen referenziert, wählt man den Quellplan im Dropdown aus und erstellt dann einen neuen, indem man den entsprechenden Haken beim Erstellen aktiviert.&lt;br /&gt;
&lt;br /&gt;
==== Funktionen des Wigets ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Button&lt;br /&gt;
! Funktion&lt;br /&gt;
|-&lt;br /&gt;
| Zahnräder&lt;br /&gt;
| Beabeitungsmodus öffnen; Auf der dann angezeigten Seite kann über &amp;quot;--&amp;gt;&amp;quot; der Plan eines Tages auf einen anderen kopiert werden.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;DropDown&#039;&lt;br /&gt;
| Profil für Ansicht/Bearbeitung/Referenzierung auswählen&lt;br /&gt;
|-&lt;br /&gt;
| &#039;+&#039;&lt;br /&gt;
| Neues Profil durch Kopie erstellen&lt;br /&gt;
|-&lt;br /&gt;
| &#039;-&#039;&lt;br /&gt;
| Profil löschen&lt;br /&gt;
|-&lt;br /&gt;
| &#039;T&#039;&lt;br /&gt;
| Topic aktiviert und die entsprechenden Wochenpläne an die Thermostaten übertragen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
User-Attribut im Thermostat definieren:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
define WT_Wohnzimmer MAX WallMountedThermostat 0d657f&amp;lt;br&amp;gt;&lt;br /&gt;
attr WT_Wohnzimmer userattr weekprofile&amp;lt;br&amp;gt;&lt;br /&gt;
attr WT_Wohnzimmer weekprofile Plan_WZ&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Weiter wird angenommen, dass es die Topics Winter und Sommer mit jeweils einem Wochenplan Namens &#039;Plan_WZ&#039; im Modul &#039;weekprf&#039; gibt.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
define weekprf weekprofile&amp;lt;br&amp;gt;&lt;br /&gt;
attr weekprf useTopics 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Die Abfrage mittels &amp;lt;code&amp;gt;get weekprf profile_names *&amp;lt;/code&amp;gt; muss ergeben:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Winter:Plan_WZ,Sommer:Plan_WZ&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wechselt man nun mit &amp;lt;code&amp;gt;set weekprf restore_topic Sommer&amp;lt;/code&amp;gt; auf Sommer, wird der Plan &#039;&#039;Sommer:Plan_WZ&#039;&#039; an das Thermostat &#039;&#039;WT_Wohnzimmer&#039;&#039; übertragen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Befehle und Attribute ==&lt;br /&gt;
&lt;br /&gt;
=== Modul Befehle: set ===&lt;br /&gt;
&lt;br /&gt;
==== Wochenprofile kopieren ====&lt;br /&gt;
Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
====  Wochenprofile löschen ====&lt;br /&gt;
Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
====  Wochenprofile an ein Device übertragen ====&lt;br /&gt;
Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
==== Wochenprofile per Datei konfigurieren ====&lt;br /&gt;
&lt;br /&gt;
Die Wochenprofile werden mit dem Befehl &lt;br /&gt;
:&amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; profile_data &amp;lt;profilename&amp;gt; &amp;lt;json data&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
angelegt/geändert (überschrieben). Die eigentlichen Daten müssen dabei in einer [https://de.wikipedia.org/wiki/JavaScript_Object_Notation JSON] Datenstruktur angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Für jeden Tag müssen die Schaltzeiten und die Solltemperaturen in Form von Listen angegeben werden. &lt;br /&gt;
Die Datenstruktur sieht bspw. wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:350px;&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;Sun&amp;quot;: {&lt;br /&gt;
    &amp;quot;time&amp;quot;: [&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&lt;br /&gt;
    &amp;quot;temp&amp;quot;: [&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Sat&amp;quot;: {&lt;br /&gt;
    &amp;quot;time&amp;quot;: [&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&lt;br /&gt;
    &amp;quot;temp&amp;quot;: [&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Thu&amp;quot;: {&lt;br /&gt;
    &amp;quot;time&amp;quot;: [&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&lt;br /&gt;
    &amp;quot;temp&amp;quot;: [&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Fri&amp;quot;: {&lt;br /&gt;
    &amp;quot;time&amp;quot;: [&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&lt;br /&gt;
    &amp;quot;temp&amp;quot;: [&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Tue&amp;quot;: {&lt;br /&gt;
    &amp;quot;time&amp;quot;: [&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&lt;br /&gt;
    &amp;quot;temp&amp;quot;: [&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Wed&amp;quot;: {&lt;br /&gt;
     &amp;quot;time&amp;quot;: [&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&lt;br /&gt;
    &amp;quot;temp&amp;quot;: [&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Mon&amp;quot;: {&lt;br /&gt;
    &amp;quot;time&amp;quot;: [&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&lt;br /&gt;
    &amp;quot;temp&amp;quot;: [&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es handelt sich dabei um eine unsortierte Liste von &amp;quot;Tages-Objekten&amp;quot;, die wiederum eine unsortierte Liste von Schlüssel-Werte Paaren enthält. Die beiden verwendeten Schlüssel &amp;quot;time&amp;quot; und &amp;quot;temp&amp;quot; für Zeit und Temperatur verweisen jeweils auf eine sortierte Liste mit Werten. &lt;br /&gt;
&lt;br /&gt;
Der Schlüssel &amp;quot;time&amp;quot; enthält die Liste der gewünschten Zeitpunkte, zu denen ein Temperaturwechsel stattfinden soll. Die Zeitangaben müssen im Format &amp;quot;hh:mm&amp;quot; angegeben werden. Falls für den ganzen Tag nur eine Temperatur verwendet werden soll, so ist als Zeitpunkt &amp;quot;24:00&amp;quot; anzugeben.&lt;br /&gt;
&lt;br /&gt;
Der Schlüssel &amp;quot;temp&amp;quot; enthält die Temperaturen, die zu den in &amp;quot;time&amp;quot; hinterlegten Schaltzeitpunkten eingestellt werden sollen. Dabei entspricht die Reihenfolge der Temperaturen der Reihenfolge der Zeitpunkte in &amp;quot;time&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Zur Übergabe an FHEM sollte die JSON Struktur von sämtlichen Formatierungen (Zeilenumbrüche, Tabs, überflüssige Leerzeichen) bereinigt werden, so dass ein einzeiliger String entsteht. Für das oben angegebene Beispiel würde das dann so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;Sun&amp;quot;:{&amp;quot;time&amp;quot;:[&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&amp;quot;temp&amp;quot;:[&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]},&amp;quot;Sat&amp;quot;:{&amp;quot;time&amp;quot;:[&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&amp;quot;temp&amp;quot;:[&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]},&amp;quot;Thu&amp;quot;:{&amp;quot;time&amp;quot;:[&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&amp;quot;temp&amp;quot;:[&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]},&amp;quot;Fri&amp;quot;:{&amp;quot;time&amp;quot;:[&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&amp;quot;temp&amp;quot;:[&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]},&amp;quot;Tue&amp;quot;:{&amp;quot;time&amp;quot;:[&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&amp;quot;temp&amp;quot;:[&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]},&amp;quot;Wed&amp;quot;:{&amp;quot;time&amp;quot;:[&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&amp;quot;temp&amp;quot;:[&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]},&amp;quot;Mon&amp;quot;:{&amp;quot;time&amp;quot;:[&amp;quot;06:00&amp;quot;,&amp;quot;22:00&amp;quot;,&amp;quot;24:00&amp;quot;],&amp;quot;temp&amp;quot;:[&amp;quot;20.0&amp;quot;,&amp;quot;22.0&amp;quot;,&amp;quot;20.0&amp;quot;]}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Referenzprofil konfigurieren ====&lt;br /&gt;
Dieser Befehl kommt nur zum Tragen, wenn per Attribut useTopics die Verwendung von Topics aktiviert wurde.&lt;br /&gt;
&lt;br /&gt;
Siehe Commandref.&lt;br /&gt;
&lt;br /&gt;
==== Topic wiederherstellen ====&lt;br /&gt;
Dieser Befehl kommt nur zum Tragen, wenn per Attribut useTopics die Verwendung von Topics aktiviert wurde.&lt;br /&gt;
&lt;br /&gt;
Siehe Commandref.&lt;br /&gt;
&lt;br /&gt;
=== Modul Befehle: get ===&lt;br /&gt;
&lt;br /&gt;
==== Wochenprofile exportieren ====&lt;br /&gt;
Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
==== Wochenprofilnamen exportieren ====&lt;br /&gt;
Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
==== Wochenprofil-Refrenzen exportieren ====&lt;br /&gt;
Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
=== Modul Attribute ===&lt;br /&gt;
Die meisten Attribute sind selbsterklärend. Daher wird an dieser Stelle zumeist auf die Informationen in der Commandref verwiesen.&lt;br /&gt;
&lt;br /&gt;
==== Namen der Wochentage festlegen ====&lt;br /&gt;
widgetWeekdays: Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
==== Anzeigeart: Anzahl der Spalten====&lt;br /&gt;
widgetEditDaysInRow: Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
==== Anzeigeart: editieren auf neuer Seite ====&lt;br /&gt;
widgetEditOnNewPage: Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
==== Pfad zur Konfigurationsdatei ====&lt;br /&gt;
configFile: Siehe Commandref&lt;br /&gt;
&lt;br /&gt;
==== Verwendung von Topics ====&lt;br /&gt;
useTopics: Aktiviert den Betriebsmodus: Topics&lt;br /&gt;
&lt;br /&gt;
== bekannte Probleme ==&lt;br /&gt;
* Derzeit (Version: 10924) können keine Leerzeichen oder Umlaute verwendet werden. Leerzeichen werden bei der Eingabe abgefangen. Hat man versehentlich doch Umlaute verwendet, müssen in der Datei ./log/weekprofile-&amp;lt;name&amp;gt;.cfg die entsprechenden Zeilen manuell gelöscht/umbenennt werden und danach ein rereadcfg ausführt werden.&lt;br /&gt;
* Speichert man einen Wochenplan, wird die Änderung erst nach einem reload der Seite angezeigt.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
*[http://forum.fhem.de/index.php/topic,46117.0.html Thread] im FHEM-Forum&lt;br /&gt;
*[http://www.jsoneditoronline.org/ JSON-Editor] für eine einfache Bearbeitung der JSON Daten&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-LGW-O-TW-W-EU_Funk-LAN_Gateway&amp;diff=19042</id>
		<title>HM-LGW-O-TW-W-EU Funk-LAN Gateway</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-LGW-O-TW-W-EU_Funk-LAN_Gateway&amp;diff=19042"/>
		<updated>2017-01-25T18:50:50Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Verwendung AES in FHEM */  Link korrektur&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-LGW-O-TW-W-EU-2.jpg&lt;br /&gt;
|Bildbeschreibung=HomeMatic Funk-LAN Gateway&lt;br /&gt;
|HWProtocol=HomeMatic&lt;br /&gt;
|HWType=Gateway&lt;br /&gt;
|HWCategory=HomeMatic&lt;br /&gt;
|HWComm=868,3/869,525 MHz&lt;br /&gt;
|HWChannels=n/a&lt;br /&gt;
|HWVoltage=5V&amp;amp;nbsp;DC&lt;br /&gt;
|HWPowerConsumption=0,8W&lt;br /&gt;
|HWPoweredBy=DC-Buchse&lt;br /&gt;
|HWSize=116x150x34mm&lt;br /&gt;
|HWDeviceFHEM=[[HMUARTLGW]]&lt;br /&gt;
|HWManufacturer=ELV / eQ-3 &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das [[HM-LGW-O-TW-W-EU Funk-LAN Gateway|HM-LGW-O-TW-W-EU(-2) Funk-LAN Gateway]] ist ein [[Interface]] zu [[HomeMatic]] Geräten, ähnlich dem [[HM-CFG-LAN LAN Konfigurations-Adapter|LAN Konfigurations-Adapter]]. Die folgende Beschreibung bezieht sich sowohl auf HM-LGW-O-TW-W-EU als auch auf HM-LGW-O-TW-W-EU-2 (wenn nicht anders angegeben).&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
(Noch zu ergänzen)&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
Juni 2016: Beginn der Entwicklung eines FHEM-Moduls (HMUARTLGW) für dieses Interface, beschrieben im Forum unter dem Titel {{Link2Forum|Topic=54511|LinkText=Modul für HomeMatic UART-Modul (RPi) und HomeMatic LAN Gateway}}. Dieses Modul unterstützt gleichzeitig auch das [[HM-MOD-RPI-PCB HomeMatic Funkmodul für Raspberry Pi|Funkmodul für Raspberry Pi]].&lt;br /&gt;
&lt;br /&gt;
Juli 2016: [[HMUARTLGW]] wird über FHEM [[update]] verteilt, damit ist dieses Funkmodul offiziell unterstützt.&lt;br /&gt;
&lt;br /&gt;
=== Definition in FHEM ===&lt;br /&gt;
&lt;br /&gt;
 define meinLGW HMUARTLGW 192.168.42.23&lt;br /&gt;
 attr meinLGW lgwPw LGWPasswort&lt;br /&gt;
 attr meinLGW hmId xxxxxx&lt;br /&gt;
&lt;br /&gt;
=== Verwendung AES in FHEM===&lt;br /&gt;
Das Modul beherrscht von sich aus AES zu den Geräten. Für weitere Informationen zum Thema Verschlüsselung gibt es den Beitrag [[AES Encryption]].&lt;br /&gt;
Soll auch die LAN Kommunikation verschlüsselt ablaufen wird das Modul Crypt::Rijndael (Linux Befehl: &amp;quot;sudo apt-get install libcrypt-rijndael-perl&amp;quot; siehe auch unter [[Raspberry Pi]]) benötigt (siehe auch Meldung im Log).&lt;br /&gt;
Die LAN Verschlüsselung kann mit dem Tool Lankonfigurator (netfinder) von eq3 aktiviert oder deaktiviert werden. Im Auslieferungszustand ist sie aktiviert.&lt;br /&gt;
Da das Modul Crypt::Rijndael für die Kommunikation mit den Rauchmeldern SD2 auch benötigt wird, kann man dieses Modul per default installieren.&lt;br /&gt;
&lt;br /&gt;
=== Firmware ===&lt;br /&gt;
&lt;br /&gt;
Es sollte darauf geachtet werden, dass die beiden Firmware-Versionen des Funk-LAN Gateway aktuell sind (aktuell: Applikation: 1.4.1, LAN: 1.1.5). LAN-Firmwareversionen &amp;lt; 1.1.5 haben Stabilitätsprobleme. &lt;br /&gt;
&lt;br /&gt;
Die Applikationsfirmware kann direkt aus FHEM aktualisiert werden, für die Aktualisierung der LAN-Firmware wird entweder der [http://www.eq-3.de/service/downloads.html?id=53 HomeMatic Netfinder] (Java, läuft unter Linux/OSX/Windows, [https://github.com/eq-3/occu/raw/28045df83480122f90ab92f7c6e625f9bf3b61aa/firmware/hm-lgw-o-tw-w-eu_update.eq3 passendes Firmware-Image v. 1.1.5]) oder die eQ-3 Tools unter Linux benötigt. Die eQ-3 Tools liegen nur in 32bit vor, weshalb auf einem x86_64 System (amd64) noch die 32bit Kompatibilitätsbibliotheken &#039;&#039;libc6-i386&#039;&#039; und &#039;&#039;lib32stdc++6&#039;&#039; installiert werden müssen.&lt;br /&gt;
&lt;br /&gt;
Bekannte Probleme: Nachdem die Firmware 1.1.5 über die Software Netfinder geladen wurde, wird das Gateway automatisch neu gestartet. Nach dem Neustart wird im Netfinder eine ältere Version angezeigt (z.B. vorher 1.1.3 nachher 1.1.1). Am Homatic Gateway muss der Netzstecker gezogen und wieder gesteckt werden. Nach dem Neustart wird dann die richtige Version angezeigt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Im folgenden &amp;quot;NEQ0218723&amp;quot; durch die eigene Seriennummer des Funk-LAN Gateway ersetzen und &amp;quot;geheimesLGWPasswort&amp;quot; durch das LGW-Passwort. Falls die Verschlüsselung deaktiviert wurde, dann das -k komplett weglassen.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung des LAN-Firmwareupdates mit den eQ-3 Tools ===&lt;br /&gt;
&lt;br /&gt;
Installation der Kompatibilitätsbibliotheken (nur auf x86_64/amd64 ohne konfiguriertes Multiarch):&lt;br /&gt;
 $ sudo apt-get install libc6-i386 lib32stdc++6&lt;br /&gt;
&lt;br /&gt;
Auschecken und Vorbereitung der eQ-3-Tools:&lt;br /&gt;
 $ git clone https://github.com/eq-3/occu&lt;br /&gt;
 ...&lt;br /&gt;
 $ cd occu&lt;br /&gt;
 $ sudo ln -s $(pwd)/firmware /firmware&lt;br /&gt;
 &lt;br /&gt;
 Auf arm:&lt;br /&gt;
 $ cd arm-gnueabihf/packages-eQ-3/LinuxBasis/bin&lt;br /&gt;
 &lt;br /&gt;
 Auf x86 bzw. x86_64:&lt;br /&gt;
 $ cd X86_32_Debian_Wheezy/packages-eQ-3/LinuxBasis/bin (auf X86/X86_64)&lt;br /&gt;
 &lt;br /&gt;
 Wieder gemeinsam auf allen Plattformen:&lt;br /&gt;
 $ chmod 755 eq3configcmd&lt;br /&gt;
&lt;br /&gt;
=== Update der LAN-Firmware mit den eQ-3 Tools ===&lt;br /&gt;
&lt;br /&gt;
Um das Update durchzuführen, muss man sich im Verzeichnis &#039;&#039;occu/arm-gnueabihf/packages-eQ-3/LinuxBasis/bin&#039;&#039; bzw. &#039;&#039;occu/X86_32_Debian_Wheezy/packages-eQ-3/LinuxBasis/bin&#039;&#039; befinden.&lt;br /&gt;
&lt;br /&gt;
 $ LD_LIBRARY_PATH=../lib:../../RFD/lib ./eq3configcmd update-lgw-firmware -u ../../../../firmware/hm-lgw-o-tw-w-eu_update.eq3  -console -l 1 -s NEQ0218723 -k &#039;geheimesLGWPasswort&#039;&lt;br /&gt;
 2016/07/28 09:25:24.264 &amp;lt;Info&amp;gt; LAN Gateway Firmware Update...&lt;br /&gt;
 &lt;br /&gt;
 2016/07/28 09:25:24.265 &amp;lt;Info&amp;gt; Gateway NEQ0218723&lt;br /&gt;
 2016/07/28 09:25:26.273 &amp;lt;Info&amp;gt; Gateway type is eQ3-HM-LGW-App&lt;br /&gt;
 cryptEnabled true2016/07/28 09:25:33.313 &amp;lt;Info&amp;gt; Updating firmware....&lt;br /&gt;
 &lt;br /&gt;
 2016/07/28 09:25:38.467 &amp;lt;Info&amp;gt; Update performed. Waiting for gateway to get ready.&lt;br /&gt;
&lt;br /&gt;
=== Update der Applikationsfirmware mit FHEM ===&lt;br /&gt;
&lt;br /&gt;
1. Firmware herunterladen&lt;br /&gt;
 a: Verbinden Sie sich auf ihren Raspberry &lt;br /&gt;
    ssh pi@ipadresse&lt;br /&gt;
 b: Wechseln Sie in das Firmware Verzeichnis von FHEM&lt;br /&gt;
    cd /opt/fhem/FHEM/firmware/&lt;br /&gt;
 c: Firmware Downloaden&lt;br /&gt;
    wget https://raw.githubusercontent.com/eq-3/occu/28045df83480122f90ab92f7c6e625f9bf3b61aa/firmware/coprocessor_update_hm_only.eq3&lt;br /&gt;
2. Flashen der neuen Firmware über die Befehlszeile in FHEM&lt;br /&gt;
    set meinLGW updateCoPro /opt/fhem/FHEM/firmware/coprocessor_update_hm_only.eq3&lt;br /&gt;
&lt;br /&gt;
=== Logbeispiel ===&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Das LGW hat (anders als das UART-Modul) keine eigene &#039;&#039;hmId&#039;&#039; (das Reading &#039;&#039;D-HMIdOriginal&#039;&#039; ist auf FFFFFF gesetzt). Es muss also mit&lt;br /&gt;
:&amp;lt;code&amp;gt;attr meinLGW hmId xxxxxx&amp;lt;/code&amp;gt;&lt;br /&gt;
eine nach den in der [http://fhem.de/commandref.html#hmId commandref] definierten Regeln gewählte Id gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=41203|LinkText=Forenthread}} mit Nachfrage zur Unterstützung dieses Geräts in FHEM&lt;br /&gt;
* {{Link2Forum|Topic=54511|LinkText=Modul für HomeMatic UART-Modul (RPi) und HomeMatic LAN Gateway}}&lt;br /&gt;
* [http://www.elv.de/homematic-funk-lan-gateway.html Produktseite] bei ELV&lt;br /&gt;
* {{DocLink|elv|/Assets/Produkte/10/1040/104029/Downloads/104029_lan_gateway_um.pdf Bedienungsanleitung}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-LGW-O-TW-W-EU_Funk-LAN_Gateway&amp;diff=19041</id>
		<title>HM-LGW-O-TW-W-EU Funk-LAN Gateway</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-LGW-O-TW-W-EU_Funk-LAN_Gateway&amp;diff=19041"/>
		<updated>2017-01-25T18:48:36Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Verwendung AES in FHEM */  Link zu Rijndael Konfiguration&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-LGW-O-TW-W-EU-2.jpg&lt;br /&gt;
|Bildbeschreibung=HomeMatic Funk-LAN Gateway&lt;br /&gt;
|HWProtocol=HomeMatic&lt;br /&gt;
|HWType=Gateway&lt;br /&gt;
|HWCategory=HomeMatic&lt;br /&gt;
|HWComm=868,3/869,525 MHz&lt;br /&gt;
|HWChannels=n/a&lt;br /&gt;
|HWVoltage=5V&amp;amp;nbsp;DC&lt;br /&gt;
|HWPowerConsumption=0,8W&lt;br /&gt;
|HWPoweredBy=DC-Buchse&lt;br /&gt;
|HWSize=116x150x34mm&lt;br /&gt;
|HWDeviceFHEM=[[HMUARTLGW]]&lt;br /&gt;
|HWManufacturer=ELV / eQ-3 &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das [[HM-LGW-O-TW-W-EU Funk-LAN Gateway|HM-LGW-O-TW-W-EU(-2) Funk-LAN Gateway]] ist ein [[Interface]] zu [[HomeMatic]] Geräten, ähnlich dem [[HM-CFG-LAN LAN Konfigurations-Adapter|LAN Konfigurations-Adapter]]. Die folgende Beschreibung bezieht sich sowohl auf HM-LGW-O-TW-W-EU als auch auf HM-LGW-O-TW-W-EU-2 (wenn nicht anders angegeben).&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
(Noch zu ergänzen)&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
Juni 2016: Beginn der Entwicklung eines FHEM-Moduls (HMUARTLGW) für dieses Interface, beschrieben im Forum unter dem Titel {{Link2Forum|Topic=54511|LinkText=Modul für HomeMatic UART-Modul (RPi) und HomeMatic LAN Gateway}}. Dieses Modul unterstützt gleichzeitig auch das [[HM-MOD-RPI-PCB HomeMatic Funkmodul für Raspberry Pi|Funkmodul für Raspberry Pi]].&lt;br /&gt;
&lt;br /&gt;
Juli 2016: [[HMUARTLGW]] wird über FHEM [[update]] verteilt, damit ist dieses Funkmodul offiziell unterstützt.&lt;br /&gt;
&lt;br /&gt;
=== Definition in FHEM ===&lt;br /&gt;
&lt;br /&gt;
 define meinLGW HMUARTLGW 192.168.42.23&lt;br /&gt;
 attr meinLGW lgwPw LGWPasswort&lt;br /&gt;
 attr meinLGW hmId xxxxxx&lt;br /&gt;
&lt;br /&gt;
=== Verwendung AES in FHEM===&lt;br /&gt;
Das Modul beherrscht von sich aus AES zu den Geräten. Für weitere Informationen zum Thema Verschlüsselung gibt es den Beitrag [[AES Encryption]].&lt;br /&gt;
Soll auch die LAN Kommunikation verschlüsselt ablaufen wird das Modul Crypt::Rijndael (Linux Befehl: &amp;quot;sudo apt-get install libcrypt-rijndael-perl&amp;quot; siehe auch unter [[Planung]]) benötigt (siehe auch Meldung im Log).&lt;br /&gt;
Die LAN Verschlüsselung kann mit dem Tool Lankonfigurator (netfinder) von eq3 aktiviert oder deaktiviert werden. Im Auslieferungszustand ist sie aktiviert.&lt;br /&gt;
Da das Modul Crypt::Rijndael für die Kommunikation mit den Rauchmeldern SD2 auch benötigt wird, kann man dieses Modul per default installieren.&lt;br /&gt;
&lt;br /&gt;
=== Firmware ===&lt;br /&gt;
&lt;br /&gt;
Es sollte darauf geachtet werden, dass die beiden Firmware-Versionen des Funk-LAN Gateway aktuell sind (aktuell: Applikation: 1.4.1, LAN: 1.1.5). LAN-Firmwareversionen &amp;lt; 1.1.5 haben Stabilitätsprobleme. &lt;br /&gt;
&lt;br /&gt;
Die Applikationsfirmware kann direkt aus FHEM aktualisiert werden, für die Aktualisierung der LAN-Firmware wird entweder der [http://www.eq-3.de/service/downloads.html?id=53 HomeMatic Netfinder] (Java, läuft unter Linux/OSX/Windows, [https://github.com/eq-3/occu/raw/28045df83480122f90ab92f7c6e625f9bf3b61aa/firmware/hm-lgw-o-tw-w-eu_update.eq3 passendes Firmware-Image v. 1.1.5]) oder die eQ-3 Tools unter Linux benötigt. Die eQ-3 Tools liegen nur in 32bit vor, weshalb auf einem x86_64 System (amd64) noch die 32bit Kompatibilitätsbibliotheken &#039;&#039;libc6-i386&#039;&#039; und &#039;&#039;lib32stdc++6&#039;&#039; installiert werden müssen.&lt;br /&gt;
&lt;br /&gt;
Bekannte Probleme: Nachdem die Firmware 1.1.5 über die Software Netfinder geladen wurde, wird das Gateway automatisch neu gestartet. Nach dem Neustart wird im Netfinder eine ältere Version angezeigt (z.B. vorher 1.1.3 nachher 1.1.1). Am Homatic Gateway muss der Netzstecker gezogen und wieder gesteckt werden. Nach dem Neustart wird dann die richtige Version angezeigt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Im folgenden &amp;quot;NEQ0218723&amp;quot; durch die eigene Seriennummer des Funk-LAN Gateway ersetzen und &amp;quot;geheimesLGWPasswort&amp;quot; durch das LGW-Passwort. Falls die Verschlüsselung deaktiviert wurde, dann das -k komplett weglassen.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung des LAN-Firmwareupdates mit den eQ-3 Tools ===&lt;br /&gt;
&lt;br /&gt;
Installation der Kompatibilitätsbibliotheken (nur auf x86_64/amd64 ohne konfiguriertes Multiarch):&lt;br /&gt;
 $ sudo apt-get install libc6-i386 lib32stdc++6&lt;br /&gt;
&lt;br /&gt;
Auschecken und Vorbereitung der eQ-3-Tools:&lt;br /&gt;
 $ git clone https://github.com/eq-3/occu&lt;br /&gt;
 ...&lt;br /&gt;
 $ cd occu&lt;br /&gt;
 $ sudo ln -s $(pwd)/firmware /firmware&lt;br /&gt;
 &lt;br /&gt;
 Auf arm:&lt;br /&gt;
 $ cd arm-gnueabihf/packages-eQ-3/LinuxBasis/bin&lt;br /&gt;
 &lt;br /&gt;
 Auf x86 bzw. x86_64:&lt;br /&gt;
 $ cd X86_32_Debian_Wheezy/packages-eQ-3/LinuxBasis/bin (auf X86/X86_64)&lt;br /&gt;
 &lt;br /&gt;
 Wieder gemeinsam auf allen Plattformen:&lt;br /&gt;
 $ chmod 755 eq3configcmd&lt;br /&gt;
&lt;br /&gt;
=== Update der LAN-Firmware mit den eQ-3 Tools ===&lt;br /&gt;
&lt;br /&gt;
Um das Update durchzuführen, muss man sich im Verzeichnis &#039;&#039;occu/arm-gnueabihf/packages-eQ-3/LinuxBasis/bin&#039;&#039; bzw. &#039;&#039;occu/X86_32_Debian_Wheezy/packages-eQ-3/LinuxBasis/bin&#039;&#039; befinden.&lt;br /&gt;
&lt;br /&gt;
 $ LD_LIBRARY_PATH=../lib:../../RFD/lib ./eq3configcmd update-lgw-firmware -u ../../../../firmware/hm-lgw-o-tw-w-eu_update.eq3  -console -l 1 -s NEQ0218723 -k &#039;geheimesLGWPasswort&#039;&lt;br /&gt;
 2016/07/28 09:25:24.264 &amp;lt;Info&amp;gt; LAN Gateway Firmware Update...&lt;br /&gt;
 &lt;br /&gt;
 2016/07/28 09:25:24.265 &amp;lt;Info&amp;gt; Gateway NEQ0218723&lt;br /&gt;
 2016/07/28 09:25:26.273 &amp;lt;Info&amp;gt; Gateway type is eQ3-HM-LGW-App&lt;br /&gt;
 cryptEnabled true2016/07/28 09:25:33.313 &amp;lt;Info&amp;gt; Updating firmware....&lt;br /&gt;
 &lt;br /&gt;
 2016/07/28 09:25:38.467 &amp;lt;Info&amp;gt; Update performed. Waiting for gateway to get ready.&lt;br /&gt;
&lt;br /&gt;
=== Update der Applikationsfirmware mit FHEM ===&lt;br /&gt;
&lt;br /&gt;
1. Firmware herunterladen&lt;br /&gt;
 a: Verbinden Sie sich auf ihren Raspberry &lt;br /&gt;
    ssh pi@ipadresse&lt;br /&gt;
 b: Wechseln Sie in das Firmware Verzeichnis von FHEM&lt;br /&gt;
    cd /opt/fhem/FHEM/firmware/&lt;br /&gt;
 c: Firmware Downloaden&lt;br /&gt;
    wget https://raw.githubusercontent.com/eq-3/occu/28045df83480122f90ab92f7c6e625f9bf3b61aa/firmware/coprocessor_update_hm_only.eq3&lt;br /&gt;
2. Flashen der neuen Firmware über die Befehlszeile in FHEM&lt;br /&gt;
    set meinLGW updateCoPro /opt/fhem/FHEM/firmware/coprocessor_update_hm_only.eq3&lt;br /&gt;
&lt;br /&gt;
=== Logbeispiel ===&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Das LGW hat (anders als das UART-Modul) keine eigene &#039;&#039;hmId&#039;&#039; (das Reading &#039;&#039;D-HMIdOriginal&#039;&#039; ist auf FFFFFF gesetzt). Es muss also mit&lt;br /&gt;
:&amp;lt;code&amp;gt;attr meinLGW hmId xxxxxx&amp;lt;/code&amp;gt;&lt;br /&gt;
eine nach den in der [http://fhem.de/commandref.html#hmId commandref] definierten Regeln gewählte Id gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=41203|LinkText=Forenthread}} mit Nachfrage zur Unterstützung dieses Geräts in FHEM&lt;br /&gt;
* {{Link2Forum|Topic=54511|LinkText=Modul für HomeMatic UART-Modul (RPi) und HomeMatic LAN Gateway}}&lt;br /&gt;
* [http://www.elv.de/homematic-funk-lan-gateway.html Produktseite] bei ELV&lt;br /&gt;
* {{DocLink|elv|/Assets/Produkte/10/1040/104029/Downloads/104029_lan_gateway_um.pdf Bedienungsanleitung}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-CC-RT-DN_Funk-Heizk%C3%B6rperthermostat&amp;diff=19040</id>
		<title>HM-CC-RT-DN Funk-Heizkörperthermostat</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-CC-RT-DN_Funk-Heizk%C3%B6rperthermostat&amp;diff=19040"/>
		<updated>2017-01-25T18:39:33Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: Position Link Weekprofile korrigiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-CC-RT-DN.jpg&lt;br /&gt;
|Bildbeschreibung=HM-CC-RT-DN an Heizkörper montiert&lt;br /&gt;
|HWProtocol=[[HomeMatic]]&lt;br /&gt;
|HWType=[[HomeMatic Type Thermostat|thermostat]]&lt;br /&gt;
|HWCategory=[[:Kategorie:Heizungsventile|Heizungsventile]]&lt;br /&gt;
|HWComm=868 MHz&lt;br /&gt;
|HWChannels=6&lt;br /&gt;
|HWVoltage=3&amp;amp;nbsp;V&lt;br /&gt;
|HWPowerConsumption=180&amp;amp;nbsp;mA&lt;br /&gt;
|HWPoweredBy=2x LR6/Mignon/AA&lt;br /&gt;
|HWSize=54x65x93 mm (BxHxT)&lt;br /&gt;
|HWDeviceFHEM=[[CUL_HM]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=ELV / eQ-3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HM-CC-RT-DN&#039;&#039;&#039; (häufig einfach &#039;&#039;&#039;RT&#039;&#039;&#039; genannt) ist ein Funk-&#039;&#039;Heizkörperthermostate&#039;&#039; mit integriertem &#039;&#039;Stellantrieb&#039;&#039;. Das Thermostat ist seit September&amp;amp;nbsp;2013 verfügbar und ist der Nachfolger des [[HM-CC-VD Funk-Stellantrieb]]s.&lt;br /&gt;
&lt;br /&gt;
== Vorbemerkungen ==&lt;br /&gt;
: &#039;&#039;→ Einstellungen und Informationen, die alle [[HomeMatic]] Thermostate betreffen, sind unter [[HomeMatic Type Thermostat#Temperaturlisten|HomeMatic Type Thermostat]] zu finden.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der HM-CC-RT-DN kann die Temperatur selbst messen (im Gegensatz zum [[HM-CC-VD Funk-Stellantrieb|Vorgänger]]) und verfügt über eine Fenster-Offen-Erkennung sowie eine Boost-Funktion. Der HM-CC-RT-DN &#039;&#039;kann&#039;&#039; von einem [[HM-TC-IT-WM-W-EU Funk-Wandthermostat AP]] gesteuert werden, das ist aber &#039;&#039;optional&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Das Gerät wird seit Anfang Oktober 2013 von FHEM unterstützt (siehe Diskussion im {{Link2Forum|Topic=14738|LinkText=Forum}}).&lt;br /&gt;
&lt;br /&gt;
Der HM-CC-RT-DN scheint das erste HomeMatic-Device zu sein, bei dem ein Update der Firmware auch vom Anwender durchgeführt werden kann. Ein Firmware-Update erfordert einen [[HM-CFG-USB_USB_Konfigurations-Adapter|USB Konfigurations-Adapter]] und eine auf der eQ-3 Webseite herunterladbare Firmwareupdate-Software. Weitere Details sind unter [[#Firmware Update|Firmware Update]] beschrieben.&lt;br /&gt;
{{Hinweis|Die Solltemperaturen eines HM-CC-RT-DN lassen sich &#039;&#039;nicht&#039;&#039; durch einen [[HM-CC-TC Funk-Wandthermostat]] &#039;&#039;steuern&#039;&#039;. Dieser kann nur die Ist-Temperatur an den HM-CC-RT-DN weitergeben, damit nicht die am HM-CC-RT-DN direkt gemessene Raumtemperatur zur Regelung verwendet wird.}}&lt;br /&gt;
Mit einem HM-CC-RT-DN können maximal (neben der Zentrale/FHEM):&lt;br /&gt;
* 7 HomeMatic Heizkörperthermostate&lt;br /&gt;
* 8 HomeMatic Tür-Fensterkontakte / Fenster-Drehgriffkontakte&lt;br /&gt;
* 8 Tastenpaare von HomeMatic Fernbedienungen bzw. Display-Wandtaster&lt;br /&gt;
* 1 HomeMatic Innen-Temperatur-Sensor&lt;br /&gt;
[[Peering (HomeMatic)|gepeert]] werden.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Wird für Wartungs-/Umbaumaßnahmen das Wasser der Heizung abgelassen bzw. diese neubefüllt, sind alle Stellantriebe manuell dauerhaft auf &#039;&#039;&#039;on&#039;&#039;&#039; zu setzen: set &amp;lt;HM_Stellantrieb&amp;gt;_Clima controlManu on. Beim Einsatz eines Wandthermostaten ist der Wandthermostat entsprechend einzustellen.}}&lt;br /&gt;
&lt;br /&gt;
== Technische Daten ==&lt;br /&gt;
* Betriebsspannung: 2 Stck. 1,5V LR6/Mignon/AA&lt;br /&gt;
* Stromaufnahme: 180 mA max.&lt;br /&gt;
* Abmessungen (B x H x T): 54 x 65 x 93 mm&lt;br /&gt;
* Gewicht: 180 g (ohne Batterien)&lt;br /&gt;
* Ventilanschluss: M30 x 1,5 mm&lt;br /&gt;
&lt;br /&gt;
Aktuelle Firmware: 1.4&lt;br /&gt;
&lt;br /&gt;
== Betrieb mit FHEM ==&lt;br /&gt;
Der Funk-Heizkörperthermostat muss zuerst mit FHEM [[Pairing (HomeMatic)|gepairt]] werden. Stellen Sie sicher, dass FHEM aktuell ist (update durchführen)&lt;br /&gt;
&lt;br /&gt;
Das Pairing sollte wie in [[HomeMatic Devices pairen]] beschrieben durchgeführt werden &lt;br /&gt;
&lt;br /&gt;
=== Channels (Kanäle) ===&lt;br /&gt;
==== Channel (Kanal) 01 _Weather ====&lt;br /&gt;
&lt;br /&gt;
Dieser Kanal dient zur Einspeisung der (gemessenen) &#039;&#039;Ist-Temperatur&#039;&#039;. Als Sensor können zum Beispiel das [[HM-TC-IT-WM-W-EU Funk-Wandthermostat AP|HM-TC-IT-WM-W-EU Funk-Wandthermostat]] oder ein [[HM-WDS40-TH-I Funk-Temperatur-/Feuchtesensor innen (IT)|HM-WDS40-TH-I Funk-Temperatur-/Feuchtesensor]] dienen.&lt;br /&gt;
&lt;br /&gt;
Ein Temperatur-Sensor &#039;&#039;tempSensor&#039;&#039; kann mit dem &#039;&#039;_Weather&#039;&#039;-Kanal wie folgt [[Peering (HomeMatic)|gepeert]] werden: &lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;tempSensor&amp;gt; peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_Weather single&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 02 _Climate ====&lt;br /&gt;
Dieser Kanal erlaubt es dem [[HM-TC-IT-WM-W-EU Funk-Wandthermostat AP|HM-TC-IT-WM-W-EU Funk-Wandthermostat]] den HM-CC-RT-DN zu steuern. Dazu müssen die beiden Geräte gepeert werden:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt;_Climate peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_Climate single set&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 03 _WindowRec ====&lt;br /&gt;
Mit diesem Kanal können Fensterkontakte ([[HM-SEC-SC Tür-Fensterkontakt|HM-SEC-SC]] und [[HM-Sec-RHS Funk-Fenster-Drehgriffkontakt|HM-SEC-RHS]]) ihren Fensterstatus (geöffnet / gekippt) an ein oder mehrere Thermostate senden. Die Thermostate stellen anschließend die entsprechende (konfigurierbare) Temperatur ein. Der Temperaturwert kann je Fenster-Sensor unterschiedlich definiert werden. Sind mehrere Fenster gleichzeitig geöffnet, so wird der Thermostat auf die Temperatur des Sensors mit dem geringsten Temperaturwert eingestellt. &lt;br /&gt;
Ferner wird empfohlen, bei Einsatz von externen Sensoren, die interne „Fenster auf Erkennung“ zu deaktivieren (weitere Details sind im [[HM-CC-RT-DN Funk-Heizkörperthermostat#Channel .28Kanal.29 04 _Clima|Channel (Kanal) 04 _Clima]] beschrieben).&lt;br /&gt;
&lt;br /&gt;
Der Befehl zum Peeren lautet, wobei &amp;lt;fensterSensor&amp;gt; die FHEM-Kanalbezeichnung für den Fensterkontakt ist und &amp;lt;rt_WindowRec&amp;gt; die Kanalbezeichnung für den entsprechenden Kanal des Heizkörperthermostates:&lt;br /&gt;
 set &amp;lt;fensterSensor&amp;gt; peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_WindowRec single set&lt;br /&gt;
&lt;br /&gt;
Zum Löschen (=unpeeren) dieser Kopplung:&lt;br /&gt;
 set &amp;lt;fensterSensor&amp;gt; peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_WindowRec single unset&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung&#039;&#039;&#039;: Der Peer-(Lösch)Vorgang muss erst am Fensterkontakt durch Drücken der Anlerntaste ausgelöst werden, und zwar auch dann, wenn der Fensterkontakt schon vorher mit FHEM gepairt wurde. Dann kann der oben genannte Befehl in FHEM abgesetzt werden. Wichtig scheint auch, dass der Fensterkontakt geschlossen ist wenn man die Anlerntaste drückt.&lt;br /&gt;
&lt;br /&gt;
Der Befehl zur Temperatureinstellung des Heizkörperthermostaten für den Zustand &amp;quot;Fenster offen&amp;quot; lautet, wobei &amp;lt;fensterSensor&amp;gt; die FHEM-Kanalbezeichnung für den Fensterkontakt ist und &amp;lt;rt_WindowRec&amp;gt; die Kanalbezeichnung für den entsprechenden Kanal des Heizkörperthermostates, sowie &amp;lt;Temp&amp;gt; die einzustellende Temperatur (ganzzahliger Wert):&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt;_WindowRec regSet winOpnTemp &amp;lt;Temp&amp;gt; &amp;lt;fensterSensor&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 04 _Clima ====&lt;br /&gt;
Dieser Kanal dient zum Einstellen der Betriebsparameter, auch [[#Temperaturlisten|Temperaturlisten]] sind hierauf zu übertragen.&lt;br /&gt;
Mit dem Modul [https://wiki.fhem.de/wiki/Weekprofile Wochenplan / Weekprofile] können die Wochenpläne komfortabel in Fhem erstellt und an die Thermostate übertragen werden.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|In älteren Versionen von FHEM wurde dieser Kanal durch &#039;&#039;autocreate&#039;&#039; als &amp;lt;code&amp;gt;_ClimRT_tr&amp;lt;/code&amp;gt; angelegt. Der Hersteller hat hier offenbar die internen Bezeichnungen geändert, denn beim Vorläufernmodell HM-CC-TC mussten Temperaturlisten auf den Kanal &#039;&#039;Climate&#039;&#039; übertragen werden.}}&lt;br /&gt;
&lt;br /&gt;
Die maximale Öffnung des Ventils kann mittels folgendem Befehl eingestellt werden (hier auf 80 %):&lt;br /&gt;
  set &amp;lt;HM-CC-RT-DN&amp;gt;_Clima regSet valveMaxPos 80&lt;br /&gt;
&lt;br /&gt;
Die interne &amp;quot;Fenster-auf&amp;quot;-Erkennung kann man wie folgt abschalten:&lt;br /&gt;
  set &amp;lt;HM-CC-RT-DN&amp;gt;_Clima regSet winOpnMode off&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 05 _ClimaTeam ====&lt;br /&gt;
Dieser Kanal erlaubt es mehrere HM-CC-RT-DN zu einem &amp;quot;Team&amp;quot; zu gruppieren. Ein Mitglied des Teams meldet&lt;br /&gt;
* Änderungen der Temperatur am Handrad&lt;br /&gt;
* Einschalten des Boost-Modus am Taster&lt;br /&gt;
an seine &amp;quot;Teamkollegen&amp;quot; weiter. Folgende Änderungen werden &#039;&#039;&#039;nicht&#039;&#039;&#039; weitergegeben:&lt;br /&gt;
* Status der Fensterkontakte&lt;br /&gt;
* Temperaturlisten/Wochenplan und daraus folgende Änderungen&lt;br /&gt;
* Änderungen durch Fernbedienungen&lt;br /&gt;
* Änderungen durch eine HomeMatic-Zentrale&lt;br /&gt;
&lt;br /&gt;
Befehl zum Peeren, wobei &#039;&#039;&amp;lt;HM-CC-RT-DN#1&amp;gt;_ClimaTeam&#039;&#039;, &#039;&#039;&amp;lt;HM-CC-RT-DN#2&amp;gt;_ClimaTeam&#039;&#039;, ..., &#039;&#039;&amp;lt;HM-CC-RT-DN#8&amp;gt;_ClimaTeam&#039;&#039; die Kanalbezeichnungen der jeweiligen ClimaTeam-Kanäle sind:&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN#1&amp;gt;_ClimaTeam peerChan 0 &amp;lt;HM-CC-RT-DN#2&amp;gt;_ClimaTeam single&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN#1&amp;gt;_ClimaTeam peerChan 0 &amp;lt;HM-CC-RT-DN#3&amp;gt;_ClimaTeam single&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN#2&amp;gt;_ClimaTeam peerChan 0 &amp;lt;HM-CC-RT-DN#3&amp;gt;_ClimaTeam single&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 06 _remote ====&lt;br /&gt;
Dieser Kanal kann an eine Fernbedienung gekoppelt werden. Per Tastendruck kann man einen bestimmten Mode und/oder eine bestimmte Temperatur wählen. Dabei kann die Reaktion auf einen langen oder kurzen Tastendruck gesondert eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Der Befehl zum peeren lautet, wobei &amp;lt;button&amp;gt; die Kanalbezeichnung der Fernbedienung und &amp;lt;rt-remote&amp;gt; die Kanalbezeichnung des Heizkörperthermostates ist:&lt;br /&gt;
  set &amp;lt;button&amp;gt; peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_remote single&lt;br /&gt;
&lt;br /&gt;
=== Betriebsmodus Auto, Manu, Party (Urlaub) ===&lt;br /&gt;
&lt;br /&gt;
Der HM-CC-RT-DN verfügt über drei Betriebsmodus: Auto, Manu (Manuell) und Party (Urlaub).&lt;br /&gt;
&lt;br /&gt;
==== Modus Auto ====&lt;br /&gt;
Das Gerät arbeitet gemäß des gespeicherten Wochenprogramms. Manuelle Änderungen sind möglich, werden aber beim nächsten Schaltpunkt überschrieben.&lt;br /&gt;
&lt;br /&gt;
==== Modus Manu ====&lt;br /&gt;
Die Temperatur wird manuell eingestellt, das Wochenprogramm wird nicht abgearbeitet.&lt;br /&gt;
&lt;br /&gt;
==== Modus Party (Urlaub) ====&lt;br /&gt;
Die eingestellte Temperatur gilt bis zu einem gegebenen Endzeitpunkt, anschließend wechselt das Thermostat in den &#039;&#039;Auto&#039;&#039;-Modus. So kann beispielsweise bei Abwesenheit ein niedrigeres Temperaturprofil eingestellt werden ohne dass die Temperaturlisten verändert werden müssen.&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-CC-RT-DN&amp;gt;_Clima controlParty 16 06.12.13 16:30 09.12.13 05:00&lt;br /&gt;
&lt;br /&gt;
Dadurch wird &lt;br /&gt;
* von 06.12.2013, 16:30 Uhr&lt;br /&gt;
* bis 09.12.2013, 05:00 Uhr &lt;br /&gt;
* die gewünschte Raumtemperatur auf 16 °C eingestellt.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&lt;br /&gt;
* Der Befehl muss auf dem Kanal 4 &#039;&#039;(_Clima)&#039;&#039; erfolgen.&lt;br /&gt;
* Es werden nur Uhrzeiten zu jeder vollen oder halben Stunde angenommen (Minuten also 00 oder 30).}}&lt;br /&gt;
&lt;br /&gt;
Mit der folgenden Funktion &amp;lt;code&amp;gt;Urlaub()&amp;lt;/code&amp;gt; kann man eine ganze Wohnung (also mehrere RTs) mit nur einem Befehl in den Party-Modus versetzen. Im Beispiel werden zwei Heizkörper (&amp;quot;Treppenhaus&amp;quot; und &amp;quot;Kammer&amp;quot;) angesteuert.&lt;br /&gt;
&lt;br /&gt;
Zu beachten sind folgende Dinge:&lt;br /&gt;
# Aktuelle Dateien (z.B. &amp;lt;code&amp;gt;10_CUL_HM&amp;lt;/code&amp;gt;) verwenden!&lt;br /&gt;
# Bei dem &#039;&#039;controlParty&#039;&#039;-Befehl &#039;&#039;kein&#039;&#039; Komma zwischen den Parametern.&lt;br /&gt;
# Bei der Funktion die Parameterübergabe definieren &amp;lt;code&amp;gt;($$$$$)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Aufruf:&#039;&#039;&#039;&lt;br /&gt;
:&amp;lt;code&amp;gt;{Urlaub (&amp;quot;16&amp;quot;, &amp;quot;06.12.13&amp;quot;, &amp;quot;16:30&amp;quot;, &amp;quot;09.12.13&amp;quot; ,&amp;quot;05:00&amp;quot;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Funktion:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=perl&amp;gt;&lt;br /&gt;
my $Urlaub;&lt;br /&gt;
sub&lt;br /&gt;
Urlaub($$$$$)&lt;br /&gt;
  {&lt;br /&gt;
    my ($temp, $startDate, $startTime, $endDate, $endTime) = @_;&lt;br /&gt;
 &lt;br /&gt;
    # HM-CC-RT-DN akzeptiert nur Zeiten, die auf Minute 00 oder 30 enden.&lt;br /&gt;
    # Daher $startTime und $endTime abrunden&lt;br /&gt;
    $startTime =~ s/\:[0-2].$/:00/;&lt;br /&gt;
    $startTime =~ s/\:[3-5].$/:30/;&lt;br /&gt;
    $endTime =~ s/\:[0-2].$/:00/;&lt;br /&gt;
    $endTime =~ s/\:[3-5].$/:30/;&lt;br /&gt;
&lt;br /&gt;
    # controlParty bei jedem HM-CC-RT-DN setzen.&lt;br /&gt;
    for my $rt (qw(Kammer Treppenhaus)) {&lt;br /&gt;
      fhem (&amp;quot;set $rt controlParty $temp $startDate $startTime $endDate $endTime&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tastensperre ===&lt;br /&gt;
&lt;br /&gt;
Um zu verhindern, dass der Modus oder die Temperatur per Tasten bzw. Drehrad am HM-CC-RT-DN verändert wird, kann eine Tastensperre gesetzt werden. Dies erfolgt mittels des Befehls:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet btnLock on&lt;br /&gt;
&lt;br /&gt;
Rückgängig machen geht per:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet btnLock off&lt;br /&gt;
&lt;br /&gt;
Diese Tastensperre kann man aber am HM-CC-RT-DN durch eine Tastenkombination wieder zurücksetzen. Um sie nur per FHEM rücksetzen zu können, muss&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet globalBtnLock on&lt;br /&gt;
&lt;br /&gt;
eingegeben werden. Rückgängig geht wieder per:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet globalBtnLock off&lt;br /&gt;
&lt;br /&gt;
Es gibt auch eine Tastensperre die nur das Umschalten des Modus (Auto, Manuell, Urlaub) am Gerät verhindert. Diese wird mit&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet modusBtnLock on&lt;br /&gt;
&lt;br /&gt;
eingeschaltet. Abschalten geht mit:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet modusBtnLock off&lt;br /&gt;
&lt;br /&gt;
=== Burst-Modus ===&lt;br /&gt;
Das ist ein &#039;&#039;&#039;Übertragungs&#039;&#039;&#039;modus für Nachrichten zwischen HM-Geräten und der Zentrale. Der RT erwacht alle 2,5 Minuten und dann überträgt die Zentrale die Kommandos. Wenn man einen Fensterkontakt oder eine Fernsteuerung nutzt, muss der RT sofort reagieren - dann muss man den Burst &#039;&#039;enablen&#039;&#039;. Der RT kann in diesem Fall sofort aufgeweckt werden und bearbeitet die Anforderung (Request). Das kann man auch von der Zentrale aus nutzen (so man möchte). Das ist der &#039;&#039;&#039;Vorteil&#039;&#039;&#039; des eingeschalteten Burst-Modus.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteil:&#039;&#039;&#039; Der Burst-Modus benötigt mehr Leistung, das heißt die Batterien müssen häufiger gewechselt werden: Der RT muss den Receiver ständig empfangsbereit halten. Außerdem wachen bei jedem Burst wachen &#039;&#039;alle&#039;&#039; Burst-Empfänger auf – egal an wen die Kommunikation gerichtet war.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Burst – wie es funktioniert&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Schickt ein Sender eine burst Sequenz, wachen alle burst-Empfänger auf und prüfen die Message. &lt;br /&gt;
Wenn sie betroffen sind bleiben sie eine Zeit lang wach, ansonsten schlafen sie wieder ein. &lt;br /&gt;
Man beachte also, dass Senden eines Burst  Energie in ALLEN burst-Empfängern verbraucht, egal ob sie angesprochen sind.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HMLAN und burst&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[HMLAN]] hat ein Sendebudget das über eine Stunde berechnet wird. Burst belastet diese Konto deutlich - so können nicht mehr als 100 bursts /h gesendet werden - dann geht HMLAN in overload Wenn zusätzliche Nachrichten gesendet werden sind es entsprechend weniger. &lt;br /&gt;
Es ist als nicht vorteilhaft, unnötig bursts zu senden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Burst devices&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es gibt Devices, die immer auf burst reagieren und solche bei denen es abgeschaltet werden kann. So reagiert ein Rauchmelder immer auf Burst damit er seine Team-Kollegen hören kann. &lt;br /&gt;
Ein TC oder RT hingegen hat diese Funktion abschaltbar. &#039;Per default ist dies ausgeschaltet um Batterie zu sparen&#039;. Wenn ein VD gesteuert wird ist der TC ja selbst wach.  Wird er aber mit einem Fensterkontakt gekoppelt muss es eingeschaltet werden – sonst verpasst er die Nachricht. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ConditionalBurst devices&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Devices mit abschaltbarem Burst wie z.B. der &#039;&#039;HM-CC-RT-DN&#039;&#039; haben ein Register, &#039;&#039;burstRx&#039;&#039;, mit dem das burst-Erwachen eingestellt werden kann. &lt;br /&gt;
Sendern, die einen burst-Aktor erwecken sollen, muss man sagen, welcher Peer Burst benötigt. Hier kann ggf. das Register &#039;&#039;peerNeedsBurst&#039;&#039; nach dem Peeren gesetzt werden. FHEM versucht dies automatisch beim Peeren zu erledigen. Siehe [[HomeMatic HMInfo|HMinfo]] Befehl &#039;&#039;models&#039;&#039; um herauszufinden, welche Devices welchen Modus unterstützen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Attribut burstAccess&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Devices, die abschaltbaren burst haben kann man ein attribut bustAccess 1_auto setzen. Es wird beim Abschicken eines Kommandos versucht, das Device mit burst zu wecken. Sollte es nicht funktionieren wird gewartet, bis das Device aufwacht (meist reagieren solche Devices auch auf wakeup). Das Setzen des Attributs ist angenehm – es werden aber ggf. viele bursts gesendet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kommando burstXmit&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Mit diesem Kommando, das bei Devices mit contitional-Burst zu Verfügung steht, wird der burst gezielt von User angestossen.&lt;br /&gt;
&lt;br /&gt;
Der User schickt erst seine Kommandos an das device. Die Kommandos werden im Command-stack gesammelt. &lt;br /&gt;
&lt;br /&gt;
Dann sendet der User ein set burstXmit.&lt;br /&gt;
&lt;br /&gt;
Es passiert das gleiche wie bei burstAccess.&lt;br /&gt;
&lt;br /&gt;
FHEM versucht mittels burst zu wecken und sendet bei Erfolg die Messages aus dem Kommandostack. &lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu burstAccess ist burstXmit gezielt einsetzbar und kann sparsamer verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; FHEM und burst devices&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
FHEM sendet eine burst automatisch mit Kommandos zu Devices, die nur burst unterstützen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So aktiviert man den burst-Betrieb am HM-CC-RT-DN&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Burst Mode einschalten&#039;&#039; (der Kanal 4 des Device WZ1 heisst hier WZ1_4)&lt;br /&gt;
:&amp;lt;code&amp;gt;set WZ1_4 regSet burstRx on &amp;lt;/code&amp;gt;&lt;br /&gt;
prüfen mit:&lt;br /&gt;
:&amp;lt;code&amp;gt;get WZ1_4 reg burstRx &amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;Nun in FHEM den Burst mode einschalten (sofern nicht burstXmit verwendet wird)&#039;&#039;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr WZ1 burstAccess 1_auto&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis: Das Attribut im Device und nicht im Kanal setzen, ansonsten gibt es eine Fehlermeldung.&lt;br /&gt;
&lt;br /&gt;
=== Temperaturlisten ===&lt;br /&gt;
Die Temperaturlisten des HM-CC-RT-DN werden identisch mit denen anderer HomeMatic Thermostate verwaltet (siehe [[HomeMatic Type Thermostat#Temperaturlisten|HomeMatic Type Thermostat]]). Beim HM-CC-RT-DN ist der Kanal 4 (_Clima) für die Temperaturlisten zuständig.&lt;br /&gt;
&lt;br /&gt;
==FHEM-Log==&lt;br /&gt;
In den folgenden Logs heißt Kanal 4 noch &amp;quot;_ClimRT_tr&amp;quot;. Inzwischen würde man dort &amp;quot;_Clima&amp;quot; sehen.&lt;br /&gt;
&lt;br /&gt;
=== Device-Log ===&lt;br /&gt;
 2013.10.10 20:03:24 3: CUL_HM Unknown device CUL_HM_HM_CC_RT_DN_2212BC, please define it&lt;br /&gt;
 2013.10.10 20:03:24 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC CUL_HM 2212BC A1A0184002212BC0000001000954B4551303531303031375900FFFF&lt;br /&gt;
 2013.10.10 20:03:24 3: Device CUL_HM_HM_CC_RT_DN_2212BC added to ActionDetector with 000:10 time&lt;br /&gt;
 2013.10.10 20:03:24 3: CUL_HM pair: CUL_HM_HM_CC_RT_DN_2212BC thermostat, model HM-CC-RT-DN serialNr KEQ0510017&lt;br /&gt;
 2013.10.10 20:03:24 3: LANCUL pairing (hmPairForSec) not enabled&lt;br /&gt;
 2013.10.10 20:03:24 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC-%Y.log CUL_HM_HM_CC_RT_DN_2212BC&lt;br /&gt;
 2013.10.10 20:03:24 3: Device Heizung_Wohnzimmer added to ActionDetector with 000:10 time&lt;br /&gt;
 2013.10.10 20:03:24 3: CUL_HM pair: Heizung_Wohnzimmer thermostat, model HM-CC-TC serialNr JEQ0044286&lt;br /&gt;
 2013.10.10 20:03:24 3: Device CUL_HM_HM_CC_RT_DN_2212BC added to ActionDetector with 000:10 time&lt;br /&gt;
 2013.10.10 20:03:24 3: CUL_HM pair: CUL_HM_HM_CC_RT_DN_2212BC thermostat, model HM-CC-RT-DN serialNr KEQ0510017&lt;br /&gt;
 2013.10.10 20:03:25 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_Weather CUL_HM 2212BC01&lt;br /&gt;
 2013.10.10 20:03:25 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_Weather FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_Weather-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_Weather&lt;br /&gt;
 2013.10.10 20:03:25 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_Weather FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_Weather-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_Weather&lt;br /&gt;
 2013.10.10 20:03:26 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_Climate CUL_HM 2212BC02&lt;br /&gt;
 2013.10.10 20:03:26 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_Climate FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_Climate-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_Climate&lt;br /&gt;
 2013.10.10 20:03:26 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_Climate FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_Climate-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_Climate&lt;br /&gt;
 2013.10.10 20:03:27 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_WindowRec CUL_HM 2212BC03&lt;br /&gt;
 2013.10.10 20:03:27 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_WindowRec FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_WindowRec-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_WindowRec&lt;br /&gt;
 2013.10.10 20:03:27 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_WindowRec FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_WindowRec-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_WindowRec&lt;br /&gt;
 2013.10.10 20:03:28 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr CUL_HM 2212BC04&lt;br /&gt;
 2013.10.10 20:03:28 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr&lt;br /&gt;
 2013.10.10 20:03:28 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr&lt;br /&gt;
 2013.10.10 20:03:29 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam CUL_HM 2212BC05&lt;br /&gt;
 2013.10.10 20:03:29 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam&lt;br /&gt;
 2013.10.10 20:03:29 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam&lt;br /&gt;
 2013.10.10 20:03:30 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_remote CUL_HM 2212BC06&lt;br /&gt;
 2013.10.10 20:03:30 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_remote FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_remote-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_remote&lt;br /&gt;
 2013.10.10 20:03:30 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_remote FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_remote-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_remote&lt;br /&gt;
 2013.10.10 20:03:35 3: Device CUL_HM_HM_CC_RT_DN_2212BC added to ActionDetector with 000:10 time&lt;br /&gt;
 2013.10.10 20:03:40 2: CUL_HM set CUL_HM_HM_CC_RT_DN_2212BC getSerial&lt;br /&gt;
 2013.10.10 20:03:40 2: CUL_HM set CUL_HM_HM_CC_RT_DN_2212BC getConfig&lt;br /&gt;
 2013.10.10 20:03:54 3: Device CUL_HM_HM_CC_RT_DN_2212BC added to ActionDetector with 000:10 time&lt;br /&gt;
&lt;br /&gt;
=== Event monitor ===&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr motorErr: ok&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr measured-temp: 18.4&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr desired-temp: 18&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr ValvePosition: 3 %&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr mode: manu&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr unknown0: 24&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr T: 18.4 desired: 18 valve: 3 %&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC battery: ok&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC batteryLevel: 3.1 V&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC measured-temp: 18.4&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC desired-temp: 18&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC actuator: 3 %&lt;br /&gt;
&lt;br /&gt;
== Firmware Update ==&lt;br /&gt;
Seit 24.10.2014 gibt es für den HM-CC-RT-DN die neue Firmware Version 1.4. Diese kann von der eQ-3 Webseite heruntergeladen werden. Genauere Informationen gibt es unter [[HomeMatic Firmware Update]].&lt;br /&gt;
&lt;br /&gt;
=== HM-CC-RT-DN spezifische Update Informationen ===&lt;br /&gt;
Durch gleichzeitiges Drücken der &amp;quot;Auto-/Manu&amp;quot;-Taste und der &amp;quot;Comfort-/Eco&amp;quot;-Taste am HM-CC-RT-DN während man die Batterien wieder einlegt wird der updatemodus gestartet. Während des Updates steht &amp;quot;FUP&amp;quot; im Display. Nach erfolgreichem Update erscheint &amp;quot;Ins&amp;quot; im Display und es muss eine erneute Adaptierfahrt durch drücken der Boost-Taste ausgelöst werden. Anschließend sollte der HM-CC-RT-DN wieder normal funktionieren. Die eingestellten Parameter und das Pairing mit FHEM gehen beim Update nicht verloren. Sollte das Update fehlschlagen, erscheint &amp;quot;Err&amp;quot; bzw. &amp;quot;CrC&amp;quot; im Display.&lt;br /&gt;
&lt;br /&gt;
Normalerweise sollte dann durch erneutes starten der Prozedur am PC und HM-CC-RT-DN das ganze erneut durchführbar sein.&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Readings, die nicht durch ein einfaches &#039;&#039;getConfig&#039;&#039; aktualisisert werden, z.B. &amp;quot;battery&amp;quot;(nicht batteryLevel). Um diese Readings zu bekommen, ist ein &lt;br /&gt;
:&amp;lt;code&amp;gt;set Device_Channel04 controlMode auto &amp;lt;/code&amp;gt;&lt;br /&gt;
notwendig. Daraufhin werden die Readings übertragen/aktualisiert.&lt;br /&gt;
&lt;br /&gt;
== Simulation von Fensterkontakten und externen Temperatursensoren ==&lt;br /&gt;
grober Ablauf:&lt;br /&gt;
* erstellen ein virtuelles Device&lt;br /&gt;
* erstelle dazu einen virtuellen Kanal&lt;br /&gt;
* peeren den Kanal mit dem RT (als fenster-kontakt oder als remote, wen du willst)&lt;br /&gt;
* sende ein postEvent&lt;br /&gt;
&lt;br /&gt;
=== Fensterkontakte ===&lt;br /&gt;
&#039;&#039;Entnommen aus diesem {{Link2Forum|Topic=31078|Message=236245|LinkText=Forenbeitrag}}&#039;&#039;&lt;br /&gt;
 define virSC CUL_HM 221133&lt;br /&gt;
 attr virSC autoReadReg 4_reqStatus&lt;br /&gt;
 attr virSC expert 2_full&lt;br /&gt;
 attr virSC model virtual_1&lt;br /&gt;
 attr virSC peerIDs &lt;br /&gt;
 attr virSC subType virtual&lt;br /&gt;
 attr virSC webCmd press short:press long&lt;br /&gt;
 &lt;br /&gt;
 define virtualKitchenDoor CUL_HM 22113301&lt;br /&gt;
 attr virtualKitchenDoor dummy 1&lt;br /&gt;
 attr virtualKitchenDoor expert 1&lt;br /&gt;
 attr virtualKitchenDoor group Virtual&lt;br /&gt;
 attr virtualKitchenDoor model virtual_1&lt;br /&gt;
 attr virtualKitchenDoor webCmd postEvent open:postEvent closed &lt;br /&gt;
&lt;br /&gt;
Anschließend peeren und Temperatur festlegen mit:&lt;br /&gt;
 set virtualKitchenDoor peerChan 0 &amp;lt;Thermostat_Window_Rec&amp;gt; single set&lt;br /&gt;
 set &amp;lt;Thermostat_Window_Rec&amp;gt; regSet winOpnTemp 5 virtualKitchenDoor&lt;br /&gt;
&lt;br /&gt;
Die virtuelle Tür wird dann entsprechend über ein Notify getriggert:&lt;br /&gt;
 define notify_virtualKitchenDoor notify (Fensterkontakt_1|Fensterkontakt_2) {if(Value(&amp;quot;Fensterkontakt&amp;quot;) eq &amp;quot;open&amp;quot; &amp;amp;&amp;amp; Value(&amp;quot;Fensterkontakt_2&amp;quot;) eq &amp;quot;open&amp;quot;){fhem(&amp;quot;set virtualKitchenDoor postEvent open&amp;quot;)}else{fhem(&amp;quot;set virtualKitchenDoor postEvent closed&amp;quot;)}}&lt;br /&gt;
&lt;br /&gt;
=== Temperatursensoren ===&lt;br /&gt;
&#039;&#039;Entnommen aus diesem {{Link2Forum|Topic=19686|Message=233788|LinkText=Forenbeitrag}}&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Virtuelles HomeMatic Device mit _deiner_ HM Id definieren:&lt;br /&gt;
 define wz_vT CUL_HM &amp;lt;hmId&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Dem Device einen virtuellen Kanal (Default ist ein virtueller Button) hinzufügen:&lt;br /&gt;
 set wz_vT virtual 1&lt;br /&gt;
&lt;br /&gt;
3. Es ist kein virtueller Button sondern ein virtueller Temperatursensor - darum rename:&lt;br /&gt;
 rename wz_vT_Btn1 wz_vT_Sensor1&lt;br /&gt;
&lt;br /&gt;
4. Virtuellen Peer Sensor mit dem Weather Channel des RT-DN peeren:&lt;br /&gt;
 set wz_vT_Sensor1 peerChan 0 &amp;lt;RT_DN&amp;gt;_Weather single&lt;br /&gt;
&lt;br /&gt;
5. Peering kontrollieren (Voraussetzung: Device &#039;&#039;hm&#039;&#039; vom Typ [[HomeMatic HMInfo|HMinfo]] existiert):&lt;br /&gt;
:&amp;lt;code&amp;gt;set hm peerXref&amp;lt;/code&amp;gt;&lt;br /&gt;
Beispiel-Ausgabe:&lt;br /&gt;
 peerXref done: &lt;br /&gt;
 x-ref list &lt;br /&gt;
    wz_Thermostat_Weather =&amp;gt; wz_vT_Sensor1 &lt;br /&gt;
    wz_vT_Sensor1 =&amp;gt; wz_Thermostat_Weather&lt;br /&gt;
&lt;br /&gt;
6. Gemessene Temperatur vom z.B. 1-Wire DS1820 dem virtuellen HM Sensor übergeben. Z.B. alle zwei Minuten per at:&lt;br /&gt;
 define at_wz_vT at +*00:02 { my $T=(ReadingsVal(&amp;quot;&amp;lt;DS1820B&amp;gt;&amp;quot;,&amp;quot;temperature&amp;quot;,20.0)); fhem &amp;quot;set wz_vT_Sensor1 virtTemp $T&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
Fertig.&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
=== TempList: Bad format ... ===&lt;br /&gt;
Wenn Sie beim Setzen einer Temperaturliste nach dem o.a. Schema (&amp;quot;SetTempList...&amp;quot;) die Meldung&lt;br /&gt;
&lt;br /&gt;
 Bad format, use HH:MM TEMP ......&lt;br /&gt;
&lt;br /&gt;
erhalten, sollten Sie zunächst ein [[update]] von FHEM durchführen.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.eq-3.de/produkt-detail-aktoren/items/homematic-funk-heizkoerperthermostat.html Produktinfo]&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/downloads_produktkatalog/homematic/bda/HM-CC-RT-DN_UM_GE_eQ-3_web.pdf Bedienungsanleitung (PDF)]&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/downloads_produktkatalog/homematic/pdb/Funk-Heizkoerperthermostat_105155_Produktdatenblatt_V2.3.pdf Datenblatt (PDF)]&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/downloads/Ventilkompatibilitaeten.pdf Ventil-Kompatibilitätsliste (zur Zeit nicht verfügbar)]&lt;br /&gt;
* {{Link2Forum|Topic=14738|LinkText=Forenthema zum Thermostat}}&lt;br /&gt;
* {{Link2Forum|Topic=64446|LinkText=Reparatur einer durch mechanischen Stoß von außen abgerissenen Lichtschranke}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-CC-RT-DN_Funk-Heizk%C3%B6rperthermostat&amp;diff=19039</id>
		<title>HM-CC-RT-DN Funk-Heizkörperthermostat</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-CC-RT-DN_Funk-Heizk%C3%B6rperthermostat&amp;diff=19039"/>
		<updated>2017-01-25T18:35:52Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Channel (Kanal) 05 _ClimaTeam */  Verlinkung auf das Modul Weekprofile&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-CC-RT-DN.jpg&lt;br /&gt;
|Bildbeschreibung=HM-CC-RT-DN an Heizkörper montiert&lt;br /&gt;
|HWProtocol=[[HomeMatic]]&lt;br /&gt;
|HWType=[[HomeMatic Type Thermostat|thermostat]]&lt;br /&gt;
|HWCategory=[[:Kategorie:Heizungsventile|Heizungsventile]]&lt;br /&gt;
|HWComm=868 MHz&lt;br /&gt;
|HWChannels=6&lt;br /&gt;
|HWVoltage=3&amp;amp;nbsp;V&lt;br /&gt;
|HWPowerConsumption=180&amp;amp;nbsp;mA&lt;br /&gt;
|HWPoweredBy=2x LR6/Mignon/AA&lt;br /&gt;
|HWSize=54x65x93 mm (BxHxT)&lt;br /&gt;
|HWDeviceFHEM=[[CUL_HM]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=ELV / eQ-3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HM-CC-RT-DN&#039;&#039;&#039; (häufig einfach &#039;&#039;&#039;RT&#039;&#039;&#039; genannt) ist ein Funk-&#039;&#039;Heizkörperthermostate&#039;&#039; mit integriertem &#039;&#039;Stellantrieb&#039;&#039;. Das Thermostat ist seit September&amp;amp;nbsp;2013 verfügbar und ist der Nachfolger des [[HM-CC-VD Funk-Stellantrieb]]s.&lt;br /&gt;
&lt;br /&gt;
== Vorbemerkungen ==&lt;br /&gt;
: &#039;&#039;→ Einstellungen und Informationen, die alle [[HomeMatic]] Thermostate betreffen, sind unter [[HomeMatic Type Thermostat#Temperaturlisten|HomeMatic Type Thermostat]] zu finden.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der HM-CC-RT-DN kann die Temperatur selbst messen (im Gegensatz zum [[HM-CC-VD Funk-Stellantrieb|Vorgänger]]) und verfügt über eine Fenster-Offen-Erkennung sowie eine Boost-Funktion. Der HM-CC-RT-DN &#039;&#039;kann&#039;&#039; von einem [[HM-TC-IT-WM-W-EU Funk-Wandthermostat AP]] gesteuert werden, das ist aber &#039;&#039;optional&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Das Gerät wird seit Anfang Oktober 2013 von FHEM unterstützt (siehe Diskussion im {{Link2Forum|Topic=14738|LinkText=Forum}}).&lt;br /&gt;
&lt;br /&gt;
Der HM-CC-RT-DN scheint das erste HomeMatic-Device zu sein, bei dem ein Update der Firmware auch vom Anwender durchgeführt werden kann. Ein Firmware-Update erfordert einen [[HM-CFG-USB_USB_Konfigurations-Adapter|USB Konfigurations-Adapter]] und eine auf der eQ-3 Webseite herunterladbare Firmwareupdate-Software. Weitere Details sind unter [[#Firmware Update|Firmware Update]] beschrieben.&lt;br /&gt;
{{Hinweis|Die Solltemperaturen eines HM-CC-RT-DN lassen sich &#039;&#039;nicht&#039;&#039; durch einen [[HM-CC-TC Funk-Wandthermostat]] &#039;&#039;steuern&#039;&#039;. Dieser kann nur die Ist-Temperatur an den HM-CC-RT-DN weitergeben, damit nicht die am HM-CC-RT-DN direkt gemessene Raumtemperatur zur Regelung verwendet wird.}}&lt;br /&gt;
Mit einem HM-CC-RT-DN können maximal (neben der Zentrale/FHEM):&lt;br /&gt;
* 7 HomeMatic Heizkörperthermostate&lt;br /&gt;
* 8 HomeMatic Tür-Fensterkontakte / Fenster-Drehgriffkontakte&lt;br /&gt;
* 8 Tastenpaare von HomeMatic Fernbedienungen bzw. Display-Wandtaster&lt;br /&gt;
* 1 HomeMatic Innen-Temperatur-Sensor&lt;br /&gt;
[[Peering (HomeMatic)|gepeert]] werden.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Wird für Wartungs-/Umbaumaßnahmen das Wasser der Heizung abgelassen bzw. diese neubefüllt, sind alle Stellantriebe manuell dauerhaft auf &#039;&#039;&#039;on&#039;&#039;&#039; zu setzen: set &amp;lt;HM_Stellantrieb&amp;gt;_Clima controlManu on. Beim Einsatz eines Wandthermostaten ist der Wandthermostat entsprechend einzustellen.}}&lt;br /&gt;
&lt;br /&gt;
== Technische Daten ==&lt;br /&gt;
* Betriebsspannung: 2 Stck. 1,5V LR6/Mignon/AA&lt;br /&gt;
* Stromaufnahme: 180 mA max.&lt;br /&gt;
* Abmessungen (B x H x T): 54 x 65 x 93 mm&lt;br /&gt;
* Gewicht: 180 g (ohne Batterien)&lt;br /&gt;
* Ventilanschluss: M30 x 1,5 mm&lt;br /&gt;
&lt;br /&gt;
Aktuelle Firmware: 1.4&lt;br /&gt;
&lt;br /&gt;
== Betrieb mit FHEM ==&lt;br /&gt;
Der Funk-Heizkörperthermostat muss zuerst mit FHEM [[Pairing (HomeMatic)|gepairt]] werden. Stellen Sie sicher, dass FHEM aktuell ist (update durchführen)&lt;br /&gt;
&lt;br /&gt;
Das Pairing sollte wie in [[HomeMatic Devices pairen]] beschrieben durchgeführt werden &lt;br /&gt;
&lt;br /&gt;
=== Channels (Kanäle) ===&lt;br /&gt;
==== Channel (Kanal) 01 _Weather ====&lt;br /&gt;
&lt;br /&gt;
Dieser Kanal dient zur Einspeisung der (gemessenen) &#039;&#039;Ist-Temperatur&#039;&#039;. Als Sensor können zum Beispiel das [[HM-TC-IT-WM-W-EU Funk-Wandthermostat AP|HM-TC-IT-WM-W-EU Funk-Wandthermostat]] oder ein [[HM-WDS40-TH-I Funk-Temperatur-/Feuchtesensor innen (IT)|HM-WDS40-TH-I Funk-Temperatur-/Feuchtesensor]] dienen.&lt;br /&gt;
&lt;br /&gt;
Ein Temperatur-Sensor &#039;&#039;tempSensor&#039;&#039; kann mit dem &#039;&#039;_Weather&#039;&#039;-Kanal wie folgt [[Peering (HomeMatic)|gepeert]] werden: &lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;tempSensor&amp;gt; peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_Weather single&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 02 _Climate ====&lt;br /&gt;
Dieser Kanal erlaubt es dem [[HM-TC-IT-WM-W-EU Funk-Wandthermostat AP|HM-TC-IT-WM-W-EU Funk-Wandthermostat]] den HM-CC-RT-DN zu steuern. Dazu müssen die beiden Geräte gepeert werden:&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-TC-IT-WM-W-EU&amp;gt;_Climate peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_Climate single set&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 03 _WindowRec ====&lt;br /&gt;
Mit diesem Kanal können Fensterkontakte ([[HM-SEC-SC Tür-Fensterkontakt|HM-SEC-SC]] und [[HM-Sec-RHS Funk-Fenster-Drehgriffkontakt|HM-SEC-RHS]]) ihren Fensterstatus (geöffnet / gekippt) an ein oder mehrere Thermostate senden. Die Thermostate stellen anschließend die entsprechende (konfigurierbare) Temperatur ein. Der Temperaturwert kann je Fenster-Sensor unterschiedlich definiert werden. Sind mehrere Fenster gleichzeitig geöffnet, so wird der Thermostat auf die Temperatur des Sensors mit dem geringsten Temperaturwert eingestellt. &lt;br /&gt;
Ferner wird empfohlen, bei Einsatz von externen Sensoren, die interne „Fenster auf Erkennung“ zu deaktivieren (weitere Details sind im [[HM-CC-RT-DN Funk-Heizkörperthermostat#Channel .28Kanal.29 04 _Clima|Channel (Kanal) 04 _Clima]] beschrieben).&lt;br /&gt;
&lt;br /&gt;
Der Befehl zum Peeren lautet, wobei &amp;lt;fensterSensor&amp;gt; die FHEM-Kanalbezeichnung für den Fensterkontakt ist und &amp;lt;rt_WindowRec&amp;gt; die Kanalbezeichnung für den entsprechenden Kanal des Heizkörperthermostates:&lt;br /&gt;
 set &amp;lt;fensterSensor&amp;gt; peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_WindowRec single set&lt;br /&gt;
&lt;br /&gt;
Zum Löschen (=unpeeren) dieser Kopplung:&lt;br /&gt;
 set &amp;lt;fensterSensor&amp;gt; peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_WindowRec single unset&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung&#039;&#039;&#039;: Der Peer-(Lösch)Vorgang muss erst am Fensterkontakt durch Drücken der Anlerntaste ausgelöst werden, und zwar auch dann, wenn der Fensterkontakt schon vorher mit FHEM gepairt wurde. Dann kann der oben genannte Befehl in FHEM abgesetzt werden. Wichtig scheint auch, dass der Fensterkontakt geschlossen ist wenn man die Anlerntaste drückt.&lt;br /&gt;
&lt;br /&gt;
Der Befehl zur Temperatureinstellung des Heizkörperthermostaten für den Zustand &amp;quot;Fenster offen&amp;quot; lautet, wobei &amp;lt;fensterSensor&amp;gt; die FHEM-Kanalbezeichnung für den Fensterkontakt ist und &amp;lt;rt_WindowRec&amp;gt; die Kanalbezeichnung für den entsprechenden Kanal des Heizkörperthermostates, sowie &amp;lt;Temp&amp;gt; die einzustellende Temperatur (ganzzahliger Wert):&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt;_WindowRec regSet winOpnTemp &amp;lt;Temp&amp;gt; &amp;lt;fensterSensor&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 04 _Clima ====&lt;br /&gt;
Dieser Kanal dient zum Einstellen der Betriebsparameter, auch [[#Temperaturlisten|Temperaturlisten]] sind hierauf zu übertragen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|In älteren Versionen von FHEM wurde dieser Kanal durch &#039;&#039;autocreate&#039;&#039; als &amp;lt;code&amp;gt;_ClimRT_tr&amp;lt;/code&amp;gt; angelegt. Der Hersteller hat hier offenbar die internen Bezeichnungen geändert, denn beim Vorläufernmodell HM-CC-TC mussten Temperaturlisten auf den Kanal &#039;&#039;Climate&#039;&#039; übertragen werden.}}&lt;br /&gt;
&lt;br /&gt;
Die maximale Öffnung des Ventils kann mittels folgendem Befehl eingestellt werden (hier auf 80 %):&lt;br /&gt;
  set &amp;lt;HM-CC-RT-DN&amp;gt;_Clima regSet valveMaxPos 80&lt;br /&gt;
&lt;br /&gt;
Die interne &amp;quot;Fenster-auf&amp;quot;-Erkennung kann man wie folgt abschalten:&lt;br /&gt;
  set &amp;lt;HM-CC-RT-DN&amp;gt;_Clima regSet winOpnMode off&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 05 _ClimaTeam ====&lt;br /&gt;
Dieser Kanal erlaubt es mehrere HM-CC-RT-DN zu einem &amp;quot;Team&amp;quot; zu gruppieren. Ein Mitglied des Teams meldet&lt;br /&gt;
* Änderungen der Temperatur am Handrad&lt;br /&gt;
* Einschalten des Boost-Modus am Taster&lt;br /&gt;
an seine &amp;quot;Teamkollegen&amp;quot; weiter. Folgende Änderungen werden &#039;&#039;&#039;nicht&#039;&#039;&#039; weitergegeben:&lt;br /&gt;
* Status der Fensterkontakte&lt;br /&gt;
* Temperaturlisten/Wochenplan und daraus folgende Änderungen. (Mit dem Modul [https://wiki.fhem.de/wiki/Weekprofile Wochenplan / Weekprofile] können die Wochenpläne komfortabel in Fhem erstellt und an die Thermostate übertragen werden.)&lt;br /&gt;
* Änderungen durch Fernbedienungen&lt;br /&gt;
* Änderungen durch eine HomeMatic-Zentrale&lt;br /&gt;
&lt;br /&gt;
Befehl zum Peeren, wobei &#039;&#039;&amp;lt;HM-CC-RT-DN#1&amp;gt;_ClimaTeam&#039;&#039;, &#039;&#039;&amp;lt;HM-CC-RT-DN#2&amp;gt;_ClimaTeam&#039;&#039;, ..., &#039;&#039;&amp;lt;HM-CC-RT-DN#8&amp;gt;_ClimaTeam&#039;&#039; die Kanalbezeichnungen der jeweiligen ClimaTeam-Kanäle sind:&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN#1&amp;gt;_ClimaTeam peerChan 0 &amp;lt;HM-CC-RT-DN#2&amp;gt;_ClimaTeam single&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN#1&amp;gt;_ClimaTeam peerChan 0 &amp;lt;HM-CC-RT-DN#3&amp;gt;_ClimaTeam single&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN#2&amp;gt;_ClimaTeam peerChan 0 &amp;lt;HM-CC-RT-DN#3&amp;gt;_ClimaTeam single&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
==== Channel (Kanal) 06 _remote ====&lt;br /&gt;
Dieser Kanal kann an eine Fernbedienung gekoppelt werden. Per Tastendruck kann man einen bestimmten Mode und/oder eine bestimmte Temperatur wählen. Dabei kann die Reaktion auf einen langen oder kurzen Tastendruck gesondert eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Der Befehl zum peeren lautet, wobei &amp;lt;button&amp;gt; die Kanalbezeichnung der Fernbedienung und &amp;lt;rt-remote&amp;gt; die Kanalbezeichnung des Heizkörperthermostates ist:&lt;br /&gt;
  set &amp;lt;button&amp;gt; peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_remote single&lt;br /&gt;
&lt;br /&gt;
=== Betriebsmodus Auto, Manu, Party (Urlaub) ===&lt;br /&gt;
&lt;br /&gt;
Der HM-CC-RT-DN verfügt über drei Betriebsmodus: Auto, Manu (Manuell) und Party (Urlaub).&lt;br /&gt;
&lt;br /&gt;
==== Modus Auto ====&lt;br /&gt;
Das Gerät arbeitet gemäß des gespeicherten Wochenprogramms. Manuelle Änderungen sind möglich, werden aber beim nächsten Schaltpunkt überschrieben.&lt;br /&gt;
&lt;br /&gt;
==== Modus Manu ====&lt;br /&gt;
Die Temperatur wird manuell eingestellt, das Wochenprogramm wird nicht abgearbeitet.&lt;br /&gt;
&lt;br /&gt;
==== Modus Party (Urlaub) ====&lt;br /&gt;
Die eingestellte Temperatur gilt bis zu einem gegebenen Endzeitpunkt, anschließend wechselt das Thermostat in den &#039;&#039;Auto&#039;&#039;-Modus. So kann beispielsweise bei Abwesenheit ein niedrigeres Temperaturprofil eingestellt werden ohne dass die Temperaturlisten verändert werden müssen.&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;HM-CC-RT-DN&amp;gt;_Clima controlParty 16 06.12.13 16:30 09.12.13 05:00&lt;br /&gt;
&lt;br /&gt;
Dadurch wird &lt;br /&gt;
* von 06.12.2013, 16:30 Uhr&lt;br /&gt;
* bis 09.12.2013, 05:00 Uhr &lt;br /&gt;
* die gewünschte Raumtemperatur auf 16 °C eingestellt.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&lt;br /&gt;
* Der Befehl muss auf dem Kanal 4 &#039;&#039;(_Clima)&#039;&#039; erfolgen.&lt;br /&gt;
* Es werden nur Uhrzeiten zu jeder vollen oder halben Stunde angenommen (Minuten also 00 oder 30).}}&lt;br /&gt;
&lt;br /&gt;
Mit der folgenden Funktion &amp;lt;code&amp;gt;Urlaub()&amp;lt;/code&amp;gt; kann man eine ganze Wohnung (also mehrere RTs) mit nur einem Befehl in den Party-Modus versetzen. Im Beispiel werden zwei Heizkörper (&amp;quot;Treppenhaus&amp;quot; und &amp;quot;Kammer&amp;quot;) angesteuert.&lt;br /&gt;
&lt;br /&gt;
Zu beachten sind folgende Dinge:&lt;br /&gt;
# Aktuelle Dateien (z.B. &amp;lt;code&amp;gt;10_CUL_HM&amp;lt;/code&amp;gt;) verwenden!&lt;br /&gt;
# Bei dem &#039;&#039;controlParty&#039;&#039;-Befehl &#039;&#039;kein&#039;&#039; Komma zwischen den Parametern.&lt;br /&gt;
# Bei der Funktion die Parameterübergabe definieren &amp;lt;code&amp;gt;($$$$$)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Aufruf:&#039;&#039;&#039;&lt;br /&gt;
:&amp;lt;code&amp;gt;{Urlaub (&amp;quot;16&amp;quot;, &amp;quot;06.12.13&amp;quot;, &amp;quot;16:30&amp;quot;, &amp;quot;09.12.13&amp;quot; ,&amp;quot;05:00&amp;quot;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Funktion:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=perl&amp;gt;&lt;br /&gt;
my $Urlaub;&lt;br /&gt;
sub&lt;br /&gt;
Urlaub($$$$$)&lt;br /&gt;
  {&lt;br /&gt;
    my ($temp, $startDate, $startTime, $endDate, $endTime) = @_;&lt;br /&gt;
 &lt;br /&gt;
    # HM-CC-RT-DN akzeptiert nur Zeiten, die auf Minute 00 oder 30 enden.&lt;br /&gt;
    # Daher $startTime und $endTime abrunden&lt;br /&gt;
    $startTime =~ s/\:[0-2].$/:00/;&lt;br /&gt;
    $startTime =~ s/\:[3-5].$/:30/;&lt;br /&gt;
    $endTime =~ s/\:[0-2].$/:00/;&lt;br /&gt;
    $endTime =~ s/\:[3-5].$/:30/;&lt;br /&gt;
&lt;br /&gt;
    # controlParty bei jedem HM-CC-RT-DN setzen.&lt;br /&gt;
    for my $rt (qw(Kammer Treppenhaus)) {&lt;br /&gt;
      fhem (&amp;quot;set $rt controlParty $temp $startDate $startTime $endDate $endTime&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tastensperre ===&lt;br /&gt;
&lt;br /&gt;
Um zu verhindern, dass der Modus oder die Temperatur per Tasten bzw. Drehrad am HM-CC-RT-DN verändert wird, kann eine Tastensperre gesetzt werden. Dies erfolgt mittels des Befehls:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet btnLock on&lt;br /&gt;
&lt;br /&gt;
Rückgängig machen geht per:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet btnLock off&lt;br /&gt;
&lt;br /&gt;
Diese Tastensperre kann man aber am HM-CC-RT-DN durch eine Tastenkombination wieder zurücksetzen. Um sie nur per FHEM rücksetzen zu können, muss&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet globalBtnLock on&lt;br /&gt;
&lt;br /&gt;
eingegeben werden. Rückgängig geht wieder per:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet globalBtnLock off&lt;br /&gt;
&lt;br /&gt;
Es gibt auch eine Tastensperre die nur das Umschalten des Modus (Auto, Manuell, Urlaub) am Gerät verhindert. Diese wird mit&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet modusBtnLock on&lt;br /&gt;
&lt;br /&gt;
eingeschaltet. Abschalten geht mit:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-CC-RT-DN&amp;gt; regSet modusBtnLock off&lt;br /&gt;
&lt;br /&gt;
=== Burst-Modus ===&lt;br /&gt;
Das ist ein &#039;&#039;&#039;Übertragungs&#039;&#039;&#039;modus für Nachrichten zwischen HM-Geräten und der Zentrale. Der RT erwacht alle 2,5 Minuten und dann überträgt die Zentrale die Kommandos. Wenn man einen Fensterkontakt oder eine Fernsteuerung nutzt, muss der RT sofort reagieren - dann muss man den Burst &#039;&#039;enablen&#039;&#039;. Der RT kann in diesem Fall sofort aufgeweckt werden und bearbeitet die Anforderung (Request). Das kann man auch von der Zentrale aus nutzen (so man möchte). Das ist der &#039;&#039;&#039;Vorteil&#039;&#039;&#039; des eingeschalteten Burst-Modus.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteil:&#039;&#039;&#039; Der Burst-Modus benötigt mehr Leistung, das heißt die Batterien müssen häufiger gewechselt werden: Der RT muss den Receiver ständig empfangsbereit halten. Außerdem wachen bei jedem Burst wachen &#039;&#039;alle&#039;&#039; Burst-Empfänger auf – egal an wen die Kommunikation gerichtet war.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Burst – wie es funktioniert&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Schickt ein Sender eine burst Sequenz, wachen alle burst-Empfänger auf und prüfen die Message. &lt;br /&gt;
Wenn sie betroffen sind bleiben sie eine Zeit lang wach, ansonsten schlafen sie wieder ein. &lt;br /&gt;
Man beachte also, dass Senden eines Burst  Energie in ALLEN burst-Empfängern verbraucht, egal ob sie angesprochen sind.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HMLAN und burst&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[HMLAN]] hat ein Sendebudget das über eine Stunde berechnet wird. Burst belastet diese Konto deutlich - so können nicht mehr als 100 bursts /h gesendet werden - dann geht HMLAN in overload Wenn zusätzliche Nachrichten gesendet werden sind es entsprechend weniger. &lt;br /&gt;
Es ist als nicht vorteilhaft, unnötig bursts zu senden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Burst devices&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es gibt Devices, die immer auf burst reagieren und solche bei denen es abgeschaltet werden kann. So reagiert ein Rauchmelder immer auf Burst damit er seine Team-Kollegen hören kann. &lt;br /&gt;
Ein TC oder RT hingegen hat diese Funktion abschaltbar. &#039;Per default ist dies ausgeschaltet um Batterie zu sparen&#039;. Wenn ein VD gesteuert wird ist der TC ja selbst wach.  Wird er aber mit einem Fensterkontakt gekoppelt muss es eingeschaltet werden – sonst verpasst er die Nachricht. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ConditionalBurst devices&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Devices mit abschaltbarem Burst wie z.B. der &#039;&#039;HM-CC-RT-DN&#039;&#039; haben ein Register, &#039;&#039;burstRx&#039;&#039;, mit dem das burst-Erwachen eingestellt werden kann. &lt;br /&gt;
Sendern, die einen burst-Aktor erwecken sollen, muss man sagen, welcher Peer Burst benötigt. Hier kann ggf. das Register &#039;&#039;peerNeedsBurst&#039;&#039; nach dem Peeren gesetzt werden. FHEM versucht dies automatisch beim Peeren zu erledigen. Siehe [[HomeMatic HMInfo|HMinfo]] Befehl &#039;&#039;models&#039;&#039; um herauszufinden, welche Devices welchen Modus unterstützen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Attribut burstAccess&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Devices, die abschaltbaren burst haben kann man ein attribut bustAccess 1_auto setzen. Es wird beim Abschicken eines Kommandos versucht, das Device mit burst zu wecken. Sollte es nicht funktionieren wird gewartet, bis das Device aufwacht (meist reagieren solche Devices auch auf wakeup). Das Setzen des Attributs ist angenehm – es werden aber ggf. viele bursts gesendet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kommando burstXmit&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Mit diesem Kommando, das bei Devices mit contitional-Burst zu Verfügung steht, wird der burst gezielt von User angestossen.&lt;br /&gt;
&lt;br /&gt;
Der User schickt erst seine Kommandos an das device. Die Kommandos werden im Command-stack gesammelt. &lt;br /&gt;
&lt;br /&gt;
Dann sendet der User ein set burstXmit.&lt;br /&gt;
&lt;br /&gt;
Es passiert das gleiche wie bei burstAccess.&lt;br /&gt;
&lt;br /&gt;
FHEM versucht mittels burst zu wecken und sendet bei Erfolg die Messages aus dem Kommandostack. &lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu burstAccess ist burstXmit gezielt einsetzbar und kann sparsamer verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; FHEM und burst devices&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
FHEM sendet eine burst automatisch mit Kommandos zu Devices, die nur burst unterstützen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So aktiviert man den burst-Betrieb am HM-CC-RT-DN&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Burst Mode einschalten&#039;&#039; (der Kanal 4 des Device WZ1 heisst hier WZ1_4)&lt;br /&gt;
:&amp;lt;code&amp;gt;set WZ1_4 regSet burstRx on &amp;lt;/code&amp;gt;&lt;br /&gt;
prüfen mit:&lt;br /&gt;
:&amp;lt;code&amp;gt;get WZ1_4 reg burstRx &amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;Nun in FHEM den Burst mode einschalten (sofern nicht burstXmit verwendet wird)&#039;&#039;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr WZ1 burstAccess 1_auto&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis: Das Attribut im Device und nicht im Kanal setzen, ansonsten gibt es eine Fehlermeldung.&lt;br /&gt;
&lt;br /&gt;
=== Temperaturlisten ===&lt;br /&gt;
Die Temperaturlisten des HM-CC-RT-DN werden identisch mit denen anderer HomeMatic Thermostate verwaltet (siehe [[HomeMatic Type Thermostat#Temperaturlisten|HomeMatic Type Thermostat]]). Beim HM-CC-RT-DN ist der Kanal 4 (_Clima) für die Temperaturlisten zuständig.&lt;br /&gt;
&lt;br /&gt;
==FHEM-Log==&lt;br /&gt;
In den folgenden Logs heißt Kanal 4 noch &amp;quot;_ClimRT_tr&amp;quot;. Inzwischen würde man dort &amp;quot;_Clima&amp;quot; sehen.&lt;br /&gt;
&lt;br /&gt;
=== Device-Log ===&lt;br /&gt;
 2013.10.10 20:03:24 3: CUL_HM Unknown device CUL_HM_HM_CC_RT_DN_2212BC, please define it&lt;br /&gt;
 2013.10.10 20:03:24 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC CUL_HM 2212BC A1A0184002212BC0000001000954B4551303531303031375900FFFF&lt;br /&gt;
 2013.10.10 20:03:24 3: Device CUL_HM_HM_CC_RT_DN_2212BC added to ActionDetector with 000:10 time&lt;br /&gt;
 2013.10.10 20:03:24 3: CUL_HM pair: CUL_HM_HM_CC_RT_DN_2212BC thermostat, model HM-CC-RT-DN serialNr KEQ0510017&lt;br /&gt;
 2013.10.10 20:03:24 3: LANCUL pairing (hmPairForSec) not enabled&lt;br /&gt;
 2013.10.10 20:03:24 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC-%Y.log CUL_HM_HM_CC_RT_DN_2212BC&lt;br /&gt;
 2013.10.10 20:03:24 3: Device Heizung_Wohnzimmer added to ActionDetector with 000:10 time&lt;br /&gt;
 2013.10.10 20:03:24 3: CUL_HM pair: Heizung_Wohnzimmer thermostat, model HM-CC-TC serialNr JEQ0044286&lt;br /&gt;
 2013.10.10 20:03:24 3: Device CUL_HM_HM_CC_RT_DN_2212BC added to ActionDetector with 000:10 time&lt;br /&gt;
 2013.10.10 20:03:24 3: CUL_HM pair: CUL_HM_HM_CC_RT_DN_2212BC thermostat, model HM-CC-RT-DN serialNr KEQ0510017&lt;br /&gt;
 2013.10.10 20:03:25 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_Weather CUL_HM 2212BC01&lt;br /&gt;
 2013.10.10 20:03:25 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_Weather FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_Weather-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_Weather&lt;br /&gt;
 2013.10.10 20:03:25 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_Weather FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_Weather-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_Weather&lt;br /&gt;
 2013.10.10 20:03:26 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_Climate CUL_HM 2212BC02&lt;br /&gt;
 2013.10.10 20:03:26 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_Climate FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_Climate-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_Climate&lt;br /&gt;
 2013.10.10 20:03:26 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_Climate FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_Climate-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_Climate&lt;br /&gt;
 2013.10.10 20:03:27 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_WindowRec CUL_HM 2212BC03&lt;br /&gt;
 2013.10.10 20:03:27 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_WindowRec FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_WindowRec-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_WindowRec&lt;br /&gt;
 2013.10.10 20:03:27 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_WindowRec FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_WindowRec-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_WindowRec&lt;br /&gt;
 2013.10.10 20:03:28 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr CUL_HM 2212BC04&lt;br /&gt;
 2013.10.10 20:03:28 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr&lt;br /&gt;
 2013.10.10 20:03:28 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr&lt;br /&gt;
 2013.10.10 20:03:29 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam CUL_HM 2212BC05&lt;br /&gt;
 2013.10.10 20:03:29 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam&lt;br /&gt;
 2013.10.10 20:03:29 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_ClimaTeam&lt;br /&gt;
 2013.10.10 20:03:30 2: autocreate: define CUL_HM_HM_CC_RT_DN_2212BC_remote CUL_HM 2212BC06&lt;br /&gt;
 2013.10.10 20:03:30 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_remote FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_remote-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_remote&lt;br /&gt;
 2013.10.10 20:03:30 2: autocreate: define FileLog_CUL_HM_HM_CC_RT_DN_2212BC_remote FileLog /usr/local/FHEM/var/log/CUL_HM_HM_CC_RT_DN_2212BC_remote-%Y.log CUL_HM_HM_CC_RT_DN_2212BC_remote&lt;br /&gt;
 2013.10.10 20:03:35 3: Device CUL_HM_HM_CC_RT_DN_2212BC added to ActionDetector with 000:10 time&lt;br /&gt;
 2013.10.10 20:03:40 2: CUL_HM set CUL_HM_HM_CC_RT_DN_2212BC getSerial&lt;br /&gt;
 2013.10.10 20:03:40 2: CUL_HM set CUL_HM_HM_CC_RT_DN_2212BC getConfig&lt;br /&gt;
 2013.10.10 20:03:54 3: Device CUL_HM_HM_CC_RT_DN_2212BC added to ActionDetector with 000:10 time&lt;br /&gt;
&lt;br /&gt;
=== Event monitor ===&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr motorErr: ok&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr measured-temp: 18.4&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr desired-temp: 18&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr ValvePosition: 3 %&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr mode: manu&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr unknown0: 24&lt;br /&gt;
 2013-10-12 12:05:35.610 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC_ClimRT_tr T: 18.4 desired: 18 valve: 3 %&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC battery: ok&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC batteryLevel: 3.1 V&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC measured-temp: 18.4&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC desired-temp: 18&lt;br /&gt;
 2013-10-12 12:05:35.646 CUL_HM CUL_HM_HM_CC_RT_DN_2212BC actuator: 3 %&lt;br /&gt;
&lt;br /&gt;
== Firmware Update ==&lt;br /&gt;
Seit 24.10.2014 gibt es für den HM-CC-RT-DN die neue Firmware Version 1.4. Diese kann von der eQ-3 Webseite heruntergeladen werden. Genauere Informationen gibt es unter [[HomeMatic Firmware Update]].&lt;br /&gt;
&lt;br /&gt;
=== HM-CC-RT-DN spezifische Update Informationen ===&lt;br /&gt;
Durch gleichzeitiges Drücken der &amp;quot;Auto-/Manu&amp;quot;-Taste und der &amp;quot;Comfort-/Eco&amp;quot;-Taste am HM-CC-RT-DN während man die Batterien wieder einlegt wird der updatemodus gestartet. Während des Updates steht &amp;quot;FUP&amp;quot; im Display. Nach erfolgreichem Update erscheint &amp;quot;Ins&amp;quot; im Display und es muss eine erneute Adaptierfahrt durch drücken der Boost-Taste ausgelöst werden. Anschließend sollte der HM-CC-RT-DN wieder normal funktionieren. Die eingestellten Parameter und das Pairing mit FHEM gehen beim Update nicht verloren. Sollte das Update fehlschlagen, erscheint &amp;quot;Err&amp;quot; bzw. &amp;quot;CrC&amp;quot; im Display.&lt;br /&gt;
&lt;br /&gt;
Normalerweise sollte dann durch erneutes starten der Prozedur am PC und HM-CC-RT-DN das ganze erneut durchführbar sein.&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Readings, die nicht durch ein einfaches &#039;&#039;getConfig&#039;&#039; aktualisisert werden, z.B. &amp;quot;battery&amp;quot;(nicht batteryLevel). Um diese Readings zu bekommen, ist ein &lt;br /&gt;
:&amp;lt;code&amp;gt;set Device_Channel04 controlMode auto &amp;lt;/code&amp;gt;&lt;br /&gt;
notwendig. Daraufhin werden die Readings übertragen/aktualisiert.&lt;br /&gt;
&lt;br /&gt;
== Simulation von Fensterkontakten und externen Temperatursensoren ==&lt;br /&gt;
grober Ablauf:&lt;br /&gt;
* erstellen ein virtuelles Device&lt;br /&gt;
* erstelle dazu einen virtuellen Kanal&lt;br /&gt;
* peeren den Kanal mit dem RT (als fenster-kontakt oder als remote, wen du willst)&lt;br /&gt;
* sende ein postEvent&lt;br /&gt;
&lt;br /&gt;
=== Fensterkontakte ===&lt;br /&gt;
&#039;&#039;Entnommen aus diesem {{Link2Forum|Topic=31078|Message=236245|LinkText=Forenbeitrag}}&#039;&#039;&lt;br /&gt;
 define virSC CUL_HM 221133&lt;br /&gt;
 attr virSC autoReadReg 4_reqStatus&lt;br /&gt;
 attr virSC expert 2_full&lt;br /&gt;
 attr virSC model virtual_1&lt;br /&gt;
 attr virSC peerIDs &lt;br /&gt;
 attr virSC subType virtual&lt;br /&gt;
 attr virSC webCmd press short:press long&lt;br /&gt;
 &lt;br /&gt;
 define virtualKitchenDoor CUL_HM 22113301&lt;br /&gt;
 attr virtualKitchenDoor dummy 1&lt;br /&gt;
 attr virtualKitchenDoor expert 1&lt;br /&gt;
 attr virtualKitchenDoor group Virtual&lt;br /&gt;
 attr virtualKitchenDoor model virtual_1&lt;br /&gt;
 attr virtualKitchenDoor webCmd postEvent open:postEvent closed &lt;br /&gt;
&lt;br /&gt;
Anschließend peeren und Temperatur festlegen mit:&lt;br /&gt;
 set virtualKitchenDoor peerChan 0 &amp;lt;Thermostat_Window_Rec&amp;gt; single set&lt;br /&gt;
 set &amp;lt;Thermostat_Window_Rec&amp;gt; regSet winOpnTemp 5 virtualKitchenDoor&lt;br /&gt;
&lt;br /&gt;
Die virtuelle Tür wird dann entsprechend über ein Notify getriggert:&lt;br /&gt;
 define notify_virtualKitchenDoor notify (Fensterkontakt_1|Fensterkontakt_2) {if(Value(&amp;quot;Fensterkontakt&amp;quot;) eq &amp;quot;open&amp;quot; &amp;amp;&amp;amp; Value(&amp;quot;Fensterkontakt_2&amp;quot;) eq &amp;quot;open&amp;quot;){fhem(&amp;quot;set virtualKitchenDoor postEvent open&amp;quot;)}else{fhem(&amp;quot;set virtualKitchenDoor postEvent closed&amp;quot;)}}&lt;br /&gt;
&lt;br /&gt;
=== Temperatursensoren ===&lt;br /&gt;
&#039;&#039;Entnommen aus diesem {{Link2Forum|Topic=19686|Message=233788|LinkText=Forenbeitrag}}&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Virtuelles HomeMatic Device mit _deiner_ HM Id definieren:&lt;br /&gt;
 define wz_vT CUL_HM &amp;lt;hmId&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Dem Device einen virtuellen Kanal (Default ist ein virtueller Button) hinzufügen:&lt;br /&gt;
 set wz_vT virtual 1&lt;br /&gt;
&lt;br /&gt;
3. Es ist kein virtueller Button sondern ein virtueller Temperatursensor - darum rename:&lt;br /&gt;
 rename wz_vT_Btn1 wz_vT_Sensor1&lt;br /&gt;
&lt;br /&gt;
4. Virtuellen Peer Sensor mit dem Weather Channel des RT-DN peeren:&lt;br /&gt;
 set wz_vT_Sensor1 peerChan 0 &amp;lt;RT_DN&amp;gt;_Weather single&lt;br /&gt;
&lt;br /&gt;
5. Peering kontrollieren (Voraussetzung: Device &#039;&#039;hm&#039;&#039; vom Typ [[HomeMatic HMInfo|HMinfo]] existiert):&lt;br /&gt;
:&amp;lt;code&amp;gt;set hm peerXref&amp;lt;/code&amp;gt;&lt;br /&gt;
Beispiel-Ausgabe:&lt;br /&gt;
 peerXref done: &lt;br /&gt;
 x-ref list &lt;br /&gt;
    wz_Thermostat_Weather =&amp;gt; wz_vT_Sensor1 &lt;br /&gt;
    wz_vT_Sensor1 =&amp;gt; wz_Thermostat_Weather&lt;br /&gt;
&lt;br /&gt;
6. Gemessene Temperatur vom z.B. 1-Wire DS1820 dem virtuellen HM Sensor übergeben. Z.B. alle zwei Minuten per at:&lt;br /&gt;
 define at_wz_vT at +*00:02 { my $T=(ReadingsVal(&amp;quot;&amp;lt;DS1820B&amp;gt;&amp;quot;,&amp;quot;temperature&amp;quot;,20.0)); fhem &amp;quot;set wz_vT_Sensor1 virtTemp $T&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
Fertig.&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
=== TempList: Bad format ... ===&lt;br /&gt;
Wenn Sie beim Setzen einer Temperaturliste nach dem o.a. Schema (&amp;quot;SetTempList...&amp;quot;) die Meldung&lt;br /&gt;
&lt;br /&gt;
 Bad format, use HH:MM TEMP ......&lt;br /&gt;
&lt;br /&gt;
erhalten, sollten Sie zunächst ein [[update]] von FHEM durchführen.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.eq-3.de/produkt-detail-aktoren/items/homematic-funk-heizkoerperthermostat.html Produktinfo]&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/downloads_produktkatalog/homematic/bda/HM-CC-RT-DN_UM_GE_eQ-3_web.pdf Bedienungsanleitung (PDF)]&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/downloads_produktkatalog/homematic/pdb/Funk-Heizkoerperthermostat_105155_Produktdatenblatt_V2.3.pdf Datenblatt (PDF)]&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/downloads/Ventilkompatibilitaeten.pdf Ventil-Kompatibilitätsliste (zur Zeit nicht verfügbar)]&lt;br /&gt;
* {{Link2Forum|Topic=14738|LinkText=Forenthema zum Thermostat}}&lt;br /&gt;
* {{Link2Forum|Topic=64446|LinkText=Reparatur einer durch mechanischen Stoß von außen abgerissenen Lichtschranke}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Heizungsventile]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-LGW-O-TW-W-EU_Funk-LAN_Gateway&amp;diff=18752</id>
		<title>HM-LGW-O-TW-W-EU Funk-LAN Gateway</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-LGW-O-TW-W-EU_Funk-LAN_Gateway&amp;diff=18752"/>
		<updated>2017-01-23T07:51:55Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Firmware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-LGW-O-TW-W-EU-2.jpg&lt;br /&gt;
|Bildbeschreibung=HomeMatic Funk-LAN Gateway&lt;br /&gt;
|HWProtocol=HomeMatic&lt;br /&gt;
|HWType=Gateway&lt;br /&gt;
|HWCategory=HomeMatic&lt;br /&gt;
|HWComm=868,3/869,525 MHz&lt;br /&gt;
|HWChannels=n/a&lt;br /&gt;
|HWVoltage=5V&amp;amp;nbsp;DC&lt;br /&gt;
|HWPowerConsumption=0,8W&lt;br /&gt;
|HWPoweredBy=DC-Buchse&lt;br /&gt;
|HWSize=116x150x34mm&lt;br /&gt;
|HWDeviceFHEM=[[HMUARTLGW]]&lt;br /&gt;
|HWManufacturer=ELV / eQ-3 &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das [[HM-LGW-O-TW-W-EU Funk-LAN Gateway|HM-LGW-O-TW-W-EU(-2) Funk-LAN Gateway]] ist ein [[Interface]] zu [[HomeMatic]] Geräten, ähnlich dem [[HM-CFG-LAN LAN Konfigurations-Adapter|LAN Konfigurations-Adapter]]. Die folgende Beschreibung bezieht sich sowohl auf HM-LGW-O-TW-W-EU als auch auf HM-LGW-O-TW-W-EU-2 (wenn nicht anders angegeben).&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
(Noch zu ergänzen)&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
Juni 2016: Beginn der Entwicklung eines FHEM-Moduls (HMUARTLGW) für dieses Interface, beschrieben im Forum unter dem Titel {{Link2Forum|Topic=54511|LinkText=Modul für HomeMatic UART-Modul (RPi) und HomeMatic LAN Gateway}}. Dieses Modul unterstützt gleichzeitig auch das [[HM-MOD-RPI-PCB HomeMatic Funkmodul für Raspberry Pi|Funkmodul für Raspberry Pi]].&lt;br /&gt;
&lt;br /&gt;
Juli 2016: [[HMUARTLGW]] wird über FHEM [[update]] verteilt, damit ist dieses Funkmodul offiziell unterstützt.&lt;br /&gt;
&lt;br /&gt;
=== Definition in FHEM ===&lt;br /&gt;
&lt;br /&gt;
 define meinLGW HMUARTLGW 192.168.42.23&lt;br /&gt;
 attr meinLGW lgwPw LGWPasswort&lt;br /&gt;
 attr meinLGW hmId xxxxxx&lt;br /&gt;
&lt;br /&gt;
=== Verwendung AES in FHEM===&lt;br /&gt;
Das Modul beherrscht von sich aus AES zu den Geräten. Für weitere Informationen zum Thema Verschlüsselung gibt es den Beitrag [[AES Encryption]].&lt;br /&gt;
Soll auch die LAN Kommunikation verschlüsselt ablaufen wird das Modul Crypt::Rijndael benötigt (siehe auch Meldung im Log).&lt;br /&gt;
Die LAN Verschlüsselung kann mit dem Tool Lankonfigurator (netfinder) von eq3 aktiviert oder deaktiviert werden. Im Auslieferungszustand ist sie aktiviert.&lt;br /&gt;
Da das Modul Crypt::Rijndael für die Kommunikation mit den Rauchmeldern SD2 auch benötigt wird, kann man dieses Modul per default installieren.&lt;br /&gt;
&lt;br /&gt;
=== Firmware ===&lt;br /&gt;
&lt;br /&gt;
Es sollte darauf geachtet werden, dass die beiden Firmware-Versionen des Funk-LAN Gateway aktuell sind (aktuell: Applikation: 1.4.1, LAN: 1.1.5). LAN-Firmwareversionen &amp;lt; 1.1.5 haben Stabilitätsprobleme. &lt;br /&gt;
&lt;br /&gt;
Die Applikationsfirmware kann direkt aus Fhem aktualisiert werden, für die Aktualisierung der LAN-Firmware wird entweder der [http://www.eq-3.de/service/downloads.html?id=53 HomeMatic Netfinder] (Java, läuft unter Linux/OSX/Windows, [https://github.com/eq-3/occu/raw/28045df83480122f90ab92f7c6e625f9bf3b61aa/firmware/hm-lgw-o-tw-w-eu_update.eq3 passendes Firmware-Image v. 1.1.5]) oder die eQ-3 Tools unter Linux benötigt. Die eQ-3 Tools liegen nur in 32bit vor, weshalb auf einem x86_64 System (amd64) noch die 32bit Kompatibilitätsbibliotheken &#039;&#039;libc6-i386&#039;&#039; und &#039;&#039;lib32stdc++6&#039;&#039; installiert werden müssen.&lt;br /&gt;
&lt;br /&gt;
Bekannte Probleme: Nachdem die Firmware 1.1.5 über die Software Netfinder geladen wurde, wird das Gateway automatisch neu gestartet. Nach dem Neustart wird im Netfinder eine ältere Version angezeigt (z.B. vorher 1.1.3 nachher 1.1.1). Am Homatic Gateway muss der Netzstecker gezogen und wieder gesteckt werden. Nach dem Neustart wird dann die richtige Version angezeigt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Im folgenden &amp;quot;NEQ0218723&amp;quot; durch die eigene Seriennummer des Funk-LAN Gateway ersetzen und &amp;quot;geheimesLGWPasswort&amp;quot; durch das LGW-Passwort. Falls die Verschlüsselung deaktiviert wurde, dann das -k komplett weglassen.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung des LAN-Firmwareupdates mit den eQ-3 Tools ===&lt;br /&gt;
&lt;br /&gt;
Installation der Kompatibilitätsbibliotheken (nur auf x86_64/amd64 ohne konfiguriertes Multiarch):&lt;br /&gt;
 $ sudo apt-get install libc6-i386 lib32stdc++6&lt;br /&gt;
&lt;br /&gt;
Auschecken und Vorbereitung der eQ-3-Tools:&lt;br /&gt;
 $ git clone https://github.com/eq-3/occu&lt;br /&gt;
 ...&lt;br /&gt;
 $ cd occu&lt;br /&gt;
 $ sudo ln -s $(pwd)/firmware /firmware&lt;br /&gt;
 &lt;br /&gt;
 Auf arm:&lt;br /&gt;
 $ cd arm-gnueabihf/packages-eQ-3/LinuxBasis/bin&lt;br /&gt;
 &lt;br /&gt;
 Auf x86 bzw. x86_64:&lt;br /&gt;
 $ cd X86_32_Debian_Wheezy/packages-eQ-3/LinuxBasis/bin (auf X86/X86_64)&lt;br /&gt;
 &lt;br /&gt;
 Wieder gemeinsam auf allen Plattformen:&lt;br /&gt;
 $ chmod 755 eq3configcmd&lt;br /&gt;
&lt;br /&gt;
=== Update der LAN-Firmware mit den eQ-3 Tools ===&lt;br /&gt;
&lt;br /&gt;
Um das Update durchzuführen, muss man sich im Verzeichnis &#039;&#039;occu/arm-gnueabihf/packages-eQ-3/LinuxBasis/bin&#039;&#039; bzw. &#039;&#039;occu/X86_32_Debian_Wheezy/packages-eQ-3/LinuxBasis/bin&#039;&#039; befinden.&lt;br /&gt;
&lt;br /&gt;
 $ LD_LIBRARY_PATH=../lib:../../RFD/lib ./eq3configcmd update-lgw-firmware -u ../../../../firmware/hm-lgw-o-tw-w-eu_update.eq3  -console -l 1 -s NEQ0218723 -k &#039;geheimesLGWPasswort&#039;&lt;br /&gt;
 2016/07/28 09:25:24.264 &amp;lt;Info&amp;gt; LAN Gateway Firmware Update...&lt;br /&gt;
 &lt;br /&gt;
 2016/07/28 09:25:24.265 &amp;lt;Info&amp;gt; Gateway NEQ0218723&lt;br /&gt;
 2016/07/28 09:25:26.273 &amp;lt;Info&amp;gt; Gateway type is eQ3-HM-LGW-App&lt;br /&gt;
 cryptEnabled true2016/07/28 09:25:33.313 &amp;lt;Info&amp;gt; Updating firmware....&lt;br /&gt;
 &lt;br /&gt;
 2016/07/28 09:25:38.467 &amp;lt;Info&amp;gt; Update performed. Waiting for gateway to get ready.&lt;br /&gt;
&lt;br /&gt;
=== Update der Applikationsfirmware mit Fhem ===&lt;br /&gt;
&lt;br /&gt;
1. Firmware herunterladen&lt;br /&gt;
 a: Verbinden Sie sich auf ihren Raspberry &lt;br /&gt;
    ssh pi@ipadresse&lt;br /&gt;
 b: Wechseln Sie in das Firmware Verzeichnis von Fhem&lt;br /&gt;
    cd /opt/fhem/FHEM/firmware/&lt;br /&gt;
 c: Firmware Downloaden&lt;br /&gt;
    wget https://raw.githubusercontent.com/eq-3/occu/28045df83480122f90ab92f7c6e625f9bf3b61aa/firmware/coprocessor_update_hm_only.eq3&lt;br /&gt;
2. Flashen der neuen Firmware über die Befehlszeile in Fhem&lt;br /&gt;
    set meinLGW updateCoPro /opt/fhem/FHEM/firmware/coprocessor_update_hm_only.eq3&lt;br /&gt;
&lt;br /&gt;
=== Logbeispiel ===&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Das LGW hat (anders als das UART-Modul) keine eigene &#039;&#039;hmId&#039;&#039; (das Reading &#039;&#039;D-HMIdOriginal&#039;&#039; ist auf FFFFFF gesetzt). Es muss also mit&lt;br /&gt;
:&amp;lt;code&amp;gt;attr meinLGW hmId xxxxxx&amp;lt;/code&amp;gt;&lt;br /&gt;
eine nach den in der [http://fhem.de/commandref.html#hmId commandref] definierten Regeln gewählte Id gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=41203|LinkText=Forenthread}} mit Nachfrage zur Unterstützung dieses Geräts in FHEM&lt;br /&gt;
* {{Link2Forum|Topic=54511|LinkText=Modul für HomeMatic UART-Modul (RPi) und HomeMatic LAN Gateway}}&lt;br /&gt;
* [http://www.elv.de/homematic-funk-lan-gateway.html Produktseite] bei ELV&lt;br /&gt;
* {{DocLink|elv|/Assets/Produkte/10/1040/104029/Downloads/104029_lan_gateway_um.pdf Bedienungsanleitung}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-LGW-O-TW-W-EU_Funk-LAN_Gateway&amp;diff=18751</id>
		<title>HM-LGW-O-TW-W-EU Funk-LAN Gateway</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-LGW-O-TW-W-EU_Funk-LAN_Gateway&amp;diff=18751"/>
		<updated>2017-01-23T07:51:28Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Firmware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-LGW-O-TW-W-EU-2.jpg&lt;br /&gt;
|Bildbeschreibung=HomeMatic Funk-LAN Gateway&lt;br /&gt;
|HWProtocol=HomeMatic&lt;br /&gt;
|HWType=Gateway&lt;br /&gt;
|HWCategory=HomeMatic&lt;br /&gt;
|HWComm=868,3/869,525 MHz&lt;br /&gt;
|HWChannels=n/a&lt;br /&gt;
|HWVoltage=5V&amp;amp;nbsp;DC&lt;br /&gt;
|HWPowerConsumption=0,8W&lt;br /&gt;
|HWPoweredBy=DC-Buchse&lt;br /&gt;
|HWSize=116x150x34mm&lt;br /&gt;
|HWDeviceFHEM=[[HMUARTLGW]]&lt;br /&gt;
|HWManufacturer=ELV / eQ-3 &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das [[HM-LGW-O-TW-W-EU Funk-LAN Gateway|HM-LGW-O-TW-W-EU(-2) Funk-LAN Gateway]] ist ein [[Interface]] zu [[HomeMatic]] Geräten, ähnlich dem [[HM-CFG-LAN LAN Konfigurations-Adapter|LAN Konfigurations-Adapter]]. Die folgende Beschreibung bezieht sich sowohl auf HM-LGW-O-TW-W-EU als auch auf HM-LGW-O-TW-W-EU-2 (wenn nicht anders angegeben).&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
(Noch zu ergänzen)&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
Juni 2016: Beginn der Entwicklung eines FHEM-Moduls (HMUARTLGW) für dieses Interface, beschrieben im Forum unter dem Titel {{Link2Forum|Topic=54511|LinkText=Modul für HomeMatic UART-Modul (RPi) und HomeMatic LAN Gateway}}. Dieses Modul unterstützt gleichzeitig auch das [[HM-MOD-RPI-PCB HomeMatic Funkmodul für Raspberry Pi|Funkmodul für Raspberry Pi]].&lt;br /&gt;
&lt;br /&gt;
Juli 2016: [[HMUARTLGW]] wird über FHEM [[update]] verteilt, damit ist dieses Funkmodul offiziell unterstützt.&lt;br /&gt;
&lt;br /&gt;
=== Definition in FHEM ===&lt;br /&gt;
&lt;br /&gt;
 define meinLGW HMUARTLGW 192.168.42.23&lt;br /&gt;
 attr meinLGW lgwPw LGWPasswort&lt;br /&gt;
 attr meinLGW hmId xxxxxx&lt;br /&gt;
&lt;br /&gt;
=== Verwendung AES in FHEM===&lt;br /&gt;
Das Modul beherrscht von sich aus AES zu den Geräten. Für weitere Informationen zum Thema Verschlüsselung gibt es den Beitrag [[AES Encryption]].&lt;br /&gt;
Soll auch die LAN Kommunikation verschlüsselt ablaufen wird das Modul Crypt::Rijndael benötigt (siehe auch Meldung im Log).&lt;br /&gt;
Die LAN Verschlüsselung kann mit dem Tool Lankonfigurator (netfinder) von eq3 aktiviert oder deaktiviert werden. Im Auslieferungszustand ist sie aktiviert.&lt;br /&gt;
Da das Modul Crypt::Rijndael für die Kommunikation mit den Rauchmeldern SD2 auch benötigt wird, kann man dieses Modul per default installieren.&lt;br /&gt;
&lt;br /&gt;
=== Firmware ===&lt;br /&gt;
&lt;br /&gt;
Es sollte darauf geachtet werden, dass die beiden Firmware-Versionen des Funk-LAN Gateway aktuell sind (aktuell: Applikation: 1.4.1, LAN: 1.1.5). LAN-Firmwareversionen &amp;lt; 1.1.5 haben Stabilitätsprobleme. &lt;br /&gt;
&lt;br /&gt;
Die Applikationsfirmware kann direkt aus Fhem aktualisiert werden, für die Aktualisierung der LAN-Firmware wird entweder der [http://www.eq-3.de/service/downloads.html?id=53 HomeMatic Netfinder] (Java, läuft unter Linux/OSX/Windows, [https://github.com/eq-3/occu/raw/28045df83480122f90ab92f7c6e625f9bf3b61aa/firmware/hm-lgw-o-tw-w-eu_update.eq3 passendes Firmware-Image v. 1.1.5]) oder die eQ-3 Tools unter Linux benötigt. Die eQ-3 Tools liegen nur in 32bit vor, weshalb auf einem x86_64 System (amd64) noch die 32bit Kompatibilitätsbibliotheken &#039;&#039;libc6-i386&#039;&#039; und &#039;&#039;lib32stdc++6&#039;&#039; installiert werden müssen.&lt;br /&gt;
Bekannte Probleme: Nachdem die Firmware 1.1.5 über die Software Netfinder geladen wurde, wird das Gateway automatisch neu gestartet. Nach dem Neustart wird im Netfinder eine ältere Version angezeigt (z.B. vorher 1.1.3 nachher 1.1.1). Am Homatic Gateway muss der Netzstecker gezogen und wieder gesteckt werden. Nach dem Neustart wird dann die richtige Version angezeigt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Im folgenden &amp;quot;NEQ0218723&amp;quot; durch die eigene Seriennummer des Funk-LAN Gateway ersetzen und &amp;quot;geheimesLGWPasswort&amp;quot; durch das LGW-Passwort. Falls die Verschlüsselung deaktiviert wurde, dann das -k komplett weglassen.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung des LAN-Firmwareupdates mit den eQ-3 Tools ===&lt;br /&gt;
&lt;br /&gt;
Installation der Kompatibilitätsbibliotheken (nur auf x86_64/amd64 ohne konfiguriertes Multiarch):&lt;br /&gt;
 $ sudo apt-get install libc6-i386 lib32stdc++6&lt;br /&gt;
&lt;br /&gt;
Auschecken und Vorbereitung der eQ-3-Tools:&lt;br /&gt;
 $ git clone https://github.com/eq-3/occu&lt;br /&gt;
 ...&lt;br /&gt;
 $ cd occu&lt;br /&gt;
 $ sudo ln -s $(pwd)/firmware /firmware&lt;br /&gt;
 &lt;br /&gt;
 Auf arm:&lt;br /&gt;
 $ cd arm-gnueabihf/packages-eQ-3/LinuxBasis/bin&lt;br /&gt;
 &lt;br /&gt;
 Auf x86 bzw. x86_64:&lt;br /&gt;
 $ cd X86_32_Debian_Wheezy/packages-eQ-3/LinuxBasis/bin (auf X86/X86_64)&lt;br /&gt;
 &lt;br /&gt;
 Wieder gemeinsam auf allen Plattformen:&lt;br /&gt;
 $ chmod 755 eq3configcmd&lt;br /&gt;
&lt;br /&gt;
=== Update der LAN-Firmware mit den eQ-3 Tools ===&lt;br /&gt;
&lt;br /&gt;
Um das Update durchzuführen, muss man sich im Verzeichnis &#039;&#039;occu/arm-gnueabihf/packages-eQ-3/LinuxBasis/bin&#039;&#039; bzw. &#039;&#039;occu/X86_32_Debian_Wheezy/packages-eQ-3/LinuxBasis/bin&#039;&#039; befinden.&lt;br /&gt;
&lt;br /&gt;
 $ LD_LIBRARY_PATH=../lib:../../RFD/lib ./eq3configcmd update-lgw-firmware -u ../../../../firmware/hm-lgw-o-tw-w-eu_update.eq3  -console -l 1 -s NEQ0218723 -k &#039;geheimesLGWPasswort&#039;&lt;br /&gt;
 2016/07/28 09:25:24.264 &amp;lt;Info&amp;gt; LAN Gateway Firmware Update...&lt;br /&gt;
 &lt;br /&gt;
 2016/07/28 09:25:24.265 &amp;lt;Info&amp;gt; Gateway NEQ0218723&lt;br /&gt;
 2016/07/28 09:25:26.273 &amp;lt;Info&amp;gt; Gateway type is eQ3-HM-LGW-App&lt;br /&gt;
 cryptEnabled true2016/07/28 09:25:33.313 &amp;lt;Info&amp;gt; Updating firmware....&lt;br /&gt;
 &lt;br /&gt;
 2016/07/28 09:25:38.467 &amp;lt;Info&amp;gt; Update performed. Waiting for gateway to get ready.&lt;br /&gt;
&lt;br /&gt;
=== Update der Applikationsfirmware mit Fhem ===&lt;br /&gt;
&lt;br /&gt;
1. Firmware herunterladen&lt;br /&gt;
 a: Verbinden Sie sich auf ihren Raspberry &lt;br /&gt;
    ssh pi@ipadresse&lt;br /&gt;
 b: Wechseln Sie in das Firmware Verzeichnis von Fhem&lt;br /&gt;
    cd /opt/fhem/FHEM/firmware/&lt;br /&gt;
 c: Firmware Downloaden&lt;br /&gt;
    wget https://raw.githubusercontent.com/eq-3/occu/28045df83480122f90ab92f7c6e625f9bf3b61aa/firmware/coprocessor_update_hm_only.eq3&lt;br /&gt;
2. Flashen der neuen Firmware über die Befehlszeile in Fhem&lt;br /&gt;
    set meinLGW updateCoPro /opt/fhem/FHEM/firmware/coprocessor_update_hm_only.eq3&lt;br /&gt;
&lt;br /&gt;
=== Logbeispiel ===&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Das LGW hat (anders als das UART-Modul) keine eigene &#039;&#039;hmId&#039;&#039; (das Reading &#039;&#039;D-HMIdOriginal&#039;&#039; ist auf FFFFFF gesetzt). Es muss also mit&lt;br /&gt;
:&amp;lt;code&amp;gt;attr meinLGW hmId xxxxxx&amp;lt;/code&amp;gt;&lt;br /&gt;
eine nach den in der [http://fhem.de/commandref.html#hmId commandref] definierten Regeln gewählte Id gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=41203|LinkText=Forenthread}} mit Nachfrage zur Unterstützung dieses Geräts in FHEM&lt;br /&gt;
* {{Link2Forum|Topic=54511|LinkText=Modul für HomeMatic UART-Modul (RPi) und HomeMatic LAN Gateway}}&lt;br /&gt;
* [http://www.elv.de/homematic-funk-lan-gateway.html Produktseite] bei ELV&lt;br /&gt;
* {{DocLink|elv|/Assets/Produkte/10/1040/104029/Downloads/104029_lan_gateway_um.pdf Bedienungsanleitung}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-LGW-O-TW-W-EU_Funk-LAN_Gateway&amp;diff=18574</id>
		<title>HM-LGW-O-TW-W-EU Funk-LAN Gateway</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-LGW-O-TW-W-EU_Funk-LAN_Gateway&amp;diff=18574"/>
		<updated>2017-01-18T18:42:20Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-LGW-O-TW-W-EU-2.jpg&lt;br /&gt;
|Bildbeschreibung=HomeMatic Funk-LAN Gateway&lt;br /&gt;
|HWProtocol=HomeMatic&lt;br /&gt;
|HWType=Gateway&lt;br /&gt;
|HWCategory=HomeMatic&lt;br /&gt;
|HWComm=868,3/869,525 MHz&lt;br /&gt;
|HWChannels=n/a&lt;br /&gt;
|HWVoltage=5V&amp;amp;nbsp;DC&lt;br /&gt;
|HWPowerConsumption=0,8W&lt;br /&gt;
|HWPoweredBy=DC-Buchse&lt;br /&gt;
|HWSize=116x150x34mm&lt;br /&gt;
|HWDeviceFHEM=[[HMUARTLGW]]&lt;br /&gt;
|HWManufacturer=ELV / eQ-3 &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das [[HM-LGW-O-TW-W-EU Funk-LAN Gateway|HM-LGW-O-TW-W-EU(-2) Funk-LAN Gateway]] ist ein [[Interface]] zu [[HomeMatic]] Geräten, ähnlich dem [[HM-CFG-LAN LAN Konfigurations-Adapter|LAN Konfigurations-Adapter]]. Die folgende Beschreibung bezieht sich sowohl auf HM-LGW-O-TW-W-EU als auch auf HM-LGW-O-TW-W-EU-2 (wenn nicht anders angegeben).&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
(Noch zu ergänzen)&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
Juni 2016: Beginn der Entwicklung eines FHEM-Moduls (HMUARTLGW) für dieses Interface, beschrieben im Forum unter dem Titel {{Link2Forum|Topic=54511|LinkText=Modul für HomeMatic UART-Modul (RPi) und HomeMatic LAN Gateway}}. Dieses Modul unterstützt gleichzeitig auch das [[HM-MOD-RPI-PCB HomeMatic Funkmodul für Raspberry Pi|Funkmodul für Raspberry Pi]].&lt;br /&gt;
&lt;br /&gt;
Juli 2016: [[HMUARTLGW]] wird über FHEM [[update]] verteilt, damit ist dieses Funkmodul offiziell unterstützt.&lt;br /&gt;
&lt;br /&gt;
=== Definition in FHEM ===&lt;br /&gt;
&lt;br /&gt;
 define meinLGW HMUARTLGW 192.168.42.23&lt;br /&gt;
 attr meinLGW lgwPw LGWPasswort&lt;br /&gt;
 attr meinLGW hmId xxxxxx&lt;br /&gt;
&lt;br /&gt;
=== Verwendung AES in FHEM===&lt;br /&gt;
Das Modul beherrscht von sich aus AES zu den Geräten. Für weitere Informationen zum Thema Verschlüsselung gibt es den Beitrag [[AES Encryption]].&lt;br /&gt;
Soll auch die LAN Kommunikation verschlüsselt ablaufen wird das Modul Crypt::Rijndael benötigt (siehe auch Meldung im Log).&lt;br /&gt;
Die LAN Verschlüsselung kann mit dem Tool Lankonfigurator (netfinder) von eq3 aktiviert oder deaktiviert werden. Im Auslieferungszustand ist sie aktiviert.&lt;br /&gt;
Da das Modul Crypt::Rijndael für die Kommunikation mit den Rauchmeldern SD2 auch benötigt wird, kann man dieses Modul per default installieren.&lt;br /&gt;
&lt;br /&gt;
=== Firmware ===&lt;br /&gt;
&lt;br /&gt;
Es sollte darauf geachtet werden, dass die beiden Firmware-Versionen des Funk-LAN Gateway aktuell sind (aktuell: Applikation: 1.4.1, LAN: 1.1.5). LAN-Firmwareversionen &amp;lt; 1.1.5 haben Stabilitätsprobleme. &lt;br /&gt;
&lt;br /&gt;
Die Applikationsfirmware kann direkt aus Fhem aktualisiert werden, für die Aktualisierung der LAN-Firmware wird entweder der [http://www.eq-3.de/service/downloads.html?id=53 HomeMatic Netfinder] (Java, läuft unter Linux/OSX/Windows, [https://github.com/eq-3/occu/raw/28045df83480122f90ab92f7c6e625f9bf3b61aa/firmware/hm-lgw-o-tw-w-eu_update.eq3 passendes Firmware-Image v. 1.1.5]) oder die eQ-3 Tools unter Linux benötigt. Die eQ-3 Tools liegen nur in 32bit vor, weshalb auf einem x86_64 System (amd64) noch die 32bit Kompatibilitätsbibliotheken &#039;&#039;libc6-i386&#039;&#039; und &#039;&#039;lib32stdc++6&#039;&#039; installiert werden müssen.&lt;br /&gt;
&lt;br /&gt;
(Im folgenden &amp;quot;NEQ0218723&amp;quot; durch die eigene Seriennummer des Funk-LAN Gateway ersetzen und &amp;quot;geheimesLGWPasswort&amp;quot; durch das LGW-Passwort. Falls die Verschlüsselung deaktiviert wurde, dann das -k komplett weglassen.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung des LAN-Firmwareupdates mit den eQ-3 Tools ===&lt;br /&gt;
&lt;br /&gt;
Installation der Kompatibilitätsbibliotheken (nur auf x86_64/amd64 ohne konfiguriertes Multiarch):&lt;br /&gt;
 $ sudo apt-get install libc6-i386 lib32stdc++6&lt;br /&gt;
&lt;br /&gt;
Auschecken und Vorbereitung der eQ-3-Tools:&lt;br /&gt;
 $ git clone https://github.com/eq-3/occu&lt;br /&gt;
 ...&lt;br /&gt;
 $ cd occu&lt;br /&gt;
 $ sudo ln -s $(pwd)/firmware /firmware&lt;br /&gt;
 &lt;br /&gt;
 Auf arm:&lt;br /&gt;
 $ cd arm-gnueabihf/packages-eQ-3/LinuxBasis/bin&lt;br /&gt;
 &lt;br /&gt;
 Auf x86 bzw. x86_64:&lt;br /&gt;
 $ cd X86_32_Debian_Wheezy/packages-eQ-3/LinuxBasis/bin (auf X86/X86_64)&lt;br /&gt;
 &lt;br /&gt;
 Wieder gemeinsam auf allen Plattformen:&lt;br /&gt;
 $ chmod 755 eq3configcmd&lt;br /&gt;
&lt;br /&gt;
=== Update der LAN-Firmware mit den eQ-3 Tools ===&lt;br /&gt;
&lt;br /&gt;
Um das Update durchzuführen, muss man sich im Verzeichnis &#039;&#039;occu/arm-gnueabihf/packages-eQ-3/LinuxBasis/bin&#039;&#039; bzw. &#039;&#039;occu/X86_32_Debian_Wheezy/packages-eQ-3/LinuxBasis/bin&#039;&#039; befinden.&lt;br /&gt;
&lt;br /&gt;
 $ LD_LIBRARY_PATH=../lib:../../RFD/lib ./eq3configcmd update-lgw-firmware -u ../../../../firmware/hm-lgw-o-tw-w-eu_update.eq3  -console -l 1 -s NEQ0218723 -k &#039;geheimesLGWPasswort&#039;&lt;br /&gt;
 2016/07/28 09:25:24.264 &amp;lt;Info&amp;gt; LAN Gateway Firmware Update...&lt;br /&gt;
 &lt;br /&gt;
 2016/07/28 09:25:24.265 &amp;lt;Info&amp;gt; Gateway NEQ0218723&lt;br /&gt;
 2016/07/28 09:25:26.273 &amp;lt;Info&amp;gt; Gateway type is eQ3-HM-LGW-App&lt;br /&gt;
 cryptEnabled true2016/07/28 09:25:33.313 &amp;lt;Info&amp;gt; Updating firmware....&lt;br /&gt;
 &lt;br /&gt;
 2016/07/28 09:25:38.467 &amp;lt;Info&amp;gt; Update performed. Waiting for gateway to get ready.&lt;br /&gt;
&lt;br /&gt;
=== Update der Applikationsfirmware mit Fhem ===&lt;br /&gt;
&lt;br /&gt;
1. Firmware herunterladen&lt;br /&gt;
 a: Verbinden Sie sich auf ihren Raspberry &lt;br /&gt;
    ssh pi@ipadresse&lt;br /&gt;
 b: Wechseln Sie in das Firmware Verzeichnis von Fhem&lt;br /&gt;
    cd /opt/fhem/FHEM/firmware/&lt;br /&gt;
 c: Firmware Downloaden&lt;br /&gt;
    wget https://raw.githubusercontent.com/eq-3/occu/28045df83480122f90ab92f7c6e625f9bf3b61aa/firmware/coprocessor_update_hm_only.eq3&lt;br /&gt;
2. Flashen der neuen Firmware über die Befehlszeile in Fhem&lt;br /&gt;
    set meinLGW updateCoPro /opt/fhem/FHEM/firmware/coprocessor_update_hm_only.eq3&lt;br /&gt;
&lt;br /&gt;
=== Logbeispiel ===&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Das LGW hat (anders als das UART-Modul) keine eigene &#039;&#039;hmId&#039;&#039; (das Reading &#039;&#039;D-HMIdOriginal&#039;&#039; ist auf FFFFFF gesetzt). Es muss also mit&lt;br /&gt;
:&amp;lt;code&amp;gt;attr meinLGW hmId xxxxxx&amp;lt;/code&amp;gt;&lt;br /&gt;
eine nach den in der [http://fhem.de/commandref.html#hmId commandref] definierten Regeln gewählte Id gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=41203|LinkText=Forenthread}} mit Nachfrage zur Unterstützung dieses Geräts in FHEM&lt;br /&gt;
* {{Link2Forum|Topic=54511|LinkText=Modul für HomeMatic UART-Modul (RPi) und HomeMatic LAN Gateway}}&lt;br /&gt;
* [http://www.elv.de/homematic-funk-lan-gateway.html Produktseite] bei ELV&lt;br /&gt;
* {{DocLink|elv|/Assets/Produkte/10/1040/104029/Downloads/104029_lan_gateway_um.pdf Bedienungsanleitung}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-LGW-O-TW-W-EU_Funk-LAN_Gateway&amp;diff=18573</id>
		<title>HM-LGW-O-TW-W-EU Funk-LAN Gateway</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-LGW-O-TW-W-EU_Funk-LAN_Gateway&amp;diff=18573"/>
		<updated>2017-01-18T18:40:27Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: Firmware herunterladen für Fhem detaillierter beschrieben&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-LGW-O-TW-W-EU-2.jpg&lt;br /&gt;
|Bildbeschreibung=HomeMatic Funk-LAN Gateway&lt;br /&gt;
|HWProtocol=HomeMatic&lt;br /&gt;
|HWType=Gateway&lt;br /&gt;
|HWCategory=HomeMatic&lt;br /&gt;
|HWComm=868,3/869,525 MHz&lt;br /&gt;
|HWChannels=n/a&lt;br /&gt;
|HWVoltage=5V&amp;amp;nbsp;DC&lt;br /&gt;
|HWPowerConsumption=0,8W&lt;br /&gt;
|HWPoweredBy=DC-Buchse&lt;br /&gt;
|HWSize=116x150x34mm&lt;br /&gt;
|HWDeviceFHEM=[[HMUARTLGW]]&lt;br /&gt;
|HWManufacturer=ELV / eQ-3 &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das [[HM-LGW-O-TW-W-EU Funk-LAN Gateway|HM-LGW-O-TW-W-EU(-2) Funk-LAN Gateway]] ist ein [[Interface]] zu [[HomeMatic]] Geräten, ähnlich dem [[HM-CFG-LAN LAN Konfigurations-Adapter|LAN Konfigurations-Adapter]]. Die folgende Beschreibung bezieht sich sowohl auf HM-LGW-O-TW-W-EU als auch auf HM-LGW-O-TW-W-EU-2 (wenn nicht anders angegeben).&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
(Noch zu ergänzen)&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
Juni 2016: Beginn der Entwicklung eines FHEM-Moduls (HMUARTLGW) für dieses Interface, beschrieben im Forum unter dem Titel {{Link2Forum|Topic=54511|LinkText=Modul für HomeMatic UART-Modul (RPi) und HomeMatic LAN Gateway}}. Dieses Modul unterstützt gleichzeitig auch das [[HM-MOD-RPI-PCB HomeMatic Funkmodul für Raspberry Pi|Funkmodul für Raspberry Pi]].&lt;br /&gt;
&lt;br /&gt;
Juli 2016: [[HMUARTLGW]] wird über FHEM [[update]] verteilt, damit ist dieses Funkmodul offiziell unterstützt.&lt;br /&gt;
&lt;br /&gt;
=== Definition in FHEM ===&lt;br /&gt;
&lt;br /&gt;
 define meinLGW HMUARTLGW 192.168.42.23&lt;br /&gt;
 attr meinLGW lgwPw LGWPasswort&lt;br /&gt;
 attr meinLGW hmId xxxxxx&lt;br /&gt;
&lt;br /&gt;
=== Verwendung AES in FHEM===&lt;br /&gt;
Das Modul beherrscht von sich aus AES zu den Geräten. Für weitere Informationen zum Thema Verschlüsselung gibt es den Beitrag [[AES Encryption]].&lt;br /&gt;
Soll auch die LAN Kommunikation verschlüsselt ablaufen wird das Modul Crypt::Rijndael benötigt (siehe auch Meldung im Log).&lt;br /&gt;
Die LAN Verschlüsselung kann mit dem Tool Lankonfigurator (netfinder) von eq3 aktiviert oder deaktiviert werden. Im Auslieferungszustand ist sie aktiviert.&lt;br /&gt;
Da das Modul Crypt::Rijndael für die Kommunikation mit den Rauchmeldern SD2 auch benötigt wird, kann man dieses Modul per default installieren.&lt;br /&gt;
&lt;br /&gt;
=== Firmware ===&lt;br /&gt;
&lt;br /&gt;
Es sollte darauf geachtet werden, dass die beiden Firmware-Versionen des Funk-LAN Gateway aktuell sind (aktuell: Applikation: 1.4.1, LAN: 1.1.5). LAN-Firmwareversionen &amp;lt; 1.1.5 haben Stabilitätsprobleme. &lt;br /&gt;
&lt;br /&gt;
Die Applikationsfirmware kann direkt aus Fhem aktualisiert werden, für die Aktualisierung der LAN-Firmware wird entweder der [http://www.eq-3.de/service/downloads.html?id=53 HomeMatic Netfinder] (Java, läuft unter Linux/OSX/Windows, [https://github.com/eq-3/occu/raw/28045df83480122f90ab92f7c6e625f9bf3b61aa/firmware/hm-lgw-o-tw-w-eu_update.eq3 passendes Firmware-Image v. 1.1.5]) oder die eQ-3 Tools unter Linux benötigt. Die eQ-3 Tools liegen nur in 32bit vor, weshalb auf einem x86_64 System (amd64) noch die 32bit Kompatibilitätsbibliotheken &#039;&#039;libc6-i386&#039;&#039; und &#039;&#039;lib32stdc++6&#039;&#039; installiert werden müssen.&lt;br /&gt;
&lt;br /&gt;
(Im folgenden &amp;quot;NEQ0218723&amp;quot; durch die eigene Seriennummer des Funk-LAN Gateway ersetzen und &amp;quot;geheimesLGWPasswort&amp;quot; durch das LGW-Passwort. Falls die Verschlüsselung deaktiviert wurde, dann das -k komplett weglassen.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung des LAN-Firmwareupdates mit den eQ-3 Tools ===&lt;br /&gt;
&lt;br /&gt;
Installation der Kompatibilitätsbibliotheken (nur auf x86_64/amd64 ohne konfiguriertes Multiarch):&lt;br /&gt;
 $ sudo apt-get install libc6-i386 lib32stdc++6&lt;br /&gt;
&lt;br /&gt;
Auschecken und Vorbereitung der eQ-3-Tools:&lt;br /&gt;
 $ git clone https://github.com/eq-3/occu&lt;br /&gt;
 ...&lt;br /&gt;
 $ cd occu&lt;br /&gt;
 $ sudo ln -s $(pwd)/firmware /firmware&lt;br /&gt;
 &lt;br /&gt;
 Auf arm:&lt;br /&gt;
 $ cd arm-gnueabihf/packages-eQ-3/LinuxBasis/bin&lt;br /&gt;
 &lt;br /&gt;
 Auf x86 bzw. x86_64:&lt;br /&gt;
 $ cd X86_32_Debian_Wheezy/packages-eQ-3/LinuxBasis/bin (auf X86/X86_64)&lt;br /&gt;
 &lt;br /&gt;
 Wieder gemeinsam auf allen Plattformen:&lt;br /&gt;
 $ chmod 755 eq3configcmd&lt;br /&gt;
&lt;br /&gt;
=== Update der LAN-Firmware mit den eQ-3 Tools ===&lt;br /&gt;
&lt;br /&gt;
Um das Update durchzuführen, muss man sich im Verzeichnis &#039;&#039;occu/arm-gnueabihf/packages-eQ-3/LinuxBasis/bin&#039;&#039; bzw. &#039;&#039;occu/X86_32_Debian_Wheezy/packages-eQ-3/LinuxBasis/bin&#039;&#039; befinden.&lt;br /&gt;
&lt;br /&gt;
 $ LD_LIBRARY_PATH=../lib:../../RFD/lib ./eq3configcmd update-lgw-firmware -u ../../../../firmware/hm-lgw-o-tw-w-eu_update.eq3  -console -l 1 -s NEQ0218723 -k &#039;geheimesLGWPasswort&#039;&lt;br /&gt;
 2016/07/28 09:25:24.264 &amp;lt;Info&amp;gt; LAN Gateway Firmware Update...&lt;br /&gt;
 &lt;br /&gt;
 2016/07/28 09:25:24.265 &amp;lt;Info&amp;gt; Gateway NEQ0218723&lt;br /&gt;
 2016/07/28 09:25:26.273 &amp;lt;Info&amp;gt; Gateway type is eQ3-HM-LGW-App&lt;br /&gt;
 cryptEnabled true2016/07/28 09:25:33.313 &amp;lt;Info&amp;gt; Updating firmware....&lt;br /&gt;
 &lt;br /&gt;
 2016/07/28 09:25:38.467 &amp;lt;Info&amp;gt; Update performed. Waiting for gateway to get ready.&lt;br /&gt;
&lt;br /&gt;
=== Update der Applikationsfirmware mit Fhem ===&lt;br /&gt;
&lt;br /&gt;
1. Firmware herunterladen&lt;br /&gt;
 a: Verbinden Sie sich auf ihren Raspberry und wechseln Sie in das Firmware Verzeichnis von Fhem&lt;br /&gt;
    cd /opt/fhem/FHEM/firmware/&lt;br /&gt;
 b: Firmware Downloaden&lt;br /&gt;
    wget https://raw.githubusercontent.com/eq-3/occu/28045df83480122f90ab92f7c6e625f9bf3b61aa/firmware/coprocessor_update_hm_only.eq3&lt;br /&gt;
2. Flashen der neuen Firmware über die Befehlszeile in Fhem&lt;br /&gt;
    set meinLGW updateCoPro /opt/fhem/FHEM/firmware/coprocessor_update_hm_only.eq3&lt;br /&gt;
&lt;br /&gt;
=== Logbeispiel ===&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Das LGW hat (anders als das UART-Modul) keine eigene &#039;&#039;hmId&#039;&#039; (das Reading &#039;&#039;D-HMIdOriginal&#039;&#039; ist auf FFFFFF gesetzt). Es muss also mit&lt;br /&gt;
:&amp;lt;code&amp;gt;attr meinLGW hmId xxxxxx&amp;lt;/code&amp;gt;&lt;br /&gt;
eine nach den in der [http://fhem.de/commandref.html#hmId commandref] definierten Regeln gewählte Id gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=41203|LinkText=Forenthread}} mit Nachfrage zur Unterstützung dieses Geräts in FHEM&lt;br /&gt;
* {{Link2Forum|Topic=54511|LinkText=Modul für HomeMatic UART-Modul (RPi) und HomeMatic LAN Gateway}}&lt;br /&gt;
* [http://www.elv.de/homematic-funk-lan-gateway.html Produktseite] bei ELV&lt;br /&gt;
* {{DocLink|elv|/Assets/Produkte/10/1040/104029/Downloads/104029_lan_gateway_um.pdf Bedienungsanleitung}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHEM_Tablet_UI&amp;diff=17903</id>
		<title>FHEM Tablet UI</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FHEM_Tablet_UI&amp;diff=17903"/>
		<updated>2016-12-19T21:36:00Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: data-type=&amp;quot;thermostat&amp;quot; für HomeMatic um ValvePosition erweitert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Oberfläche für Fhem&lt;br /&gt;
|ModType=x&lt;br /&gt;
|ModFTopic=34233&lt;br /&gt;
|ModForumArea=Frontends&lt;br /&gt;
|ModTechName=n.a.&lt;br /&gt;
|ModOwner=setstate ({{Link2FU|7023|Forum}})&lt;br /&gt;
}}&lt;br /&gt;
[[Datei:tablet_ui.png|200px|thumb|right|Fhem Tablet UI]]&lt;br /&gt;
FHEM Tablet UI ist ein leichtgewichtiges aber funktionsreiches Framework zum Steuern und Überwachen von in Fhem integrierten Geräten. Zahlreiche Widgets können sehr flexibel und leicht per HTML Code konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
In dieser Anleitung wird die Installation und Konfiguration des FHEM Tablet UI beschrieben.&lt;br /&gt;
&lt;br /&gt;
{{Todo|alle Widgets hier übernehmen, Übersetzung, weitere Beispiele aus dem Forum einfügen (evtl. mit Link!?)}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Das User Interface hat sehr wenige Anforderungen für den Betrieb. Es benötigt &amp;lt;u&amp;gt;keine&amp;lt;/u&amp;gt; zusätzliche Frameworks, wie z.B. PHP oder MySQL.&lt;br /&gt;
&lt;br /&gt;
Voraussetzungen ist eine Fhem Installation mit HTTPSRV Modul. Das UI kann mit den gängigen Browsern Betriebssystem unabhängig genutzt werden oder mit dem Webviewcontrol.&lt;br /&gt;
Das Interface wird dabei in dem FHEM eigenen Webserver ausgeführt. Mit wenigen Anpassungen ist es auch möglich das UI auf anderen Webservern (Apache, u.a.) zu betreiben, dann kann FHEM und UI auch auf getrennten Systemen ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Im Befehls-Eingabefeld eingeben: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;update all https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* Im Befehls-Eingabefeld eingeben: &amp;lt;code&amp;gt;define TABLETUI HTTPSRV ftui/ ./www/tablet Tablet-UI&amp;lt;/code&amp;gt;&lt;br /&gt;
* Im Verzeichnis ./fhem/www/tablet die Datei index-example.html in index.html umbenennen oder eine neue index.html erzeugen und diese index.html wie nachfolgend beschrieben editieren.&lt;br /&gt;
&lt;br /&gt;
Das UI ist über den Link &amp;quot;Tablet-UI&amp;quot; auf der Fhem-Hauptseite oder durch Direktaufruf der URL &amp;quot;&amp;lt;nowiki&amp;gt;http://&amp;lt;Fhem-url&amp;gt;:8083/fhem/tablet/index.html&amp;lt;/nowiki&amp;gt;&amp;quot; zu erreichen.&lt;br /&gt;
&lt;br /&gt;
Hinweise zu einer manuellen Installation und weitere Infos sind auf der Projektseite https://github.com/knowthelist/fhem-tablet-ui zu finden.&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
* Prüfen der Änderungen seit dem letzten Download/Update durch Eingabe von: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;update check https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* Update des UI durch Eingabe von: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;update all https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;update add https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
kann seit dem 24.12.2015 die URL zum normalen Updatebefehl von FHEM hinzugefügt werden. Mit einen &amp;quot;update check&amp;quot; sieht man dann  gleich alle Updates aus beiden &amp;quot;Welten&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Weitere Widgets ==&lt;br /&gt;
&lt;br /&gt;
=== Widgets for Fhem-tablet-ui ===&lt;br /&gt;
Zusätzlich zu den bei der Installation des Tablet UI direkt zur Verfügung stehenden Widgets, gibt es eine weitere Widget-Quelle von nesges unter https://github.com/nesges/Widgets-for-fhem-tablet-ui. Die Widgets aus dieser Quelle müssen für eine Nutzung separat installiert werden.&lt;br /&gt;
&lt;br /&gt;
Dazu folgenden Befehl in die Fhem-Befehlszeile eingeben: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;update all https://raw.githubusercontent.com/nesges/Widgets-for-fhem-tablet-ui/master/controls_widgets-for-fhem-tablet-ui.txt&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Näheres zur Installation unter [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/Installation Wiki: Installation]. &lt;br /&gt;
&lt;br /&gt;
Die Dokumentation der einzelnen Widgets befindet sich ebenfalls [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki im Github-Wiki].&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
&#039;&#039;&#039;META-Parameter&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das Tablet UI lässt sich über die META-Parameter konfigurieren. Mit den meisten META-Parametern kann das verhalten des UI beeinflusst werden. Diese Parameter befinden sich in der jeweiligen &#039;&#039;&#039;.html&#039;&#039;&#039; Datei (z.B. index.html) im Abschnitt &#039;&#039;&#039;&amp;lt;head&amp;gt;&#039;&#039;&#039;. Nachfolgend sind die verschiedenen Konfigurationsparameter aufgeführt. Die Parameter sind immer gleich aufgebaut.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;meta name=&amp;quot;&amp;lt;META-Parameter&amp;gt;&amp;quot; content=&amp;quot;&amp;lt;Wert&amp;gt;&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! META-Parameter                                !! Wert / Beispiel                       !! Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| longpoll                     || 1 oder 0 || Refresh sofort, alle 15 Minuten ein voller Refresh (shortpoll) statt alle 30 Sekunden ein voller Refresh.&lt;br /&gt;
|-&lt;br /&gt;
| gridster_disable             || 1 oder 0 || Drag&amp;amp;Drop der Gridster-Elemente auf der Seite deaktivieren.&lt;br /&gt;
|-&lt;br /&gt;
| toast                        || 1 oder 0 || Toast messages deaktivieren&lt;br /&gt;
|-&lt;br /&gt;
| fhemweb_url       || http://meinFhemServer:8083/fhem || Wird benötigt wenn der Webserver des TabletUI nicht auf dem FHEM Server läuft.&lt;br /&gt;
|-&lt;br /&gt;
| widget_margin                      || 1 bis 9999 || Abstände der Gridsterelemente verändern.&lt;br /&gt;
|-&lt;br /&gt;
| widget_base_width                      || 1 bis 9999 || Größe des Basis-Rasters (data-sizey=1/data-sizex=1) verändern.&lt;br /&gt;
|-&lt;br /&gt;
| widget_base_height                      || 1 bis 9999 || Größe des Basis-Rasters (data-sizey=1/data-sizex=1) verändern.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CSS-Styles&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das Layout und das Aussehen des UI kann durch diverse vorgegebene CSS-Klassen beeinflusst werden. Die verfügbaren Klassen sind im Abschnitt [[#CSS Class description|CSS Class description]] oder [[#Positioning|Positioning]] aufgeführt. Es besteht auch die Möglichkeit eine eigene CSS Datei zu erstellen und darüber Änderungen am aussehen des UI vorzunehmen. Die eigenen CSS Datei würde bei einem Update unverändert bleiben. Daher ist abzuraten ein CSS Datei die mit dem UI Update verteilt wird zu modifizieren. Die eigene CSS Datei ist unter &#039;&#039;&#039;/fhem/tablet/css&#039;&#039;&#039; mit dem Namen &#039;&#039;&#039;fhem-tablet-ui-user.css&#039;&#039;&#039; zu finden. Sollte diese nicht vorhanden sein kann die Datei manuell erstellt werden.&lt;br /&gt;
Wird keine eigene CSS-Datei verwendet empfiehlt es sich den folgenden Eintrag im &amp;lt;head&amp;gt; der jeweiligen .html Datei zu entfernen, bzw. in Kommentar gesetzt werden um Probleme beim Laden der Seite zu verhindern.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;/fhem/tablet/css/fhem-tablet-ui-user.css&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbe ==&lt;br /&gt;
Es besteht die Möglichkeit, die Farbwerte in hexadezimaler Form oder als RGB-Wert anzugeben. Zum Beispiel: Hex: #A3CFA3 RBG: rgb(163, 207, 163).&lt;br /&gt;
&lt;br /&gt;
Knallige Farben wie #ff0000 für Rot oder #00ff00 für Grün sollten vermieden werden. Es ist besser unterhalb von #D0 (208) für die Grundfarben zu bleiben.&lt;br /&gt;
&lt;br /&gt;
Hilfreich bei der Suche nach den Farbwerten ist der color picker: http://www.w3schools.com/tags/ref_colorpicker.asp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CSS Class description ==&lt;br /&gt;
&lt;br /&gt;
Not all widgets support all classes&lt;br /&gt;
&lt;br /&gt;
* readonly : changing of state is not allowed&lt;br /&gt;
* wider : 25px extra space for the widget to the top&lt;br /&gt;
* narrow : shorter distant to the widget above&lt;br /&gt;
* w1x, w2x, w3x : set the widget to a fix width: 1x, 2x, 3x width&lt;br /&gt;
* mini : lowest diameter for volume widget&lt;br /&gt;
* small : font 80% size (label), small diameter for volume widget&lt;br /&gt;
* medium : font 120% size&lt;br /&gt;
* large : font 150% size&lt;br /&gt;
* big : font 200% size&lt;br /&gt;
* bigplus : font 270% size&lt;br /&gt;
* bigger : font 320% size&lt;br /&gt;
* bigger.thin : font 450% size&lt;br /&gt;
* grande : font 600% size&lt;br /&gt;
* gigantic: font 144px size + 120px line-height&lt;br /&gt;
* thin : font thin&lt;br /&gt;
* darker : forecolor in gray&lt;br /&gt;
* hue-tick : draw ticks in color range&lt;br /&gt;
* hue-front : draw handle in color range&lt;br /&gt;
* hue-back : draw background in color range&lt;br /&gt;
* dim-tick : draw ticks in brightness range&lt;br /&gt;
* dim-front : draw handle in brightness range&lt;br /&gt;
* dim-back : draw background in brightness range&lt;br /&gt;
* red : foreground color red&lt;br /&gt;
* green : foreground color green&lt;br /&gt;
* blue : foreground color blue&lt;br /&gt;
* doublebox-v : container to place 2 small widgets (e.g. switch) one above the other&lt;br /&gt;
* doublebox-h : container to place 2 small widgets (e.g. switch) side by side&lt;br /&gt;
* timestamp : deliver the date time for the reading instead the value&lt;br /&gt;
* inline : positioning elements in a row, no line break&lt;br /&gt;
* top-space : 15px extra on top (top-space-2x -&amp;gt; 30px; top-space-3x -&amp;gt; 45px)&lt;br /&gt;
* left-space : 15px extra on left (left-space-2x -&amp;gt; 30px; left-space-3x -&amp;gt; 45px)&lt;br /&gt;
* right-space : 15px extra on right (right-space-2x -&amp;gt; 30px; right-space-3x -&amp;gt; 45px)&lt;br /&gt;
* blink : blink animatation for label or symbol widget&lt;br /&gt;
* verticalLine : Vertikale Line am rechten Rand&lt;br /&gt;
&lt;br /&gt;
== Positioning ==&lt;br /&gt;
&lt;br /&gt;
*container : new box or new row&lt;br /&gt;
*col-x-y : new column with x/y of width (col-1-3,col-2-3,col-1-2,col-1-4,col-1-8,col-1-5,col-2-5,col-3-5,col-4-5)&lt;br /&gt;
*inline : positioning elements in a row, no line break&lt;br /&gt;
*top-space : 15px extra on top (top-space-2x -&amp;gt; 30px; top-space-3x -&amp;gt; 45px)&lt;br /&gt;
*left-space : 15px extra on left (left-space-2x -&amp;gt; 30px; left-space-3x -&amp;gt; 45px)&lt;br /&gt;
*right-space : 15px extra on right (right-space-2x -&amp;gt; 30px; right-space-3x -&amp;gt; 45px)&lt;br /&gt;
*top-narrow : -15px closer on top (top-narrow-2x -&amp;gt; -30px; top-narrow-10 -&amp;gt; -10px)&lt;br /&gt;
*centered : horizontal centered&lt;br /&gt;
*left-align : align text left&lt;br /&gt;
*left : floating left&lt;br /&gt;
*right-align : align text right&lt;br /&gt;
*right : floating right&lt;br /&gt;
*wider : 15px extra space for the widget all around&lt;br /&gt;
*narrow : shorter distant to the widget above&lt;br /&gt;
*fullsize : 100% in width and height&lt;br /&gt;
&lt;br /&gt;
== Widgets -- Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Teilweise dokumentierte Widgets:&lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/button button]: Variante der push und switch Widgets, die entweder einen URL ansteuern oder einen Fhem-Befehl absetzen kann.&lt;br /&gt;
* [[#chart|chart]]: chart with similar capabilities as the FHEM plots &lt;br /&gt;
* checkbox:&lt;br /&gt;
* [[#circlemenu|circlemenu]]: Mehrere Widgets hinter einem Widget verborgen, trotz des &#039;circle&#039; im Namen kann das Menue jetzt auch horizontal oder vertikal ausgeklappt werden &lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/clicksound clicksound]: Mit dem Widget &amp;quot;clicksound&amp;quot; können Sounds an Click-Events von Elementen gebunden werden. &lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/clock clock]: Das Widget &amp;quot;clock&amp;quot; stellt eine einfach Uhr zur verfügung.&lt;br /&gt;
* colorwheel:&lt;br /&gt;
* daytimepicker:&lt;br /&gt;
* [[#departure|departure]]: show timetable of public transport provider&lt;br /&gt;
* [[#dimmer|dimmer]]: toogle button with a setter for on value&lt;br /&gt;
* eventmonitor:&lt;br /&gt;
* highchart:&lt;br /&gt;
* [[#homestatus|homestatus]]: selector for 4 states (1=home, 2=night, 3=away, 4=holiday)&lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/iframe iframe]]: Widget zum Einbinden externer Inhalte in einem Iframe. &lt;br /&gt;
* [[#image|image]]: insert an image, the URL is given by a reading&lt;br /&gt;
* input:&lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/itunes_artwork itunes_artwork]: itunes_artwork durchsucht die iTunes-Datenbank anhand eines Arrays von beliebigen Suchworten nach einem Cover-Artwork und zeigt dieses an. &lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/javascript javascript]: Ermöglicht die Ausführung beliebigen Javascript-Codes aus einem Reading.&lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/joinedlabel joinedlabel]: verbindet mehrere Readings zu einem Feld&lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/klimatrend klimatrend]: wandelt Daten aus dem statistics-Modul in einen Pfeil um, der den aktuellen Trend anzeigt. &lt;br /&gt;
* Knob:&lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/kodinowplaying kodinowplaying]: zeigt Informationen zu grade in KODI gespielten Medien in Form eines Labels an.&lt;br /&gt;
* [[#label|label]]: STATE als Text anzeigen&lt;br /&gt;
* [[#level|level]]: vertical/horizontal bar to show values between min/max value&lt;br /&gt;
* link:&lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/mpdnowplaying mpdnowplaying]: zeigt Titelinformationen eines per MPD-Modul angebundenen Music Player Daemon an. &lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/multistatebutton multistatebutton]: Variante des push-Widgets das den set-Befehl abhängig vom gelesenen Status ändert.&lt;br /&gt;
* [[#pagetab|pagetab]]: Element to smoothly exchange the whole page with another page&lt;br /&gt;
* pagebutton:&lt;br /&gt;
* [[#playstream|playstream]]: Abspielen eines Webradio-Streams per Button&lt;br /&gt;
* [[#popup|popup]]: a popup dialog which open on click on another widget &lt;br /&gt;
* [[#progress|progress]]: round symbolic display for percent values&lt;br /&gt;
* [[#push|push]]: send any command to Fhem e.g. up / down&lt;br /&gt;
* range:&lt;br /&gt;
* readingsgroup:&lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/reload reload]: auslösen eine Pagereloads&lt;br /&gt;
* [[#rotor|rotor]]: Umschalten von zwei oder mehr Widgets an einer Position&lt;br /&gt;
* [[#select|select]]: Combobox to provide a list for selection&lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/settimer settimer]: zum anzeigen und einstellen einer Uhrzeit.&lt;br /&gt;
* [[#simplechart|simplechart]]: simple XY line chart for one value (reads directly from Fhem log file) &lt;br /&gt;
* [[#slider|slider]]: vertical slider to select between min/max value&lt;br /&gt;
* spinner:&lt;br /&gt;
* swiper:&lt;br /&gt;
* [[#switch|switch]]: Toggle any command to Fhem (e.g. on / off)&lt;br /&gt;
* [[#symbol|symbol]]: State als Symbol darstellen (z.B. Fenster offen)&lt;br /&gt;
* [[#thermostat|thermostat]]: dial for heater thermostates to set desired value and show current value&lt;br /&gt;
* [[#volume|volume]]: dial to set a single value (e.g. 0-60)&lt;br /&gt;
* [[#weather|weather]]: insert an icon or image, represending a weather literal&lt;br /&gt;
* [https://github.com/svenson08/ftui-weekdaytimer-widget weekdaytimer]: Visualisierung des [[WeekdayTimer]] Modul&lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/wind_direction wind_direction]: Zeigt die Windrichtung auf einer Windrose an. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein Demo der Widgets findet ihr [http://knowthelist.github.io/fhem/tablet/demo_widgets.html Hier].&lt;br /&gt;
----------------------------------&lt;br /&gt;
&lt;br /&gt;
Für alle Widgets gilt:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+allgemeine Attribute&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-type&lt;br /&gt;
|Widget-Typ&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-device&lt;br /&gt;
|Fhem-Name des Gerätes (mit dem Befehl &#039;list&#039; bekommt man im Fhem die kpl. Liste)&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |class&lt;br /&gt;
|CSS-Klassen für Aussehen und Formatierung des Widgets&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Daten Empfangen&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get&lt;br /&gt;
|Reading Name&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get-on&lt;br /&gt;
|Wert für den Status on&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get-off&lt;br /&gt;
|Wert für den Status off&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Daten Senden&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set&lt;br /&gt;
|Reading Name&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set-on&lt;br /&gt;
|Wert für den Status on&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set-off&lt;br /&gt;
|Wert für den Status off&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;chart&amp;quot;&amp;gt;&#039;&#039;&#039;CHART&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Default Wert&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-logdevice&lt;br /&gt;
|name of the logdevice (e.g. FileLog_WohnzimmerHeizung) or array of names if more than one graph shall be displayed&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-logfile&lt;br /&gt;
|name of the logfile (e.g. WohnzimmerHeizung-2015.log) or or array of names if more than one graph shall be displayed&lt;br /&gt;
|&#039;-&#039; or omitting this data means current logfile&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-columnspec&lt;br /&gt;
|definition for how to find the values (e.g. &amp;quot;4:meas.*:1:int&amp;quot;) or or array of columnspecs if more than one graph shall be displayed&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-style&lt;br /&gt;
|name of the graph style to be used (e.g. &#039;SVGplot l0&#039; or &#039;ftui l0dash&#039;) or or array of styles if more than one graph shall be displayed using different stlyes. The standard fhem plot styles can be used furthermore there are some more predefined styles existing (details see css file). Own styles can be specified e.g. in the fhem-table-ui-user.css file.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-ptype&lt;br /&gt;
|name of the plot type (e.g. &#039;lines&#039; or &#039;fa-cog&#039;) or or array of plottypes if more than one graph shall be displayed. All fhem plot styles are supported. Additionally it is possible to specify symbols (currently supported are font awesome (&#039;fa-...&#039;), open automation (&#039;oa-...&#039;) and fhem symbols (&#039;fs-...&#039;)). Can also be something like &#039;icon:1&#039; in which case the respective columnspec should result in links to icons (e.g. for weather forecast) and the y-value is taken from the graph number 1 &lt;br /&gt;
|&#039;lines&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-uaxis&lt;br /&gt;
|name of the axis to be used (&#039;primary&#039; or &#039;secondary&#039;) or or array of axis&#039; to be used if more than one graph shall be displayed. The &#039;primary&#039; axis is labelled on the left side, the &#039;secondary&#039; axis is labelled on the right side&lt;br /&gt;
|&#039;primary&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-legend&lt;br /&gt;
|caption of the graph (used in the legend and at the cursor) or an array of legend texts if more than one graph shall be displayed.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-minvalue&lt;br /&gt;
|min Y value to Show or an array of values for dynamic minY for primary axis. A value of &#039;auto&#039; means that the value is calculated from the data displayed dynamically&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-minvalue_sec&lt;br /&gt;
|min Y value to Show or an array of values for dynamic minY for secondary axis. A value of &#039;auto&#039; means that the value is calculated from the data displayed dynamically&lt;br /&gt;
|&#039;auto&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-maxvalue&lt;br /&gt;
|max Y value to Show or an array of values for dynamic maxY for primary axis. A value of &#039;auto&#039; means that the value is calculated from the data displayed dynamically&lt;br /&gt;
|30&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-maxvalue_sec&lt;br /&gt;
|max Y value to Show or an array of values for dynamic maxY for secondary axis. A value of &#039;auto&#039; means that the value is calculated from the data displayed dynamically&lt;br /&gt;
|&#039;auto&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-yticks&lt;br /&gt;
|value distance between Y tick lines (related to primary axis). A value of &#039;auto&#039; means that the value is calculated from the data displayed dynamically. Can be an array containing value pairs in order to have arbitrary text for given values (e.g. data-yticks=&#039;[[0,&amp;quot;open&amp;quot;],[1,&amp;quot;closed&amp;quot;]]&#039;)&lt;br /&gt;
|&#039;auto&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-yticks_sec&lt;br /&gt;
|value distance between Y tick lines (related to secondary axis). A value of &#039;auto&#039; means that the value is calculated from the data displayed dynamically.Can be an array containing value pairs in order to have arbitrary text for given values (e.g. data-yticks_sec=&#039;[[0,&amp;quot;open&amp;quot;],[1,&amp;quot;closed&amp;quot;]]&#039;)&lt;br /&gt;
|&#039;auto&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-xticks&lt;br /&gt;
|time range between each X tick lines (in minutes). A value of &#039;auto&#039; means that the value is calculated from the data displayed dynamically&lt;br /&gt;
|&#039;auto&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-daysago_start&lt;br /&gt;
|number of days back from now for the start of the plot (0 means the plot starts from today 0:00). Additionally the x-axis start value can be set here unsing standard data formats like (&#039;2013-10-23&#039;), the time portion of the string is only used when &amp;lt;code&amp;gt;data-nofulldays&amp;lt;/code&amp;gt; is &#039;true&#039;. If the setting ends with &#039;w&#039;, &#039;W&#039;, &#039;m&#039;, &#039;M&#039;, &#039;y&#039;, &#039;Y&#039; the nuber given is interpreted as week, month or year respectively (capital letters mean rounding to full weeks, months years) (e.g. &#039;2Y&#039; means that, if current date is 3.6.2015, the graph will start 1.1.2013).&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-daysago_end&lt;br /&gt;
|number of days back from now for the end of the plot (-1 means the plot ends today 24:00). Additionally the x-axis end value can be set here unsing standard data formats like (&#039;2013-10-23&#039;), the time portion of the string is only used when &amp;lt;code&amp;gt;data-nofulldays&amp;lt;/code&amp;gt; is &#039;true&#039;. If the setting ends with &#039;w&#039;, &#039;W&#039;, &#039;m&#039;, &#039;M&#039;, &#039;y&#039;, &#039;Y&#039; the nuber given is interpreted as week, month or year respectively (capital letters mean rounding to full weeks, months years) (e.g. &#039;2Y&#039; means that, if current date is 3.6.2015, the graph will end 31.12.2013).&lt;br /&gt;
|-1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-timeformat&lt;br /&gt;
|setting for the formatting of the x-tick text. The format can be configured in a quite flexible way. Several format classifiers are supported which are separated by special characters (&#039;-&#039;, &#039;.&#039;, &#039;/&#039;, &#039; &#039;, &#039;:&#039;, &#039;,&#039;, &#039;\&#039;). All characters despite &#039;\&#039; will be displayed in the final output.&lt;br /&gt;
The following is a list of supported classifiers:&lt;br /&gt;
* &#039;LF&#039;enters a linefeed&lt;br /&gt;
* &#039;mm&#039;  - displays minutes as 2 digits&lt;br /&gt;
* &#039;hh&#039;  - displays hours as 2 digits&lt;br /&gt;
* &#039;dd&#039;  - displays day of the month as 2 digits&lt;br /&gt;
* &#039;MM&#039;  - displays months as 2 digits (e.g. 02 for February)&lt;br /&gt;
* &#039;MMM&#039; - displays months as 3 characters (e.g. Dec for December)&lt;br /&gt;
* &#039;MMMM&#039; - displays monhts as full names (e.g. March)&lt;br /&gt;
* &#039;ee&#039;   - displays weekdays as 2 digits (e.g. 00 for Sunday)&lt;br /&gt;
* &#039;eee&#039;  - displays weekdays as 3 characters (e.g. Mon for Monday)&lt;br /&gt;
* &#039;eeee&#039; - displays weekdays as full names (e.g. Tuesday)&lt;br /&gt;
* &#039;yy&#039;   - displays years as 2 digits (e.g. 16 as 2016)&lt;br /&gt;
* &#039;yyyy&#039; - displays years as 4 digits&lt;br /&gt;
For example a string given as &#039;MMM\LF\yyyy&#039; will display &#039;Jan&#039; in one line and &#039;2016&#039; in a second one. A string given as &#039;MM.dd 2016&#039; will display &#039;03.05 2016&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-nofulldays&lt;br /&gt;
|switch to activate/deactivate rounding of the xaxis start and end values to full days (&#039;true&#039; or &#039;false&#039;)&lt;br /&gt;
|&#039;false&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-ytext&lt;br /&gt;
|text to be shown besides the primary y axis.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-ytext_sec&lt;br /&gt;
|text to be shown besides the secondary y axis.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-yunit&lt;br /&gt;
|unit of the value to show beside of each Y ticks for primary y axis.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-crosshair&lt;br /&gt;
|switch to activate/deactivate the crosshair cursor (&#039;true&#039; or &#039;false&#039;)&lt;br /&gt;
|&#039;false&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-cursorgroup&lt;br /&gt;
|number to define coupling of the crosshair cursor. The cursors of all charts having the same number are coupled and move together.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-scrollgroup&lt;br /&gt;
|number to define coupling of the scrolling (shift and zoom). All charts having the same number are scrolled (shifted and zoomed) together.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-showlegend&lt;br /&gt;
|switch to activate/deactivate the initial display of the legend window (&#039;true&#039; or &#039;false&#039;)&lt;br /&gt;
|&#039;false&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-legendpos&lt;br /&gt;
|array of two values (horizontal and vertical) to set the initial position of the legend window. Allowed values are &amp;quot;left&amp;quot;, &amp;quot;right&amp;quot; or a number giving the position in percent for the first parameter (horizontal position) and &#039;top&#039;, &#039;bottom&#039; or a number giving the position in percent for the second parameter (vertical position). &lt;br /&gt;
|&#039;[&amp;quot;top&amp;quot;,&amp;quot;right&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-yunit_sec&lt;br /&gt;
|unit of the value to show beside of each Y ticks for secondary y axis.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-width&lt;br /&gt;
|fixed size for width (in&amp;amp;nbsp;% or px)&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-height&lt;br /&gt;
|fixed size for height (in&amp;amp;nbsp;% or px)&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-graphsshown&lt;br /&gt;
|boolean to define if graphs are activated (shown) initially or an array of booleans if more than one graph shall be displayed.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-ddd&lt;br /&gt;
|setting for 3D display. Array with 3 angles for rotation of the 3D chart in x, y, z (z not yet supported) (e.g. &#039;[&amp;quot;40&amp;quot;,&amp;quot;60&amp;quot;,&amp;quot;0&amp;quot;]&#039;). If the array is existing, there will be 2 additional buttons on top for changing rotation in x and y.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-dddspace&lt;br /&gt;
|setting for the space between different graphs in y direction if 3D is activated (space given in pixels).&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-dddwidth&lt;br /&gt;
|setting for the width of the graphs if 3D is activated (width given in pixels).&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-title&lt;br /&gt;
|setting for inclusion of chart title on top of the chart. Includes the possibility for calculation of values like in SVG Plots (e.g. data-title=&amp;quot;Min: $data{mindate4}, Max: $data{maxdate4}, Last: $data{currdate4}&amp;quot;). Supported are:&lt;br /&gt;
* min1: minimum value of graph 1 (first graph in the given list). Number can be any graph or omitted if calculation shall be done over all graphs.&lt;br /&gt;
* max1: maximum value of graph 1 (first graph in the given list)&lt;br /&gt;
* avg1: average value of graph 1 (first graph in the given list)&lt;br /&gt;
* cnt1: number of values of graph 1 (first graph in the given list)&lt;br /&gt;
* currval1: last (current) value of graph 1 (first graph in the given list)&lt;br /&gt;
* mindate1: minimum x value of graph 1 (first graph in the given list)&lt;br /&gt;
* maxdate1: maximum x value of graph 1 (first graph in the given list)&lt;br /&gt;
* currdate1: last (current) x value of graph 1 (first graph in the given list)&lt;br /&gt;
|&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |class&lt;br /&gt;
|fullsize, noticks, nobuttons, small, normal, big&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-logfile&amp;lt;/code&amp;gt; can be omitted in this case the default value &amp;quot;-&amp;quot; will be used. This means that the current logfile is going to be used.&lt;br /&gt;
&lt;br /&gt;
There are several buttons that control the dynamic behaviour of the chart. The &amp;lt;-, -&amp;gt;, + and - buttons shift and zoom the displayed data. The &amp;quot;legend&amp;quot; and &amp;quot;cursor&amp;quot; buttons are switching on and off the display of the legend window and the crosshair cursor respectively. If 3D display is activated (see above) 2 more buttons control the rotation in x and y.&lt;br /&gt;
&lt;br /&gt;
When the legend window is displayed, a click on the legend text shows/hides the respective graph. The legend window can be dragged to other positions on desktop browsers (currently not yet working for iOS and Android).&lt;br /&gt;
&lt;br /&gt;
The crosshair cursor currently only works dynamically on desktop browsers. On iOS and Android you have to tap on the screen to set the cursor to a new position.&lt;br /&gt;
&lt;br /&gt;
Three classes define default values for the texts (small, normal, big). Additionally there is a number of css styles that control the visible appearance of the chart. The following classes are supported:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!CSS class name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
!.chart-background&lt;br /&gt;
|Color etc. for the chart background&lt;br /&gt;
|-&lt;br /&gt;
!.text.axes&lt;br /&gt;
|Font and color for the chart axes&lt;br /&gt;
|-&lt;br /&gt;
!.buttons&lt;br /&gt;
|Size and color for the buttons (shift etc.)&lt;br /&gt;
|-&lt;br /&gt;
!.gridlines&lt;br /&gt;
|Size and color for gridlines generally&lt;br /&gt;
|-&lt;br /&gt;
!.xaxis&lt;br /&gt;
|Font, size and color for xaxis&lt;br /&gt;
|-&lt;br /&gt;
!.yaxis&lt;br /&gt;
|Font, size and color for yaxis&lt;br /&gt;
|-&lt;br /&gt;
!.xticks&lt;br /&gt;
|Font, size and color for xticks&lt;br /&gt;
|-&lt;br /&gt;
!.yticks&lt;br /&gt;
|Font, size and color for yticks&lt;br /&gt;
|-&lt;br /&gt;
!.crosshair&lt;br /&gt;
|Font, size and color (foreground/background) for the crosshair cursor&lt;br /&gt;
|-&lt;br /&gt;
!.caption&lt;br /&gt;
|Font, size and color for text buttons for legend and cursor switching&lt;br /&gt;
|-&lt;br /&gt;
!.legend&lt;br /&gt;
|Font, size and background color for legend window&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[#Beispiel_chart|Link zu einem Beispiel]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;circlemenu&amp;quot;&amp;gt;&#039;&#039;&#039;CIRCLEMENU&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Default Wert&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-item-diameter&lt;br /&gt;
|diameter of the circle&lt;br /&gt;
|52&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-circle-radius&lt;br /&gt;
|radius of each item, in pixel&lt;br /&gt;
|70&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-direction&lt;br /&gt;
|position of the items in relation to the center&lt;br /&gt;
|&#039;full&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-close-after&lt;br /&gt;
|closing time of the circle-menu&lt;br /&gt;
|(item-count + 1s) or a minimum of 4s&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |class&lt;br /&gt;
|keepopen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Optionen für data-direction: top | right | bottom | left | top-right | top-left | bottom-right | bottom-left | top-half | right-half | bottom-half | left-half | full | vertical | horizontal&lt;br /&gt;
&lt;br /&gt;
[[#Beispiel_circlemenu|Link zu einem Beispiel]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;departure&amp;quot;&amp;gt;&#039;&#039;&#039;DEPARTURE&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Default Wert&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-type&lt;br /&gt;
|widget-type; must be departure&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-device&lt;br /&gt;
|name of the device to get data from&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get&lt;br /&gt;
|name of the reading of device to get data from&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-icon&lt;br /&gt;
|define icon for widget&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-interval&lt;br /&gt;
|interval to reload automatically&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |class&lt;br /&gt;
|choose style of widget; see example&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[#Beispiel_departure|Link zu einem Beispiel]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;dimmer&amp;quot;&amp;gt;&#039;&#039;&#039;DIMMER&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Default Wert&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get&lt;br /&gt;
|name of the reading to get from Fhem&lt;br /&gt;
|&#039;STATE&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get-on&lt;br /&gt;
|value for ON status to get&lt;br /&gt;
|&#039;on&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get-off&lt;br /&gt;
|value for OFF status to get&lt;br /&gt;
|&#039;off&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set&lt;br /&gt;
|(&amp;lt;command&amp;gt; &amp;lt;device&amp;gt; &amp;lt;reading&amp;gt; &amp;lt;value&amp;gt;) &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set-on&lt;br /&gt;
|value for ON status to set&lt;br /&gt;
|value of data-get-on&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set-off&lt;br /&gt;
|value for OFF status to set&lt;br /&gt;
|value of data-get-off&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-cmd&lt;br /&gt;
|name of the command (&amp;lt;command&amp;gt; &amp;lt;device&amp;gt; &amp;lt;value&amp;gt;) (e.g. setstate, set, setreading, trigger)&lt;br /&gt;
|&#039;set&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-dim&lt;br /&gt;
|name of the reading responsible for dim (&amp;lt;command&amp;gt; &amp;lt;device&amp;gt; &amp;lt;reading&amp;gt; &amp;lt;value&amp;gt;) &lt;br /&gt;
|value of data-get-on&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-icon&lt;br /&gt;
|name of the font-awesome icon&lt;br /&gt;
|fa-lightbulb-o&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[#Beispiel_dimmer|Link zu einem Beispiel]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;homestatus&amp;quot;&amp;gt;&#039;&#039;&#039;HOMESTATUS&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Default Wert&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get&lt;br /&gt;
|name of the reading to get from Fhem&lt;br /&gt;
|&#039;STATE&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set&lt;br /&gt;
|command to send to Fhem (&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; &amp;lt;command&amp;gt; &amp;lt;value&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
|&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get-on&lt;br /&gt;
|array of states using for get&lt;br /&gt;
|[&#039;1&#039;,&#039;2&#039;,&#039;3&#039;,&#039;4&#039;]&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set-on&lt;br /&gt;
|array of states using for set.&lt;br /&gt;
|value of data-get-on&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-alias&lt;br /&gt;
|array of fix names to show only in the UI as an alias to the real states&lt;br /&gt;
|&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-icons&lt;br /&gt;
|array of icons related to the data-get-on array&lt;br /&gt;
|&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-version&lt;br /&gt;
|name of the status model e.g. &#039;residents&#039;,&#039;roommate&#039;,&#039;guest&#039; &lt;br /&gt;
|(default NULL)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The default version has 4 states: &#039;1&#039;,&#039;2&#039;,&#039;3&#039;,&#039;4&#039; The default aliases are &#039;Home&#039;,&#039;Night&#039;,&#039;Away&#039;,&#039;Holiday&#039;; data-version=&#039;residents&#039; or &#039;roommate&#039; or &#039;guest&#039; has 5 states (&#039;home&#039;,&#039;asleep&#039;,&#039;absent&#039;,&#039;gone&#039;,&#039;gotosleep&#039;) They have these aliases &#039;Home&#039;,&#039;Night&#039;,&#039;Away&#039;,&#039;Holiday&#039;,&#039;Retire&#039;&lt;br /&gt;
&lt;br /&gt;
[[#Beispiel_homestatus|Link zu einem Beispiel]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;image&amp;quot;&amp;gt;&#039;&#039;&#039;IMAGE&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Default Wert&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get&lt;br /&gt;
|name of the reading to get an URL from Fhem&lt;br /&gt;
|&#039;STATE&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-size&lt;br /&gt;
|width of the image in px or %, the height scales proportionally&lt;br /&gt;
|50%&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-url&lt;br /&gt;
|URL of the image to show (use data-url or data-device + data-get, not both)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-refresh&lt;br /&gt;
|Interval in seconds for image refresh for usage together with data-url&lt;br /&gt;
|900&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[#Beispiel_image|Link zu einem Beispiel]]&lt;br /&gt;
&lt;br /&gt;
=== Widget LABEL ===&lt;br /&gt;
&amp;lt;div id=&amp;quot;label&amp;quot;&amp;gt;&#039;&#039;&#039;LABEL&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem LABEL Widget kann der STATUS eines Device in Textform angezeigt werden. Dabei kann das die Farbe des Anzeigetext abhängig von dessen Wert festgelegt werden. &lt;br /&gt;
&lt;br /&gt;
Neben den &#039;&#039;&#039;allgemeine Attribute&#039;&#039;&#039; besitzt das LABEL-Widget die nachfolgenden Attribute.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Default Wert&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get           &lt;br /&gt;
|Name des Readings in FHEM &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-fix           &lt;br /&gt;
|Eine bestimmte Anzahl an Dezimalstellen &lt;br /&gt;
|&#039;-1&#039; -&amp;gt; non-numeric &lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-part          &lt;br /&gt;
|split position of the space separated value to show or an RegEx &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-color         &lt;br /&gt;
| fix color attribute or DEVICE:READING for dynamic setting of label color &lt;br /&gt;
| &#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-colors        &lt;br /&gt;
|a array of color values to affect the colour of the label according to the limit value &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-limits-get    &lt;br /&gt;
|name of the DEVICE:Reading to colorize the label  &lt;br /&gt;
|data-device:data-get &lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-limits        &lt;br /&gt;
|an array of numeric values to affect the colour of the Label &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-limits-part   &lt;br /&gt;
|part number of the space separated value to show or a RegEx &lt;br /&gt;
|&#039;-1&#039; -&amp;gt; all &lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-unit          &lt;br /&gt;
|add a unit after a numeric value. use encoded strings e.g. &amp;quot;%B0C%0A&amp;quot; &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-substitution  &lt;br /&gt;
|regex-substitution to apply on the value. Standard regex notation (s/regex/subst/modifier) is expected &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-hide          &lt;br /&gt;
|string to compare with current value. hide element when it&#039;s value equals data-hide &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-hideparents   &lt;br /&gt;
|jquery selector to hide element&#039;s parents too &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |class              &lt;br /&gt;
|small, large, big, bigger, thin, red, green, blue, darker, timestamp, w1x, w2x, w3x, fixedlabel, icon, bg-limit &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Mit der Class &#039;fixedlabel&#039; kann man Label einbauen, die einen festen Text (direkt im HTML) haben, aber trotzdem die Farbe per Reading Value beeinflusst werden könnte.&amp;lt;br&amp;gt;&lt;br /&gt;
Mit der Class &#039;icon&#039; kann man Label einbauen, die wie Icons aussehen. Als Hintergrund gibt es &#039;icon round&#039; (rund), &#039;icon square&#039; (Rechteck mit abgerundeten Ecken) und &#039;icon squareborder&#039; (Rechteck mit abgerundeten Ecken und einem zusätzlichen Rand).&amp;lt;br&amp;gt;&lt;br /&gt;
Mit der Class &#039;bg-limit&#039; wird der Hintergrund des Icon auf grün oder rot gesetzt, passend zum on/off Status des data-limits.&lt;br /&gt;
Use data-color OR data-colors + data-limits, not both.&lt;br /&gt;
&lt;br /&gt;
With class=&amp;quot;bg-limit&amp;quot; it changes the background color not the forecolor according data-limits&lt;br /&gt;
&lt;br /&gt;
class=&amp;quot;icon square&amp;quot; or class=&amp;quot;icon round&amp;quot; forces the label to a fix width and height in icon style&lt;br /&gt;
&lt;br /&gt;
Special layout can be achieved by overwriting of following classes in the fhem-tablet-ui-user.css:&lt;br /&gt;
&lt;br /&gt;
.label-precomma .label-comma .label-aftercomma .label-unit&lt;br /&gt;
&lt;br /&gt;
e.g.: .label-aftercomma{ font-size:40%; left: 4px; top: -25px; position: relative; }&lt;br /&gt;
&lt;br /&gt;
Functions for data-substitution:&lt;br /&gt;
&lt;br /&gt;
Array of replacements&lt;br /&gt;
RegEx-substitution to apply on the value. Standard regex notation (s/regex/subst/modifier) is expected&lt;br /&gt;
data-substitution=&amp;quot;weekdayshort&amp;quot;&lt;br /&gt;
JS functions data-substitution=&amp;quot;toDate().ddmm()&amp;quot; - convert to day:month&lt;br /&gt;
data-substitution=&amp;quot;toDate().hhmm()&amp;quot; - convert to hour:minutes&lt;br /&gt;
&lt;br /&gt;
data-substitution=&amp;quot;toDate().hhmmss()&amp;quot; - convert to hour:minutes:secondes&lt;br /&gt;
&lt;br /&gt;
data-substitution=&amp;quot;toDate().eeee()&amp;quot; - convert to name of the week day&lt;br /&gt;
&lt;br /&gt;
data-substitution=&amp;quot;toDate().ago()&amp;quot; - convert to time span&lt;br /&gt;
&lt;br /&gt;
[[#Beispiel_label|Link zu einem Beispiel]]&lt;br /&gt;
&lt;br /&gt;
=== Widget LEVEL ===&lt;br /&gt;
&amp;lt;div id=&amp;quot;level&amp;quot;&amp;gt;&#039;&#039;&#039;LEVEL&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Default Wert&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get&lt;br /&gt;
|name of the reading to get from Fhem&lt;br /&gt;
|&#039;STATE&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-min&lt;br /&gt;
|minimal value to set&lt;br /&gt;
|&#039;0&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-max&lt;br /&gt;
|maximal value to set&lt;br /&gt;
|&#039;100&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-on&lt;br /&gt;
|value where the slider moves to max&lt;br /&gt;
|&#039;on&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-off&lt;br /&gt;
|value where the slider moves to min&lt;br /&gt;
|&#039;off&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-part&lt;br /&gt;
|part number of the space separated value to show or an RegEx&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-colors&lt;br /&gt;
|a array of color values to affect the colour of the label according to the limit value&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-limits&lt;br /&gt;
|a array of numeric or RegEx values to affect the colour of the label&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |class&lt;br /&gt;
|mini, horizontal&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[#Beispiel_level|Link zu einem Beispiel]] (fehlt noch)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;pagetab&amp;quot;&amp;gt;&#039;&#039;&#039;PAGETAB&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Default Wert&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-url&lt;br /&gt;
|URL of the new page to show&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-icon&lt;br /&gt;
|name of the font-awesome icon&lt;br /&gt;
|&#039;fa-power-off&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-background-icon&lt;br /&gt;
|name of the font-awesome icon for background &lt;br /&gt;
|&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-on-background-color&lt;br /&gt;
|color of ON state&lt;br /&gt;
|&#039;#aa6900&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-off-background-color&lt;br /&gt;
|color of OFF state&lt;br /&gt;
|&#039;#505050&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-on-color&lt;br /&gt;
|color of ON state&lt;br /&gt;
|&#039;#aa6900&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-off-color&lt;br /&gt;
|color of Off state&lt;br /&gt;
|&#039;#505050&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get-on&lt;br /&gt;
|array of status to assign a special icon-list from data-icons&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-icons&lt;br /&gt;
|array of icons related to the a data-get-on array&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |class&lt;br /&gt;
|warn, activate (as additionals for data-icons)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[#Beispiel_pagetab|Link zu einem Beispiel]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;playstream&amp;quot;&amp;gt;&#039;&#039;&#039;PLAYSTREAM&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Default Wert&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-url&lt;br /&gt;
|URL des Radio-Streams&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get&lt;br /&gt;
|name of the reading to get the control state from FHEM&lt;br /&gt;
|&#039;STATE&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get-on&lt;br /&gt;
|value for PLAY status to get. &lt;br /&gt;
|&#039;on&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get-off&lt;br /&gt;
|value for STOP status to get. &lt;br /&gt;
|&#039;off&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-volume&lt;br /&gt;
|name of the reading to get the volume value (0-100) &lt;br /&gt;
|volume&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[#Beispiel_playstream|Link zu einem Beispiel]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;popup&amp;quot;&amp;gt;&#039;&#039;&#039;POPUP&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Default Wert&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get&lt;br /&gt;
|name of the reading where to get the alert value from&lt;br /&gt;
|&#039;STATE&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get-on&lt;br /&gt;
|value which trigger to open the dialog&lt;br /&gt;
|&#039;on&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-off&lt;br /&gt;
|value which trigger to close the dialog &lt;br /&gt;
|&#039;off&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-width&lt;br /&gt;
|fixe size for width (in % or px)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-height&lt;br /&gt;
|fixe size for height (in % or px)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[#Beispiel_popup|Link zu einem Beispiel]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;progress&amp;quot;&amp;gt;&#039;&#039;&#039;PROGRESS&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Default Wert&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get&lt;br /&gt;
|name of the reading to get from Fhem&lt;br /&gt;
|&#039;STATE&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-max&lt;br /&gt;
|maximal value to set or name of the reading which helds the max value&lt;br /&gt;
|100&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |class&lt;br /&gt;
|novalue, percent&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[#Beispiel_progress|Link zu einem Beispiel]] (fehlt noch)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;push&amp;quot;&amp;gt;&#039;&#039;&#039;PUSH&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Default-Wert&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set&lt;br /&gt;
| name of the reading to set on FHEM (&amp;lt;command&amp;gt; &amp;lt;device&amp;gt; &amp;lt;reading&amp;gt; &amp;lt;value&amp;gt;) &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set-on&lt;br /&gt;
|value to send when the the button get pressed oder ein Array zwischen dessen Werten umgeschaltet werden kann&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-icon&lt;br /&gt;
|name of the font-awesome icon&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-background-icon&lt;br /&gt;
|name of the font-awesome icon for background &lt;br /&gt;
|&#039;fa-circle&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-cmd&lt;br /&gt;
|name of the command (&amp;lt;command&amp;gt; &amp;lt;device&amp;gt; &amp;lt;value&amp;gt;) (e.g. setstate, set, setreading, trigger)&lt;br /&gt;
|&#039;set&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-doubleclick&lt;br /&gt;
|timeout to wait for a second click or touch. &#039;0&#039; disables the doubleclick feature. &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-countdown&lt;br /&gt;
|secondes for the countdown progress control &lt;br /&gt;
|autodetect from &#039;on-for-timer&#039; command&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-background-icon&lt;br /&gt;
|name of the font-awesome icon for background &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-off-background-color&lt;br /&gt;
|fix color attribute for OFF state or DEVICE:READING for dynamic setting &lt;br /&gt;
|#505050&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-off-color&lt;br /&gt;
|fix color attribute for Off state or DEVICE:READING for dynamic setting&lt;br /&gt;
|#505050&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;data-set-on&#039; can also be an array of values to toggle between this values&lt;br /&gt;
&lt;br /&gt;
[[#Beispiel_push|Link zu einem Beispiel]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;rotor&amp;quot;&amp;gt;&#039;&#039;&#039;ROTOR&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Default Wert&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; | data-delay&lt;br /&gt;
|time in millisecondes to wait until next list item get shown&lt;br /&gt;
|3500&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |class&lt;br /&gt;
|fade, rotate&lt;br /&gt;
|&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
Ohne Angabe von class erfolgt keine Animation.&lt;br /&gt;
&lt;br /&gt;
[[#Beispiel_rotor|Link zu einem Beispiel]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;select&amp;quot;&amp;gt;&#039;&#039;&#039;SELECT&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Default Wert&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get&lt;br /&gt;
|name of the reading that get the selected item of the list&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set&lt;br /&gt;
|name of the reading to set on Fhem (&amp;lt;command&amp;gt; &amp;lt;device&amp;gt; &amp;lt;reading&amp;gt; &amp;lt;value&amp;gt;)&lt;br /&gt;
|&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-list&lt;br /&gt;
|name of the reading to get a :-separated list from Fhem&lt;br /&gt;
|&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-items&lt;br /&gt;
|an array of fix items to show in the selection box (alternative if data-list is empty)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-alias&lt;br /&gt;
|an array of fix names to show only in the selection box as an alias to the real items&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-cmd&lt;br /&gt;
|name of the command to send to Fhem (&amp;lt;command&amp;gt; &amp;lt;device&amp;gt; &amp;lt;reading&amp;gt; &amp;lt;value&amp;gt;) (e.g. setstate, set, setreading, trigger)&lt;br /&gt;
|&#039;set&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-quote&lt;br /&gt;
|characters to enclose the send value&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |class&lt;br /&gt;
|wider, w1x, w2x, w3x, large, big&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
[[#Beispiel_select|Link zu einem Beispiel]]&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;div id=&amp;quot;simplechart&amp;quot;&amp;gt;&#039;&#039;&#039;SIMPLECHART&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Default Wert&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-logdevice&lt;br /&gt;
|name of the logdevice (e.g. FileLog_WohnzimmerHeizung)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-logfile&lt;br /&gt;
|name of the logfile (e.g. WohnzimmerHeizung-2015.log)&lt;br /&gt;
|&#039;-&#039; means current logfile&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-columnspec&lt;br /&gt;
|definition for how to find the values (e.g. &amp;quot;4:meas.*:1:int&amp;quot;)&lt;br /&gt;
|&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-minvalue&lt;br /&gt;
|min Y value to Show or an array of values for dynamic minY &lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-maxvalue&lt;br /&gt;
|max Y value to Show or an array of values for dynamic maxY &lt;br /&gt;
|30&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-yticks&lt;br /&gt;
|value distance between Y tick lines&lt;br /&gt;
|5&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-xticks&lt;br /&gt;
|time range between each X tick line (in Minuten)&lt;br /&gt;
|360 minutes&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-daysago&lt;br /&gt;
|number of days back from now &lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-caption&lt;br /&gt;
|name of the chart to show as text &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-yunit&lt;br /&gt;
|unit of the value to show beside of each Y ticks&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-width&lt;br /&gt;
|fixe size for width (in % or px)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-height&lt;br /&gt;
|fixe size for height (in % or px)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |class&lt;br /&gt;
|fullsize, noticks&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
[[#Beispiel_simplechart|Link zu einem Beispiel]] (fehlt noch)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-logfile&amp;lt;/code&amp;gt; kann man auch weglassen, dann greift der Defaultwert &amp;quot;-&amp;quot;. Damit wird das neuste Logfile gelesen.&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;div id=&amp;quot;slider&amp;quot;&amp;gt;&#039;&#039;&#039;SLIDER&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Default Wert&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get&lt;br /&gt;
|name of the reading to get from Fhem&lt;br /&gt;
|&#039;STATE&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set&lt;br /&gt;
|command to send to Fhem (&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; &amp;lt;command&amp;gt; &amp;lt;value&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
|&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-cmd&lt;br /&gt;
|name of the command (&amp;lt;command&amp;gt; &amp;lt;device&amp;gt; &amp;lt;value&amp;gt;) (e.g. setstate, set, setreading, trigger)&lt;br /&gt;
|&#039;set&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-min&lt;br /&gt;
|minimal value to set&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-max&lt;br /&gt;
|maximal value to set&lt;br /&gt;
|100&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-step&lt;br /&gt;
|step value&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-on&lt;br /&gt;
|value where the slider moves to max&lt;br /&gt;
|&#039;on&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-off&lt;br /&gt;
|value where the slider moves to min&lt;br /&gt;
|&#039;off&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get-value&lt;br /&gt;
|RegEx to retrieve the value or part number of the space separated input to get the value&lt;br /&gt;
|&#039;-1&#039;: all of the input&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set-value&lt;br /&gt;
|Format of the value to send to FHEM&lt;br /&gt;
|&#039;$v&#039;: the value only&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-width&lt;br /&gt;
|width for horizontal sliders&lt;br /&gt;
|&#039;120px&#039;, for mini &#039;60px&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-height&lt;br /&gt;
|height for vertical sliders &lt;br /&gt;
|&#039;120px&#039;, for mini &#039;60px&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-color&lt;br /&gt;
|color for quantity range&lt;br /&gt;
|&#039;#aa6900&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-background-color&lt;br /&gt;
|color for range bar&lt;br /&gt;
|#404040&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |class&lt;br /&gt;
|Aussehen/Ausrichtung&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für class steht mini, horizontal und negated (0 liegt oben) zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
[[#Beispiel_slider|Link zu einem Beispiel]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;switch&amp;quot;&amp;gt;&#039;&#039;&#039;SWITCH&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML-Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Default-Wert&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get&lt;br /&gt;
|Name des Reading, was gelesen werden soll&lt;br /&gt;
|&#039;STATE&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set&lt;br /&gt;
|Name des Reading, was gelesen werden soll&lt;br /&gt;
|&#039;STATE&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-cmd&lt;br /&gt;
|Kommando Name (&amp;lt;command&amp;gt; &amp;lt;device&amp;gt; &amp;lt;value&amp;gt;) &amp;lt;br /&amp;gt;(z.B setstate, set, setreading, trigger) &lt;br /&gt;
|&#039;set&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-doubleclick&lt;br /&gt;
|timeout to wait for x millisecondes click or touch. &#039;0&#039; disables the doubleclick feature.&lt;br /&gt;
|&#039;0&#039;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
Einstellung bei zwei Werten&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML-Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Default-Wert&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get-on&lt;br /&gt;
|Wert, bei dem zum Status ON geschaltet werden soll. &lt;br /&gt;
|&#039;on&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get-off&lt;br /&gt;
|Wert, bei dem zum Status OFF geschaltet werden soll. &lt;br /&gt;
|&#039;off&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set-on&lt;br /&gt;
|Wert, der zu Fhem gesendet werden soll, wenn das Widget auf ON geschaltet wurde  &lt;br /&gt;
|Wert von data-get-on&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set-off&lt;br /&gt;
|Wert, der zu Fhem gesendet werden soll, wenn das Widget auf OFF geschaltet wurde &lt;br /&gt;
|Wert von data-get-off&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-icon&lt;br /&gt;
|Name des Font-Awesome Icon. &lt;br /&gt;
|&#039;fa-lightbulb-o&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-background-icon&lt;br /&gt;
|Name des Font-Awesome Hintergrund Icon. &lt;br /&gt;
|&#039;fa-circle&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-on-background-color&lt;br /&gt;
|Hintergrundfarbe beim Status on oder DEVICE:Reading bei dynamischen Einstellungen&lt;br /&gt;
|&#039;#aa6900&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-off-background-color&lt;br /&gt;
|Hintergrundfarbe beim Status off oder DEVICE:Reading bei dynamischen Einstellungen&lt;br /&gt;
|&#039;#505050&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-on-color&lt;br /&gt;
|Widget Farbe beim Status ON &lt;br /&gt;
|&#039;#aa6900&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-off-color&lt;br /&gt;
|Widget Farbe beim Status OFF &lt;br /&gt;
|&#039;#505050&#039;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Einstellung bei mehreren Werten&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML-Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Default-Wert&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-states&lt;br /&gt;
|Array mit Status Angaben &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set-states&lt;br /&gt;
|Array mit Status Angaben, die gesetzt werden sollen&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-icons&lt;br /&gt;
|Array Icons zum zuvor definierten Status&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-background-icons&lt;br /&gt;
|Array mit Hintergrund Icons zum zuvor definierten Status &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-colors&lt;br /&gt;
|Array mit Farben zum zuvor definierten Status &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-background-colors&lt;br /&gt;
|Array mit Hintergrund Farben zum zuvor definierten Status &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |class : readonly&lt;br /&gt;
|Es wird nur der Status angezeigt und kann nicht geändert werden&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;data-get-on&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;data-get-off&amp;lt;/code&amp;gt; accept also RegEx values. e.g. data-get-on=&amp;quot;[0-9]{1,3}|on&amp;quot; means set switch on if STATE is a numeric value or &#039;on&#039;. data-get-off=&amp;quot;!on&amp;quot; means accept all but the data-get-on value (negation)&lt;br /&gt;
&lt;br /&gt;
[[#Beispiel_switch|Link zu einem Beispiel]]&lt;br /&gt;
&lt;br /&gt;
=== Widget SYMBOL ===&lt;br /&gt;
&amp;lt;div id=&amp;quot;symbol&amp;quot;&amp;gt;&#039;&#039;&#039;SYMBOL&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem SYMBOL Widget kann der STATUS eines Device dargestellt werden. Dabei kann das angezeigte Symbol und dessen Farbe bestimmt werden. Wie bei anderen Widgets kann das Symbol und die Farbe vom State abhängig konfiguriert werden. Das SYMBOL-Widget dient nur zur Anzeige eines STATUS, es besitzt kein Möglichkeit der Interaktion.&lt;br /&gt;
&lt;br /&gt;
Neben den &#039;&#039;&#039;allgemeine Attribute&#039;&#039;&#039; besitzt das SYMBOL-Widget die nachfolgenden Attribute.&lt;br /&gt;
&lt;br /&gt;
dual state notation&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! HTML Attribut !! Beschreibung !! Default Wert&lt;br /&gt;
|-&lt;br /&gt;
| data-get || Name des Reading, was gelesen werden soll || &#039;STATE&#039; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Einstellung bei zwei Werten&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML-Attribut !! Beschreibung !! Default-Wert&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get-on&#039;&#039;&#039; ||Wert für on ||&#039;open&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get-off&#039;&#039;&#039; ||Wert für off ||&#039;closed&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-icon&#039;&#039;&#039; ||Name des Symbols  ||&#039;ftui-window&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-background-icon&#039;&#039;&#039; ||Hintergrundsymbol ||&#039;&#039;&#039;leer&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-on-background-color&#039;&#039;&#039; ||Farbe für ON-Zustand. ||&#039;#aa6900&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-off-background-color&#039;&#039;&#039; ||Farbe für OFF-Zustand. ||&#039;#505050&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-on-color&#039;&#039;&#039; ||Farbe für ON-Zustand. ||&#039;#aa6900&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-off-color&#039;&#039;&#039; ||Farbe für OFF-Zustand. ||&#039;#505050&#039;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Einstellung bei mehreren Werten&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Default Wert&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-states&lt;br /&gt;
|Array für states. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-icons&lt;br /&gt;
|Array mit Icons zu data-states Array&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-background-icons&lt;br /&gt;
|Array mit Icons zu data-states Array&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-colors&lt;br /&gt;
|Array mit Farben zu data-states aArray&lt;br /&gt;
|&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-background-colors&lt;br /&gt;
|Array mit Hintergrundfarben zu data-states array&lt;br /&gt;
|&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
data-get-on,data-get-off and data-states accept also RegEx values. The value for one icon can also contain an additional animatation CSS name, e.g. &amp;quot;fa-exclamation-triangle fa-blink&amp;quot; for a blinking Symbol&lt;br /&gt;
&lt;br /&gt;
[[#Beispiel_symbol|Link zu einem Beispiel]]&lt;br /&gt;
&lt;br /&gt;
=== Widget THERMOSTAT===&lt;br /&gt;
&amp;lt;div id=&amp;quot;thermostat&amp;quot;&amp;gt;&#039;&#039;&#039;THERMOSTAT&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Default Wert&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get&lt;br /&gt;
|name of the reading to get from Fhem&lt;br /&gt;
|&#039;desired-temp&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-temp&lt;br /&gt;
|reading for measured temperature of thermostates&lt;br /&gt;
|&#039;measured-temp&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set&lt;br /&gt;
|command to send to Fhem (set &amp;lt;device&amp;gt; &amp;lt;command&amp;gt; &amp;lt;value&amp;gt;)&lt;br /&gt;
|&#039;desired-temp&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-valve&lt;br /&gt;
|reading for valve position of thermostates&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-min&lt;br /&gt;
|minimal value to set&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-max&lt;br /&gt;
|maximal value to set&lt;br /&gt;
| 30&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-minColor&lt;br /&gt;
|Farbe des Keises für Min&lt;br /&gt;
| #4477FF&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-maxColor&lt;br /&gt;
|Farbe des Kreises für Max, zwischen Min und Max wird linear interpoliert &lt;br /&gt;
| #FF0000&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-step&lt;br /&gt;
|step size for value adjustment e.g. 0.5 &lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-bgColor&lt;br /&gt;
|Die Farbe der Kreises zwischen den ticks&lt;br /&gt;
|&#039;transparent&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-fgColor&lt;br /&gt;
|Die Farbe der zahl im Kreismittelpunkt&lt;br /&gt;
|#bbbbbb&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-tkColor&lt;br /&gt;
|Die Farbe der ticks&lt;br /&gt;
|#696969&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-angleOffset&lt;br /&gt;
|Start der ticks im Kreis (in Winkelgraden, 0 = oben)&lt;br /&gt;
| -120&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-angleArc&lt;br /&gt;
|Bereich der ticks im Kreis (in Winkelgraden)&lt;br /&gt;
|240&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |class&lt;br /&gt;
|big, readonly&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[#Beispiel_thermostat|Link zu einem Beispiel]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;volume&amp;quot;&amp;gt;&#039;&#039;&#039;VOLUME&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Default Wert&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get&lt;br /&gt;
|name of the reading to get from Fhem &lt;br /&gt;
|&#039;STATE&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set&lt;br /&gt;
|command to send to Fhem (set &amp;lt;device&amp;gt; &amp;lt;command&amp;gt; &amp;lt;value&amp;gt;)&lt;br /&gt;
|&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;rigth&amp;quot; |data-cmd&lt;br /&gt;
|name of the command (&amp;lt;command&amp;gt; &amp;lt;device&amp;gt; &amp;lt;value&amp;gt;) (e.g. setstate, set, setreading, trigger) &lt;br /&gt;
|&#039;set&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-min&lt;br /&gt;
|minimal value to set&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-max&lt;br /&gt;
|maximal value to set&lt;br /&gt;
|70&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get-value&lt;br /&gt;
|RegEx to retrieve the value or part number of the space separated input to get the value&lt;br /&gt;
|&#039;-1&#039;: all of the input&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set-value&lt;br /&gt;
|Format of the value to send to FHEM&lt;br /&gt;
|&#039;$v&#039;: the value only&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-tickstep&lt;br /&gt;
|distance between ticks&lt;br /&gt;
|4|20&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-unit&lt;br /&gt;
|add a unit after the desired value.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |class&lt;br /&gt;
|mini, small, big, bigger, hue-tick, hue-front, hue-back, dim-tick ,dim-front, dim-back, readonly&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[#Beispiel_volume|Link zu einem Beispiel]] (fehlt noch)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;weather&amp;quot;&amp;gt;&#039;&#039;&#039;WEATHER&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!HTML Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Default Wert&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get&lt;br /&gt;
|name of the reading to get the weather literal from Fhem&lt;br /&gt;
|&#039;STATE&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-imageset&lt;br /&gt;
|collection of images to display current weather situation. Possible values: &#039;meteocons&#039;, &#039;kleinklima&#039;&lt;br /&gt;
|&#039;meteocons&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-image-path&lt;br /&gt;
|path to the images of the selected imageset&lt;br /&gt;
|/images/weather/&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[#Beispiel_weather|Link zu einem Beispiel]]&lt;br /&gt;
&lt;br /&gt;
== Widgets -- Beispiele ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Beispiel_chart&amp;quot;&amp;gt;&#039;&#039;&#039;Chart&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Display a chart with similar capabilities as the FHEM plots&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div    data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-logdevice=&#039;[&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Predicted&amp;quot;]&#039;&lt;br /&gt;
	data-columnspec=&#039;[&amp;quot;4:Garden.T:15:&amp;quot;,&amp;quot;10:Garden.T:0:delta-h&amp;quot;,&amp;quot;10:Garden.T:0:delta-d&amp;quot;,&amp;quot;4:predicted.*:15:&amp;quot;]&#039;&lt;br /&gt;
	data-style=&#039;[&amp;quot;ftui l0fill&amp;quot;,&amp;quot;ftui l1fill&amp;quot;,&amp;quot;ftui l2&amp;quot;,&amp;quot;ftui l3dot&amp;quot;]&#039;&lt;br /&gt;
	data-ptype=&#039;[&amp;quot;lines&amp;quot;,&amp;quot;histeps&amp;quot;,&amp;quot;histeps&amp;quot;,&amp;quot;cubic&amp;quot;]&#039;&lt;br /&gt;
	data-uaxis=&#039;[&amp;quot;primary&amp;quot;,&amp;quot;secondary&amp;quot;,&amp;quot;secondary&amp;quot;,&amp;quot;primary&amp;quot;]&#039;&lt;br /&gt;
	data-legend=&#039;[&amp;quot;Temperature&amp;quot;,&amp;quot;Rain/hour&amp;quot;,&amp;quot;Rain/day&amp;quot;,&amp;quot;Predicted Temp.&amp;quot;]&#039;&lt;br /&gt;
	data-yunit=&amp;quot;°C&amp;quot;&lt;br /&gt;
	data-ytext=&amp;quot;Temperature&amp;quot;&lt;br /&gt;
	data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-yunit_sec=&amp;quot;mm&amp;quot;&lt;br /&gt;
	data-ytext_sec=&amp;quot;Rain (mm)&amp;quot;&lt;br /&gt;
	data-height=&amp;quot;250&amp;quot;&lt;br /&gt;
	data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
	data-daysago_start=&amp;quot;2013-08-13T00:00:00&amp;quot;&lt;br /&gt;
	data-daysago_end=&amp;quot;2013-08-14T00:00:00&amp;quot;&lt;br /&gt;
	data-cursorgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-scrollgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-xticks=&amp;quot;auto&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:chart_tabletUI.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Beispiel_circlemenu&amp;quot;&amp;gt;&#039;&#039;&#039;Circlemenu&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cover a lot of other button behind one single button&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;left&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;circlemenu&amp;quot; class=&amp;quot;cell circlemenu&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul class=&amp;quot;menu&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&amp;lt;div data-type=&amp;quot;push&amp;quot; data-icon=&amp;quot;fa-wrench&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;AvReceiver&amp;quot; &lt;br /&gt;
               data-set=&amp;quot;remoteControl subwoofer-temporary-level -6&amp;quot; &lt;br /&gt;
               data-icon=&amp;quot;&amp;quot;&amp;gt;-6&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;AvReceiver&amp;quot; &lt;br /&gt;
               data-set=&amp;quot;remoteControl subwoofer-temporary-level -2&amp;quot; &lt;br /&gt;
               data-icon=&amp;quot;&amp;quot;&amp;gt;-2&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;AvReceiver&amp;quot; &lt;br /&gt;
               data-set=&amp;quot;remoteControl subwoofer-temporary-level 0&amp;quot; &lt;br /&gt;
               data-icon=&amp;quot;&amp;quot;&amp;gt;0&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;AvReceiver&amp;quot; &lt;br /&gt;
               data-set=&amp;quot;remoteControl subwoofer-temporary-level +3&amp;quot; &lt;br /&gt;
               data-icon=&amp;quot;&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;AvReceiver&amp;quot; &lt;br /&gt;
               data-set=&amp;quot;remoteControl subwoofer-temporary-level +9&amp;quot; &lt;br /&gt;
               data-icon=&amp;quot;&amp;quot;&amp;gt;9&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;AvReceiver&amp;quot; &lt;br /&gt;
               data-set=&amp;quot;remoteControl subwoofer-temporary-level +C&amp;quot; &lt;br /&gt;
               data-icon=&amp;quot;&amp;quot;&amp;gt;12&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;cell&amp;quot;&amp;gt;Woofer&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:circlemenu_tabletUI.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Beispiel_departure&amp;quot;&amp;gt;&#039;&#039;&#039;Departure&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Departure Widget Beispiel&lt;br /&gt;
&lt;br /&gt;
Minimalvariante&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
&amp;lt;div data-type=&amp;quot;departure&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;vvs&amp;quot;&lt;br /&gt;
	 data-get=&amp;quot;SSB-Zentrum&amp;quot;&lt;br /&gt;
	 data-icon=&amp;quot;fa-train&amp;quot;&lt;br /&gt;
	 data-interval=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Optionen für class&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class=&amp;quot;&amp;quot; : default Style (grau)&lt;br /&gt;
class=&amp;quot;DVB&amp;quot; anderer Style (gelb)&lt;br /&gt;
class=&amp;quot;VVO&amp;quot; : anderer Style (blau)&lt;br /&gt;
class=&amp;quot;alternate&amp;quot; : alternierender Hintergrund&lt;br /&gt;
class=&amp;quot;deptime&amp;quot; : Abfahrtszeit statt Minuten&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
weiteres Beispiel&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;departure&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;vvs&amp;quot;&lt;br /&gt;
	 data-get=&amp;quot;SSB-Zentrum&amp;quot;&lt;br /&gt;
	 data-icon=&amp;quot;fa-train&amp;quot;&lt;br /&gt;
	 data-interval=&amp;quot;0&amp;quot;&lt;br /&gt;
	 class=&amp;quot;DVB deptime alternate&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Beispiel_dimmer&amp;quot;&amp;gt;&#039;&#039;&#039;Dimmer&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dimmer Widget Beispiel für Philips Hue&lt;br /&gt;
&lt;br /&gt;
Minimalvariante&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
&amp;lt;div data-type=&amp;quot;dimmer&amp;quot; data-device=&amp;quot;HUEDevice1&amp;quot;&lt;br /&gt;
        data-get-on=&amp;quot;!off&amp;quot; data-get-off=&amp;quot;off&amp;quot;&lt;br /&gt;
        data-set=&amp;quot;pct&amp;quot;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit Anzeige der Dimstufe&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;dimmer&amp;quot; data-device=&amp;quot;HUEDevice1&amp;quot;&lt;br /&gt;
       data-get=&amp;quot;onoff&amp;quot;&lt;br /&gt;
       data-get-on=&amp;quot;1&amp;quot; data-get-off=&amp;quot;0&amp;quot;&lt;br /&gt;
       data-set=&amp;quot;&amp;quot;&lt;br /&gt;
       data-set-on=&amp;quot;on&amp;quot; data-set-off=&amp;quot;off&amp;quot;&lt;br /&gt;
       data-dim=&amp;quot;pct&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dimmer Widget für MilightDevice&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;dimmer&amp;quot;&lt;br /&gt;
  data-device=&amp;quot;SonstWas&amp;quot;&lt;br /&gt;
  data-get=&amp;quot;brightness&amp;quot;&lt;br /&gt;
  data-get-off=&amp;quot;0&amp;quot;&lt;br /&gt;
  data-get-on=&amp;quot;[1-9][0-9]*&amp;quot;&lt;br /&gt;
  data-set-on=&amp;quot;on&amp;quot;&lt;br /&gt;
  data-set-off=&amp;quot;off&amp;quot;&lt;br /&gt;
  data-dim=&amp;quot;dim&amp;quot;&lt;br /&gt;
  data-min=&amp;quot;0&amp;quot;&lt;br /&gt;
  data-max=&amp;quot;100&amp;quot;&lt;br /&gt;
&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Beispiel_homestatus&amp;quot;&amp;gt;&#039;&#039;&#039;Homestatus&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel rechts im Bild:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;homestatus&amp;quot; data-device=&#039;dummy1&#039;&lt;br /&gt;
       data-get-on=&#039;[&amp;quot;1&amp;quot;,&amp;quot;2&amp;quot;,&amp;quot;3&amp;quot;,&amp;quot;4&amp;quot;]&#039;&lt;br /&gt;
       data-alias=&#039;[&amp;quot;Home&amp;quot;,&amp;quot;Night&amp;quot;,&amp;quot;Away&amp;quot;,&amp;quot;Holiday&amp;quot;]&#039;&lt;br /&gt;
       data-icons=&#039;[&amp;quot;fa-home&amp;quot;,&amp;quot;fa-bed&amp;quot;,&amp;quot;fa-car&amp;quot;,&amp;quot;fa-suitcase&amp;quot;]&#039;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel links im Bild:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;homestatus&amp;quot; data-device=&#039;dummy1&#039;&lt;br /&gt;
        data-get-on=&#039;[&amp;quot;home&amp;quot;,&amp;quot;asleep&amp;quot;,&amp;quot;absent&amp;quot;,&amp;quot;gone&amp;quot;,&amp;quot;gotosleep&amp;quot;]&#039;&lt;br /&gt;
        data-alias=&#039;[&amp;quot;Home&amp;quot;,&amp;quot;Night&amp;quot;,&amp;quot;Away&amp;quot;,&amp;quot;Holiday&amp;quot;,&amp;quot;Retire&amp;quot;]&#039;&lt;br /&gt;
        data-icons=&#039;[&amp;quot;fa-fire&amp;quot;,&amp;quot;fa-film&amp;quot;,&amp;quot;fa-plus&amp;quot;,&amp;quot;fa-car&amp;quot;,&amp;quot;fa-tint&amp;quot;]&#039;&lt;br /&gt;
        data-version=&#039;residents&#039;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:homestatus_tabletUI.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Beispiel_image&amp;quot;&amp;gt;&#039;&#039;&#039;Image&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Erzeugt ein Widget mit einem Bild aus dem www, das alle 5 Sekunden aktualisiert wird (hier eine Wetterkarte vom DWD).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;image&amp;quot;&lt;br /&gt;
     data-size=&amp;quot;80%&amp;quot;&lt;br /&gt;
     data-url=&amp;quot;http://www.dwd.de/wundk/wetter/de/Deutschland.jpg&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:image_tabletUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example for how to add an image to the dashboard which its URL is delivered by a Fhem module like PROPLANTA:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;image&amp;quot; data-device=&amp;quot;Wetter1&amp;quot; &lt;br /&gt;
     data-get=&amp;quot;fc0_weatherDayIcon&amp;quot; &lt;br /&gt;
     data-size=&amp;quot;40px&amp;quot; &lt;br /&gt;
     class=&amp;quot;cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Beispiel_label&amp;quot;&amp;gt;&#039;&#039;&#039;Label&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example for HM-WDS40-TH-I Funk-Temperatur-/Feuchtesensor innen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
STATE   T: 20.0 H: 61&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;THSensorWZ&amp;quot; &lt;br /&gt;
     data-part=&amp;quot;2&amp;quot; data-unit=&amp;quot;%B0C%0A&amp;quot; class=&amp;quot;cell big&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;cell&amp;quot;&amp;gt;Temperatur&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;THSensorWZ&amp;quot; data-part=&amp;quot;4&amp;quot; &lt;br /&gt;
     data-unit=&amp;quot;%&amp;quot; class=&amp;quot;cell big&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;cell&amp;quot;&amp;gt;Luftfeuchte&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But the same result can reached by getting single readings:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
humidity    58&lt;br /&gt;
temperature 20.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;THSensorWZ&amp;quot; &lt;br /&gt;
     data-get=&amp;quot;temperature&amp;quot; data-unit=&amp;quot;%B0C%0A&amp;quot; class=&amp;quot;cell big&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;cell&amp;quot;&amp;gt;Temperatur&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;THSensorWZ&amp;quot; &lt;br /&gt;
     data-get=&amp;quot;humidity&amp;quot; data-unit=&amp;quot;%&amp;quot; class=&amp;quot;cell big&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;cell&amp;quot;&amp;gt;Luftfeuchte&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example for how to influence the color of the label according to value limits&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot; &lt;br /&gt;
     data-device=&amp;quot;OutTemp&amp;quot; &lt;br /&gt;
     data-limits=&#039;[-73,10,23]&#039; &lt;br /&gt;
     data-colors=&#039;[&amp;quot;#6699FF&amp;quot;,&amp;quot;#AA6900&amp;quot;,&amp;quot;#FF0000&amp;quot;]&#039; &lt;br /&gt;
     data-unit=&amp;quot;%B0C%0A&amp;quot; &lt;br /&gt;
     class=&amp;quot;cell big&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example for how to create a widget for shutter via push: show state and set up/down&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;switch&amp;quot; &lt;br /&gt;
     data-device=&amp;quot;wzRollo&amp;quot; &lt;br /&gt;
     data-get-on=&amp;quot;up&amp;quot; &lt;br /&gt;
     data-get-off=&amp;quot;down&amp;quot; &lt;br /&gt;
     data-icon=&amp;quot;fa-bars&amp;quot; &lt;br /&gt;
     class=&amp;quot;cell&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot; &lt;br /&gt;
     class=&amp;quot;cell&amp;quot;&amp;gt;Rollo&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example for how to create a label for a time value in short format with usage of RegEx.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot; &lt;br /&gt;
     data-device=&amp;quot;dummy1&amp;quot; &lt;br /&gt;
     data-part=&amp;quot;(\d\d\.\d\d\.).*&amp;quot; &lt;br /&gt;
     class=&amp;quot;cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example for how to show two labels in one line.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;div type=&amp;quot;label&amp;quot; device=&amp;quot;OnSunrise&amp;quot; class=&amp;quot;inline&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;bis&lt;br /&gt;
   &amp;lt;div type=&amp;quot;label&amp;quot; device=&amp;quot;OnSunset&amp;quot; class=&amp;quot;inline&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel für die Anzeige des UV-Indexes und der Abhängigkeit der anzuzeigenden Farbe.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;wider cell bigger&amp;quot; data-device=&amp;quot;ProVorhersage&amp;quot;&lt;br /&gt;
        data-get=&amp;quot;fc0_uv&amp;quot;&lt;br /&gt;
        data-limits=&amp;quot;[-2, 2, 5, 7, 10]&amp;quot; &lt;br /&gt;
	data-colors=&#039;[&amp;quot;#66FF33&amp;quot;,&amp;quot;#FFFF00&amp;quot;,&amp;quot;#FF6600&amp;quot;,&amp;quot;#FF0000&amp;quot;,&amp;quot;#993399&amp;quot;]&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;cell&amp;quot; data-device=&amp;quot;ProVorhersage&amp;quot; data-get=&amp;quot;fc0_date&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;wider cell bigger&amp;quot; data-device=&amp;quot;ProVorhersage&amp;quot;&lt;br /&gt;
        data-get=&amp;quot;fc1_uv&amp;quot;&lt;br /&gt;
	data-limits=&amp;quot;[-2, 2, 5, 7, 10]&amp;quot;&lt;br /&gt;
	data-colors=&#039;[&amp;quot;#66FF33&amp;quot;,&amp;quot;#FFFF00&amp;quot;,&amp;quot;#FF6600&amp;quot;,&amp;quot;#FF0000&amp;quot;,&amp;quot;#993399&amp;quot;]&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;cell&amp;quot; data-device=&amp;quot;ProVorhersage&amp;quot; data-get=&amp;quot;fc1_date&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:label_tabletUI.jpg]]&lt;br /&gt;
&lt;br /&gt;
Beispiel für die Anzeige des Labels als Icon.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;cell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;AvReceiver&amp;quot; data-get=&amp;quot;input&amp;quot; class=&amp;quot;icon round bg-red cell&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;AvReceiver&amp;quot; data-get=&amp;quot;input&amp;quot; class=&amp;quot;icon square bg-blue cell&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;AvReceiver&amp;quot; data-get=&amp;quot;input&amp;quot; class=&amp;quot;icon squareborder cell&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;PowerAV_Sw&amp;quot; data-colors=&#039;[&amp;quot;red&amp;quot;,&amp;quot;green&amp;quot;]&#039; data-limits=&#039;[&amp;quot;off&amp;quot;,&amp;quot;on&amp;quot;]&#039; class=&amp;quot;icon round bg-limit cell&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:Label_tabletUI_icon.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Beispiel_pagetab&amp;quot;&amp;gt;&#039;&#039;&#039;Pagetab&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example for a tab menu to switch smoothly between multiple pages. Multiple pagetabs in a template file: menu.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;header&amp;gt;MENU&amp;lt;/header&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;cell&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div data-type=&amp;quot;pagetab&amp;quot; data-url=&amp;quot;index.html&amp;quot;  data-icon=&amp;quot;fa-home&amp;quot; class=&amp;quot;cell&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div data-type=&amp;quot;pagetab&amp;quot; data-url=&amp;quot;index_2.html&amp;quot; data-icon=&amp;quot;fa-sliders&amp;quot; class=&amp;quot;cell&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div data-type=&amp;quot;pagetab&amp;quot; data-url=&amp;quot;index_3.html&amp;quot; data-icon=&amp;quot;fa-music&amp;quot; class=&amp;quot;cell&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div data-type=&amp;quot;pagetab&amp;quot; data-url=&amp;quot;index_4.html&amp;quot; data-icon=&amp;quot;fa-hotel&amp;quot; class=&amp;quot;cell&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div data-type=&amp;quot;pagetab&amp;quot; data-url=&amp;quot;index_5.html&amp;quot; data-icon=&amp;quot;fa-music&amp;quot; class=&amp;quot;cell&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div data-type=&amp;quot;pagetab&amp;quot; data-url=&amp;quot;index_6.html&amp;quot; data-icon=&amp;quot;fa-database&amp;quot; class=&amp;quot;cell&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div data-type=&amp;quot;pagetab&amp;quot; data-url=&amp;quot;index_7.html&amp;quot; data-icon=&amp;quot;fa-fax&amp;quot; class=&amp;quot;cell&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Beispiel_playstream&amp;quot;&amp;gt;&#039;&#039;&#039;Playstream&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erzeugt einen Knopf zum direkten Abspielen eines Webradio-Streams.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     &amp;lt;div data-type=&amp;quot;playstream&amp;quot; data-url=&amp;quot;http://radioeins.de/stream&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
     &amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;darker&amp;quot;&amp;gt;Radio eins&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Beispiel_push&amp;quot;&amp;gt;&#039;&#039;&#039;Push&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example for how to create a push button widget to trigger all devices on:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;push&amp;quot; &lt;br /&gt;
     data-device=&amp;quot;LightAll&amp;quot; &lt;br /&gt;
     data-cmd=&amp;quot;trigger&amp;quot; &lt;br /&gt;
     data-set=&amp;quot;on&amp;quot; &lt;br /&gt;
     class=&amp;quot;cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beispiel für zwei horizontale Buttons:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;doublebox-h&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;Rollo&amp;quot; &lt;br /&gt;
             data-icon=&amp;quot;fa-angle-up&amp;quot; data-background-icon=&amp;quot;fa-square-o&amp;quot; &lt;br /&gt;
             data-set=&amp;quot;up&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;Rollo&amp;quot; &lt;br /&gt;
             data-icon=&amp;quot;fa-angle-down&amp;quot; data-background-icon=&amp;quot;fa-square-o&amp;quot; &lt;br /&gt;
             data-set=&amp;quot;down&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:push1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beispiel für zwei quadratische vertikale Buttons:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;doublebox-v&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;Rollo&amp;quot; &lt;br /&gt;
             data-icon=&amp;quot;fa-chevron-up&amp;quot; data-background-icon=&amp;quot;fa-square-o&amp;quot; &lt;br /&gt;
             data-set=&amp;quot;up&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;Rollo&amp;quot; &lt;br /&gt;
            data-icon=&amp;quot;fa-chevron-down&amp;quot; data-background-icon=&amp;quot;fa-square-o&amp;quot; &lt;br /&gt;
            data-set=&amp;quot;down&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:push2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Beispiel_rotor&amp;quot;&amp;gt;&#039;&#039;&#039;Rotor&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example for a rotor widget, which switches between to days of weather forecast&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;rotor&amp;quot; class=&amp;quot;fade&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;darker&amp;quot;&amp;gt;Heute&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;weather&amp;quot; data-device=&amp;quot;AgroWeather&amp;quot; data-get=&amp;quot;fc0_weatherDay&amp;quot; class=&amp;quot;big&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;AgroWeather&amp;quot; data-get=&amp;quot;fc0_weatherDay&amp;quot; class=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;AgroWeather&amp;quot; data-get=&amp;quot;fc0_tempMax&amp;quot; data-unit=&amp;quot;%B0C%0A&amp;quot; class=&amp;quot;large&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;darker&amp;quot;&amp;gt;Morgen&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;weather&amp;quot; data-device=&amp;quot;AgroWeather&amp;quot; data-get=&amp;quot;fc1_weatherDay&amp;quot; class=&amp;quot;big&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;AgroWeather&amp;quot; data-get=&amp;quot;fc1_weatherDay&amp;quot; class=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;AgroWeather&amp;quot; data-get=&amp;quot;fc1_tempMax&amp;quot; data-unit=&amp;quot;%B0C%0A&amp;quot; class=&amp;quot;large&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Beispiel_select&amp;quot;&amp;gt;&#039;&#039;&#039;Select&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erzeugt zwei Comboboxen zur Auswahl des Eingang eines 2-Zonen-AV-Receivers. Die Liste für Zone2 ist fest, die Liste für Zone1 wird von Fhem übergeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell wider&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;inline wider&amp;quot;&amp;gt;Zone2&amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div data-type=&amp;quot;select&amp;quot; data-device=&amp;quot;AvReceiverZ2&amp;quot; data-items=&#039;[&amp;quot;Airplay&amp;quot;,&amp;quot;Webradio&amp;quot;,&amp;quot;BD/DVD&amp;quot;,&amp;quot;PHONO&amp;quot;]&#039; data-get=&amp;quot;input&amp;quot; data-set=&amp;quot;input&amp;quot; class=&amp;quot;cell w2x&amp;quot; &amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;inline&amp;quot;&amp;gt;Zone1&amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div data-type=&amp;quot;select&amp;quot; data-device=&amp;quot;AvReceiver&amp;quot; data-list=&amp;quot;inputs&amp;quot; data-get=&amp;quot;input&amp;quot; data-set=&amp;quot;input&amp;quot; class=&amp;quot;cell w2x&amp;quot; &amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:select_tabeltUI.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Beispiel_slider&amp;quot;&amp;gt;&#039;&#039;&#039;Slider&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Slider mit einstellbaren Werten von 10 bis 90:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;slider&amp;quot; &lt;br /&gt;
     data-device=&#039;Dummy1&#039; &lt;br /&gt;
     data-min=&amp;quot;10&amp;quot; &lt;br /&gt;
     data-max=&amp;quot;90&amp;quot; &lt;br /&gt;
     class=&amp;quot;cell&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;cell&amp;quot;&amp;gt;Light1&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:slider_tabletUI.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Horizontal angeordneter Slider:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
     data-device=&#039;Dummy1&#039; &lt;br /&gt;
     data-min=&amp;quot;0&amp;quot; &lt;br /&gt;
     data-max=&amp;quot;100&amp;quot; &lt;br /&gt;
     class=&amp;quot;horizontal&amp;quot; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:slider_tabletUI2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Beispiel_switch&amp;quot;&amp;gt;&#039;&#039;&#039;Switch&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schalter. Usage of RegEx pattern for state request:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;switch&amp;quot; class=&amp;quot;cell&amp;quot; &lt;br /&gt;
            data-device=&amp;quot;MILIGHT_Zone1_Wohnzimmer&amp;quot; &lt;br /&gt;
            data-get-on=&amp;quot;on.*&amp;quot;&lt;br /&gt;
            data-get-off=&amp;quot;off&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:switch.png]]&lt;br /&gt;
&lt;br /&gt;
Beispiel für eine Gruppe von Schaltern, um zwischen vier verschiedenen Werten eines device umzuschalten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell left&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div data-type=&amp;quot;switch&amp;quot; data-device=&amp;quot;dummy1&amp;quot; &lt;br /&gt;
      data-get-off=&amp;quot;((?!Wert1).)*&amp;quot; &lt;br /&gt;
      data-get-on=&amp;quot;Wert1&amp;quot; class=&amp;quot;cell&amp;quot; &amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;cell&amp;quot;&amp;gt;Wert1&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;div data-type=&amp;quot;switch&amp;quot; data-device=&amp;quot;dummy1&amp;quot; &lt;br /&gt;
      data-get-off=&amp;quot;((?!Wert2).)*&amp;quot; &lt;br /&gt;
      data-get-on=&amp;quot;Wert2&amp;quot; class=&amp;quot;cell&amp;quot; &amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;cell&amp;quot;&amp;gt;Wert2&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;div data-type=&amp;quot;switch&amp;quot; data-device=&amp;quot;dummy1&amp;quot; &lt;br /&gt;
      data-get-off=&amp;quot;((?!Wert3).)*&amp;quot; &lt;br /&gt;
      data-get-on=&amp;quot;Wert3&amp;quot; class=&amp;quot;cell&amp;quot; &amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;cell&amp;quot;&amp;gt;Wert3&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;div data-type=&amp;quot;switch&amp;quot; data-device=&amp;quot;dummy1&amp;quot; &lt;br /&gt;
      data-get-off=&amp;quot;((?!Wert4).)*&amp;quot; &lt;br /&gt;
      data-get-on=&amp;quot;Wert4&amp;quot; class=&amp;quot;cell&amp;quot; &amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;cell&amp;quot;&amp;gt;Wert4&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:switch4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Beispiel_symbol&amp;quot;&amp;gt;&#039;&#039;&#039;Symbol&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example for a tristate icon&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;symbol&amp;quot; data-device=&amp;quot;dummy1&amp;quot; &lt;br /&gt;
     data-get-on=&#039;[&amp;quot;wert1&amp;quot;,&amp;quot;wert2&amp;quot;,&amp;quot;wert3&amp;quot;]&#039; &lt;br /&gt;
     data-icons=&#039;[&amp;quot;fa-arrow-up&amp;quot;,&amp;quot;fa-user&amp;quot;,&amp;quot;fa-arrow-down&amp;quot;]&#039; &lt;br /&gt;
     data-on-colors=&#039;[&amp;quot;SeaGreen&amp;quot;,&amp;quot;SlateBlue&amp;quot;,&amp;quot;IndianRed&amp;quot;]&#039; &lt;br /&gt;
     class=&amp;quot;cell big&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example for a tristate icon with blink and spin animation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;symbol&amp;quot; data-device=&amp;quot;dummy1&amp;quot; &lt;br /&gt;
     data-icons=&#039;[&amp;quot;fa-exclamation-triangle fa-blink&amp;quot;,&amp;quot;fa-exclamation-circle&amp;quot;,&amp;quot;fa-cog fa-spin&amp;quot;]&#039; &lt;br /&gt;
     data-on-colors=&#039;[&amp;quot;Crimson&amp;quot;,&amp;quot;GoldenRod&amp;quot;,&amp;quot;SeaGreen&amp;quot;]&#039; &lt;br /&gt;
     data-get-on=&#039;[&amp;quot;Wert1&amp;quot;,&amp;quot;Wert2&amp;quot;,&amp;quot;Wert3&amp;quot;]&#039; &amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example for a battery level control with RegEx&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;symbol&amp;quot; data-device=&amp;quot;BadHeizung&amp;quot; data-get=&amp;quot;batteryLevel&amp;quot;&lt;br /&gt;
     data-icons=&#039;[&amp;quot;oa-measure_battery_100&amp;quot;,&amp;quot;oa-measure_battery_75&amp;quot;,&amp;quot;oa-measure_battery_50&amp;quot;,&amp;quot;oa-measure_battery_25&amp;quot;,&amp;quot;oa-measure_battery_0&amp;quot;]&#039;&lt;br /&gt;
     data-get-on=&#039;[&amp;quot;3\\.[0-9]&amp;quot;,&amp;quot;2\\.[789]&amp;quot;,&amp;quot;2\\.[456]&amp;quot;,&amp;quot;2\\.[123]&amp;quot;,&amp;quot;((2\\.0)|([01]\\.[0-9]))&amp;quot;]&#039;&lt;br /&gt;
     data-on-colors=&#039;[&amp;quot;#505050&amp;quot;,&amp;quot;#505050&amp;quot;,&amp;quot;#505050&amp;quot;,&amp;quot;#ad3333&amp;quot;,&amp;quot;#ad3333&amp;quot;]&#039;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example for a battery level control with greater-equal compare and 90° rotated symbols&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;symbol&amp;quot; data-device=&amp;quot;BadHeizung&amp;quot; data-get=&amp;quot;batteryLevel&amp;quot;&lt;br /&gt;
    data-icons=&#039;[&amp;quot;oa-measure_battery_0 fa-rotate-90&amp;quot;,&amp;quot;oa-measure_battery_25 fa-rotate-90&amp;quot;,&amp;quot;oa-measure_battery_50 fa-rotate-90&amp;quot;,&amp;quot;oa-measure_battery_75 fa-rotate-90&amp;quot;,&amp;quot;oa-measure_battery_0 fa-rotate-90&amp;quot;]&#039;&lt;br /&gt;
    data-get-on=&#039;[&amp;quot;0&amp;quot;,&amp;quot;2&amp;quot;,&amp;quot;2.4&amp;quot;,&amp;quot;2.7&amp;quot;,&amp;quot;3.0&amp;quot;]&#039;&lt;br /&gt;
    data-on-colors=&#039;[&amp;quot;#ad3333&amp;quot;,&amp;quot;#ad3333&amp;quot;,&amp;quot;#505050&amp;quot;,&amp;quot;#505050&amp;quot;,&amp;quot;#505050&amp;quot;]&#039;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Beispiel_thermostat&amp;quot;&amp;gt;&#039;&#039;&#039;Thermostat&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure as data-device=&#039;...&#039; that item which delivers temp and desired-temp as reading.&lt;br /&gt;
&lt;br /&gt;
Default parameters are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
data-get=&amp;quot;desired-temp&amp;quot; data-temp=&amp;quot;measured-temp&amp;quot; data-set=&amp;quot;desired-temp&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Therefor for HomaMatic HM-CC-RT-DN this is sufficient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;thermostat&amp;quot; data-device=&#039;KH_Clima&#039; class=&amp;quot;cell&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The long format looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;thermostat&amp;quot; &lt;br /&gt;
     data-device=&amp;quot;KH_Clima&amp;quot; &lt;br /&gt;
     data-valve=&amp;quot;ValvePosition&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;desired-temp&amp;quot; &lt;br /&gt;
     data-temp=&amp;quot;measured-temp&amp;quot; &lt;br /&gt;
     class=&amp;quot;cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example for MAX!:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;thermostat&amp;quot; data-device=&amp;quot;HZ_Tuer&amp;quot; &lt;br /&gt;
    data-valve=&amp;quot;valveposition&amp;quot; &lt;br /&gt;
    data-get=&amp;quot;desiredTemperature&amp;quot; &lt;br /&gt;
    data-temp=&amp;quot;temperature&amp;quot; &lt;br /&gt;
    data-set=&amp;quot;desiredTemperature&amp;quot; &lt;br /&gt;
    class=&amp;quot;cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The wigets will show the valve value only in case of a valid data-valve attribute. The default for data-valve ist null. That means, a empty data-valve attribute hides the valve label for the widget.&lt;br /&gt;
&lt;br /&gt;
[[Datei:thermostat.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Beispiel_weather&amp;quot;&amp;gt;&#039;&#039;&#039;Weather&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Widget fügt ein dem Wetter entsprechendes Bild ein. Die Daten können durch Fhem-Module wie [[PROPLANTA]], [[OPENWEATHER]] und [[Weather]] bereitgestellt werden. &lt;br /&gt;
Add &#039;big&#039; or &#039;bigger&#039; to CSS class to get a bigger weather icon.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;weather&amp;quot; &lt;br /&gt;
     data-device=&amp;quot;Weather&amp;quot; &lt;br /&gt;
     data-get=&amp;quot;fc0_weatherDay&amp;quot; &lt;br /&gt;
     class=&amp;quot;cell big&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:weather.png]]&lt;br /&gt;
&lt;br /&gt;
== Icon-Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
* Eingebaute Icons: Diese haben das ftui-Präfix. Zurzeit sind folgende verfügbar: ftui-window, ftui-door&lt;br /&gt;
&lt;br /&gt;
* Mehr als 500 Icons von &amp;quot;http://fortawesome.github.io/Font-Awesome/icons&amp;quot; verfügbar. Einfach den Icon-Namen angeben (Präfix &amp;quot;fa-&amp;quot; nicht vergessen, Z.B. &amp;lt;code&amp;gt;data-icon=&amp;quot;fa-volume-up&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Es stehen auch Openautomation Font-Files zur Verfügung. Wer sie nutzen möchte, muss folgende Stylesheets in die index.html hinzufügen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;/fhem/tablet/lib/openautomation.css&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;/fhem/tablet/lib/fhemSVG.css&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese font icons haben das Präfix &#039;fs-&#039; bzw. &#039;oa-&#039;.&lt;br /&gt;
&lt;br /&gt;
Beispiel bei einem Schalter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;div data-type=&amp;quot;switch&amp;quot; data-device=&#039;dummy1&#039; data-icon=&amp;quot;oa-secur_locked&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und so als großes Symbol:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;symbol&amp;quot; data-device=&#039;dummy1&#039;&lt;br /&gt;
        data-icon=&amp;quot;oa-status_frost&amp;quot;&lt;br /&gt;
        data-on-color=&amp;quot;#bb3232&amp;quot;&lt;br /&gt;
        data-get-on=&amp;quot;on&amp;quot;&lt;br /&gt;
        data-get-off=&amp;quot;!on&amp;quot;&lt;br /&gt;
        class=&amp;quot;bigger&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Icons kann man auch etwas dicker darstellen mit den Zusatz bold: &amp;lt;code&amp;gt;data-icon=&amp;quot;oa-secur_locked bold&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Namen der verfügbaren Icons findet man auch in den CSS Files (openautomation.css / fhemSVG.css)&lt;br /&gt;
&lt;br /&gt;
== Spezial ==&lt;br /&gt;
Folgender Befehl setzt einen direkten Befehl an Fhem ab (&amp;lt;code&amp;gt;set dummy1 off&amp;lt;/code&amp;gt;):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     &amp;lt;div onclick=&amp;quot;setFhemStatus(&#039;set dummy1 off&#039;)&amp;quot;&amp;gt;All off!&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
Häufig gestellte Fragen zum FHEM Tablet UI sind in der [[FHEM_Tablet_UI/FAQ|FHEM Tablet UI FAQ]] zusammengestellt.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://forum.fhem.de/index.php/topic,34233.0.html Forums-Beitrag]&lt;br /&gt;
* [https://github.com/knowthelist/fhem-tablet-ui Projekt auf Github]&lt;br /&gt;
* [http://forum.fhem.de/index.php/topic,37378.0.html User-Demos]&lt;br /&gt;
* [https://github.com/ovibox/fhem-ftui-user-demos Download der User-Demo-Dateien]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Raspberry_Pi&amp;diff=17632</id>
		<title>Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Raspberry_Pi&amp;diff=17632"/>
		<updated>2016-12-01T07:32:23Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: Perl JSON: Im Befehl fehlte die Angabe sudo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Beim &#039;&#039;&#039;Raspberry Pi&#039;&#039;&#039; handelt es sich um einen postkartengroßen Einplatinen-Computer, der von der Raspberry Pi Foundation entwickelt wird. Die Hardware basiert auf dem BCM 283x SoC (System-on-Chip) von Broadcom, einem ARM-Prozessor. Zu Hardwaredetails und den verschiedenen Modellen sowie Produktentwicklungen siehe [http://de.wikipedia.org/wiki/Raspberry_Pi#Hardware Wikipedia].&lt;br /&gt;
Dank der kleinen Abmessungen, dem recht geringen Energieverbrauch (bis ca. 4 Watt) sowie der günstigen Anschaffungskosten (ca. 30€) ist der Raspberry Pi eine attraktive Hardware für die Heimautomatisierung mit FHEM. Er ist dank dem Linux-Betriebssystem vollständig kompatibel zur aktuell vorhandenen und von FHEM unterstützen Hardware. Das derzeit empfohlene Standard-Image zum Betrieb des Raspberry Pi ist die auf Debian basierende Raspbian Distribution.&lt;br /&gt;
&lt;br /&gt;
== Installation / Setup ==&lt;br /&gt;
=== Betriebssystem ===&lt;br /&gt;
Das Betriebssystem sollte direkt bei Raspberry unter dem Link [http://www.raspberrypi.org/downloads http://www.raspberrypi.org/downloads] ([http://downloads.raspberrypi.org/raspbian_latest Raspbian]) geholt werden.&lt;br /&gt;
&lt;br /&gt;
Nach dem Herunterladen des entsprechenden Archivs muss das Image entpackt und auf die Speicherkarte (SD-Karte bis Modell B / MicroSD ab Modell B+) geschrieben werden. Detaillierte englische Anleitungen zum Vorgehen für verschiedene Betriebssysteme stellt Raspberry [http://www.raspberrypi.org/documentation/installation/installing-images/README.md hier] zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Unter &#039;&#039;&#039;Unix/Linux&#039;&#039;&#039; erfolgt dies via dd-Befehl. Zum Beispiel:&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo dd bs=1M if=2012-08-16-wheezy-raspbian.img of=/dev/sdz&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Bei Angabe eines falschen Device hinter of= kann der Anfang der eigenen Festplatte überschrieben werden. (Datenverlust!)&lt;br /&gt;
&lt;br /&gt;
Je nach System/Distribution und vorhandenen Festplatten variiert das Device, z.B. /dev/mmcblk0 (Ubuntu), /dev/sdb, /dev/sdc oder /dev/rdisk1 (OSX). Folgende Möglichkeiten können helfen, das richtige Device zu ermitteln:&lt;br /&gt;
* Mit dem Befehl &amp;lt;code&amp;gt;df&amp;lt;/code&amp;gt; erhält kann eine Übersicht aller angeschlossenen und gemounteten(!) Speichermedien. &lt;br /&gt;
* Beim Einstecken der Speicherkarte in den PC wird in die Log-Datei &amp;lt;code&amp;gt;/var/log/messages&amp;lt;/code&amp;gt; ein Eintrag gemacht. Beispiel: &amp;lt;code&amp;gt;kernel: [2077612.776470] sd 14:0:0:0: [&#039;&#039;&#039;sdb&#039;&#039;&#039;] 7954432 512-byte logical blocks: (&#039;&#039;&#039;4.07 GB&#039;&#039;&#039;/3.79 GiB)&amp;lt;/code&amp;gt;&lt;br /&gt;
* Mit dem Befehl fdisk kann die Größe eines bestimmten Devices geprüft werden: &amp;lt;code&amp;gt;fdisk -l /dev/sdb&amp;lt;/code&amp;gt; Beispielausgabe: &amp;lt;code&amp;gt;Platte /dev/sdb: 4072 MByte, 4072669184 Byte&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter &#039;&#039;&#039;Windows&#039;&#039;&#039; kann das Tool [https://launchpad.net/win32-image-writer Win32DiskImager] genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation des Images sollte der Raspberry Pi von der Speicherkarte booten.&lt;br /&gt;
&lt;br /&gt;
Um eventuell eine größere Speicherkarte komplett zu nutzen, kann dies per folgendem Menu erledigt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fhem ===&lt;br /&gt;
Die Installation auf dem Raspberry Pi kann nach der Installation des Betriebssystems über das Debian-Repository von FHEM, automatisiert per Skript oder auch manuell vorgenommen werden.&lt;br /&gt;
&lt;br /&gt;
==== Debian-Repository ====&lt;br /&gt;
Seit Oktober 2014 ({{Link2Forum|Topic=27679}}) kann FHEM auf Debian-basierten Systemen, wozu auch Raspian OS zählt, aus einem Debian-Repository installiert werden. Dabei werden neben FHEM selbst alle für den Betrieb von FHEM unabdingbaren Pakete automatisch mit installiert und eine Reihe weiterer Pakete für die Installation vorgeschlagen. Details zur Vorgehensweise finden sich direkt auf [https://debian.fhem.de https://debian.fhem.de]. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Bei manchen Distributionen ist es erforderlich die apt-Methode HTTPS nachzuinstallieren. Der folgende Befehl installiert die Methode:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install apt-transport-https&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Skript-basiert ====&lt;br /&gt;
Durch Ausführung des in diesem {{Link2Forum|Topic=15848|Message=103268}} dargestellten Skriptes nach Installation eines &amp;quot;nackten&amp;quot; Raspian OS wird automatisiert ein funktionsfähiges FHEM (inkl. korrekter Rechtevergabe) auf dem Raspberry Pi installiert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Bei dieser Installationsweise erfolgt kein automatischer Start von FHEM. Um das zu erreichen, verwenden Sie die folgende &amp;quot;manuelle&amp;quot; Methode.&lt;br /&gt;
&lt;br /&gt;
==== Manuell ====&lt;br /&gt;
Die Installation von FHEM auf dem Raspberry Pi kann mit dem fertigen debian-package erledigt werden. Lediglich das Perl-Modul &amp;quot;Serialport&amp;quot; wird benötigt - Perl ist in der Regel bereits installiert, kann aber sicherheitshalber einfach mit dem apt-get-Befehl zugefügt werden:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install perl libdevice-serialport-perl&lt;br /&gt;
 sudo apt-get install libio-socket-ssl-perl&lt;br /&gt;
 # fhem-X.Y.deb bitte mit der [http://fhem.de/fhem.html#Download aktuellsten, stabilen Version] ersetzen&lt;br /&gt;
 wget  [http://fhem.de/fhem-X.Y.deb http://fhem.de/fhem-X.Y.deb]&lt;br /&gt;
 sudo dpkg -i fhem-X.Y.deb&lt;br /&gt;
&lt;br /&gt;
Möglicherweise ist es noch nötig, fehlende Abhängigkeiten aufzulösen. Das kann mit folgendem Befehl erledigt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo apt-get install -f&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine etwas ausführlichere Anleitung gibt es auch [http://www.fhemwiki.de/wiki/FHEM_auf_Raspberry_PI_mit_COC_betreiben#FHEM_Installieren hier]&lt;br /&gt;
&lt;br /&gt;
=== Nützliche Zusatzpakete ===&lt;br /&gt;
Nachdem der Rpi eingerichtet ist, können weitere Pakete installiert werden. Keines davon ist zwingend erforderlich, um FHEM grundsätzlich betreiben zu können. Einige Pakete erhöhen aber den Bedienungskomfort oder sind zur Nutzung bestimmter FHEM-Module erforderlich. Hier eine Übersicht.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:10%&amp;quot; | Beschreibung&lt;br /&gt;
! style=&amp;quot;width:10%&amp;quot; | Paketname&lt;br /&gt;
! style=&amp;quot;width:50%&amp;quot; | Kontext&lt;br /&gt;
! style=&amp;quot;width:30%&amp;quot; | Installieren&lt;br /&gt;
|-&lt;br /&gt;
|FHEM&lt;br /&gt;
|fhem&lt;br /&gt;
|Installiert eine komplett lauffähige FHEM-Installation.&lt;br /&gt;
Details siehe auf [https://debian.fhem.de/ Stable build using aptitude], für Optionen siehe diesen [http://forum.fhem.de/index.php/topic,27679.0.html Forumsartikel]&lt;br /&gt;
Achtung: In der Befehlsliste rechts erstreckt sich der erste Befehl über 2 Zeilen!&lt;br /&gt;
| &amp;lt;code&amp;gt;sudo wget -qO - https://debian.fhem.de/archive.key &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; apt-key add -&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo deb https://debian.fhem.de/stable ./&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Zeitserver&lt;br /&gt;
|ntpdate&lt;br /&gt;
|Setzt die Systemzeit bei Start des RPi. Wird für FHEM benötigt, da es sonst nicht startet.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install ntpdate&lt;br /&gt;
sudo ntpdate -u de.pool.ntp.org&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Perl JSON&lt;br /&gt;
|JSON&lt;br /&gt;
|Wird von einigen Modulen benötigt, z.B. harmony, iTunes&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install libjson-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Samba-Server&lt;br /&gt;
|samba&lt;br /&gt;
|Mittels Samba kann man z.B. den Ordner /opt/fhem als Share freigeben. Dieser Share kann z.B. im Windows-Explorer als Laufwerk verbunden werden, so dass die Bearbeitung von config- und Programmdateien bequem möglich ist. Hier eine hilfreiche [https://www.elektronik-kompendium.de/sites/raspberry-pi/2007071.htm Kurzanleitung] aus der (wenn man auf einen speziellen user verzichtet) nur die Einträge für smb.conf gesetzt werden müssen.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install samba cifs-utils&amp;lt;/code&amp;gt;&lt;br /&gt;
Danach muss der share definiert werden mittels&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo nano /etc/samba/smb.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Mailversand&lt;br /&gt;
|sendEmail&lt;br /&gt;
|Wird benötigt, um Mails versenden zu können, bspw. für Alarm-Benachrichtigungen.&lt;br /&gt;
Nach Installation des Paketes benötigt man noch eine Routine in FHEM gemäß [http://www.fhemwiki.de/wiki/E-Mail_senden#Raspberry_Pi diesem Forumsartikel]&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install sendEmail&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Wake-on-LAN&lt;br /&gt;
|etherwake&lt;br /&gt;
|Wird z.B. für das Modul WOL benötigt.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install etherwake&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Perl Telnet&lt;br /&gt;
|telnet&lt;br /&gt;
|Wird z.B. für das Modul FRITZBOX benötigt, da es eine im Netzwerk vorhandene Fritzbox über deren Telnet-Port anspricht.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Socat&lt;br /&gt;
|socat&lt;br /&gt;
|Kann verwendet werden, um auf anderen Rechnern im Netzwerk Linux-Befehle oder Skripts auszuführen. Auch können auf Slave-FHEM-Installationen Befehl ausgeführt werden, z.B. mit &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;system(&amp;quot;echo &#039;set lampe on&#039; | /usr/bin/socat - TCP:1.2.3.4:7072&amp;quot;);&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1.2.3.4 muss natürlich durch die IP-Adresse des Zielrechners ersetzt werden.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install socat&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Libcrypt&lt;br /&gt;
|Libcrypt&lt;br /&gt;
|Perl libcrypt, erforderlich falls Homematic-devices mit AES verwendet werden sollen.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install libcrypt-rijndael-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|libdatetime&lt;br /&gt;
|libdatetime&lt;br /&gt;
|Perl libdatetime, erforderlich für das Weather-Modul.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install libdatetime-format-strptime-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
=== Netzteil ===&lt;br /&gt;
Der RPi verwendet ein USB Netzteil als Spannungsversorgung. Gemessen kann der RPi allein bereits um die 900mA Strom fordern. Das bringt kleine Netzteile, besonders wenn noch CULs oder WLAN Sticks an USB hängen schnell an die Grenze. Die Fehler die daraus resultieren sind Abstürze, Netzwerkprobleme uvm. Daher bitte ein ausreichend starkes Netzteil mit mind. 2000mA oder einen aktiven USB-HUB für die Periperie verwenden.&lt;br /&gt;
&lt;br /&gt;
=== Echtzeituhr ===&lt;br /&gt;
Der RPi hat keine [http://de.wikipedia.org/wiki/Echtzeituhr Real-Time-Clock] (RTC), das heißt, dass er nach einem Neustart keine gültige (im Sinne von aktuell) Systemzeit hat, sondern ein Datum in der Vergangenheit. Dieses Problem wird sinnvollerweise mit einer [http://de.wikipedia.org/wiki/Network_Time_Protocol NTP-Konfiguration] umgangen.&lt;br /&gt;
&lt;br /&gt;
Dabei muss Sorge getragen werden, dass der [http://wiki.debian.org/NTP ntpd] schon einen Datums-/Zeitabgleich gemacht hat, bevor FHEM gestartet wird. Geschieht der Abgleich nicht vorher, sondern erst nachdem FHEM schon läuft, stellt FHEM die Logs zwar auf das nun aktuelle Datum um (die &amp;quot;alten&amp;quot; Logs mit dem eigentlich ungültigen Datum werden natürlich behalten), aber irgendetwas scheint FHEM dabei so zu belasten, dass es eine Last von über 0.8 bis 0.9 erzeugt. Diese Last besteht auf Dauer und verschwindet erst, wenn man das Ganze sauber durchkonfiguriert und FHEM neu gestartet hat. Die hohe Systemauslastung zeigt sich auch in einem sehr trägen Laden der FHEM-Webseiten in einem beliebigen Browser.&lt;br /&gt;
&lt;br /&gt;
=== Last durch Backup (während update) ===&lt;br /&gt;
Bei einen [[Update]] von FHEM durch den Befehl &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; kann durch Setzen des Attributs &amp;quot;&amp;lt;code&amp;gt;attr global backup_before_update 1&amp;lt;/code&amp;gt;&amp;quot; automatisch vorab ein [[Backup]] durchgeführt werden. Die (ggf. großen) Log-Dateien werden dabei ebenfalls archiviert. Während der Archivierung ist FHEM blockiert. Durch die beschränkte Leistungsfähigkeit des Raspberry Pi kann das Backup zudem lange dauern. Durch ein &amp;quot;&amp;lt;code&amp;gt;attr global updateInBackground 1&amp;lt;/code&amp;gt;&amp;quot; wird ein Backup im Hintergrund ausgeführt (Quelle: {{Link2Forum|Topic=15729}}). &lt;br /&gt;
&lt;br /&gt;
Alternative Möglichkeiten: &lt;br /&gt;
* Backup ausschalten und manuell durchführen &lt;br /&gt;
* Backup-Befehl anpassen und so große Dateien bzw. Verzeichnisse (log/) nicht archivieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SD-Kartenfehler / Dateisystemfehler durch Stromausfall ===&lt;br /&gt;
Standardmässig läuft der RPi von der SD-Karte. Diese sind gegenüber Stromausfällen relativ empfindlich und es kommt immer wieder zu Schreib/Lesefehlern. Dies kann durch den Einsatz von unterbrechungsfreien Stromversorgungen umgangen werden. Eine andere Lösung ist der Einsatz von USB-Sticks als &amp;quot;root-Dateisystem&amp;quot; nach dem Start. USB-Sticks sind in der Regel besser gegen Fehler bei spontanem Spannungsausfall (Ausstecken) geschützt als SD-Karten. Anleitungen dies beim RPi zu konfigurieren sind abhängig von verwendeten Version des RPi online zu finden.&lt;br /&gt;
&lt;br /&gt;
== Watchdog einrichten ==&lt;br /&gt;
Vor allem wenn das Netzteil nicht stark genug ist, schmiert FHEM gelegentlich ab (siehe oben - Netzteil). Man kann den RPi alle halbe Stunde prüfen lassen, ob FHEM noch läuft, und ggf. einen Neustart durchführen lassen.&lt;br /&gt;
Wie man das einrichtet steht hier: [http://forum.fhem.de/index.php/topic,20553.0.html Einrichten eines Watchdog]&lt;br /&gt;
&lt;br /&gt;
== Interne Links ==&lt;br /&gt;
* Erste Schritte: [[FHEM auf Raspberry PI mit COC betreiben]]&lt;br /&gt;
* [[CUL am Raspberry Pi flashen]]&lt;br /&gt;
* [[Raspberry Pi und 1-Wire]]&lt;br /&gt;
&lt;br /&gt;
== Externe Links ==&lt;br /&gt;
* {{Link2Forum|Topic=33460|Message=264679}} zum Umzug von Raspberry B auf Raspberry Pi 2&lt;br /&gt;
* [http://www.raspberrypi.org/ Offizielle Webseite der Raspberry Pi Foundation]&lt;br /&gt;
* [http://www.raspberrypi.org/downloads Offizielle Downloads der Raspberry Pi Foundation]&lt;br /&gt;
* Blog mit dem Thema [http://www.meintechblog.de/2013/05/fhem-server-auf-dem-raspberry-pi-in-einer-stunde-einrichten/ FHEM-Server auf RaspBerry Pi in einer Stunde einrichten]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Raspberry Pi]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=E-Mail_senden&amp;diff=17631</id>
		<title>E-Mail senden</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=E-Mail_senden&amp;diff=17631"/>
		<updated>2016-12-01T07:27:00Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: Platzhalter Bezeichnungen für SendMail überarbeitet um besser zu verstehen, was eingetragen werden muss.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Um aus FHEM heraus &#039;&#039;&#039;E-Mail senden&#039;&#039;&#039; zu können, sind abhängig von der verwendeten Platform unterschiedliche Vorgehensweisen erforderlich.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Anleitung zur Einrichtung von Exim4 auf Debian mit GMX als Smarthost:[http://www.fhemwiki.de/w/images/f/f6/Anleitung_Exim4_Debian_GMX.pdf PDF]}}&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
=== FritzBox 7170 (non-chroot) oder &amp;quot;reine&amp;quot; Linuxe ===&lt;br /&gt;
Datei 99_email.pm im Modul-Verzeichnis mit folgender Funktion anlegen (oder in bestehende 99_irgendwas.pm kopieren):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sub fb_mail {&lt;br /&gt;
 my $rcpt = $_[0];&lt;br /&gt;
 my $subject = $_[1];&lt;br /&gt;
 my $text = $_[2];&lt;br /&gt;
 system(&amp;amp;quot;/bin/echo \&amp;amp;quot;$text\&amp;amp;quot; | /usr/bin/mail send -i - -s \&amp;amp;quot;$subject\&amp;amp;quot; -t \&amp;amp;quot;$rcpt\&amp;amp;quot;&amp;amp;quot;);&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Aufruf dann mittels &lt;br /&gt;
:&amp;lt;code&amp;gt;{ fb_mail(&#039;empfaenger@mail.de&#039;,&#039;Subject&#039;,&#039;text 123&#039;) }&amp;lt;/code&amp;gt;&lt;br /&gt;
Darauf achten, dass der fhem-User Mails senden darf (in richtige Gruppe eintragen. Ggf. vorher einmal su fhem und probieren).&lt;br /&gt;
&lt;br /&gt;
=== Fritz!Box 7390 ===&lt;br /&gt;
Auf der [[AVM Fritz!Box|FritzBox 7390]] ist diese Funktion seit 10/2012 Bestandteil der Fhem Standardauslieferung. Sie ist untergebracht in FritzBoxUtils.pm und heisst dort FB_mail($$$) (Groß-Kleinschreibung beachten).&lt;br /&gt;
&lt;br /&gt;
Da der Dateiname von FritzBoxUtils.pm nicht mit 99_ beginnt, wird diese Programmdatei nicht automatisch beim Start von Fhem geladen. Fhem muss zum Laden dieser Programmdatei aufgefordert werden. Dazu (z.&amp;amp;nbsp;B. in 99_myUtils.pm) die Zeile &#039;&#039;use FritzBoxUtils;&#039;&#039; einfügen.&lt;br /&gt;
&lt;br /&gt;
Mit dem Install von AVM.de wird fhem in einer chroot-Umgebung ausgeführt, die den Zugriff auf die Mailfunktion der Fritzbox nicht zulässt. Daher muss Fhem in der [http://fhem.de/fhem.html#Download Version von fhem.de] installiert sein. Sollte Ihre Fritzbox bisher mit dem install von AVM laufen, kann (nach einem backup!) das image von fhem.de einfach drüberinstalliert werden. Es sollten dabei alle Einstellungen erhalten bleiben.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sub fb_mail {&lt;br /&gt;
 my $rcpt = $_[0];&lt;br /&gt;
 my $subject = $_[1];&lt;br /&gt;
 my $text = $_[2];&lt;br /&gt;
 system(&amp;amp;quot;/bin/echo \&amp;amp;quot;$text\&amp;amp;quot; &amp;amp;gt; /var/tmp/fhem_nachricht.txt&amp;amp;quot;);&lt;br /&gt;
 system(&amp;amp;quot;/sbin/mailer send -i &#039;/var/tmp/fhem_nachricht.txt&#039; -s \&amp;amp;quot;$subject\&amp;amp;quot; -t \&amp;amp;quot;$rcpt\&amp;amp;quot;&amp;amp;quot;);&lt;br /&gt;
 system(&amp;amp;quot;rm /var/tmp/fhem_nachricht.txt&amp;amp;quot;);&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aufruf dann mittels &lt;br /&gt;
:&amp;lt;code&amp;gt;{ fb_mail(&#039;empfaenger@mail.de&#039;,&#039;Subject&#039;,&#039;text 123&#039;) }&amp;lt;/code&amp;gt;&lt;br /&gt;
bzw. &lt;br /&gt;
:&amp;lt;code&amp;gt;{ FB_mail(&#039;empfaenger@mail.de&#039;,&#039;Subject&#039;,&#039;text 123&#039;) }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dem Mailer können noch weitere Parameter hinzugefügt werden. Mehr dazu siehe: [http://www.wehavemorefun.de/fritzbox/Mailer Mailer]&lt;br /&gt;
&lt;br /&gt;
=== OpenWRT  ===&lt;br /&gt;
Die Anleitung wurde mit einer frühen Beta von Barrier Breaker (r391xx) mit einem TP_Lind WDR 4900 getestet. Da &amp;quot;sendEmail&amp;quot; nicht als Package vorliegt wird in dieser Anleitung &amp;quot;ssmtp&amp;quot; verwendet.&lt;br /&gt;
Die Installation erfolgt mittels:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
opkg update&lt;br /&gt;
opkg install ssmtp_2.64-4_mpc85xx.ipk  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei werden die Packete libopenssl und zlib mit installiert. Damit ssmtp funktioniert müssen die Dateien /etc/ssmtp/ssmtp.conf und /etc/ssmtp/revaliases angepasst werden.&lt;br /&gt;
&lt;br /&gt;
/etc/ssmtp/ssmtp.conf &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root=arnold@gmx.net&lt;br /&gt;
mailhub=mail.gmx.net:465&lt;br /&gt;
rewriteDomain=gmx.net&lt;br /&gt;
hostname=gmx.net&lt;br /&gt;
FromLineOverride=YES&lt;br /&gt;
UseTLS=YES&lt;br /&gt;
#UseSTARTTLS=YES&lt;br /&gt;
AuthUser=arnold@gmx.net&lt;br /&gt;
AuthPass=Passwort_von_arnold@gmx.net&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/etc/ssmtp/revaliases&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root:arnold@gmx.net:mail.gmx.net:465&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der [[99_myUtils_anlegen|99_myUtils]] folgende Unterroutine einfügen (von der RPi-Anleitung übernommen):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sub &lt;br /&gt;
OpenWRTMail &lt;br /&gt;
{ &lt;br /&gt;
 my $rcpt = shift;&lt;br /&gt;
 my $subject = shift; &lt;br /&gt;
 my $text = shift; &lt;br /&gt;
 my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
 my $sender = &amp;quot;dockstar\@heye-tammo.de&amp;quot;; &lt;br /&gt;
 Log 1, &amp;quot;sendEmail RCP: $rcpt, Subject: $subject, Text: $text&amp;quot;;&lt;br /&gt;
 $ret .= qx(echo -e &#039;to:$rcpt\n from:$sender\nsubject:$subject\n$text\n&#039; | ssmtp $rcpt);&lt;br /&gt;
 $ret =~ s,[\r\n]*,,g;    # remove CR from return-string &lt;br /&gt;
 Log 1, &amp;quot;sendEmail returned: $ret&amp;quot;; &lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ab hier den entsprechenden Abschnitt unter &amp;quot;Raspberry Pi&amp;quot; lesen.&lt;br /&gt;
&lt;br /&gt;
=== Synology DiskStation ===&lt;br /&gt;
Beim DSM 3.2 gab es keinen &amp;lt;code&amp;gt;sendmail&amp;lt;/code&amp;gt;-Befehl, sondern nur eine Funktion für den Versand der System-Benachrichtigungen. Interessanterweise funktionierte aber der &amp;lt;code&amp;gt;php-mail&amp;lt;/code&amp;gt;-Befehl, so dass man mittels folgendem Modul Mails frei versenden kann:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sub sendmail($$$) {&lt;br /&gt;
 my($empf, $subj, $nachricht) = @_;&lt;br /&gt;
 system(&amp;amp;quot;php -r &#039;mail(\&amp;amp;quot;$empf\&amp;amp;quot;,\&amp;amp;quot;$subj\&amp;amp;quot;,\&amp;amp;quot;$nachricht\&amp;amp;quot;);&#039;&amp;amp;quot;);&lt;br /&gt;
 undef;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Raspberry Pi ===&lt;br /&gt;
In der weezy-Version, wie sie von busware zur Verfügung gestellt wird, muss auf einem [[Raspberry Pi]] noch sendEmail nachinstalliert werden. Diese Anleitung funktioniert auch unter &#039;&#039;&#039;Ubuntu&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install sendEmail libio-socket-ssl-perl libnet-ssleay-perl perl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in der [[99_myUtils_anlegen|99_myUtils]] folgende Unterroutine einfügen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;######## DebianMail  Mail auf dem RPi versenden ############ &lt;br /&gt;
sub &lt;br /&gt;
DebianMail &lt;br /&gt;
{ &lt;br /&gt;
 my $rcpt = shift;&lt;br /&gt;
 my $subject = shift; &lt;br /&gt;
 my $text = shift;&lt;br /&gt;
 my $attach = shift; &lt;br /&gt;
 my $ret = &amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 my $sender = &amp;amp;quot;absender\@account.de&amp;amp;quot;; &lt;br /&gt;
 my $konto = &amp;amp;quot;kontoname\@account.de&amp;amp;quot;;&lt;br /&gt;
 my $passwrd = &amp;amp;quot;passwrd&amp;amp;quot;;&lt;br /&gt;
 my $provider = &amp;amp;quot;smtp.provider.de:587&amp;amp;quot;;&lt;br /&gt;
 Log 1, &amp;amp;quot;sendEmail RCP: $rcpt&amp;amp;quot;;&lt;br /&gt;
 Log 1, &amp;amp;quot;sendEmail Subject: $subject&amp;amp;quot;;&lt;br /&gt;
 Log 1, &amp;amp;quot;sendEmail Text: $text&amp;amp;quot;;&lt;br /&gt;
 Log 1, &amp;quot;sendEmail Anhang: $attach&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 $ret .= qx(sendEmail -f &#039;$sender&#039; -t &#039;$rcpt&#039; -u &#039;$subject&#039; -m &#039;$text&#039; -a $attach -s &#039;$provider&#039; -xu &#039;$konto&#039; -xp &#039;$passwrd&#039; -o tls=auto -o message-charset=utf-8);&lt;br /&gt;
 $ret =~ s,[\r\n]*,,g;    # remove CR from return-string &lt;br /&gt;
 Log 1, &amp;amp;quot;sendEmail returned: $ret&amp;amp;quot;; &lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die TLS Verschlüsselung (ehem. SSL) nicht zu nutzen, muss in der 4. letzten Zeile tls=no verwendet und der Port des Mailproviders auf 25 eigetragen werden. Sollte anschließend keine Mail verschickt werden, siehe Probleme.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls der Body-Text in einem (Android-)Mailer auf dem Handy nicht gezeigt wird, kann der Parameter &#039;&#039;&#039;-o message-content-type=html&#039;&#039;&#039; helfen.&lt;br /&gt;
&lt;br /&gt;
Die Funktion kann beispielsweise folgendermaßen aufgerufen werden:&lt;br /&gt;
{{Randnotiz|RNTyp=g|RNText=Bei allen Feldern können generell doppelte &amp;quot; oder einfache &#039; Anführungszeichen verwendet werden. Innerhalb von &amp;quot;&amp;quot; müssen Sonderzeichen wie @ aber maskiert werden, da sie sonst als Steuerzeichen interpretiert werden:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;quot;email\@email.domain&amp;quot; oder &#039;email@email.domain&#039;&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Sonstiges notify Fenster:Window:.*,.*Low.Batt*. {\&lt;br /&gt;
 DebianMail(&amp;quot;email\@email.domain&amp;quot;,&amp;quot;Subject&amp;quot;,&amp;quot;Text&amp;quot;,&amp;quot;&#039;Anhang1&#039; &#039;Anhang2&#039; ...&amp;quot;);;\&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder (mehr als einen Empfänger, diese können durch Leerzeichen, Semikolon oder Komma getrennt sein)&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Sonstiges at *01:00:00 {\&lt;br /&gt;
 DebianMail(&#039;email@email.domain,email2@email.domain&#039;,&amp;quot;Subject&amp;quot;,&amp;quot;Text&amp;quot;,&amp;quot;&#039;Anhang1&#039; &#039;Anhang2&#039; ...&amp;quot;);;\&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es ist wichtig die Dateinamen mit &#039; &#039; zu klammern, da hierdurch auch Leerzeichen im Pfad/Dateinamen möglich sind.&lt;br /&gt;
&lt;br /&gt;
=== BeagleBoard-xM ===&lt;br /&gt;
Auf einem [[:Kategorie:BeagleBoard-xM|BeagleBoard-xM]] mit einem [http://en.opensuse.org/HCL:BeagleBoard-xM OpenSUSE 12.2] kann man ebenfalls das Perl-Programm &#039;&#039;sendEmail&#039;&#039; wie beim RPi nutzen. Dies gibt es aber nicht in den Repositories von openSUSE, sondern man muss sich &#039;&#039;sendEmail&#039;&#039; als Source herunterladen. Das geht am einfachsten per &#039;&#039;wget&#039;&#039;, welches man ebenfalls erst installieren muss (aber aus einem Repository).&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ zypper in wget&lt;br /&gt;
$ cd /opt&lt;br /&gt;
$ wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz&lt;br /&gt;
$ tar xvfz sendEmail-v1.56.tar.gz&lt;br /&gt;
$ cd sendEmail-v1.56&lt;br /&gt;
$ cp sendMail /usr/local/bin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Dann geht man weiter vor wie unter RPi beschrieben (anlegen der SUB-Routine in 99_myUtils usw.).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Die Version 1.56 von &#039;&#039;sendEmail&#039;&#039; ist Stand Januar 2013 die aktuelle. Da diese Programmversion von 2009 stammt, ist mit neuen Versionen selten zu rechnen. Vielleicht schauen Sie trotzdem vorher auf der [http://caspian.dotconf.net/menu/Software/SendEmail/ Homepage von sendEmail] nach.&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
# Kopiere die Datei sendEmail.exe* in Dein FHEM Verzeichnis (hier c:\fhem-5.0\); Quelle: [http://caspian.dotconf.net/menu/Software/SendEmail/ http://caspian.dotconf.net/menu/Software/SendEmail/]&lt;br /&gt;
# Erstelle im FHEM Verzeichnis die Datei wmail.bat mit folgendem Inhalt (eine Zeile): &amp;lt;br&amp;gt;&amp;lt;code&amp;gt;sendEmail -f absender@domain.de -u &amp;quot;%1&amp;quot; -m &amp;quot; &amp;quot; -s SMTP-SERVERAdresse -xu SMTP_USERNAME -xp SMTP_PASSWORT -t empfänger@domain.de -o message-header=&amp;quot;X-Message-Flag: FHEM&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Beispiel fhem.cfg&lt;br /&gt;
## Mail wenn sich der Status von Heizung.* oder Hzg.* ändert &amp;lt;br&amp;gt;&amp;lt;code&amp;gt;define Mail_Heizung notify Heizung.*|Hzg.* { system(&amp;quot;wmail $NAME:$EVENT&amp;quot;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
## Mail bei Signal Aussentemperatur (für dieses Beispiel wird [http://fhem.de/commandref.html#getstate http://fhem.de/commandref.html#getstate getstate] benötigt) &amp;lt;br&amp;gt;&amp;lt;code&amp;gt;define Mail_Aussentemperatur notify Aussentemperatur {\&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;my ($val);;\&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;$val = fhem &amp;quot;getstate $NAME&amp;quot;;;\&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;system(&amp;quot;wmail \&amp;quot;$NAME: $val\&amp;quot;&amp;quot;);;\&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
=== sendEmail ===&lt;br /&gt;
Falls man keine E-Mails verschicken kann, kann man in einem ersten Test prüfen, ob sendEmail als solches funktioniert und die Konfiguration (Benutzer, Passwort, Server-Name usw.) des Mail-Kontos, über das die Mails abgesetzt werden sollen, richtig ist.&lt;br /&gt;
&lt;br /&gt;
Hierzu setzt man in der FHEM-Befehlszeile die folgende Anweisung ab:&lt;br /&gt;
:&amp;lt;code&amp;gt;{ SUB-Routinen-Name(&#039;EMailAdresse@Mail.Domain&#039;,&#039;Test&#039;,&#039;Test-Text&#039;);; }&amp;lt;/code&amp;gt;&lt;br /&gt;
und ersetzt &#039;&#039;SUB-Routinen-Name&#039;&#039; durch den Namen der in 99_myUtils erzeugten Prozedur. Statt &#039;&#039;EMailAdresse@Mail.Domain&#039;&#039; trägt man noch eine gültige E-Mail-Adresse ein und bestätigt den Befehl dann mittels &amp;amp;lt;Enter&amp;amp;gt; (nicht &amp;quot;save&amp;quot;). Empfangen Sie nicht kurzfristig eine entsprechende E-Mail, ist sehr wahrscheinlich an den Zugangsdaten etwas verkehrt. &lt;br /&gt;
&lt;br /&gt;
Vor dem testen der Routine oben kann sendEmail auch über die Konsole (z.&amp;amp;nbsp;B. via Putty) getestet werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;sendEmail -f &#039;Absender@AbsDomain.de&#039; -t &#039;Empfänger@EmpfDomain.de&#039; -u &#039;subject&#039; -m &#039;body&#039; -s &#039;smtp.AbsDomain.de&#039; -xu &#039;AbsenderBenutzername&#039; -xp &#039;AbsenderPasswort&#039; -o tls=yes&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Keine Mail mit TLS Verschlüsselung ===&lt;br /&gt;
Den Test über die Konsole durchführen. Erhält man folgende Fehlermeldung:&lt;br /&gt;
&#039;&#039;invalid SSL_version specified at /usr/share/perl5/IO/Socket/SSL.pm line 332&#039;&#039;&lt;br /&gt;
muss auf dem Raspberry folgende Datei angepasst werden: &#039;&#039;/usr/bin/sendEmail&#039;&#039;.&lt;br /&gt;
In Zeile 1907 muss&lt;br /&gt;
 if (! IO::Socket::SSL-&amp;gt;start_SSL($SERVER, SSL_version =&amp;gt; &#039;SSLv3 TLSv1&#039;)) {&lt;br /&gt;
&lt;br /&gt;
in folgendes geändert werden&lt;br /&gt;
  if (! IO::Socket::SSL-&amp;gt;start_SSL($SERVER, SSL_version =&amp;gt; &#039;SSLv23:!SSLv2&#039;)) {&lt;br /&gt;
&lt;br /&gt;
Der frühere Tipp direkt in der SSL.pm Datei zu editieren führt zu Problemen wenn man auf FHEM per HTTPS zugreifen will und ist daher nicht zu empfehlen.&lt;br /&gt;
&lt;br /&gt;
== Email laut Log gesendet aber nicht angekommen? ==&lt;br /&gt;
Dann bitte in der Fritzbox Oberfläche überpüfen, ob unter &amp;quot;System&amp;quot; -&amp;gt; &amp;quot;Push Service&amp;quot; selbiger eingerichtet und aktiviert wurde. &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:FritzBox]]&lt;br /&gt;
[[Kategorie:BeagleBoard-xM]]&lt;br /&gt;
[[Kategorie:Raspberry Pi]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Raspberry_Pi&amp;diff=17630</id>
		<title>Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Raspberry_Pi&amp;diff=17630"/>
		<updated>2016-12-01T07:22:07Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: Änderung Link für Samba-Server auf ein anderen Bericht, da das Beispiel zuvor nicht funktionierte.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Beim &#039;&#039;&#039;Raspberry Pi&#039;&#039;&#039; handelt es sich um einen postkartengroßen Einplatinen-Computer, der von der Raspberry Pi Foundation entwickelt wird. Die Hardware basiert auf dem BCM 283x SoC (System-on-Chip) von Broadcom, einem ARM-Prozessor. Zu Hardwaredetails und den verschiedenen Modellen sowie Produktentwicklungen siehe [http://de.wikipedia.org/wiki/Raspberry_Pi#Hardware Wikipedia].&lt;br /&gt;
Dank der kleinen Abmessungen, dem recht geringen Energieverbrauch (bis ca. 4 Watt) sowie der günstigen Anschaffungskosten (ca. 30€) ist der Raspberry Pi eine attraktive Hardware für die Heimautomatisierung mit FHEM. Er ist dank dem Linux-Betriebssystem vollständig kompatibel zur aktuell vorhandenen und von FHEM unterstützen Hardware. Das derzeit empfohlene Standard-Image zum Betrieb des Raspberry Pi ist die auf Debian basierende Raspbian Distribution.&lt;br /&gt;
&lt;br /&gt;
== Installation / Setup ==&lt;br /&gt;
=== Betriebssystem ===&lt;br /&gt;
Das Betriebssystem sollte direkt bei Raspberry unter dem Link [http://www.raspberrypi.org/downloads http://www.raspberrypi.org/downloads] ([http://downloads.raspberrypi.org/raspbian_latest Raspbian]) geholt werden.&lt;br /&gt;
&lt;br /&gt;
Nach dem Herunterladen des entsprechenden Archivs muss das Image entpackt und auf die Speicherkarte (SD-Karte bis Modell B / MicroSD ab Modell B+) geschrieben werden. Detaillierte englische Anleitungen zum Vorgehen für verschiedene Betriebssysteme stellt Raspberry [http://www.raspberrypi.org/documentation/installation/installing-images/README.md hier] zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Unter &#039;&#039;&#039;Unix/Linux&#039;&#039;&#039; erfolgt dies via dd-Befehl. Zum Beispiel:&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo dd bs=1M if=2012-08-16-wheezy-raspbian.img of=/dev/sdz&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Bei Angabe eines falschen Device hinter of= kann der Anfang der eigenen Festplatte überschrieben werden. (Datenverlust!)&lt;br /&gt;
&lt;br /&gt;
Je nach System/Distribution und vorhandenen Festplatten variiert das Device, z.B. /dev/mmcblk0 (Ubuntu), /dev/sdb, /dev/sdc oder /dev/rdisk1 (OSX). Folgende Möglichkeiten können helfen, das richtige Device zu ermitteln:&lt;br /&gt;
* Mit dem Befehl &amp;lt;code&amp;gt;df&amp;lt;/code&amp;gt; erhält kann eine Übersicht aller angeschlossenen und gemounteten(!) Speichermedien. &lt;br /&gt;
* Beim Einstecken der Speicherkarte in den PC wird in die Log-Datei &amp;lt;code&amp;gt;/var/log/messages&amp;lt;/code&amp;gt; ein Eintrag gemacht. Beispiel: &amp;lt;code&amp;gt;kernel: [2077612.776470] sd 14:0:0:0: [&#039;&#039;&#039;sdb&#039;&#039;&#039;] 7954432 512-byte logical blocks: (&#039;&#039;&#039;4.07 GB&#039;&#039;&#039;/3.79 GiB)&amp;lt;/code&amp;gt;&lt;br /&gt;
* Mit dem Befehl fdisk kann die Größe eines bestimmten Devices geprüft werden: &amp;lt;code&amp;gt;fdisk -l /dev/sdb&amp;lt;/code&amp;gt; Beispielausgabe: &amp;lt;code&amp;gt;Platte /dev/sdb: 4072 MByte, 4072669184 Byte&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter &#039;&#039;&#039;Windows&#039;&#039;&#039; kann das Tool [https://launchpad.net/win32-image-writer Win32DiskImager] genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation des Images sollte der Raspberry Pi von der Speicherkarte booten.&lt;br /&gt;
&lt;br /&gt;
Um eventuell eine größere Speicherkarte komplett zu nutzen, kann dies per folgendem Menu erledigt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fhem ===&lt;br /&gt;
Die Installation auf dem Raspberry Pi kann nach der Installation des Betriebssystems über das Debian-Repository von FHEM, automatisiert per Skript oder auch manuell vorgenommen werden.&lt;br /&gt;
&lt;br /&gt;
==== Debian-Repository ====&lt;br /&gt;
Seit Oktober 2014 ({{Link2Forum|Topic=27679}}) kann FHEM auf Debian-basierten Systemen, wozu auch Raspian OS zählt, aus einem Debian-Repository installiert werden. Dabei werden neben FHEM selbst alle für den Betrieb von FHEM unabdingbaren Pakete automatisch mit installiert und eine Reihe weiterer Pakete für die Installation vorgeschlagen. Details zur Vorgehensweise finden sich direkt auf [https://debian.fhem.de https://debian.fhem.de]. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Bei manchen Distributionen ist es erforderlich die apt-Methode HTTPS nachzuinstallieren. Der folgende Befehl installiert die Methode:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install apt-transport-https&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Skript-basiert ====&lt;br /&gt;
Durch Ausführung des in diesem {{Link2Forum|Topic=15848|Message=103268}} dargestellten Skriptes nach Installation eines &amp;quot;nackten&amp;quot; Raspian OS wird automatisiert ein funktionsfähiges FHEM (inkl. korrekter Rechtevergabe) auf dem Raspberry Pi installiert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Bei dieser Installationsweise erfolgt kein automatischer Start von FHEM. Um das zu erreichen, verwenden Sie die folgende &amp;quot;manuelle&amp;quot; Methode.&lt;br /&gt;
&lt;br /&gt;
==== Manuell ====&lt;br /&gt;
Die Installation von FHEM auf dem Raspberry Pi kann mit dem fertigen debian-package erledigt werden. Lediglich das Perl-Modul &amp;quot;Serialport&amp;quot; wird benötigt - Perl ist in der Regel bereits installiert, kann aber sicherheitshalber einfach mit dem apt-get-Befehl zugefügt werden:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install perl libdevice-serialport-perl&lt;br /&gt;
 sudo apt-get install libio-socket-ssl-perl&lt;br /&gt;
 # fhem-X.Y.deb bitte mit der [http://fhem.de/fhem.html#Download aktuellsten, stabilen Version] ersetzen&lt;br /&gt;
 wget  [http://fhem.de/fhem-X.Y.deb http://fhem.de/fhem-X.Y.deb]&lt;br /&gt;
 sudo dpkg -i fhem-X.Y.deb&lt;br /&gt;
&lt;br /&gt;
Möglicherweise ist es noch nötig, fehlende Abhängigkeiten aufzulösen. Das kann mit folgendem Befehl erledigt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo apt-get install -f&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine etwas ausführlichere Anleitung gibt es auch [http://www.fhemwiki.de/wiki/FHEM_auf_Raspberry_PI_mit_COC_betreiben#FHEM_Installieren hier]&lt;br /&gt;
&lt;br /&gt;
=== Nützliche Zusatzpakete ===&lt;br /&gt;
Nachdem der Rpi eingerichtet ist, können weitere Pakete installiert werden. Keines davon ist zwingend erforderlich, um FHEM grundsätzlich betreiben zu können. Einige Pakete erhöhen aber den Bedienungskomfort oder sind zur Nutzung bestimmter FHEM-Module erforderlich. Hier eine Übersicht.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:10%&amp;quot; | Beschreibung&lt;br /&gt;
! style=&amp;quot;width:10%&amp;quot; | Paketname&lt;br /&gt;
! style=&amp;quot;width:50%&amp;quot; | Kontext&lt;br /&gt;
! style=&amp;quot;width:30%&amp;quot; | Installieren&lt;br /&gt;
|-&lt;br /&gt;
|FHEM&lt;br /&gt;
|fhem&lt;br /&gt;
|Installiert eine komplett lauffähige FHEM-Installation.&lt;br /&gt;
Details siehe auf [https://debian.fhem.de/ Stable build using aptitude], für Optionen siehe diesen [http://forum.fhem.de/index.php/topic,27679.0.html Forumsartikel]&lt;br /&gt;
Achtung: In der Befehlsliste rechts erstreckt sich der erste Befehl über 2 Zeilen!&lt;br /&gt;
| &amp;lt;code&amp;gt;sudo wget -qO - https://debian.fhem.de/archive.key &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; apt-key add -&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo deb https://debian.fhem.de/stable ./&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Zeitserver&lt;br /&gt;
|ntpdate&lt;br /&gt;
|Setzt die Systemzeit bei Start des RPi. Wird für FHEM benötigt, da es sonst nicht startet.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install ntpdate&lt;br /&gt;
sudo ntpdate -u de.pool.ntp.org&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Perl JSON&lt;br /&gt;
|JSON&lt;br /&gt;
|Wird von einigen Modulen benötigt, z.B. harmony, iTunes&lt;br /&gt;
|&amp;lt;code&amp;gt;apt-get install libjson-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Samba-Server&lt;br /&gt;
|samba&lt;br /&gt;
|Mittels Samba kann man z.B. den Ordner /opt/fhem als Share freigeben. Dieser Share kann z.B. im Windows-Explorer als Laufwerk verbunden werden, so dass die Bearbeitung von config- und Programmdateien bequem möglich ist. Hier eine hilfreiche [https://www.elektronik-kompendium.de/sites/raspberry-pi/2007071.htm Kurzanleitung] aus der (wenn man auf einen speziellen user verzichtet) nur die Einträge für smb.conf gesetzt werden müssen.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install samba cifs-utils&amp;lt;/code&amp;gt;&lt;br /&gt;
Danach muss der share definiert werden mittels&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo nano /etc/samba/smb.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Mailversand&lt;br /&gt;
|sendEmail&lt;br /&gt;
|Wird benötigt, um Mails versenden zu können, bspw. für Alarm-Benachrichtigungen.&lt;br /&gt;
Nach Installation des Paketes benötigt man noch eine Routine in FHEM gemäß [http://www.fhemwiki.de/wiki/E-Mail_senden#Raspberry_Pi diesem Forumsartikel]&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install sendEmail&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Wake-on-LAN&lt;br /&gt;
|etherwake&lt;br /&gt;
|Wird z.B. für das Modul WOL benötigt.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install etherwake&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Perl Telnet&lt;br /&gt;
|telnet&lt;br /&gt;
|Wird z.B. für das Modul FRITZBOX benötigt, da es eine im Netzwerk vorhandene Fritzbox über deren Telnet-Port anspricht.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Socat&lt;br /&gt;
|socat&lt;br /&gt;
|Kann verwendet werden, um auf anderen Rechnern im Netzwerk Linux-Befehle oder Skripts auszuführen. Auch können auf Slave-FHEM-Installationen Befehl ausgeführt werden, z.B. mit &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;system(&amp;quot;echo &#039;set lampe on&#039; | /usr/bin/socat - TCP:1.2.3.4:7072&amp;quot;);&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1.2.3.4 muss natürlich durch die IP-Adresse des Zielrechners ersetzt werden.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install socat&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Libcrypt&lt;br /&gt;
|Libcrypt&lt;br /&gt;
|Perl libcrypt, erforderlich falls Homematic-devices mit AES verwendet werden sollen.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install libcrypt-rijndael-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|libdatetime&lt;br /&gt;
|libdatetime&lt;br /&gt;
|Perl libdatetime, erforderlich für das Weather-Modul.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install libdatetime-format-strptime-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
=== Netzteil ===&lt;br /&gt;
Der RPi verwendet ein USB Netzteil als Spannungsversorgung. Gemessen kann der RPi allein bereits um die 900mA Strom fordern. Das bringt kleine Netzteile, besonders wenn noch CULs oder WLAN Sticks an USB hängen schnell an die Grenze. Die Fehler die daraus resultieren sind Abstürze, Netzwerkprobleme uvm. Daher bitte ein ausreichend starkes Netzteil mit mind. 2000mA oder einen aktiven USB-HUB für die Periperie verwenden.&lt;br /&gt;
&lt;br /&gt;
=== Echtzeituhr ===&lt;br /&gt;
Der RPi hat keine [http://de.wikipedia.org/wiki/Echtzeituhr Real-Time-Clock] (RTC), das heißt, dass er nach einem Neustart keine gültige (im Sinne von aktuell) Systemzeit hat, sondern ein Datum in der Vergangenheit. Dieses Problem wird sinnvollerweise mit einer [http://de.wikipedia.org/wiki/Network_Time_Protocol NTP-Konfiguration] umgangen.&lt;br /&gt;
&lt;br /&gt;
Dabei muss Sorge getragen werden, dass der [http://wiki.debian.org/NTP ntpd] schon einen Datums-/Zeitabgleich gemacht hat, bevor FHEM gestartet wird. Geschieht der Abgleich nicht vorher, sondern erst nachdem FHEM schon läuft, stellt FHEM die Logs zwar auf das nun aktuelle Datum um (die &amp;quot;alten&amp;quot; Logs mit dem eigentlich ungültigen Datum werden natürlich behalten), aber irgendetwas scheint FHEM dabei so zu belasten, dass es eine Last von über 0.8 bis 0.9 erzeugt. Diese Last besteht auf Dauer und verschwindet erst, wenn man das Ganze sauber durchkonfiguriert und FHEM neu gestartet hat. Die hohe Systemauslastung zeigt sich auch in einem sehr trägen Laden der FHEM-Webseiten in einem beliebigen Browser.&lt;br /&gt;
&lt;br /&gt;
=== Last durch Backup (während update) ===&lt;br /&gt;
Bei einen [[Update]] von FHEM durch den Befehl &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; kann durch Setzen des Attributs &amp;quot;&amp;lt;code&amp;gt;attr global backup_before_update 1&amp;lt;/code&amp;gt;&amp;quot; automatisch vorab ein [[Backup]] durchgeführt werden. Die (ggf. großen) Log-Dateien werden dabei ebenfalls archiviert. Während der Archivierung ist FHEM blockiert. Durch die beschränkte Leistungsfähigkeit des Raspberry Pi kann das Backup zudem lange dauern. Durch ein &amp;quot;&amp;lt;code&amp;gt;attr global updateInBackground 1&amp;lt;/code&amp;gt;&amp;quot; wird ein Backup im Hintergrund ausgeführt (Quelle: {{Link2Forum|Topic=15729}}). &lt;br /&gt;
&lt;br /&gt;
Alternative Möglichkeiten: &lt;br /&gt;
* Backup ausschalten und manuell durchführen &lt;br /&gt;
* Backup-Befehl anpassen und so große Dateien bzw. Verzeichnisse (log/) nicht archivieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SD-Kartenfehler / Dateisystemfehler durch Stromausfall ===&lt;br /&gt;
Standardmässig läuft der RPi von der SD-Karte. Diese sind gegenüber Stromausfällen relativ empfindlich und es kommt immer wieder zu Schreib/Lesefehlern. Dies kann durch den Einsatz von unterbrechungsfreien Stromversorgungen umgangen werden. Eine andere Lösung ist der Einsatz von USB-Sticks als &amp;quot;root-Dateisystem&amp;quot; nach dem Start. USB-Sticks sind in der Regel besser gegen Fehler bei spontanem Spannungsausfall (Ausstecken) geschützt als SD-Karten. Anleitungen dies beim RPi zu konfigurieren sind abhängig von verwendeten Version des RPi online zu finden.&lt;br /&gt;
&lt;br /&gt;
== Watchdog einrichten ==&lt;br /&gt;
Vor allem wenn das Netzteil nicht stark genug ist, schmiert FHEM gelegentlich ab (siehe oben - Netzteil). Man kann den RPi alle halbe Stunde prüfen lassen, ob FHEM noch läuft, und ggf. einen Neustart durchführen lassen.&lt;br /&gt;
Wie man das einrichtet steht hier: [http://forum.fhem.de/index.php/topic,20553.0.html Einrichten eines Watchdog]&lt;br /&gt;
&lt;br /&gt;
== Interne Links ==&lt;br /&gt;
* Erste Schritte: [[FHEM auf Raspberry PI mit COC betreiben]]&lt;br /&gt;
* [[CUL am Raspberry Pi flashen]]&lt;br /&gt;
* [[Raspberry Pi und 1-Wire]]&lt;br /&gt;
&lt;br /&gt;
== Externe Links ==&lt;br /&gt;
* {{Link2Forum|Topic=33460|Message=264679}} zum Umzug von Raspberry B auf Raspberry Pi 2&lt;br /&gt;
* [http://www.raspberrypi.org/ Offizielle Webseite der Raspberry Pi Foundation]&lt;br /&gt;
* [http://www.raspberrypi.org/downloads Offizielle Downloads der Raspberry Pi Foundation]&lt;br /&gt;
* Blog mit dem Thema [http://www.meintechblog.de/2013/05/fhem-server-auf-dem-raspberry-pi-in-einer-stunde-einrichten/ FHEM-Server auf RaspBerry Pi in einer Stunde einrichten]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Raspberry Pi]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=ReadingsGroup&amp;diff=17255</id>
		<title>ReadingsGroup</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=ReadingsGroup&amp;diff=17255"/>
		<updated>2016-11-13T20:35:01Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Heizungswerte, Status, Steuerung und Wochenprofil */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:readingsGroup}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Einfache zusammenfassende Darstellung von Informationen über mehrere Geräte und deren Steuerung&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=readingsGroup&lt;br /&gt;
|ModForumArea=Frontends&lt;br /&gt;
|ModTechName=33_readingsGroup.pm&lt;br /&gt;
|ModOwner=Andre ({{Link2FU|430|Forum}} / [[Benutzer Diskussion:justme|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das Fhem-[[:Kategorie:Hilfsmodul|Hilfsmodul]] [[readingsGroup]] bietet eine einfache Möglichkeit, &#039;&#039;Readings&#039;&#039; (kein Präfix vor dem Reading-Namen), &#039;&#039;Internals&#039;&#039; (Präfix &amp;quot;+&amp;quot; vor dem Namen des internen Wertes) und &#039;&#039;Attributes&#039;&#039; (Präfix &amp;quot;?&amp;quot; vor dem Namen des Attributs) von einem oder mehreren &#039;&#039;Devices&#039;&#039; darzustellen und flexibel zu formatieren.&lt;br /&gt;
&lt;br /&gt;
Die Aktualisierung im Browserfenster geschieht per longpoll und überträgt nur die jeweils geänderten Zellen. Wenn eine readingsGroup in keinem Browserfenster angezeigt wird findet keine longpoll aktualisierung statt.&lt;br /&gt;
&lt;br /&gt;
== Definition == &lt;br /&gt;
Siehe [http://fhem.de/commandref.html#readingsGroup commandref].&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
{{Randnotiz|RNText=In allen Mappings die einen Hash verwenden muss der Key (das was jeweils links von =&amp;gt; Operator steht) in Anführungszeichen stehen. Die einzige Ausnahme hiervon sind Keys die aus einem String bestehen der mit einem Buchstaben beginnt und nur Buchstaben und Zahlen enthält.}}&lt;br /&gt;
Weitergehende Erläuterungen zu einzelnen Attributen.&lt;br /&gt;
&lt;br /&gt;
Die komplette Liste der Attribute ist der commandref zu entnehmen.&lt;br /&gt;
&lt;br /&gt;
=== noheading ===&lt;br /&gt;
[[Datei:ReadingsGroup_noheading.png|mini|rechts|400px|ReadingsGroup: rechts mit &amp;quot;noheading&amp;quot; Attribut, links der anklickbare Titel]]&lt;br /&gt;
Das Attribut &amp;lt;code&amp;gt;noheading&amp;lt;/code&amp;gt; führt dazu, dass der Alias der ReadingsGroup nicht mehr als Titel angezeigt wird. Das kann wünschenswert sein, wenn die ReadingsGroup auf einer [[Dashboard]]-Seite angezeigt werden soll, hat allerdings den Nachteil, dass die Detail-Ansicht der ReadingsGroup nicht mehr über einen Klick auf den Titel aufgerufen werden kann. Der Einstellungsdialog der ReadingsGroup ist dann nur noch (z.&amp;amp;nbsp;B.) über&lt;br /&gt;
* &amp;lt;code&amp;gt;list TYPE=readingsGroup&amp;lt;/code&amp;gt;&lt;br /&gt;
* einen &amp;quot;Probably associated with&amp;quot;-Link eines anderen Objekts oder über&lt;br /&gt;
* manuelle Modifikation der URL eines anderen Objekts (&amp;lt;code&amp;gt;http:.../fhem?detail=&amp;lt;objektname&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
erreichbar.&lt;br /&gt;
&lt;br /&gt;
=== nolinks ===&lt;br /&gt;
Devicenamen und Titel der readingsGroup verlinken nicht mehr zur zugehörigen Detailansicht und sind nicht mehr anklickbar.&lt;br /&gt;
&lt;br /&gt;
=== nostate ===&lt;br /&gt;
Das state-Reading wird bei regex match nicht berücksichtigt und nicht angezeigt.&lt;br /&gt;
&lt;br /&gt;
=== notime ===&lt;br /&gt;
Es werden keine Timestamps für die Readings angezeigt. Nur für einspaltige readingsGroups sinnvoll.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
Bitte beachten: die folgenden Beispiele enthalten keine Maskierungen oder Verdoppelungen für ; und Zeilenende, sondern sind so angegeben, wie sie im [[PGM2|Web Interface]] im Befehls-Eingabefeld, nach Klick auf DEF und im Attribut-Eingabefeld eingegeben werden. Beim manuellen Einfügen in eine [[Konfiguration|Konfigurationsdatei]] sind diese Maskierungen oder Verdoppelungen natürlich vorzunehmen.&lt;br /&gt;
&lt;br /&gt;
=== Einfache Auswahl über Reading-Namen ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define battStatus readingsGroup .*:[Bb]attery&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alle readings mit Namen &#039;&#039;&#039;Battery&#039;&#039;&#039; oder &#039;&#039;&#039;battery&#039;&#039;&#039; von allen Devices. &lt;br /&gt;
| rowspan=3 | [[Datei:rgBattery.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr battStatus alias FHT Batteriestatus &amp;lt;/code&amp;gt;&lt;br /&gt;
| Der Alias wird als Zeilentitel verwendet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr battStatus mapping %ROOM &amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;Mapping %ROOM&#039;&#039; führt dazu, dass der Raumname als Zeilentitel angezeigt wird.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Übersicht HomeMatic Geräte ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define HM_Components readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Name&amp;gt;,&amp;lt;Model&amp;gt;,&amp;lt;S/N&amp;gt; TYPE=CUL_HM:+NAME,?model,D-serialNr&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Auswahl über Reading-Namen, Status als Symbol dargestellt ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define rg_battery readingsGroup .*:battery&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alle readings mit Namen &#039;&#039;&#039;battery&#039;&#039;&#039; von allen Devices. &lt;br /&gt;
| rowspan=4 | [[Datei:rgBattery2.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_battery alias Batteriestatus &amp;lt;/code&amp;gt;&lt;br /&gt;
| Der Alias wird als Überschrift verwendet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_battery valueIcon {&#039;battery.ok&#039; =&amp;gt; &#039;batterie&#039;, &#039;battery.low&#039; =&amp;gt; &#039;batterie@red&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Statt der reading Werte &amp;quot;ok&amp;quot; und &amp;quot;low&amp;quot; soll ein Icon angezeigt werden.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;attr rg_battery commands { &amp;quot;battery.low&amp;quot; =&amp;gt; &amp;quot;set %DEVICE replaceBatteryForSec 60&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für LaCrosse devices kann man beim Klick auf ein rotes &amp;quot;battery low icon&amp;quot; direkt replaceBatteryForSec setzen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reading-Werte zuordnen (Icon / Text) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define rg readingsGroup Contact.Dachboden_gross:sensed.*&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alle sensedreadings des Contact.Dachboden_gross device. &lt;br /&gt;
| rowspan=4 | [[Datei:rgFenster.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg mapping { &#039;sensed.A&#039; =&amp;gt; &#039;links&#039;, &#039;sensed.B&#039; =&amp;gt; &#039;rechts&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Zuordnung rechts/links&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg valueFormat {($VALUE eq &#039;1&#039;)?&amp;quot;fts_window_roof&amp;quot;:&amp;quot;fts_window_roof_open_2&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Zuordnung von reading Wert zu Icon Namen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_battery valueIcon %VALUE &amp;lt;/code&amp;gt;&lt;br /&gt;
| Statt des reading Werts soll ein Icon angezeigt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Formatvorgabe für Ausgabewerte ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define TempHygro readingsGroup TYPE=CUL_WS:temperature,humidity,dewpoint&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alle readings mit Namen &#039;&#039;&#039;temperature&#039;&#039;&#039;, &#039;&#039;&#039;humidity&#039;&#039;&#039;, &#039;&#039;&#039;dewpoint&#039;&#039;&#039; von allen Devices des Typs &#039;&#039;&#039;CUL_WS&#039;&#039;&#039;&lt;br /&gt;
| rowspan=4 | [[Datei:rgTemperatur.png|thumb|[[S300TH]]-Werte in einer readingsGroup]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr TempHygro alias Temperatur / rel. Feuchte / Taupunkt&amp;lt;/code&amp;gt;&lt;br /&gt;
| Der Alias der readingsGroup wird als Überschrift verwendet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr TempHygro mapping %ALIAS&amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;Mapping %ALIAS&#039;&#039; führt dazu, dass der Alias des Geräts als Zeilentitel angezeigt wird.&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;attr TempHygro valueFormat { temperature =&amp;gt; &amp;quot;%.1f&amp;amp;amp;deg;C&amp;quot;, humidity =&amp;gt; &amp;quot;%.1f %%&amp;quot;, dewpoint =&amp;gt; &amp;quot;%.1f&amp;amp;amp;deg;C&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Formatierung der Ausgabewerte. &#039;&#039;&#039;Achtung:&#039;&#039;&#039; &amp;quot;%&amp;quot; die in der Ausgabe erscheinen sollen, müssen verdoppelt werden!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Ausgabestil (hier rechtsbündig) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Wetter readingsGroup WetterXXX:&amp;lt;%temp_temperature&amp;gt;,&amp;lt;Temperatur&amp;gt;,temperature WetterXXX:&amp;lt;%weather_humidity&amp;gt;,&amp;lt;Luftfeuchte&amp;gt;,humidity WetterXXX:&amp;lt;%weather_barometric_pressure&amp;gt;,&amp;lt;Luftdruck&amp;gt;,pressure&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die readings mit Namen &#039;&#039;&#039;temperature&#039;&#039;&#039;, &#039;&#039;&#039;humidity&#039;&#039;&#039; und &#039;&#039;&#039;pressure&#039;&#039;&#039; vom Device WetterXXX jeweils mit einem Icon und einem Label davor.&lt;br /&gt;
| rowspan=3 | [[Datei:rgWetter.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Wetter valueFormat { temperature =&amp;gt; &#039;%1.f &amp;amp;amp;deg;C&#039;, humidity =&amp;gt; &#039;%1.f %%&#039;, pressure =&amp;gt; &#039;%i mbar&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Formatierung der Readingswerte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Wetter valueStyle style=&amp;quot;text-align:right&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Readings sollen rechtsbündig dargestellt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Internal Value ausgeben ===&lt;br /&gt;
Diese Beispiel könnte entfallen (nächstes Beispiel ist sehr ähnlich; es wird lediglich ein weiterer Wert ausgegeben).&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define culRSSI readingsGroup cul_RSSI=.*:+cul_RSSI&amp;lt;/code&amp;gt;&lt;br /&gt;
| Den RSSI Wert aller Devices (am IODev &#039;&#039;cul&#039;&#039;) die einen solchen haben anzeigen.&amp;lt;br&amp;gt; &#039;&#039;&#039;Achtung&#039;&#039;&#039;: &amp;quot;internal values&amp;quot; werden nicht per longpoll aktualisiert, sondern nur beim Seitenaufbau.&lt;br /&gt;
| rowspan=1 | [[Datei:rgculRSSI.png|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Internal Values ausgeben ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define culRSSI readingsGroup cul_RSSI=.*:+cul_RSSI,+cul_TIME&amp;lt;/code&amp;gt;&lt;br /&gt;
| Den RSSI Wert mit der zugehörigen Zeit aller Devices (am IODev &#039;&#039;cul&#039;&#039;) die einen solchen haben anzeigen.&amp;lt;br&amp;gt; &#039;&#039;&#039;Achtung&#039;&#039;&#039;: &amp;quot;internal values&amp;quot; werden nicht per longpoll aktualisiert, sondern nur beim Seitenaufbau.&amp;lt;br&amp;gt;&amp;quot;Internal Values&amp;quot; werden durch das vorangestellte &#039;&#039;&#039;+&#039;&#039;&#039; (Pluszeichen) identifiziert.&lt;br /&gt;
| rowspan=2 | [[Datei:rgculRSSI2.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
|attr culRSSI valueStyle {return undef if($READING =~ m/TIME/); ($VALUE &amp;lt;= -85)?&#039;style=&amp;quot;color:red&amp;quot;&#039;:($VALUE &amp;lt;= -80)?&#039;style=&amp;quot;color:yellow&amp;quot;&#039;:undef}&lt;br /&gt;
|Schlechte RSSI Werte sollen abhängig von zwei Schwellwerten gelb oder rot eingefärbt werden (auf dem Screenshot nicht zu sehen).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Alle Readings eines Gerätes, mit Ausnahme von... ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Systemstatus readingsGroup sysstat&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alle readings des sysstat Device&lt;br /&gt;
| rowspan=4 | [[Datei:rgSysstat.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Systemstatus nostate 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ohne state&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Systemstatus notime 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ohne readings timestamp&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Systemstatus mapping {&#039;load&#039; =&amp;gt; &#039;Systemauslastung&#039;, &#039;temperature&#039; =&amp;gt; &#039;Systemtemperatur in &amp;amp;amp;deg;C&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Zuordnung der reading Namen zu den Zeilentiteln&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Anzeige auf einem Floorplan ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Heizung readingsGroup t(1|2|3):temperature&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Temperatur readings der Devices t1, t2 und t3&lt;br /&gt;
| rowspan=6 | [[Datei:rgHeizung.png|thumb|220px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizung mapping {&#039;t1.temperature&#039; =&amp;gt; &#039;Vorlauf&#039;, &#039;t2.temperature&#039; =&amp;gt; &#039;R&amp;amp;amp;&amp;amp;uuml;cklauf&#039;, &#039;t3.temperature&#039; =&amp;gt; &#039;Zirkulation&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Zuordnung der reading Namen zu den Zeilentiteln&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizung nameStyle style=&amp;quot;text-align:left&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Zeilentitel linksbündig wegen floorplan&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizung style style=&amp;quot;font-size:20px;color:lightgray&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Großer Font und Farbe passend für den floorplan&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizung notime 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ohne readings timestamp&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizung valueFormat : %.1f &amp;amp;amp;deg;C&amp;lt;/code&amp;gt;&lt;br /&gt;
| Doppelpunkt zwischen Zeilentitel und Wert, eine Nachkommastelle plus Einheit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== LightScene DropDown-Menü für smallscreen Styles oder Floorplan ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define lcDropDown readingsGroup meineLightScene:!state&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für die LightScene &#039;&#039;meineLightScene&#039;&#039; soll ein DropDown-Menü zur Auswahl der Szene erstellt werden.&lt;br /&gt;
| rowspan=6 |&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr lcDropDown commands { state =&amp;gt; &#039;scene:&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Anzeige des state Readings wird auf das DropDown-Menü für das scene Kommando gemapped.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr lcDropDown nonames 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Keine Readingnamen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr lcDropDown notime 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Kein Timestamp&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Schriftgrößen, Farben, Icons ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:rgVerbrauchPCA301.png|links|mini|400px|Schriftgröße, Farbe, Icons...]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Verbrauch readingsGroup TYPE=PCA301:state,power,consumption&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die readings state, power und consumption aller [[PCA301 Funkschaltsteckdose mit Energieverbrauchsmessung|PCA301]] Devices mit einer Zeile pro Device. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Verbrauch mapping %ROOM %ALIAS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Der Raumname und der Alias werden als Zeilentitel verwendet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Verbrauch nameStyle style=&amp;quot;font-weight:bold&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Der Zeilentitel soll fett sein&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Verbrauch style style=&amp;quot;font-size:20px&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alles in einem größeren Font&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Verbrauch valueFormat {power =&amp;gt; &amp;quot;%.1f W&amp;quot;, consumption =&amp;gt; &amp;quot;%.2f kWh&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Formatierung für die power und consumption readings: eine Nachkommastelle plus Einheit.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;attr Verbrauch valueIcon { state =&amp;gt; &#039;%devStateIcon&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für die Dosen, die schaltbar sind, soll das anklickbare device icon gezeigt werden.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;attr Verbrauch valueStyle {($READING eq &amp;quot;power&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 40)?&#039;style=&amp;quot;color:red&amp;quot;&#039;:&#039;style=&amp;quot;color:green&amp;quot;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
|Wenn das power reading &amp;gt;40 ist, soll es in rot angezeigt werden, alle anderen Werte und readings in grün&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Wertabhängige Farbgebung ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:TemperaturenRG.png|600px|mini|links|Wertabhängige Farben]]&lt;br /&gt;
[[Datei:TemperaturenRG2.png|600px|mini|links|Andere Werte - andere Farben]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define wzTemperaturenRG readingsGroup Aussen:,&amp;lt;Temperatur&amp;gt;,temperature,&amp;lt;Luftfeuchte&amp;gt;,humidity Wohnzimmer:,&amp;lt;Temperatur&amp;gt;,temperature,&amp;lt;Luftfeuchte&amp;gt;,humidity Kasten_E_Geraete:,&amp;lt;Temperatur&amp;gt;,temperature,&amp;lt;Luftfeuchte&amp;gt;,humidity&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die readings temperatur und humidity der Devices Aussen, Wohnzimmer und Kasten_E_Geraete in einer Zeile pro Device. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzTemperaturenRG group 3. Temperaturen&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die readingsGroup kommt in eine Gruppe&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzTemperaturenRG noheading 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| noheading&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzTemperaturenRG nostate 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| nostate&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzTemperaturenRG notime 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| notime&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzTemperaturenRG valueFormat {temperature =&amp;gt; &amp;quot;%.1f °C&amp;quot;, humidity =&amp;gt;&amp;quot;%.1f %%&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Formatierung für die temperatur und humidity readings: eine Nachkommastelle plus Einheit.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;attr wzTemperaturenRG valueStyle { if($DEVICE eq &amp;quot;Aussen&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 30) { &#039;style=&amp;quot;color:red&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Aussen&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 20) { &#039;style=&amp;quot;color:orange&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Aussen&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;lt; 5) { &#039;style=&amp;quot;color:blue&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Wohnzimmer&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 23) { &#039;style=&amp;quot;color:red&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Wohnzimmer&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 21) { &#039;style=&amp;quot;color:orange&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Wohnzimmer&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;lt; 20) { &#039;style=&amp;quot;color:blue&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Kasten_E_Geraete&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 30) { &#039;style=&amp;quot;color:red&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Kasten_E_Geraete&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 28) { &#039;style=&amp;quot;color:orange&amp;quot;&#039;}elsif($READING eq &amp;quot;humidity&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 65) { &#039;style=&amp;quot;color:red&amp;quot;&#039;}elsif($READING eq &amp;quot;humidity&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 60) { &#039;style=&amp;quot;color:orange&amp;quot;&#039;}else{&#039;style=&amp;quot;color:green&amp;quot;&#039;} }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse Farbkombinationen sind möglich&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Enigma Receiver ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:ReceiverRG.jpg|600px|mini|links|Wertabhängige Farben]]&lt;br /&gt;
[[Datei:ReceiverRGmute.jpg|600px|mini|links|Wertabhängige Farben]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define wzReceiverRG readingsGroup wzReceiver:,&amp;lt;Aktuell&amp;gt;,eventtitle,&amp;lt;Rest&amp;gt;,eventremaining_hr,&amp;lt;Dauer&amp;gt;,eventduration_hr wzReceiver:&amp;lt;Beschreibung&amp;gt;,eventdescription wzReceiver:,&amp;lt;Nächste&amp;gt;,eventtitle_next,&amp;lt;Start&amp;gt;,eventstart_next_hr,&amp;lt;Dauer&amp;gt;,eventduration_next_hr wzReceiver:,&amp;lt;HDD Kapazität&amp;gt;,hdd1_capacity,&amp;lt;Frei&amp;gt;,wzReceiver:hdd1_free wzReceiver:,&amp;lt;Lautstärke&amp;gt;,volume,&amp;lt;HDD&amp;gt;,hdd1_capacity,&amp;lt;Frei&amp;gt;,hdd1_free&amp;lt;/code&amp;gt;&lt;br /&gt;
| Mehrere readings des Device wzReceiver in mehreren Zeilen. Wenn der Receiver auf mute ist, wird anstatt der Lautstärke, mute angezeigt. Farbige Anzeige des freien Speicherplatzes&lt;br /&gt;
&#039;&#039;&#039;Benötigt:&#039;&#039;&#039; ENIGMA2 Receiver, 70_ENIGMA2.pm - Siehe: [[Enigma2 Receiver (Dreambox, VUplus etc.) steuern]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG group Fernseher Receiver&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die readingsGroup kommt in eine Gruppe&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG mapping &amp;amp;amp;nbsp;&amp;lt;/code&amp;gt;&lt;br /&gt;
| mapping wird auf &amp;amp;amp;nbsp; (Leerzeichen) gesetzt, damit der Device Name nicht angezeigt wird&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG noheading 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| noheading&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG nostate 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| nostate&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG notime 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| notime&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG valueColumns { eventdescription =&amp;gt; &#039;colspan=&amp;quot;4&amp;quot;&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Beschreibung soll über 4 Spalten gehen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG valueFormat { wzReceiverRGvalueFormat($DEVICE,$READING,$VALUE);; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Formatierung wird in die 99_myUtils.pm ausgelagert. Siehe: [[99 myUtils anlegen]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;attr wzReceiverRG valueStyle { if($READING eq &amp;quot;hdd1_free&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;lt; 200){ &#039;style=&amp;quot;color:red&amp;quot;&#039; }elsif( $READING eq &amp;quot;hdd1_free&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;lt; 500 ){ &#039;style=&amp;quot;color:orange&amp;quot;&#039; }elsif( $READING eq &amp;quot;volume&amp;quot; &amp;amp;&amp;amp; ReadingsVal($DEVICE, &amp;quot;mute&amp;quot;, &amp;quot;&amp;quot;) eq &amp;quot;on&amp;quot; ){ &#039;style=&amp;quot;color:red&amp;quot;&#039; }else{ &#039;style=&amp;quot;color:green&amp;quot;&#039; } }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse Farbkombinationen sind möglich. Wenn der Receiver auf mute ist, wird anstatt der Lautstärke &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;mute&amp;lt;/span&amp;gt; angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub&lt;br /&gt;
wzReceiverRGvalueFormat($$$)&lt;br /&gt;
{&lt;br /&gt;
  my ($DEVICE,$READING,$VALUE) = @_;&lt;br /&gt;
 &lt;br /&gt;
  if($READING eq &#039;hdd1_capacity&#039;) { &lt;br /&gt;
    return &amp;quot;%.2f MB&amp;quot;;&lt;br /&gt;
  } elsif( $READING eq &#039;hdd1_free&#039;) {&lt;br /&gt;
    return &amp;quot;%.2f MB&amp;quot;;&lt;br /&gt;
  } elsif( $READING eq &#039;volume&#039; ) {&lt;br /&gt;
    if( ReadingsVal($DEVICE, &amp;quot;mute&amp;quot;, &amp;quot;&amp;quot;) eq &amp;quot;on&amp;quot;) {&lt;br /&gt;
      return &amp;quot;mute&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
      return &amp;quot;%i %%&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
| Dieser Teil kommt in die [[99_myUtils_anlegen|99_myUtils.pm]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Heizungswerte inklusive Batterie- und Fensterstatus ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:rgHeizung3.png|thumb|links|500px|Heizungswerte inklusive Batterie- und Fensterstatus]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Heizungswerte readingsGroup &amp;lt;%sani_heating&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;Act&amp;gt;,&amp;lt;Soll&amp;gt;,&amp;lt;Ist&amp;gt; TYPE=FHT:actuator,desired-temp,measured-temp,&amp;lt;%18&amp;gt;,&amp;lt;%20&amp;gt;,&amp;lt;%22&amp;gt;,window,battery&amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse readings aller Devices des Typs &amp;lt;b&amp;gt;FHT&amp;lt;/b&amp;gt;. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte commands { &#039;Heizungswerte.18&#039; =&amp;gt; &#039;set $DEVICE desired-temp 18&#039;, &#039;Heizungswerte.20&#039; =&amp;gt; &#039;set $DEVICE desired-temp 20&#039;, &#039;Heizungswerte.22&#039; =&amp;gt; &#039;set $DEVICE desired-temp 22&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Links/Kommandos die hinter den 18, 20 und 22 liegen sollen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte nameStyle style=&amp;quot;color:yellow;font-weight:bold&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Überschriften sollen gelb sein.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte valueIcon {&#039;battery.ok&#039; =&amp;gt; &#039;batterie@lightgreen&#039;, &#039;battery.low&#039; =&amp;gt; &#039;batterie@red&#039;, &#039;window.closed&#039; =&amp;gt; &#039;fts_window_1w@lightgreen&#039;, &#039;window.open&#039; =&amp;gt; &#039;fts_window_1w_open@red&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für den Batteriestand und den Zustand der Fenster sollen jeweils Icons angezeigt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Heizungswerte inklusive Ventilposition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:Rg_Heizung_Valveposition.png|thumb|links|500px|Heizungswerte inklusive Statusinformationen (MAX!)]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Heizungswerte readingsGroup &amp;lt;%sani_heating&amp;gt;,&amp;lt;Ventil&amp;gt;,&amp;lt;Soll&amp;gt;,&amp;lt;Ist&amp;gt;,&amp;lt;MaxV&amp;gt;,&amp;lt;GID&amp;gt;,&amp;lt;Mode&amp;gt;,&amp;lt;Batterie&amp;gt; TYPE=CUL_HM:ValvePosition,desired-temp,measured-temp,R-valveMaxPos,groupid,mode,battery&amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse readings aller Devices des Typs &amp;lt;b&amp;gt;MAX&amp;lt;/b&amp;gt;. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte mapping %ROOM&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Raumnamen werden angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte nameStyle style=&amp;quot;color:yellow;font-weight:bold&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Überschriften sollen gelb (fett) sein.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte room Heizung&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die &amp;quot;readingsgroup&amp;quot; wird dem Raum &amp;quot;Heizung&amp;quot; zugeordnet.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte valueFormat {&#039;temperature&#039; =&amp;gt; &amp;quot;%.0f °C&amp;quot;, &#039;desiredTemperature&#039; =&amp;gt; &amp;quot;%.0f °C&amp;quot;, &#039;valveposition&#039; =&amp;gt;&amp;quot;%.0f %%&amp;quot;, &#039;maxValveSetting&#039; =&amp;gt;&amp;quot;%.0f %%&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Es wird noch die Einheit °C hinter den Temperaturwerten angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte valueIcon {&#039;battery.ok&#039; =&amp;gt; &#039;batterie@lightgreen&#039;, &#039;battery.low&#039; =&amp;gt; &#039;batterie@red&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für den Batteriezustand werden Icons anstatt Klartextwerte genommen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte valueStyle { if($READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 20){ &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; }elsif( $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;lt;= 20 ){ &#039;style=&amp;quot;color:blue&amp;quot;&#039; }elsif( $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 23 ){ &#039;style=&amp;quot;color:red&amp;quot;&#039; }else{ &#039;style=&amp;quot;color:gray&amp;quot;&#039; } }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Temperaturwerte werden abhängig vom Wert farbig dargestellt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte valueIcon {&#039;battery.ok&#039; =&amp;gt; &#039;batterie@lightgreen&#039;, &#039;battery.low&#039; =&amp;gt; &#039;batterie@red&#039;, &#039;window.closed&#039; =&amp;gt; &#039;fts_window_1w@lightgreen&#039;, &#039;window.open&#039; =&amp;gt; &#039;fts_window_1w_open@red&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für den Batteriestand und den Zustand der Fenster sollen jeweils Icons angezeigt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Heizungswerte, Status und Regelmöglichkeit ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:rgHeizung2.png|thumb|500px|links|Anzeige + Regelmöglichkeit]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Heizungswerte2 readingsGroup &amp;lt;%sani_heating&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;Act&amp;gt;,&amp;lt;Soll&amp;gt;,&amp;lt;Ist&amp;gt; TYPE=FHT:actuator,desired-temp,measured-temp,&amp;lt;{myUtils_HeizungUpDown($DEVICE,&amp;quot;up&amp;quot;)}@desired-temp&amp;gt;,desired-new,&amp;lt;{myUtils_HeizungUpDown($DEVICE,&amp;quot;down&amp;quot;)}@desired-temp&amp;gt;,window,battery&amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse readings aller Devices des Typs &amp;lt;b&amp;gt;FHT&amp;lt;/b&amp;gt;. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte2 nameStyle style=&amp;quot;color:yellow;font-weight:bold&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Überschriften sollen gelb sein.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte2 valueIcon {&#039;battery.ok&#039; =&amp;gt; &#039;batterie@lightgreen&#039;, &#039;battery.low&#039; =&amp;gt; &#039;batterie@red&#039;, &#039;window.closed&#039; =&amp;gt; &#039;fts_window_1w@lightgreen&#039;, &#039;window.open&#039; =&amp;gt; &#039;fts_window_1w_open@red&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für den Batteriestand und den Zustand der Fenster sollen jeweils Icons angezeigt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte2 valueStyle {($VALUE eq &amp;quot;00&amp;quot;)?&#039;style=&amp;quot;visibility:hidden&amp;quot;&#039;:&#039;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Nach dem Einstellen den Wert wieder ausblenden. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#Heizung regeln in readingsGroup&lt;br /&gt;
sub&lt;br /&gt;
myUtils_HeizungUpDown($$)&lt;br /&gt;
{&lt;br /&gt;
  my($DEVICE,$CMD) = @_;&lt;br /&gt;
  &lt;br /&gt;
  my $icon = $CMD;&lt;br /&gt;
  my $VALUE = ReadingsVal($DEVICE,&amp;quot;desired-new&amp;quot;,&amp;quot;20&amp;quot; );&lt;br /&gt;
  $VALUE = ReadingsVal($DEVICE,&amp;quot;desired-temp&amp;quot;,&amp;quot;20&amp;quot; )&lt;br /&gt;
     if( !$VALUE || $VALUE == 0 );&lt;br /&gt;
  my $link;&lt;br /&gt;
  &lt;br /&gt;
  if( $CMD eq &amp;quot;up&amp;quot; ) {&lt;br /&gt;
    $icon = &amp;quot;control_arrow_upward&amp;quot;;&lt;br /&gt;
    $VALUE += 1;&lt;br /&gt;
  &lt;br /&gt;
    if( $VALUE &amp;lt;= 24 ) {&lt;br /&gt;
      $icon .= &amp;quot;\@red&amp;quot;;&lt;br /&gt;
      $link = &amp;quot;setreading $DEVICE desired-new $VALUE&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
  } elsif( $CMD eq &amp;quot;down&amp;quot; ) {&lt;br /&gt;
    $icon = &amp;quot;control_arrow_downward&amp;quot;;&lt;br /&gt;
    $VALUE -= 1;&lt;br /&gt;
  &lt;br /&gt;
    if( $VALUE &amp;gt;= 18 ) {&lt;br /&gt;
      $icon .= &amp;quot;\@blue&amp;quot;;&lt;br /&gt;
      $link = &amp;quot;setreading $DEVICE desired-new $VALUE&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  my $notify = &amp;quot;notifyHeizungUpDown&amp;quot;;&lt;br /&gt;
  if( !defined($defs{$notify}) ) {&lt;br /&gt;
    CommandDefine(undef,&lt;br /&gt;
                   &amp;quot;$notify notify .*:desired-new.* &amp;quot;&lt;br /&gt;
                   .&amp;quot;{ myUtils_HeizungUpDownNotify(\$NAME,\$EVTPART1); }&amp;quot; );&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  my $ret = &amp;quot;%$icon&amp;quot;;&lt;br /&gt;
  $ret .= &amp;quot;%$link&amp;quot; if( $link );&lt;br /&gt;
  &lt;br /&gt;
  return $ret;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub&lt;br /&gt;
myUtils_HeizungUpDownNotify($$)&lt;br /&gt;
{&lt;br /&gt;
  my($DEVICE,$VALUE) = @_;&lt;br /&gt;
  &lt;br /&gt;
  return if( $VALUE == 0 );&lt;br /&gt;
  &lt;br /&gt;
  my $at = &amp;quot;triggerHeizungUpDown_$DEVICE&amp;quot;;&lt;br /&gt;
  CommandDelete(undef, $at) if( defined($defs{$at}) );&lt;br /&gt;
  CommandDefine(undef,&lt;br /&gt;
                &amp;quot;$at at +00:00:03 &amp;quot;&lt;br /&gt;
                .&amp;quot;{my \$v = ReadingsVal(\&amp;quot;$DEVICE\&amp;quot;,\&amp;quot;desired-new\&amp;quot;,undef);&amp;quot;&lt;br /&gt;
                .&amp;quot;fhem(\&amp;quot;set $DEVICE desired-temp \$v\&amp;quot;) if( \$v );&amp;quot;&lt;br /&gt;
                .&amp;quot;fhem(\&amp;quot;setreading $DEVICE desired-new 00\&amp;quot;);}&amp;quot; );&lt;br /&gt;
  &lt;br /&gt;
  return undef;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
| Dieser Teil kommt in die [[99_myUtils_anlegen|99_myUtils.pm]]: Hiermit werden die Icons zum Ändern der gewünschten Temperatur dargestellt und im Bereich &amp;gt;=18 und &amp;lt;= 24 Grad anklickbar gemacht. Zwischen den Pfeilen wird der gerade eingestellte Wert angezeigt. Wenn dieser drei Sekunden nicht mehr geändert wurde wird die desired-temp auf diesen Wert gesetzt und die Anzeige zwischen den Pfeilen ausgeblendet.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Heizungswerte, Status, Steuerung und Wochenprofil ===&lt;br /&gt;
Dieses Beispiel funktioniert nur mit HomeMatic HM-CC-RT-DN, für andere Thermostate müssen an diversen Stellen Änderungen vorgenommen werden.&lt;br /&gt;
{{Todo|Überarbeiten: umstellen auf readingList oder setreading, label als readings in die readingsGroup selber stecken statt in einen extra dummy. oder !&amp;lt;reading&amp;gt; und mapping verwenden.}}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:RgThermostate.png|thumb|750px|links|Status, Steuerung und Wochenprofil]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;pre&amp;gt;&lt;br /&gt;
define d_label dummy&lt;br /&gt;
setreading d_label Heizung Heizung &lt;br /&gt;
setreading d_label Temperatur Temperatur &lt;br /&gt;
setreading d_label  Status Status &lt;br /&gt;
setreading d_label Wochenplan Wochenplan &lt;br /&gt;
setreading d_label Werktag Werktag &lt;br /&gt;
setreading d_label Samstag Samstag &lt;br /&gt;
setreading d_label Sonntag Sonntag &lt;br /&gt;
setreading d_label Zeitraum1 Zeitraum 1 &lt;br /&gt;
setreading d_label Zeitraum2 Zeitraum 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
|Erzeugen der Readings im Device [[dummy#d_label|d_label]]. (Zeilenweise in die Befehlszeile eintragen.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt; &lt;br /&gt;
define rg_thermostate readingsGroup &amp;lt;&amp;gt;,Heizung@d_label,&amp;lt;|&amp;gt;,Temperatur@d_label,&amp;lt;|&amp;gt;,Status@d_label,&amp;lt;|&amp;gt;,Wochenplan@d_label,&amp;lt;|&amp;gt;,Werktag@d_label,&amp;lt;|&amp;gt;,Samstag@d_label,&amp;lt;|&amp;gt;,Sonntag@d_label,&amp;lt;|&amp;gt;,&amp;lt;&amp;gt; CUL_HM_HM_CC_RT_DN_......_Clima:&amp;lt;&amp;gt;,?alias,&amp;lt;|&amp;gt;,&amp;lt;Soll&amp;gt;,desired-temp,&amp;lt;Tag&amp;gt;,dayTemp@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},impossible@{$DEVICE},&amp;lt;|&amp;gt;,controlMode,R-globalBtnLock@{rg($DEVICE.&amp;quot;§device&amp;quot;)},&amp;lt;|&amp;gt;,Zeitraum1@d_label,&amp;lt;|&amp;gt;,workday_period_1_start@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},workday_period_1_stop@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,saturday_period_1_start@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},saturday_period_1_stop@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,sunday_period_1_start@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},sunday_period_1_stop@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,impossible@{$DEVICE},&amp;lt;%system_fhem_update&amp;gt;,&amp;lt;nowiki&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/nowiki&amp;gt;,state@{rg($DEVICE.&amp;quot;§device&amp;quot;)},&amp;lt;%getConfig&amp;gt;,&amp;lt;|&amp;gt;,&amp;lt;Ist&amp;gt;,measured-temp,&amp;lt;Nacht&amp;gt;,nightTemp@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,&amp;lt;Ventil&amp;gt;,ValvePosition,&amp;lt;|&amp;gt;,Zeitraum2@d_label,&amp;lt;|&amp;gt;,workday_period_2_start@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},workday_period_2_stop@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,saturday_period_2_start@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},saturday_period_2_stop@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,sunday_period_2_start@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},sunday_period_2_stop@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,impossible@{$DEVICE},impossible@{rg($DEVICE.&amp;quot;§device&amp;quot;)},&amp;lt;%burstXmit&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse readings aller Devices &amp;lt;b&amp;gt;CUL_HM_HM_CC_RT_DN_......_Clima&amp;lt;/b&amp;gt;, entsprechender [[Makefine#d_climaControl|d_climaControl]] (müssen vorher angelegt werden) und [[dummy#d_label|d_label]]. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_thermostate commands { &#039;desired-temp&#039; =&amp;gt; &#039;desired-temp:&#039;, &#039;dayTemp&#039; =&amp;gt; &#039;dayTemp:&#039;, &#039;controlMode&#039; =&amp;gt; &#039;trigger ntfy_rg $DEVICE controlMode&#039;, &#039;R-globalBtnLock&#039; =&amp;gt; &#039;trigger ntfy_rg $DEVICE globalBtnLock&#039;, &#039;workday_period_1_start&#039; =&amp;gt; &#039;workday_period_1_start:&#039;, &#039;workday_period_1_stop&#039; =&amp;gt; &#039;workday_period_1_stop:&#039;, &#039;saturday_period_1_start&#039; =&amp;gt; &#039;saturday_period_1_start:&#039;, &#039;saturday_period_1_stop&#039; =&amp;gt; &#039;saturday_period_1_stop:&#039;, &#039;sunday_period_1_start&#039; =&amp;gt; &#039;sunday_period_1_start:&#039;, &#039;sunday_period_1_stop&#039; =&amp;gt; &#039;sunday_period_1_stop:&#039;, &#039;rg_thermostate.system_fhem_update&#039; =&amp;gt; &#039;trigger ntfy_rg $DEVICE setTimeTable&#039;, &#039;rg_thermostate.getConfig&#039; =&amp;gt; &#039;set $DEVICE getConfig&#039;, &#039;nightTemp&#039; =&amp;gt; &#039;nightTemp:&#039;, &#039;workday_period_2_start&#039; =&amp;gt; &#039;workday_period_2_start:&#039;, &#039;workday_period_2_stop&#039; =&amp;gt; &#039;workday_period_2_stop:&#039;, &#039;saturday_period_2_start&#039; =&amp;gt; &#039;saturday_period_2_start:&#039;, &#039;saturday_period_2_stop&#039; =&amp;gt; &#039;saturday_period_2_stop:&#039;, &#039;sunday_period_2_start&#039; =&amp;gt; &#039;sunday_period_2_start:&#039;, &#039;sunday_period_2_stop&#039; =&amp;gt; &#039;sunday_period_2_stop:&#039;, &#039;rg_thermostate.burstXmit&#039; =&amp;gt; &#039;set $DEVICE burstXmit&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Temperaturen werden als DropDown Auswahl dargestellt, Icons triggern [[readingsGroup#sub_rg|ntfy_rg]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_thermostate mapping { &#039;desired-temp&#039; =&amp;gt; &#039;&#039;, &#039;dayTemp&#039; =&amp;gt; &#039;&#039;, &#039;workday_period_1_start&#039; =&amp;gt; &#039;&#039;, &#039;workday_period_1_stop&#039; =&amp;gt; &#039;&#039;, &#039;saturday_period_1_start&#039; =&amp;gt; &#039;&#039;, &#039;saturday_period_1_stop&#039; =&amp;gt; &#039;&#039;, &#039;sunday_period_1_start&#039; =&amp;gt; &#039;&#039;, &#039;sunday_period_1_stop&#039; =&amp;gt; &#039;&#039;, &#039;nightTemp&#039; =&amp;gt; &#039;&#039;, &#039;workday_period_2_start&#039; =&amp;gt; &#039;&#039;, &#039;workday_period_2_stop&#039; =&amp;gt; &#039;&#039;, &#039;saturday_period_2_start&#039; =&amp;gt; &#039;&#039;, &#039;saturday_period_2_stop&#039; =&amp;gt; &#039;&#039;, &#039;sunday_period_2_start&#039; =&amp;gt; &#039;&#039;, &#039;sunday_period_2_stop&#039; =&amp;gt; &#039;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ausblenden der Texte vor den DropDowns.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt; &lt;br /&gt;
attr rg_thermostate nameStyle{($READING eq &amp;quot;Soll&amp;quot; ||$READING eq &amp;quot;Tag&amp;quot; ||$READING eq &amp;quot;%getConfig&amp;quot; ||$READING eq &amp;quot;Ist&amp;quot; ||$READING eq &amp;quot;Nacht&amp;quot; ||$READING eq &amp;quot;Ventil&amp;quot; )?&#039;style=&amp;quot;text-align:right&amp;quot;&#039; :($READING eq &amp;quot;%burstXmit&amp;quot; )?&#039;style=&amp;quot;text-align:center&amp;quot;&#039; :&#039;style=&amp;quot;&amp;quot;&#039;}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ausrichten der Überschriften die keine readings sind.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_thermostate nonames 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ausblenden der Device Namen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_thermostate valueColumns { &#039;Heizung&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;, &#039;Temperatur&#039; =&amp;gt; &#039;colspan=&amp;quot;4&amp;quot;&#039;, &#039;Status&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;, &#039;Werktag&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;, &#039;Samstag&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;, &#039;Sonntag&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;, &#039;alias&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse Readings sollen über mehrere Spalten dargestellt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_thermostate valueFormat { &#039;measured-temp&#039; =&amp;gt; &amp;quot;%0.1f &amp;amp;deg;C&amp;quot;, &#039;ValvePosition&#039; =&amp;gt; &amp;quot;%0.1f %%&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Formatierung für measured-temp und ValvePosition.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_thermostate valueIcon { &#039;controlMode.auto&#039; =&amp;gt; &#039;sani_heating_automatic@green&#039;, &#039;controlMode.set_auto&#039; =&amp;gt; &#039;sani_heating_automatic@orange&#039;, &#039;controlMode.manual&#039; =&amp;gt; &#039;sani_heating_manual@red&#039;, &#039;controlMode.set_manual&#039; =&amp;gt; &#039;sani_heating_manual@orange&#039;, &#039;R-globalBtnLock.on&#039; =&amp;gt; &#039;secur_locked@green&#039;, &#039;R-globalBtnLock.on &#039; =&amp;gt; &#039;secur_locked@green&#039;, &#039;R-globalBtnLock.set_on &#039; =&amp;gt; &#039;secur_locked@orange&#039;, &#039;R-globalBtnLock.off&#039; =&amp;gt; &#039;secur_open@red&#039;, &#039;R-globalBtnLock.off &#039; =&amp;gt; &#039;secur_open@red&#039;, &#039;R-globalBtnLock.set_off &#039; =&amp;gt; &#039;secur_open@orange&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Zuweisung der Icons.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&lt;br /&gt;
attr rg_thermostate valueStyle{($READING eq &amp;quot;Heizung&amp;quot; ||$READING eq &amp;quot;Temperatur&amp;quot; ||$READING eq &amp;quot;Status&amp;quot; ||$READING eq &amp;quot;Wochenplan&amp;quot; ||$READING eq &amp;quot;Werktag&amp;quot; ||$READING eq &amp;quot;Samstag&amp;quot; ||$READING eq &amp;quot;Sonntag&amp;quot; )?&#039;style=&amp;quot;font-size:20px;;color:RoyalBlue;;text-align:center&amp;quot;&#039; :($READING eq &amp;quot;alias&amp;quot; )?&#039;style=&amp;quot;font-size:11px;;font-weight:bold;;text-align:left&amp;quot;&#039; :($READING eq &amp;quot;ValvePosition&amp;quot; &amp;amp;&amp;amp;$VALUE &amp;gt; 40 )?&#039;style=&amp;quot;font-weight:bold;;color:Orange;;text-align:left&amp;quot;&#039; :($READING eq &amp;quot;desired-temp&amp;quot; ||$READING eq &amp;quot;measured-temp&amp;quot; )?&#039;style=&amp;quot;text-align:center&amp;quot;&#039; :($READING eq &amp;quot;state&amp;quot; ||$READING eq &amp;quot;ValvePosition&amp;quot; )?&#039;style=&amp;quot;text-align:left&amp;quot;&#039; :&#039;style=&amp;quot;text-align:right&amp;quot;&#039;}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ausrichten und Einfärben der Readings.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Heizungsteuerung für HM Wand- und Heizkörperthermostate ===&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel wurde für HM-TC-IT-WM-W-EU / HM-CC-RT-DN Geräte erstellt. Verwendung anderer Thermostate wird ggf. Anpassungen erforderlich machen. Die Geräte werden nicht automatisch ermittelt, sondern sind einzeln angegeben.&lt;br /&gt;
Es werden Soll- und Ist-Temperaturen angezeigt, Luftfeuchte und Ventilpositionen, Modus, Batterie und Global-Tastenlock.&lt;br /&gt;
Steuerungsmöglichkeiten: Solltemperatur, Modus (Manual/Automatik), (globale) Tastenlock.&lt;br /&gt;
Die Abweichung der Isttemperatur, die Ventilpositionen, Batteriestand etc. werden farblich hervorgehoben. &lt;br /&gt;
&lt;br /&gt;
Die Gerätenamen (EG_WZ_WT01_Climate / EG_WZ_WT01, EG_WZ_TT01_Clima / EG_WZ_TT01 / EG_WZ_TT02, OG_BZ_WT01_Climate / OG_BZ_WT01, OG_BZ_TT01_Clima / OG_BZ_TT01, OG_SZ_WT01_Climate / OG_SZ_WT01, OG_SZ_TT01_Clima / OG_SZ_TT01, OG_DZ_WT01_Climate / OG_DZ_WT01, OG_DZ_TT01_Clima / OG_DZ_TT01) müssen natürlich entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Bei den Geräten muss das Attribut „expert“ auf &amp;quot;1_on&amp;quot; gesetzt werden, andernfalls fehlt das Reading „R-globalBtnLock“. Dies hätte zur Folge, dass in der Spalte Lock der batteryLevel dargestellt wird.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:RgHMTh.jpg|thumb|500px|links|Status, Steuerung und Wochenprofil]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;define heatingInfo readingsGroup &amp;lt;%sani_heating&amp;gt;,&amp;lt;Soll&amp;gt;,&amp;lt;Soll neu&amp;gt;,&amp;lt;Ist&amp;gt;,&amp;lt;Ventil / RH&amp;gt;,&amp;lt;Modus&amp;gt;,&amp;lt;Lock&amp;gt;,&amp;lt;Bat&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
EG_WZ_WT01_Climate:desired-temp,&amp;lt;sollsetz&amp;gt;,measured-temp,humidity,controlMode,R-globalBtnLock@EG_WZ_WT01,batteryLevel@EG_WZ_WT01 \&amp;lt;br&amp;gt;&lt;br /&gt;
EG_WZ_TT01_Clima:desired-temp,&amp;lt;&amp;gt;,measured-temp,ValvePosition,controlMode,R-globalBtnLock@EG_WZ_TT01,batteryLevel@EG_WZ_TT01 \&amp;lt;br&amp;gt;&lt;br /&gt;
EG_WZ_TT02_Clima:desired-temp,&amp;lt;&amp;gt;,measured-temp,ValvePosition,controlMode,R-globalBtnLock@EG_WZ_TT02,batteryLevel@EG_WZ_TT02  \&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt; \&amp;lt;br&amp;gt;&lt;br /&gt;
OG_BZ_WT01_Climate:desired-temp,&amp;lt;sollsetz&amp;gt;,measured-temp,humidity,controlMode,R-globalBtnLock@OG_BZ_WT01,batteryLevel@OG_BZ_WT01  \&amp;lt;br&amp;gt;&lt;br /&gt;
OG_BZ_TT01_Clima:desired-temp,&amp;lt;&amp;gt;,measured-temp,ValvePosition,controlMode,R-globalBtnLock@OG_BZ_TT01,batteryLevel@OG_BZ_TT01  \&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt; \&amp;lt;br&amp;gt;&lt;br /&gt;
OG_SZ_WT01_Climate:desired-temp,&amp;lt;sollsetz&amp;gt;,measured-temp,humidity,controlMode,R-globalBtnLock@OG_SZ_WT01,batteryLevel@OG_SZ_WT01  \&amp;lt;br&amp;gt;&lt;br /&gt;
OG_SZ_TT01_Clima:desired-temp,&amp;lt;&amp;gt;,measured-temp,ValvePosition,controlMode,R-globalBtnLock@OG_SZ_TT01,batteryLevel@OG_SZ_TT01  \&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt; \&amp;lt;br&amp;gt;&lt;br /&gt;
OG_DZ_WT01_Climate:desired-temp,&amp;lt;sollsetz&amp;gt;,measured-temp,humidity,controlMode,R-globalBtnLock@OG_DZ_WT01,batteryLevel@OG_DZ_WT01  \&amp;lt;br&amp;gt;&lt;br /&gt;
OG_DZ_TT01_Clima:desired-temp,&amp;lt;&amp;gt;,measured-temp,ValvePosition,controlMode,R-globalBtnLock@OG_DZ_TT01,batteryLevel@OG_DZ_TT01&amp;lt;/code&amp;gt;&lt;br /&gt;
| ReadingsGoup anlegen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr heatingInfo cellStyle { &amp;quot;r:1&amp;quot;=&amp;gt;&#039;style=&amp;quot;font-weight:bold;;font-size:16px&amp;quot;&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;r:2,c:0&amp;quot;=&amp;gt;&#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;,&amp;quot;r:6,c:0&amp;quot; =&amp;gt;&#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;r:9,c:0&amp;quot;=&amp;gt;&#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;,&amp;quot;r:12,c:0&amp;quot;=&amp;gt;&#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Schrift fett setzen etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr heatingInfo commands {&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;heatingInfo.sollsetz&#039;=&amp;gt;&#039;desired-temp:5.0,12.0,18.0,19.0,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;controlMode.manual&amp;quot;=&amp;gt;&amp;quot;set %DEVICE controlMode auto&amp;quot;,&amp;quot;controlMode.auto&amp;quot;=&amp;gt;&amp;quot;set %DEVICE controlMode manual&amp;quot;,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;R-globalBtnLock.on&amp;quot;=&amp;gt;&amp;quot;set %DEVICE regSet globalBtnLock off&amp;quot;,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;R-globalBtnLock.off&amp;quot;=&amp;gt;&amp;quot;set %DEVICE regSet globalBtnLock on&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Heizungssteuerung ermöglichen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&lt;br /&gt;
attr heatingInfo mapping {OG_BZ_WT01_Climate=&amp;gt;&amp;quot;Bad&amp;quot;,&amp;lt;br&amp;gt;&lt;br /&gt;
OG_BZ_TT01_Clima=&amp;gt;&amp;quot;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;Regler&amp;quot;,OG_SZ_WT01_Climate=&amp;gt;&amp;quot;Schlafzimmer&amp;quot;,&amp;lt;br&amp;gt;&lt;br /&gt;
OG_SZ_TT01_Clima=&amp;gt;&amp;quot;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;Regler&amp;quot;,OG_DZ_WT01_Climate=&amp;gt;&amp;quot;Duschbad&amp;quot;,&amp;lt;br&amp;gt;&lt;br /&gt;
OG_DZ_TT01_Clima=&amp;gt;&amp;quot;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;Regler&amp;quot;,EG_WZ_WT01_Climate=&amp;gt;&amp;quot;Wohnzimmer&amp;quot;,&amp;lt;br&amp;gt;&lt;br /&gt;
EG_WZ_TT01_Clima=&amp;gt;&amp;quot;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;Regler1&amp;quot;,EG_WZ_TT02_Clima=&amp;gt;&amp;quot;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;Regler2&amp;quot;,&#039;desired-temp&#039; =&amp;gt; &#039;&#039;}&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Gewünschte Namen definieren.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&lt;br /&gt;
attr heatingInfo valueFormat {if($READING eq &amp;quot;ValvePosition&amp;quot; &amp;amp;&amp;amp; $VALUE ne &amp;quot;0&amp;quot;){$VALUE = int($VALUE/10)*10}&amp;lt;br&amp;gt;&lt;br /&gt;
elsif($READING eq &amp;quot;batteryLevel&amp;quot;){if($VALUE&amp;gt;=3){$VALUE=100}&amp;lt;br&amp;gt;&lt;br /&gt;
elsif($VALUE&amp;gt;=2.7){$VALUE=75}elsif($VALUE&amp;gt;=2.5){$VALUE=50}elsif($VALUE&amp;gt;=2.2){$VALUE=25}&amp;lt;br&amp;gt;&lt;br /&gt;
else{$VALUE=0}}}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Werte vorformatieren (für die Icon-Zuordnung).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&lt;br /&gt;
attr heatingInfo valueIcon {&#039;controlMode.manual&#039; =&amp;gt; &#039;sani_heating_manual@795CFF&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;controlMode.auto&#039; =&amp;gt; &#039;sani_heating_automatic@FFC13A&#039;, &#039;controlMode.boost&#039; =&amp;gt; &#039;sani_heating_boost@FB0C02&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;humidity&#039;=&amp;gt;&#039;humidity@6FD9FB&#039;, &#039;R-globalBtnLock.on&#039;=&amp;gt;&#039;secur_locked@F7301D&#039;, &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;R-globalBtnLock.off&#039;=&amp;gt;&#039;secur_open@0CFB0C&#039;,&#039;ValvePosition.0&#039; =&amp;gt; &#039;sani_heating_level_0@002AE0&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;ValvePosition.10&#039; =&amp;gt; &#039;sani_heating_level_10@F8D53D&#039;,&#039;ValvePosition.20&#039; =&amp;gt; &#039;sani_heating_level_20@FF9341&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;ValvePosition.30&#039; =&amp;gt; &#039;sani_heating_level_30@F17F3F&#039;,&#039;ValvePosition.40&#039; =&amp;gt; &#039;sani_heating_level_40@E46C3C&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;ValvePosition.50&#039; =&amp;gt; &#039;sani_heating_level_50@DE3B3A&#039;,&#039;ValvePosition.60&#039; =&amp;gt; &#039;sani_heating_level_60@A30D2D&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;ValvePosition.70&#039; =&amp;gt; &#039;sani_heating_level_70@B40A23&#039;,&#039;ValvePosition.80&#039; =&amp;gt; &#039;sani_heating_level_80@C40619&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;ValvePosition.90&#039; =&amp;gt; &#039;sani_heating_level_90@D4030F&#039;,&#039;ValvePosition.100&#039; =&amp;gt; &#039;sani_heating_level_100@E50005&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;batteryLevel.100&#039;=&amp;gt;&#039;measure_battery_100@0CFB0C&#039;,&#039;batteryLevel.75&#039;=&amp;gt;&#039;measure_battery_75@42BC0A&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;batteryLevel.50&#039;=&amp;gt;&#039;measure_battery_50@F5FF10&#039;,&#039;batteryLevel.25&#039;=&amp;gt;&#039;measure_battery_25@FB5909&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;batteryLevel.0&#039;=&amp;gt;&#039;measure_battery_0@E50005&#039;,&#039;controlMode.set_boost&#039; =&amp;gt; &#039;hourglass&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;controlMode.set_auto&#039; =&amp;gt; &#039;hourglass&#039;,&#039;controlMode.set_manual&#039; =&amp;gt; &#039;hourglass&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;R-globalBtnLock.set_on&#039; =&amp;gt; &#039;hourglass&#039;,&#039;R-globalBtnLock.set_off&#039; =&amp;gt; &#039;hourglass&#039;}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Icons zuordnen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&lt;br /&gt;
attr heatingInfo valueStyle {if($READING eq &amp;quot;measured-temp&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
{my $t=$VALUE;;my $d=ReadingsVal($DEVICE,&#039;desired-temp&#039;,0);;&amp;lt;br&amp;gt;&lt;br /&gt;
if($t-$d&amp;gt;=1){&#039;style=&amp;quot;color:rgb(251,63,11);;&amp;quot;&#039;}elsif($t-$d&amp;lt;=-1){&#039;style=&amp;quot;color:rgb(79,58,251);;&amp;quot;&#039;}&amp;lt;br&amp;gt;&lt;br /&gt;
else{&#039;style=&amp;quot;color:rgb(12,251,12);;&amp;quot;&#039;}}}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Farben (zu kalt: blau, zu warm: rot, ok: grün).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&lt;br /&gt;
attr heatingInfo valueSuffix {&amp;quot;desired-temp&amp;quot;=&amp;gt;&amp;quot; °C&amp;quot;, &amp;quot;measured-temp&amp;quot;=&amp;gt;&amp;quot; °C&amp;quot;, &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;ValvePosition&amp;quot;=&amp;gt;&amp;quot; (&amp;quot;.ReadingsVal($DEVICE,$READING,0).&amp;quot; %)&amp;quot;, &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;humidity&amp;quot;=&amp;gt;&amp;quot; &amp;quot;.ReadingsVal($DEVICE,$READING,0).&amp;quot; % RH&amp;quot;, &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;batteryLevel&amp;quot;=&amp;gt;&amp;quot; (&amp;quot;.ReadingsVal($DEVICE,$READING,0).&amp;quot; V)&amp;quot;}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Messeinheiten und Zahlenwerte.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings aus zusätzlichen Devices ===&lt;br /&gt;
Im folgenden Beispiel wird gezeigt wie sich Readings zusätzlicher Devices zu einer Zeile mit mehreren Readings hinzufügen lassen. Diese zusätzlichen Devices können z.b. die unterschiedlichen Channel eines HomeMatic Gerätes sein. Im folgenden Beispiel wird der Name des zugehörigen Geräts dynamisch bestimmt.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:rgHeizung4.png|thumb|750px|links|Anzeige + Regelmöglichkeit]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define myTemp readingsGroup &amp;lt;Raum&amp;gt;,&amp;lt;Tist&amp;gt;,&amp;lt;Tsoll&amp;gt;,&amp;lt;Mode&amp;gt;,&amp;lt;Tnight&amp;gt;,&amp;lt;Tday&amp;gt;,&amp;lt;Hum&amp;gt;,&amp;lt;BatTC&amp;gt;,&amp;lt;Vist&amp;gt;,&amp;lt;Vsoll&amp;gt;,&amp;lt;Verr&amp;gt;,&amp;lt;BatVD&amp;gt; Thermostat.(WZ|OZ|AZ|Bad|Kueche|SZ|GZ|Bad.OG):measured-temp,desired-temp,controlMode,night-temp,day-temp,humidity,battery,ValvePosition@{valveOfDevice($DEVICE)},ValveDesired@{valveOfDevice($DEVICE)},R-valveErrorPos@{valveOfDevice($DEVICE)},battery@{valveOfDevice($DEVICE)} Broetje:ToutIst &amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse Readings aller Thermostat Devices und des jeweils zugehörigen Ventilantriebs. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr myTemp mapping    { &#039;Broetje&#039; =&amp;gt; &#039;Garten&#039;,&#039;Thermostat.AZ&#039; =&amp;gt; &#039;EG Arbeitszimmer&#039;,&#039;Thermostat.SZ&#039; =&amp;gt; &#039;OG Schlafzimmer&#039;,&#039;Thermostat.WZ&#039;=&amp;gt;&#039;EG Wohnzimmer&#039;,&#039;Thermostat.Kueche&#039; =&amp;gt; &#039;EG Küche&#039;,&#039;Thermostat.GZ&#039; =&amp;gt; &#039;OG Gästezimmer&#039;,&#039;Thermostat.Bad&#039; =&amp;gt; &#039;EG Bad&#039;,&#039;Thermostat.Bad.OG&#039; =&amp;gt; &#039;OG Bad&#039;,&#039;Thermostat.OZ&#039; =&amp;gt; &#039;EG Kaminzimmer&#039;,&#039;desired-temp&#039; =&amp;gt; &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Benennung der Zeilentitel (Das ist je nach Konfiguration auch über $ALIAS und/oder $ROOM lösbar).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr myTemp commands   { &#039;desired-temp&#039; =&amp;gt; &#039;desired-temp:&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| desired-temp soll per dropDown einstellbar sein.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr myTemp nameStyle style=&amp;quot;color:yellow&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Überschriften sollen gelb sein.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr myTemp valueIcon {&#039;battery.ok&#039; =&amp;gt; &#039;batterie@lightgreen&#039;, &#039;battery.low&#039; =&amp;gt; &#039;batterie@red&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für den Batteriestand sollen jeweils Icons angezeigt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr myTemp valueFormat { &#039;measured-temp&#039; =&amp;gt; &amp;quot;%0.1f &amp;amp;amp;deg;C&amp;quot;,&#039;ToutIst&#039; =&amp;gt; &amp;quot;%.1f &amp;amp;amp;deg;C&amp;quot;,&#039;night-temp&#039; =&amp;gt; &amp;quot;%.1f &amp;amp;amp;deg;C&amp;quot;,&#039;day-temp&#039; =&amp;gt; &amp;quot;%.1f &amp;amp;amp;deg;C&amp;quot;,&#039;humidity&#039; =&amp;gt; &amp;quot;%.0f &lt;br /&gt;
%%&amp;quot;,&#039;ValvePosition&#039; =&amp;gt; &amp;quot;%.0f %%&amp;quot;,&#039;ValveDesired&#039; =&amp;gt; &amp;quot;%.0f %%&amp;quot;,&#039;R-valveErrorPos&#039; =&amp;gt; &amp;quot;%.0f %%&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Formatierung der Werte. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#namen des ventil device aus thermostat device ableiten&lt;br /&gt;
sub valveOfDevice ($) {&lt;br /&gt;
  my ($DEVICE) = @_;&lt;br /&gt;
  &lt;br /&gt;
  if ($DEVICE =~ m/AZ/) {&lt;br /&gt;
 	return &amp;quot;Ventil.&amp;quot;.substr($DEVICE,11).&amp;quot;.Nord&amp;quot;;&lt;br /&gt;
  } else {&lt;br /&gt;
 	return &amp;quot;Ventil.&amp;quot;.substr($DEVICE,11);  	&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
| Dieser Teil kommt in die [[99_myUtils_anlegen|99_myUtils.pm]]: Hier wird aus dem Namen des Thermostaten der Name des zugehörigen Ventilantriebs abgeleitet.&lt;br /&gt;
|}&lt;br /&gt;
Da im {...} Teil des &amp;lt;reading&amp;gt;@&amp;lt;device&amp;gt; Arguments keine Leerzeichen oder Kommas vorkommen dürfen ist er in der Regel das Einfachste die Funktionalität wie in diesem Beispiel in eine eigene Routine auszulagern. Mit ein paar &#039;Tricks&#039; lässt es sich aber manchmal auch ohne Leerzeichen oder Kommas lösen und dann direkt in die Definition schreiben:&amp;lt;code&amp;gt;...,ValvePosition@{$DEVICE=~s/Thermostat/Ventil/;$DEVICE;},...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inhalte filtern ===&lt;br /&gt;
Wenn man gewisse Zeilen einer Readingsgroup nicht dargestellt haben möchte, so kann man diese mit Hilfe von &amp;lt;code&amp;gt;valueFormat&amp;lt;/code&amp;gt; ausfiltern, bspw.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr rg valueFormat { return $VALUE if ( $VALUE &amp;gt; 0 );; return undef;; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Bsp. werden alle Zeilen/Devices, deren Value &amp;gt; 0 sind, angezeigt. Alle anderen werden als &amp;lt;code&amp;gt;undef&amp;lt;/code&amp;gt; formatiert und erscheinen damit nicht im Listing.&lt;br /&gt;
&lt;br /&gt;
Dies kann man noch weiter ausbauen und dynamische Auswahllisten erstellen (s. [[ReadingsGroup#Dynamische Inhalte]]).&lt;br /&gt;
&lt;br /&gt;
=== Dynamische Inhalte ===&lt;br /&gt;
[[Datei:rgDynamic-1.png|mini|450px|readingsGroup mit umschaltbarem Inhalt 1]]&lt;br /&gt;
[[Datei:rgDynamic-2.png|mini|450px|readingsGroup mit umschaltbarem Inhalt 2]]&lt;br /&gt;
Es ist möglich, den in einer readingsGroup dargestellten Inhalt dynamisch von zusätzlichen Bedingungen abhängig zu machen. Im folgenden Beispiel lässt sich&lt;br /&gt;
einstellen, dass nur die Devices angezeigt werden, die einen bestimmten Zustand (hier: on/off, open/tilted/closed) haben. Hier wird zum Umschalten ein dummy, der direkt über der readingsGroup dargestellt wird, verwendet. Über das links und/oder commands lässt sich auch eine Darstellung erzeugen, bei der das Umschalten direkt innerhalb der readingsGroup möglich ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define LXrg dummy&lt;br /&gt;
attr LXrg group -&lt;br /&gt;
attr LXrg setList mode1:on,off mode2:open,closed,tilted&lt;br /&gt;
attr LXrg stateFormat 1=mode1 2=mode2&lt;br /&gt;
attr LXrg webCmd mode1:mode2&lt;br /&gt;
&lt;br /&gt;
define rg readingsGroup Window.*:state Light.*:state&lt;br /&gt;
attr rg group -&lt;br /&gt;
attr rg valueFormat { return $VALUE if ( $VALUE eq ReadingsVal(&amp;quot;LXrg&amp;quot;,&amp;quot;mode1&amp;quot;,&amp;quot;&amp;quot;) || $VALUE eq ReadingsVal(&amp;quot;LXrg&amp;quot;,&amp;quot;mode2&amp;quot;,&amp;quot;&amp;quot;) );; return undef;;}&lt;br /&gt;
&lt;br /&gt;
define Watch_LX notify LX.*:.* {my $value = ReadingsVal($NAME,&#039;state&#039;,&#039;&#039;);;;;fhem(&amp;quot;setreading $NAME $value&amp;quot;)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Enable/Disable Button am Beispiel eines WeekdayTimer ===&lt;br /&gt;
Dieses Beispiel zeigt die Anwendung einer readingsGroup, um im Frontend einen Enable/Disable Button für ein Objekt darzustellen. Für den [[WeekdayTimer]] gibt es hier spezielle Erweiterungen (set Routinen, um das Attribut &#039;&#039;disable&#039;&#039; zu setzen). Es gibt aber auch eine allgemeinere Variante (siehe [http://forum.fhem.de/index.php/topic,23655.msg169141.html#msg169141 diesen Forumsbeitrag]) für alle Objekte, die das Fhem Attribut &#039;&#039;disable&#039;&#039; unterstützen.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:rg_scheduling.png|thumb|500px|links|Enable/Disable Button]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define rg_Timer_Wasser readingsGroup timer_Wasser_..:disabled,+DEF,&amp;lt;{rg_timer_Wasser_show_conditional($DEVICE,&amp;quot;nextUpdate&amp;quot;)}@disabled&amp;gt;,&amp;lt;{rg_timer_Wasser_show_conditional($DEVICE,&amp;quot;nextValue&amp;quot;)}@disabled&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Definition der angezeigten Readings. Das Attribut &#039;&#039;disabled&#039;&#039; wird mit weiteren Einstellungen (&#039;&#039;commands&#039;&#039;) zum Button, +DEF zeigt die Definition, d.h. die Schaltzeiten, des Timers an. Die Readings nextUpdate und nextValue sollen nur angezeigt werden, falls der Timer aktiv ist. Hierfür sorgt eine Routine &amp;lt;code&amp;gt;rg_timer_Wasser_show_conditional&amp;lt;/code&amp;gt;, die in der 99_myUtils.pm definiert wird. Das abschließende @disabled sorgt dafür, dass der LongPoll Mechanismus die Anzeige sofort ändert, wenn der Button betätigt wird. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_Timer_Wasser valueFormat  { if ( $READING =~ m/.*DEF/ ) { my @text = split(&amp;quot; &amp;quot;, $VALUE); shift @text; return join(&amp;quot; &amp;quot;, @text) }}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Der Name des Timers wird aus dem Internal &amp;quot;+DEF&amp;quot; vorne abgeschnitten. Damit werden nur die definierten Schaltpunkte angezeigt. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_Timer_Wasser valueIcon { &#039;disabled.0&#039; =&amp;gt; &#039;Restart&#039;, &#039;disabled.1&#039; =&amp;gt; &#039;Shutdown&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die beiden Zustände für den Button werden durch zwei Standard-Icons angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_Timer_Wasser commands  { &#039;disabled.0&#039; =&amp;gt; &#039;set $DEVICE disable&#039;, &#039;disabled.1&#039; =&amp;gt; &#039;set $DEVICE enable&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Toggle-Funktion für den Button. Wenn der Timer aktiv (&amp;quot;disabled.0&amp;quot;) sorgt ein Klick auf den Button, dass der Timer deaktiviert wird (&amp;quot;set $DEVICE disable&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub rg_timer_Wasser_show_conditional($$)&lt;br /&gt;
{&lt;br /&gt;
  my ($DEVICE,$READING) = @_;&lt;br /&gt;
  return ( ReadingsVal($DEVICE, &amp;quot;disabled&amp;quot;, &amp;quot;1&amp;quot;) eq &amp;quot;0&amp;quot; )? &lt;br /&gt;
     ReadingsVal($DEVICE, $READING, &amp;quot;reading_undef&amp;quot;) : &amp;quot;disabled&amp;quot;;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
| Dieser Teil kommt in die [[99_myUtils_anlegen|99_myUtils.pm]]: Hiermit wird das übergebene Reading des Timers nur angezeigt, wenn der Timer aktiv ist. Andernfalls wird der String &amp;quot;disabled&amp;quot; angezeigt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Ändern von Attributen: Noch ein WeekdayTimer Beispiel ===&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Dieses Beispiel benutzt Funktionen, die erst ab [[version|Modulversion]] 8761/16.6.2015 verfügbar sind.}}&lt;br /&gt;
Inzwischen ist es auch möglich das commands Mapping auf Attribute anzuwenden. Die Syntax ist die gleiche wie für die set Kommandos. Um das Beispiel übersichtlich zu halten werden hier die Werte und Icons auch für deaktiviert WeekdayTimer angezeigt. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:rg_timer.png|thumb|500px|links|FhemWidget für das &#039;disable&#039; Attribut]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define rgTimer readingsGroup &amp;lt;&amp;gt;,&amp;lt;Current&amp;gt;,&amp;lt;Update-Time&amp;gt;,&amp;lt;New&amp;gt;,&amp;lt;disable&amp;gt; TYPE=WeekdayTimer:state,nextUpdate,nextValue,?!disable&amp;lt;/code&amp;gt;&lt;br /&gt;
| Definition der angezeigten Readings. Das Attribut &#039;&#039;disable&#039;&#039; wird mit weiteren Einstellungen (&#039;&#039;commands&#039;&#039;) zum Button. Durch das ! wird das Attribut auch dann angezeigt wenn es noch nicht gesetzt ist.   &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rgTimer valueIcon { state =&amp;gt; &#039;%devStateIcon&#039;, nextValue =&amp;gt; &#039;{(split(&amp;quot;:&amp;quot;,Color::devStateIcon($DEVICE,&amp;quot;dimmer&amp;quot;,undef,&amp;quot;nextValue&amp;quot;)))[1]}&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für den aktuellen Zustand wird das devStateIcon angezeigt und für den nächsten Zustand das passende Lampen-Icon.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rgTimer valueFormat  &#039;{(split(&amp;quot; &amp;quot;, $VALUE))[1]}&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Vom nächsten Schaltpunkt wird nur die Zeit angezeigt. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rgTimer commands  { disable =&amp;gt; &#039;disable:&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für das disable attribut wird das normale dropDown mit 0 und 1 angezeigt das auch in der Device Detail Ansicht verwendet wird.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings löschen ===&lt;br /&gt;
Es kann vorkommen, dass Readings angezeigt werden, die garnicht existieren sollten - bspw. wenn man in einer HTTPMOD ein Reading umbeannt hat, kann auch der alte Readingsname immernoch angezeigt werden. Solche Readings können mit der globalen Funktion [http://fhem.de/commandref.html#deletereading deletereading] gelöscht werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Auf jeden Fall die [http://fhem.de/commandref.html#deletereading CommandRef dazu] lesen!&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
Im HTTPMOD des [[Pollenflug]] war zuerst das &amp;lt;code&amp;gt;reading04Name Graeser&amp;lt;/code&amp;gt; definiert und wurde später in &amp;lt;code&amp;gt;reading04Name Gräser&amp;lt;/code&amp;gt; umbenannt. In der zugehörigen ReadingGroup wurden dann konsequent beide Varianten dargestellt - auch nachdem alle Alt-Einträge aus den Logs entfernt wurden. Erst ein &amp;lt;code&amp;gt;deletereading Pollenflug Graeser&amp;lt;/code&amp;gt; in der fhem-Befehltszeile hat das veraltete Reading entfernt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ausrichtung der Tabelle drehen (horizontal/vertikal) ===&lt;br /&gt;
Eine Readingsgroup wird standardmäßig immer zeilenweise aufgebaut, zB. jedes Gerät in eine neue Zeile. Die Werte der Geräte werden dann in den Spalten dargestellt. &lt;br /&gt;
Wenn man eine Readingsgroup für nur ein Gerät mit vielen Readings hat (zB. [[Allergy]]), so kann man die Darstellung horizontal oder vertikal ausrichten, indem man die Readingsgroup detailliert definiert. Ein Bsp. dazu liefert der Foreneintrag [https://forum.fhem.de/index.php/topic,37194.msg440446.html#msg440446] :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Pollenflugvorhersage allergy &amp;lt;PLZ&amp;gt;&lt;br /&gt;
attr Pollenflugvorhersage levelsFormat rc_dot@white,rc_dot@yellow,rc_dot@orange,rc_dot@red&lt;br /&gt;
attr Pollenflugvorhersage stateFormat fc1_maximum&lt;br /&gt;
attr Pollenflugvorhersage updateEmpty 1&lt;br /&gt;
attr Pollenflugvorhersage updateIgnored 1&lt;br /&gt;
&lt;br /&gt;
# Pollen in Spalten, Tage in Zeilen&lt;br /&gt;
define PollenAlarmHorizontal readingsGroup &amp;lt;&amp;gt;,&amp;lt;Ampfer&amp;gt;,&amp;lt;Ambrosia&amp;gt;,&amp;lt;Beifuß&amp;gt;,&amp;lt;Birke&amp;gt;,&amp;lt;Buche&amp;gt;,&amp;lt;Eiche&amp;gt;,&amp;lt;Erle&amp;gt;,&amp;lt;Gräser&amp;gt;,&amp;lt;Hasel&amp;gt;,&amp;lt;Pappel&amp;gt;,&amp;lt;Roggen&amp;gt;,&amp;lt;Ulme&amp;gt;,&amp;lt;Wegerich&amp;gt;,&amp;lt;Weide&amp;gt; \&lt;br /&gt;
Pollenflugvorhersage:fc1_day_of_week,fc1_Ampfer,fc1_Ambrosia,fc1_Beifuß,fc1_Birke,fc1_Buche,fc1_Eiche,fc1_Erle,fc1_Gräser,fc1_Hasel,fc1_Pappel,fc1_Roggen,fc1_Ulme,fc1_Wegerich,fc1_Weide \&lt;br /&gt;
Pollenflugvorhersage:fc2_day_of_week,fc2_Ampfer,fc2_Ambrosia,fc2_Beifuß,fc2_Birke,fc2_Buche,fc2_Eiche,fc2_Erle,fc2_Gräser,fc2_Hasel,fc2_Pappel,fc2_Roggen,fc2_Ulme,fc2_Wegerich,fc2_Weide \&lt;br /&gt;
Pollenflugvorhersage:fc3_day_of_week,fc3_Ampfer,fc3_Ambrosia,fc3_Beifuß,fc3_Birke,fc3_Buche,fc3_Eiche,fc3_Erle,fc3_Gräser,fc3_Hasel,fc3_Pappel,fc3_Roggen,fc3_Ulme,fc3_Wegerich,fc3_Weide \&lt;br /&gt;
Pollenflugvorhersage:fc4_day_of_week,fc4_Ampfer,fc4_Ambrosia,fc4_Beifuß,fc4_Birke,fc4_Buche,fc4_Eiche,fc4_Erle,fc4_Gräser,fc4_Hasel,fc4_Pappel,fc4_Roggen,fc4_Ulme,fc4_Wegerich,fc4_Weide \&lt;br /&gt;
Pollenflugvorhersage:fc5_day_of_week,fc5_Ampfer,fc5_Ambrosia,fc5_Beifuß,fc5_Birke,fc5_Buche,fc5_Eiche,fc5_Erle,fc5_Gräser,fc5_Hasel,fc5_Pappel,fc5_Roggen,fc5_Ulme,fc5_Wegerich,fc5_Weide \&lt;br /&gt;
Pollenflugvorhersage:fc6_day_of_week,fc6_Ampfer,fc6_Ambrosia,fc6_Beifuß,fc6_Birke,fc6_Buche,fc6_Eiche,fc6_Erle,fc6_Gräser,fc6_Hasel,fc6_Pappel,fc6_Roggen,fc6_Ulme,fc6_Wegerich,fc6_Weide \&lt;br /&gt;
Pollenflugvorhersage:fc7_day_of_week,fc7_Ampfer,fc7_Ambrosia,fc7_Beifuß,fc7_Birke,fc7_Buche,fc7_Eiche,fc7_Erle,fc7_Gräser,fc7_Hasel,fc7_Pappel,fc7_Roggen,fc7_Ulme,fc7_Wegerich,fc7_Weide&lt;br /&gt;
attr PollenAlarm nonames 1&lt;br /&gt;
attr PollenAlarm valueFormat %VALUE&lt;br /&gt;
attr PollenAlarm valueIcon %VALUE&lt;br /&gt;
&lt;br /&gt;
# Tage in Spalten, Pollen in Zeilen&lt;br /&gt;
define PollenAlarmVertikal readingsGroup Pollenflugvorhersage:&amp;lt;Pollen&amp;gt;,fc0_day_of_week,fc1_day_of_week,fc2_day_of_week,fc3_day_of_week,fc4_day_of_week,fc5_day_of_week,fc6_day_of_week,fc7_day_of_week \&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Ambrosia&amp;gt;,fc0_Ambrosia,fc1_Ambrosia,fc2_Ambrosia,fc3_Ambrosia,fc4_Ambrosia,fc5_Ambrosia,fc6_Ambrosia,fc7_Ambrosia\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Ampfer&amp;gt;,fc0_Ampfer,fc1_Ampfer,fc2_Ampfer,fc3_Ampfer,fc4_Ampfer,fc5_Ampfer,fc6_Ampfer,fc7_Ampfer\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Beifuß&amp;gt;,fc0_Beifuss,fc1_Beifuss,fc2_Beifuss,fc3_Beifuss,fc4_Beifuss,fc5_Beifuss,fc6_Beifuss,fc7_Beifuss\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;&amp;lt;b&amp;gt;Birke&amp;lt;Birke&amp;lt;/b&amp;gt;&amp;gt;,fc0_Birke,fc1_Birke,fc2_Birke,fc3_Birke,fc4_Birke,fc5_Birke,fc6_Birke,fc7_Birke\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Buche&amp;gt;,fc0_Buche,fc1_Buche,fc2_Buche,fc3_Buche,fc4_Buche,fc5_Buche,fc6_Buche,fc7_Buche\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Eiche&amp;gt;,fc0_Eiche,fc1_Eiche,fc2_Eiche,fc3_Eiche,fc4_Eiche,fc5_Eiche,fc6_Eiche,fc7_Eiche\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;&amp;lt;b&amp;gt;Erle&amp;lt;Erle&amp;lt;/b&amp;gt;&amp;gt;,fc0_Erle,fc1_Erle,fc2_Erle,fc3_Erle,fc4_Erle,fc5_Erle,fc6_Erle,fc7_Erle\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Gräser&amp;gt;,fc0_Graeser,fc1_Graeser,fc2_Graeser,fc3_Graeser,fc4_Graeser,fc5_Graeser,fc6_Graeser,fc7_Graeser\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;&amp;lt;b&amp;gt;Hasel&amp;lt;Hasel&amp;lt;/b&amp;gt;&amp;gt;,fc0_Hasel,fc1_Hasel,fc2_Hasel,fc3_Hasel,fc4_Hasel,fc5_Hasel,fc6_Hasel,fc7_Hasel\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Pappel&amp;gt;,fc0_Pappel,fc1_Pappel,fc2_Pappel,fc3_Pappel,fc4_Pappel,fc5_Pappel,fc6_Pappel,fc7_Pappel\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Roggen&amp;gt;,fc0_Roggen,fc1_Roggen,fc2_Roggen,fc3_Roggen,fc4_Roggen,fc5_Roggen,fc6_Roggen,fc7_Roggen\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Ulme&amp;gt;,fc0_Ulme,fc1_Ulme,fc2_Ulme,fc3_Ulme,fc4_Ulme,fc5_Ulme,fc6_Ulme,fc7_Ulme\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Wegerich&amp;gt;,fc0_Wegerich,fc1_Wegerich,fc2_Ulme,fc3_Wegerich,fc4_Wegerich,fc5_Wegerich,fc6_Wegerich,fc7_Wegerich\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Weide&amp;gt;,fc0_Weide,fc1_Weide,fc2_Weide,fc3_Weide,fc4_Weide,fc5_Weide,fc6_Weide,fc7_Weide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Berechnungen ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Dieses Beispiel benutzt Funktionen, die erst ab [[version|Modulversion]] 8761/16.6.2015 verfügbar sind.}}&lt;br /&gt;
Das Rechnen funktioniert über das Flag &amp;quot;$&amp;quot;, mit dem eine Funktion angegeben werden kann, die auf beliebige Kombinationen von Zeilen, Spalten und einzelnen Zellen angewendet wird. Ähnlich wie in einer Tabellenkalkulation.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel:&lt;br /&gt;
:&amp;lt;code&amp;gt;define rg readingsGroup .*:temperature rg:$avg&amp;lt;/code&amp;gt;&lt;br /&gt;
Damit wird eine readingsGroup über alle &#039;&#039;temperature&#039;&#039; Readings definiert. In einer zusätzlichen Zeile am Ende wird mit &#039;&#039;$avg&#039;&#039; der Durchschnittswert aller darüber liegenden Temperaturen angezeigt.&lt;br /&gt;
&lt;br /&gt;
Das genaue Format: &amp;lt;code&amp;gt;$&amp;lt;operator&amp;gt;[(&amp;lt;zellen&amp;gt;)]&amp;lt;/code&amp;gt; mit&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;operator&amp;gt;&amp;lt;/code&amp;gt;: sum, avg, min, max, scalar, count oder der Name einer beliebigen anderen Funktion, die ein Array mit allen Werten übergeben bekommt und ein Ergebnis zurückliefert.&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;zellen&amp;gt;&amp;lt;/code&amp;gt; ist eine durch Semikolon getrennte Liste aus &amp;lt;code&amp;gt;&amp;lt;zeilen&amp;gt;:&amp;lt;spalten&amp;gt;&amp;lt;/code&amp;gt; Paaren. &lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;zeilen&amp;gt;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&amp;lt;spalten&amp;gt;&amp;lt;/code&amp;gt; sind jeweils eine Perl Liste, d.h. hier können &lt;br /&gt;
** einzelne Werte,&lt;br /&gt;
** durch Komma getrennte Aufzählungen,&lt;br /&gt;
** mit .. angegebene Wertebereiche&lt;br /&gt;
** sowie &amp;lt;code&amp;gt;$ROW&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;$COLUMN&amp;lt;/code&amp;gt; als Bezeichner für die aktuelle Zelle&lt;br /&gt;
:verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Alle Möglichkeiten sind kombinierbar. Die Zählung der Zeilen und Spalten beginnt bei 1. Eine nicht vorhandene Zeilenangabe wird durch den Bereich von Zeile 1 bis zur aktuellen Zeile ersetzt, eine nicht vorhandene Spalte durch die aktuelle Spalte.&lt;br /&gt;
&lt;br /&gt;
Es ergeben sich somit unter anderem folgende Möglichkeiten:&lt;br /&gt;
*&amp;lt;code&amp;gt;$sum&amp;lt;/code&amp;gt; equivalent zu &amp;lt;code&amp;gt;$sum(1..$ROW), $sum(:$COLUMN)&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;$sum(1..$ROW:$COLUMN)&amp;lt;/code&amp;gt; die Summe der Werte in der Spalte über der aktuellen Zelle.&lt;br /&gt;
*&amp;lt;code&amp;gt;$max($ROW:1..$COLUMN-1)&amp;lt;/code&amp;gt; Maximum aller Werte links von der aktuellen Zelle (in der aktuellen Zeile)&lt;br /&gt;
*&amp;lt;code&amp;gt;$avg(1..$ROW:1)&amp;lt;/code&amp;gt; Durchschnitt aller Werte in Spalte 1 bis zur aktuellen Zeile&lt;br /&gt;
*&amp;lt;code&amp;gt;$scalar(:1)&amp;lt;/code&amp;gt; Anzahl der Werte in Spalte 1&lt;br /&gt;
*&amp;lt;code&amp;gt;$min(1..5:1,2,4)&amp;lt;/code&amp;gt; Minimum der Werte aus den Zeilen 1-5 in den Spalten 1, 2 und 4&lt;br /&gt;
&lt;br /&gt;
Eigene Funktionen lassen sich über 99_myUtils anlegen und z.B. verwenden um Häufigkeiten zu zählen oder mit nichtnumerischen Readings umzugehen.&lt;br /&gt;
&lt;br /&gt;
Die Ergebnisse werden im Weiteren wie normale Readings behandelt. Sie lassen sich von links oben nach rechts unten kaskadieren und lassen sich über valuePrefix, valueSuffix, valueFormat und valueStyle in der Darstellung beeinflussen. Also z.B. einfärben, als Balkendiagramm darstellen, ...&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe der Funktionalität zum auf- und zu-klappen von Teilen einer readingsGroup lassen sich z.B. im zusammengeklappten Zustand Summen, Extremwerte oder andere Ausreißer anzeigen und die Details nur beim Aufklappen zeigen.&lt;br /&gt;
&lt;br /&gt;
Weitere Möglichkeiten:&lt;br /&gt;
* Attribut &amp;lt;code&amp;gt;firstCalcRow&amp;lt;/code&amp;gt;: Hiermit kann der Default für die Nummer der ersten Zeile vorgegeben werden (sofern im Ausdruck nichts genaueres angegeben ist). firstCalcRow sollte z.B. auf 2 gesetzt werden, wenn in der readingsGroup Spaltenüberschriften verwendet werden.&lt;br /&gt;
* special &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;hr&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; um eine horizontale Linie über die volle Breite einzufügen&lt;br /&gt;
* Über ein angehängtes &amp;lt;code&amp;gt;@&amp;lt;alias&amp;gt;&amp;lt;/code&amp;gt; kann einem Rechenergebniss ein Alias-Name gegeben werden. Über diesen kann der Wert dann zur Formatierung mit den value-Attributen angesprochen werden.&lt;br /&gt;
* das &amp;lt;code&amp;gt;alwaysTrigger&amp;lt;/code&amp;gt; Attribut kann jetzt auch den Wert 2 bekommen. Damit werden in der readingsGroup Readings für alle durch die Aggregation gebildeten Werte und entsprechende Events auch dann erzeugt wenn die readingsGroup nicht angezeigt wird. Wenn ein Alias-Name vergeben ist, wird dieser auch für den Reading-Namen verwendet.&lt;br /&gt;
* Über den operator &amp;lt;code&amp;gt;$count(&amp;lt;wert&amp;gt;)(&amp;lt;zellen&amp;gt;)&amp;lt;/code&amp;gt; um das Vorkommen von &amp;lt;code&amp;gt;&amp;lt;wert&amp;gt;&amp;lt;/code&amp;gt; in den angegebenen Zellen zu zählen. &amp;lt;code&amp;gt;&amp;lt;wert&amp;gt;&amp;lt;/code&amp;gt; kann enweder direkt der zu zählende Wert sein (ohne Anführungzeichen) oder eine in / eingeschlossene regex. Mit &amp;lt;code&amp;gt;!&amp;lt;wert&amp;gt;&amp;lt;/code&amp;gt; kann das Nicht-Vorkommen von &amp;lt;code&amp;gt;&amp;lt;wert&amp;gt;&amp;lt;/code&amp;gt; gezählt werden.&lt;br /&gt;
&lt;br /&gt;
=== Ein interaktives Beispiel ===&lt;br /&gt;
[[Datei:rgCalc.png|mini|right|400px|Beispiel-readingsGroup mit Berechnungen]]&lt;br /&gt;
In drei [[dummy]] Objekten lässt sich jeweils ein Reading über einen Slider einstellen. In der darunter liegenden readingsGroup werden diese Readings und diverse daraus abgeleitete Werte dargestellt. Alle Readings und die daraus abgeleiteten Werte werden live per longpoll aktualisiert, wenn die slider bewegt werden.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  define t1 dummy&lt;br /&gt;
  attr t1 room rg&lt;br /&gt;
  attr t1 setList state:slider,-10,1,30&lt;br /&gt;
  attr t1 webCmd state&lt;br /&gt;
  define t2 dummy&lt;br /&gt;
  attr t2 room rg&lt;br /&gt;
  attr t2 setList state:slider,-10,1,30&lt;br /&gt;
  attr t2 webCmd state&lt;br /&gt;
  define t3 dummy&lt;br /&gt;
  attr t3 room rg&lt;br /&gt;
  attr t3 setList state:slider,-10,1,30&lt;br /&gt;
  attr t3 webCmd state&lt;br /&gt;
&lt;br /&gt;
  define rg readingsGroup &amp;lt;&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;sum&amp;gt;,&amp;lt;min&amp;gt;,&amp;lt;max&amp;gt;,&amp;lt;avg&amp;gt;\&lt;br /&gt;
  t\d:+NAME,state,$sum(1..$ROW:2),$min(1..$ROW:2),$max(1..$ROW:2),$avg(1..$ROW:2)\&lt;br /&gt;
  &amp;lt;hr&amp;gt;\&lt;br /&gt;
  rg:&amp;lt;&amp;gt;,$scalar,$sum(:2)@SUM,$min(:2)@MIN,$max(:2)@MAX,$avg(:2)@AVG\&lt;br /&gt;
  &amp;lt;hr&amp;gt;\&lt;br /&gt;
  t1:&amp;lt;t1,t2,t3&amp;gt;,state,state@t2,state@t3,$sum($ROW:2..4)@SUM,$count(/\d/)(2..$ROW-4:2)\&lt;br /&gt;
 &lt;br /&gt;
  attr rg nonames 1&lt;br /&gt;
  attr rg room rg&lt;br /&gt;
  attr rg style style=&#039;text-align:center&#039;&lt;br /&gt;
  attr rg valueFormat { &#039;avg&#039; =&amp;gt; &#039;%.2f&#039;, &#039;AVG&#039; =&amp;gt; &#039;%.2f&#039; }&lt;br /&gt;
  attr rg valuePrefix { &#039;rg.scalar&#039; =&amp;gt; &#039;#&#039;, &#039;rg.SUM&#039; =&amp;gt;&#039;&amp;amp;Sigma;; &#039;, &#039;rg.MIN&#039; =&amp;gt;&#039;Min: &#039;, &#039;rg.MAX&#039; =&amp;gt;&#039;Max: &#039;, &#039;rg.AVG&#039; =&amp;gt;&#039;&amp;amp;empty;; &#039;, &#039;rg.count&#039; =&amp;gt; &#039;#(X): &#039; }&lt;br /&gt;
  attr rg valueSuffix { state =&amp;gt; &#039;&amp;amp;deg;;C&#039; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links und Trigger ==&lt;br /&gt;
=== readingsGroup mit Link ===&lt;br /&gt;
[[Datei:rgPCA-detail.png|mini|400px|readingsGroup mit Link]]&lt;br /&gt;
Das PCA301 Beispiel oben lässt sich mit einem ans Ende des define angehängten &lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;{appendTrigger($DEVICE,&amp;quot;clear&amp;quot;,&amp;quot;Alle löschen&amp;quot;)}&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
und der folgenden appendTrigger Definition in 99_myUtils.pm um einen Link erweitern, der ein Event auslöst, an das z.B. ein notify gehängt werden kann, um die Verbrauchszähler der PCA301 Dosen zurückzusetzen. &lt;br /&gt;
:&amp;lt;code&amp;gt;define clearVerbrauch notify Verbrauch:clear set TYPE=PCA301 clear&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
use vars qw($FW_ME);&lt;br /&gt;
use vars qw($FW_subdir);&lt;br /&gt;
sub&lt;br /&gt;
appendTrigger($$$)&lt;br /&gt;
{&lt;br /&gt;
  my ($name,$trigger,$label) = @_; &lt;br /&gt;
&lt;br /&gt;
  my $ret .= &amp;quot;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  my $link = &amp;quot;cmd=trigger $name $trigger&amp;quot;;&lt;br /&gt;
  my $txt = &amp;quot;&amp;lt;a onClick=\&amp;quot;FW_cmd(&#039;$FW_ME$FW_subdir?XHR=1&amp;amp;$link&#039;)\&amp;quot;&amp;gt;$label&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
  $ret .= &amp;quot;&amp;lt;td colspan=\&amp;quot;99\&amp;quot;&amp;gt;&amp;lt;div style=\&amp;quot;cursor:pointer;color:#888888;text-align:right\&amp;quot;&amp;gt;$txt&amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  return ($ret,0);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wenn hierdurch Änderungen an einer readingsGroup erfolgen, die ein Neuladen der Seite erforderlich machen, kann dies so erfolgen:&lt;br /&gt;
:&amp;lt;code&amp;gt;{myUtils_refresh(&amp;quot;WEB&amp;quot;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
mit folgendem code in 99_myUtils.pm:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub                                                                                     &lt;br /&gt;
myUtils_refresh($)                                                                      &lt;br /&gt;
{                                                                                       &lt;br /&gt;
  my ($name) = @_;                                                                      &lt;br /&gt;
                                                                                        &lt;br /&gt;
  FW_directNotify(&amp;quot;#FHEMWEB:$name&amp;quot;, &amp;quot;location.reload(true);&amp;quot;,&amp;quot;&amp;quot; );&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Beispiel für &#039;custom links und trigger&#039; findet sich in {{Link2Forum|Topic=14425|Message=109383|LinkText=diesem Forenbeitrag}}: dort wird damit eine readingsGroup dynamisch umgeschaltet, um nur die eingeschalteten, nur die ausgeschalteten oder alle Lampen anzuzeigen.&lt;br /&gt;
&lt;br /&gt;
=== sub rg ===&lt;br /&gt;
Damit beim klicken auf ein Icon oder einen Text in einer readingsGroup etwas passiert ist es möglich dies über das commands Attribut auf ein &amp;lt;code&amp;gt;&#039;trigger ntfy_rg $DEVICE $READING&#039;&amp;lt;/code&amp;gt; oder Ähnliches zu mappen.&lt;br /&gt;
Anlegen des ntfy_rg notify&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define ntfy_rg notify ntfy_rg {rg($EVENT)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Folgender Code muss noch in de [[99_myUtils_anlegen|99_myUtils.pm]]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub rg($){&lt;br /&gt;
  my @input    = split(/[§\s]+/,shift);&lt;br /&gt;
  my $device   = $input[0];&lt;br /&gt;
  my $function = $input[1];&lt;br /&gt;
&lt;br /&gt;
if($function eq &amp;quot;clima&amp;quot;){&lt;br /&gt;
  my $room =  AttrVal($device, &#039;room&#039;, &#039;undef&#039;);&lt;br /&gt;
  $room =~ s/\D//g;&lt;br /&gt;
  &lt;br /&gt;
  return((&amp;quot;d_climaControl_&amp;quot;.$room));&lt;br /&gt;
}&lt;br /&gt;
elsif($function eq &amp;quot;device&amp;quot;){&lt;br /&gt;
  return InternalVal($device,&amp;quot;device&amp;quot;,&amp;quot;device error&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
elsif($function eq &amp;quot;controlMode&amp;quot;){&lt;br /&gt;
  my $controlMode = ReadingsVal($device,&amp;quot;controlMode&amp;quot;,&amp;quot;controlMode error&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if($controlMode ~~ /manual/)&lt;br /&gt;
    {fhem(&amp;quot;set $device controlMode auto&amp;quot;)}&lt;br /&gt;
  elsif($controlMode ~~ /auto/)&lt;br /&gt;
    {fhem(&amp;quot;set $device controlMode manual&amp;quot;)};&lt;br /&gt;
}&lt;br /&gt;
elsif($function eq &amp;quot;globalBtnLock&amp;quot;){&lt;br /&gt;
  my $globalBtnLock = ReadingsVal($device,&amp;quot;R-globalBtnLock&amp;quot;,&amp;quot;globalBtnLock error&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if($globalBtnLock ~~ /off/){&lt;br /&gt;
    {fhem(&amp;quot;set $device regSet globalBtnLock on&amp;quot;)}&lt;br /&gt;
    {fhem (&amp;quot;set $device getConfig&amp;quot;)}&lt;br /&gt;
  }&lt;br /&gt;
  elsif($globalBtnLock ~~ /on/){&lt;br /&gt;
    {fhem(&amp;quot;set $device regSet globalBtnLock off&amp;quot;)}&lt;br /&gt;
    {fhem (&amp;quot;set $device getConfig&amp;quot;)}&lt;br /&gt;
  };&lt;br /&gt;
}&lt;br /&gt;
elsif($function eq &amp;quot;state&amp;quot;){&lt;br /&gt;
  my $state = Value($device);&lt;br /&gt;
&lt;br /&gt;
  if($state ~~ /off/){&lt;br /&gt;
    {fhem(&amp;quot;set $device on&amp;quot;)}&lt;br /&gt;
  }&lt;br /&gt;
  elsif($state ~~ /on/){&lt;br /&gt;
    {fhem(&amp;quot;set $device off&amp;quot;)}&lt;br /&gt;
  };&lt;br /&gt;
}&lt;br /&gt;
elsif($function eq &amp;quot;setTimeTable&amp;quot;){&lt;br /&gt;
  my $room         =  AttrVal($device, &#039;room&#039;, &#039;undef&#039;);&lt;br /&gt;
  $room         =~ s/\D//g;&lt;br /&gt;
  my $climaControl = (&amp;quot;d_climaControl_&amp;quot;.$room);&lt;br /&gt;
  my $dayTemp           = ReadingsVal( $climaControl, &amp;quot;dayTemp&amp;quot;          , 21.0    );&lt;br /&gt;
  my $nightTemp         = ReadingsVal( $climaControl, &amp;quot;nightTemp&amp;quot;        , 17.0    );&lt;br /&gt;
  my $workday_period_1_start  = ReadingsVal( $climaControl, &amp;quot;workday_period_1_start&amp;quot;  , &amp;quot;06:30&amp;quot; );&lt;br /&gt;
  my $workday_period_1_stop   = ReadingsVal( $climaControl, &amp;quot;workday_period_1_stop&amp;quot;   , &amp;quot;18:00&amp;quot; );&lt;br /&gt;
  my $workday_period_2_start  = ReadingsVal( $climaControl, &amp;quot;workday_period_2_start&amp;quot;  , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $workday_period_2_stop   = ReadingsVal( $climaControl, &amp;quot;workday_period_2_stop&amp;quot;   , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $saturday_period_1_start = ReadingsVal( $climaControl, &amp;quot;saturday_period_1_start&amp;quot; , &amp;quot;06:30&amp;quot; );&lt;br /&gt;
  my $saturday_period_1_stop  = ReadingsVal( $climaControl, &amp;quot;saturday_period_1_stop&amp;quot;  , &amp;quot;12:00&amp;quot; );&lt;br /&gt;
  my $saturday_period_2_start = ReadingsVal( $climaControl, &amp;quot;saturday_period_2_start&amp;quot; , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $saturday_period_2_stop  = ReadingsVal( $climaControl, &amp;quot;saturday_period_2_stop&amp;quot;  , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $sunday_period_1_start   = ReadingsVal( $climaControl, &amp;quot;sunday_period_1_start&amp;quot;   , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $sunday_period_1_stop    = ReadingsVal( $climaControl, &amp;quot;sunday_period_1_stop&amp;quot;    , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $sunday_period_2_start   = ReadingsVal( $climaControl, &amp;quot;sunday_period_2_start&amp;quot;   , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $sunday_period_2_stop    = ReadingsVal( $climaControl, &amp;quot;sunday_period_2_stop&amp;quot;    , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListMon prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListTue prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListWed prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListThu prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListFri prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListSat prep $saturday_period_1_start $nightTemp $saturday_period_1_stop $dayTemp $saturday_period_2_start $nightTemp $saturday_period_2_stop $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListSun exec $sunday_period_1_start   $nightTemp $sunday_period_1_stop   $dayTemp $sunday_period_2_start   $nightTemp $sunday_period_2_stop   $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hier sind die benötigten CodeBlöcke für [[ReadingsGroup#Heizungswerte.2C_Status.2C_Steuerung_und_Wochenprofil|Heizungswerte, Status, Steuerung und Wochenprofil]] enthalten, aber auch um state zu triggern.&lt;br /&gt;
&lt;br /&gt;
== Sonstiges ==&lt;br /&gt;
In der Regel werden die Parameter zu einem reading in den mappings unter &amp;lt;$DEVICE&amp;gt; und dann &amp;lt;$DEVICE&amp;gt;.&amp;lt;$READING&amp;gt; und dann unter &amp;lt;$READING&amp;gt;.&amp;lt;$VALUE&amp;gt; gesucht.&lt;br /&gt;
&lt;br /&gt;
=== Lesbar machen ===&lt;br /&gt;
Für die meisten Attribute gilt:&lt;br /&gt;
&lt;br /&gt;
* Wenn es komplexer wird ist es einfacher, den Code in eine eigene Routine in (beispielsweise) [[99 myUtils anlegen|99_myUtils]] auszulagern und diese aufzurufen:&lt;br /&gt;
:&amp;lt;code&amp;gt; attr &amp;lt;name&amp;gt; valueStyle {myValueToFormat($READING,$VALUE)}&amp;lt;/code&amp;gt;&lt;br /&gt;
* code für unterschiedliche readings kann auch im mapping schon aufgeteilt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;name&amp;gt; valueStyle { SuperE5 =&amp;gt; &#039;{perl code}&#039;, Diesel =&amp;gt; &#039;{perl code}&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
* Ifs lassen sich verschachteln und sortieren. So kann die Anzahl der Klammern und Else-Zweige reduziert werden:&lt;br /&gt;
 if( $READING eq ... ) {&lt;br /&gt;
   return xxx if( $VALUE &amp;lt; 1 );&lt;br /&gt;
   return yyy if( $VALUE &amp;lt; 1.5 );&lt;br /&gt;
   return zzz;&lt;br /&gt;
 } elsif( $READING eq ... ) {&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Da alles lässt sich natürlich auch kombinieren und so viel lesbarer machen als ein einziger langer Bandwurm.&lt;br /&gt;
&lt;br /&gt;
=== readingsGroup in einer Gruppe ===&lt;br /&gt;
Wenn der doppelte Rahmen um eine readingsGroup bei Darstellung in einer Gruppe stört, lässt er sich mit dem passenden style entfernen: &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;rgName&amp;gt; style style=&amp;quot;border:0px;background:none;box-shadow:none&amp;quot;&amp;lt;/code&amp;gt; &lt;br /&gt;
Für die readingsGroup &#039;&#039;rgName&#039;&#039; wird der Darstellungsstil verändert.&lt;br /&gt;
&lt;br /&gt;
Anwendungs-Bsp: [[Pollenflug]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache Balkendiagramme ===&lt;br /&gt;
[[Datei:rgBars.png|mini|400px|readingsGroup mit Balken]]&lt;br /&gt;
Readings lassen sich mit einem valueStyle der folgenden Art mit einem &amp;quot;Füllstandsbalken&amp;quot; hinterlegen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;rgName&amp;gt; valueStyle style=&amp;quot;width:200px; text-align:center; border: 1px solid #ccc; background:-webkit-linear-gradient(left, red $VALUE%, rgba(0,0,0,0) $VALUE%)&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Balken werden bei Änderungen der Readings automatisch per longpoll aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Diese direkte Definition des &amp;lt;code&amp;gt;valueStyle&amp;lt;/code&amp;gt; ist allerdings sehr unflexibel - bspw. müsste der &amp;lt;code&amp;gt;$VALUE&amp;lt;/code&amp;gt; zufällig max 100 erreichen und es darf nur ein Browsertyp eingesetzt werden, damit alles sauber funktioniert. &lt;br /&gt;
&lt;br /&gt;
Deutlich flexibler ist eine Auslagerung als eigenständige Funktion in die [[99_myUtils_anlegen|99_myUtils.pm]], die den valueStyle dynamisch generiert, bspw.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub Balkenanzeige($) &lt;br /&gt;
{&lt;br /&gt;
    # Zuweisung der übergebenen Variablen&lt;br /&gt;
    my ($val) = @_;&lt;br /&gt;
&lt;br /&gt;
    # Konfiguration des maximal übergebenen Werts (hier wäre der höchste zu erwartende Wert = 3)&lt;br /&gt;
    my $maxValue = 3;&lt;br /&gt;
&lt;br /&gt;
    # Normalisierung auf 100%-Wert&lt;br /&gt;
    my $percent = $val / $maxValue * 100;&lt;br /&gt;
&lt;br /&gt;
    # Definition des valueStyles&lt;br /&gt;
    my $stylestring = &#039;style=&amp;quot;&lt;br /&gt;
        width: 200px; &lt;br /&gt;
	text-align:center; &lt;br /&gt;
	border: 1px solid #ccc; &lt;br /&gt;
	background-image: -webkit-linear-gradient(left,red &#039;.$percent.&#039;%, rgba(0,0,0,0) &#039;.$percent.&#039;%); &lt;br /&gt;
	background-image:    -moz-linear-gradient(left,red &#039;.$percent.&#039;%, rgba(0,0,0,0) &#039;.$percent.&#039;%); &lt;br /&gt;
	background-image:     -ms-linear-gradient(left,red &#039;.$percent.&#039;%, rgba(0,0,0,0) &#039;.$percent.&#039;%); &lt;br /&gt;
	background-image:      -o-linear-gradient(left,red &#039;.$percent.&#039;%, rgba(0,0,0,0) &#039;.$percent.&#039;%); &lt;br /&gt;
	background-image:         linear-gradient(left,red &#039;.$percent.&#039;%, rgba(0,0,0,0) &#039;.$percent.&#039;%);&lt;br /&gt;
	&amp;quot;&#039;;&lt;br /&gt;
&lt;br /&gt;
    # Rückgabe des definierten Strings&lt;br /&gt;
    return $stylestring;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Aufruf sähe dann wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; attr &amp;lt;rgName&amp;gt; valueStyle { Balkenanzeige($VALUE) } &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die einzelnen Werte des &amp;lt;code&amp;gt;$stylestring&amp;lt;/code&amp;gt; haben folgende Bedeutungen:&lt;br /&gt;
* width      - Breite des Balkenrahmens&lt;br /&gt;
* text-align - Ausrichtung des Texts&lt;br /&gt;
* border     - Format des Balkenrahmens&lt;br /&gt;
* background-image - Format des Hintergrunds des Balkenrahmens, also des Balkens selbst&lt;br /&gt;
** linear-gradient - css-Funktion zur Erstellung von Farbverläufen &#039;&#039;(*)&#039;&#039;&lt;br /&gt;
*** left             - linksbündiger Balken&lt;br /&gt;
*** red x%           - roter Balken x% breit&lt;br /&gt;
*** rgba(0,0,0,0) x% - farbloser Teil startet bei x%&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(*) linear-gradient wird in verschiedenen Browsern unterschiedlich umgesetzt. Deshalb sollten immer alle Varianten zusammen angegeben werden, damit die Darstellung auf allen Browsern funktioniert. (vgl. Link unten)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Weitere Infos zu:&lt;br /&gt;
* linear-gradient - [https://developer.mozilla.org/de/docs/Web/CSS/linear-gradient]&lt;br /&gt;
* Farbanpassungen, z.B. auch unter Verwendung der [[Color#Skalenfarbe_mit_Color::pahColor|Color::pahColor]] Routine.&lt;br /&gt;
* Anpassung von Werten s.o. [[ReadingsGroup#Lesbar_machen]]&lt;br /&gt;
* weiteren Möglichkeiten zur Erzeugung von Balkendiagrammen in Forenbeiträgen {{Link2Forum|Topic=25313|LinkText=hier}} und {{Link2Forum|Topic=28318|LinkText=hier}}&lt;br /&gt;
* [[99_myUtils_anlegen|99_myUtils.pm]]&lt;br /&gt;
&lt;br /&gt;
Anwendungs-Bsp: [[Pollenflug]]&lt;br /&gt;
&lt;br /&gt;
=== readingsGroup Styling mit CSS ===&lt;br /&gt;
Jede readingsGroup lässt sich durch CSS individuell stylen. &lt;br /&gt;
&lt;br /&gt;
==== Allgemeines ====&lt;br /&gt;
Damit der eigene CSS Code nach einem [[Update]] der FHEM-Style Dateien vorhanden bleibt, ist es notwenig eine eigene .css Datei (zB ios7ReadingsGroups.css) zu erstellen und ins Verzeichnis &#039;&#039;fhem/www/pgm2/&#039;&#039; zu kopieren. Anschließend muss in der [[FHEMWEB]] Instanz das Attribut &#039;&#039;CssFiles&#039;&#039; auf zB &#039;&#039;pgm2/ios7ReadingsGroups.css&#039;&#039; gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
==== Erweiterte Device Übersicht ====&lt;br /&gt;
Diese ReadingsGroup ist an der [[FHEMWEB]] Device-Übersicht angelehnt. Zusätzlich werden weitere Readings, hier Leistung, Betriebszeit Heute und Jahr, ein Link zu Detail-Seite der ReadingsGroup und Links zu den jeweiligen Device-Detail-Seite, dargestellt.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| [[Datei:RgStylingOhneCss.png|600px|mini|left|Device ReadingsGroup ohne CSS]] [[Datei:RgStylingMitCss.png|600px|mini|left|Device ReadingsGroup mit CSS]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Definition =====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_devices readingsGroup &amp;lt;{rgLink($DEVICE,&amp;quot;konfigurieren&amp;quot;,&amp;quot;Details&amp;quot;)}&amp;gt;,&amp;lt;Device&amp;gt;,&amp;lt;Status&amp;gt;,&amp;lt;Leistung&amp;gt;,&amp;lt;Heute&amp;gt;,&amp;lt;Jahr&amp;gt;\&lt;br /&gt;
wzDeckenfluter:&amp;lt;%light_floor_lamp&amp;gt;,&amp;lt;{rgLink(&amp;quot;wzDeckenfluter&amp;quot;,&amp;quot;detail&amp;quot;,&amp;quot;Deckenfluter&amp;quot;)}&amp;gt;,state,&amp;lt;&amp;gt;,dauerHeute,dauerJahr\&lt;br /&gt;
wzMacMini:&amp;lt;%it_nas&amp;gt;,&amp;lt;{rgLink(&amp;quot;wzMacMini&amp;quot;,&amp;quot;detail&amp;quot;,&amp;quot;MacMini&amp;quot;)}&amp;gt;,state,power,consumption,consumptionYear\&lt;br /&gt;
attr rg_devices noheading 1&lt;br /&gt;
attr rg_devices nonames 1&lt;br /&gt;
attr rg_devices notime 1&lt;br /&gt;
attr rg_devices room ReadingsGroup Styling&lt;br /&gt;
attr rg_devices style class=&amp;quot;block wide rgDevices&amp;quot;&lt;br /&gt;
attr rg_devices valueFormat { &#039;power&#039; =&amp;gt; &amp;quot;%.1f W &amp;quot;, consumption =&amp;gt; &amp;quot;%.2f kWh&amp;quot;, &#039;consumptionYear&#039; =&amp;gt; &amp;quot;%.2f kWh&amp;quot;  }&lt;br /&gt;
attr rg_devices valueIcon { state =&amp;gt; &#039;%devStateIcon&#039; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sich der CSS auf die richtige readingsGroup bezieht, ist es nötigt &lt;br /&gt;
das Attribut &#039;&#039;style&#039;&#039; anzupassen.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;attr &amp;lt;rgName&amp;gt; style class=&amp;quot;block wide rgDevices&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Klassen &#039;&#039;block&#039;&#039; und &#039;&#039;wide&#039;&#039; müssen eingetragen werden. Der Name der Nachfolgenden Klasse, hier &#039;&#039;rgDevices&#039;&#039;, ist frei wählbar.&lt;br /&gt;
|}&lt;br /&gt;
===== Funktion rgLink() =====&lt;br /&gt;
Die Funktion rgLink($name,$action,$label) liefert einen Link mit dem Namen $label zurück. Der Code gehört in die [[99 myUtils anlegen|99_myUtils.pm]].&lt;br /&gt;
* $name - Name des Device das aufgerufen werden soll &lt;br /&gt;
* $action - Aktion die Ausgeführt werden soll. &lt;br /&gt;
**&#039;&#039;konfigurieren&#039;&#039; erzeugt den kleinen &#039;&#039;Details&#039;&#039; Button links oben der einem zur Detail Seite der ReadingsGroup führt - nützlich wenn das ReadingsGroup-Attribut &#039;&#039;noheading&#039;&#039; gesetzt ist&lt;br /&gt;
** &#039;&#039;detail&#039;&#039; erzeugt einen Link zu Device-Detail Seite&lt;br /&gt;
* $label - Link-Name&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub rgLink($$$){&lt;br /&gt;
  my ($name,$action,$label) = @_; &lt;br /&gt;
  my $link = &amp;quot;&amp;quot;;&lt;br /&gt;
  my $fhemLink = &amp;quot;&amp;quot;;&lt;br /&gt;
  my $txt = &amp;quot;&amp;quot;;&lt;br /&gt;
  my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
  my $divStyle = &amp;quot;&amp;quot;;&lt;br /&gt;
  my $aStyle = &amp;quot;&amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
  # FHEM Variablen einbinden&lt;br /&gt;
  use vars qw($FW_ME);&lt;br /&gt;
  use vars qw($FW_subdir);&lt;br /&gt;
  use vars qw($FW_ss);&lt;br /&gt;
  use vars qw($FW_tp);&lt;br /&gt;
&lt;br /&gt;
  if( $action eq &amp;quot;konfigurieren&amp;quot; ){&lt;br /&gt;
    $fhemLink  = &amp;quot;detail=$name&amp;quot;;&lt;br /&gt;
    $divStyle = &amp;quot;cursor:pointer;font-size:11px;padding-bottom:2px;padding-left:3px;&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  elsif( $action eq &amp;quot;detail&amp;quot; ){&lt;br /&gt;
    $fhemLink  = &amp;quot;detail=$name&amp;quot;;&lt;br /&gt;
    $divStyle = &amp;quot;cursor:pointer;display:inline;&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  $link = &#039;&amp;lt;a onclick=&amp;quot;location.href=\&#039;&#039; . $FW_ME . $FW_subdir . &#039;?&#039; . $fhemLink . &#039;\&#039;&amp;quot; style=&amp;quot;&#039; . $aStyle . &#039;&amp;quot;&amp;gt;&#039; . $label . &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
  $txt  = &#039;&amp;lt;div style=&amp;quot;&#039; . $divStyle . &#039;&amp;quot;&amp;gt;&#039; . $link . &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
  $ret  = &amp;quot;$txt&amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
  return $ret;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=Tipp&lt;br /&gt;
Verwende zum Bearbeiten der eigenen .css Dateien entweder den [[Konfiguration#Syntaxhervorhebung|Codemirror Editor]] oder einen eigenen Editor mit [http://de.wikipedia.org/wiki/Syntaxhervorhebung Syntax Highlighting] . Das hilft bei der Fehlersuche enorm. }}&lt;br /&gt;
&lt;br /&gt;
===== Styling =====&lt;br /&gt;
Die eigene .css Datei erscheint in FHEM unter Edit-Files --&amp;gt; styles und kann direkt im FHEM-Editor oder mit eigenen Editor bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
ios7ReadingsGroups.css:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*  Readings Groups Devices */&lt;br /&gt;
table.rgDevices tr td{ text-align: center; }&lt;br /&gt;
table.rgDevices tr:first-child td:nth-child(2){ /* 1. Zeile 2. Spalte */ text-align: center; }&lt;br /&gt;
table.rgDevices tr td:first-child{  /* 1. Spalte */ width: 45px; text-align: center; }&lt;br /&gt;
table.rgDevices tr td:nth-child(2){ /* 2. Spalte */ width: 33%;  text-align: left; }&lt;br /&gt;
table.rgDevices tr td:nth-child(3){ /* 3. Spalte */ width: 15%; }&lt;br /&gt;
table.rgDevices tr td:nth-child(4){ /* 4. Spalte */ width: 15%; }&lt;br /&gt;
table.rgDevices tr td:nth-child(5){ /* 5. Spalte */ width: 15%; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Auf Portrait / Landscape Modus des Smartphone unterscheiden ====&lt;br /&gt;
Dieses Beispiel ist an das obige Beispiel [[#Erweiterte_Device_.C3.9Cbersicht|Erweiterte Device Übersicht]] angelehnt. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |[[Datei:RgStylingSmallscreenPortrait.png|300px|mini|center|Device ReadingsGroup im Portrait Modus]]&lt;br /&gt;
|[[Datei:RgStylingSmallscreenLandscape.png|550px|mini|center|Device ReadingsGroup im Landscape Modus]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Allgemeines =====&lt;br /&gt;
Mit CSS ist man in der Lage auf die aktuelle Bildschirmlage zu reagieren. Alle Anweisungen die in diesen beiden Funktionen zwischen den beiden { } stehen, werden je nach Bildschirmlage aufgerufen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* Portrait Modus */&lt;br /&gt;
@media all and (orientation:portrait) { }&lt;br /&gt;
&lt;br /&gt;
/* Landscape Modus */&lt;br /&gt;
@media all and (orientation:landscape) { }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Styling =====&lt;br /&gt;
{{Randnotiz|RNText=Info&lt;br /&gt;
* &#039;&#039;width: xx%&#039;&#039; ändert die Breite der Spalte&lt;br /&gt;
* &#039;&#039;display: none&#039;&#039; blendet die Spalte aus}}&lt;br /&gt;
In der FHEMWEB_phone Instanz muss wie [[#Allgemeines|hier]] beschrieben eine neue eigene .css Datei eingetragen werden. In diesem Beispiel ios7smallscreenReadingsGroups.css&lt;br /&gt;
&lt;br /&gt;
ios7smallscreenReadingsGroups.css&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* landscape und portrait modus */&lt;br /&gt;
table.rgDevices tr td { /* Zuerst alles centern */ text-align: center; }&lt;br /&gt;
table.rgDevices tr:first-child td:nth-child(1){ /* 1. Zeile 1. Spalte */ text-align: center; }&lt;br /&gt;
table.rgDevices tr td:first-child { /* 1. Spalte */ width: 5%; }&lt;br /&gt;
table.rgDevices tr:first-child td:nth-child(2) { /* 1. Zeile 2. Spalte */ text-align: center; }&lt;br /&gt;
table.block table tr td table.rgDevices tr td { border-bottom: 1px solid #cbcbcb; }&lt;br /&gt;
&lt;br /&gt;
/* Portrait Modus */&lt;br /&gt;
@media all and (orientation:portrait) {&lt;br /&gt;
  table.rgDevices tr td:nth-child(2){ /* 2. Spalte */ width: 50%; text-align: left; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(3){ /* 3. Spalte */ width: auto; text-align: right; display: table-cell; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(4){ /* 4. Spalte */ width: 0; display: none; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(5){ /* 5. Spalte */ width: 0; display: none; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(6){ width: 0; display: none; }	&lt;br /&gt;
  table.rgDevices tr td div a svg{ margin-left: 90px; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Landscape Modus */&lt;br /&gt;
@media all and (orientation:landscape) { &lt;br /&gt;
  table.rgDevices tr td:nth-child(2){ /* 2. Spalte */ width: 35%; text-align: left; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(3){ /* 3. Spalte */ width: 15%; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(4){ /* 4. Spalte */ width: 15%; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(5){ /* 5. Spalte */ width: 15%; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(5){ /* 5. Spalte */ width: 15%; }	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Plots im Portrait Modus des Smartphones ausblenden ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |[[Datei:RgStylingSmallscreenPortraitPlot.png|350px|mini|center|Device ReadingsGroup im Portrait Modus]]&lt;br /&gt;
|[[Datei:RgStylingSmallscreenLandscapePlot.PNG|550px|mini|center|Plot nur im Landscape]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Um die Plot und alle Steuerelemente im Portrait Modus auszublenden fügt man in seine eigene smallscreen.css wie [[#Allgemeines|hier beschrieben]] folgendes ein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@media all and (orientation:portrait) {&lt;br /&gt;
  .SVGplot, .SVGlabel, .Zoom-in, .Zoom-out, .Prev { width: 0; display: none; }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=ReadingsGroup&amp;diff=17254</id>
		<title>ReadingsGroup</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=ReadingsGroup&amp;diff=17254"/>
		<updated>2016-11-13T20:34:11Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Heizungswerte, Status, Steuerung und Wochenprofil */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:readingsGroup}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Einfache zusammenfassende Darstellung von Informationen über mehrere Geräte und deren Steuerung&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=readingsGroup&lt;br /&gt;
|ModForumArea=Frontends&lt;br /&gt;
|ModTechName=33_readingsGroup.pm&lt;br /&gt;
|ModOwner=Andre ({{Link2FU|430|Forum}} / [[Benutzer Diskussion:justme|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das Fhem-[[:Kategorie:Hilfsmodul|Hilfsmodul]] [[readingsGroup]] bietet eine einfache Möglichkeit, &#039;&#039;Readings&#039;&#039; (kein Präfix vor dem Reading-Namen), &#039;&#039;Internals&#039;&#039; (Präfix &amp;quot;+&amp;quot; vor dem Namen des internen Wertes) und &#039;&#039;Attributes&#039;&#039; (Präfix &amp;quot;?&amp;quot; vor dem Namen des Attributs) von einem oder mehreren &#039;&#039;Devices&#039;&#039; darzustellen und flexibel zu formatieren.&lt;br /&gt;
&lt;br /&gt;
Die Aktualisierung im Browserfenster geschieht per longpoll und überträgt nur die jeweils geänderten Zellen. Wenn eine readingsGroup in keinem Browserfenster angezeigt wird findet keine longpoll aktualisierung statt.&lt;br /&gt;
&lt;br /&gt;
== Definition == &lt;br /&gt;
Siehe [http://fhem.de/commandref.html#readingsGroup commandref].&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
{{Randnotiz|RNText=In allen Mappings die einen Hash verwenden muss der Key (das was jeweils links von =&amp;gt; Operator steht) in Anführungszeichen stehen. Die einzige Ausnahme hiervon sind Keys die aus einem String bestehen der mit einem Buchstaben beginnt und nur Buchstaben und Zahlen enthält.}}&lt;br /&gt;
Weitergehende Erläuterungen zu einzelnen Attributen.&lt;br /&gt;
&lt;br /&gt;
Die komplette Liste der Attribute ist der commandref zu entnehmen.&lt;br /&gt;
&lt;br /&gt;
=== noheading ===&lt;br /&gt;
[[Datei:ReadingsGroup_noheading.png|mini|rechts|400px|ReadingsGroup: rechts mit &amp;quot;noheading&amp;quot; Attribut, links der anklickbare Titel]]&lt;br /&gt;
Das Attribut &amp;lt;code&amp;gt;noheading&amp;lt;/code&amp;gt; führt dazu, dass der Alias der ReadingsGroup nicht mehr als Titel angezeigt wird. Das kann wünschenswert sein, wenn die ReadingsGroup auf einer [[Dashboard]]-Seite angezeigt werden soll, hat allerdings den Nachteil, dass die Detail-Ansicht der ReadingsGroup nicht mehr über einen Klick auf den Titel aufgerufen werden kann. Der Einstellungsdialog der ReadingsGroup ist dann nur noch (z.&amp;amp;nbsp;B.) über&lt;br /&gt;
* &amp;lt;code&amp;gt;list TYPE=readingsGroup&amp;lt;/code&amp;gt;&lt;br /&gt;
* einen &amp;quot;Probably associated with&amp;quot;-Link eines anderen Objekts oder über&lt;br /&gt;
* manuelle Modifikation der URL eines anderen Objekts (&amp;lt;code&amp;gt;http:.../fhem?detail=&amp;lt;objektname&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
erreichbar.&lt;br /&gt;
&lt;br /&gt;
=== nolinks ===&lt;br /&gt;
Devicenamen und Titel der readingsGroup verlinken nicht mehr zur zugehörigen Detailansicht und sind nicht mehr anklickbar.&lt;br /&gt;
&lt;br /&gt;
=== nostate ===&lt;br /&gt;
Das state-Reading wird bei regex match nicht berücksichtigt und nicht angezeigt.&lt;br /&gt;
&lt;br /&gt;
=== notime ===&lt;br /&gt;
Es werden keine Timestamps für die Readings angezeigt. Nur für einspaltige readingsGroups sinnvoll.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
Bitte beachten: die folgenden Beispiele enthalten keine Maskierungen oder Verdoppelungen für ; und Zeilenende, sondern sind so angegeben, wie sie im [[PGM2|Web Interface]] im Befehls-Eingabefeld, nach Klick auf DEF und im Attribut-Eingabefeld eingegeben werden. Beim manuellen Einfügen in eine [[Konfiguration|Konfigurationsdatei]] sind diese Maskierungen oder Verdoppelungen natürlich vorzunehmen.&lt;br /&gt;
&lt;br /&gt;
=== Einfache Auswahl über Reading-Namen ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define battStatus readingsGroup .*:[Bb]attery&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alle readings mit Namen &#039;&#039;&#039;Battery&#039;&#039;&#039; oder &#039;&#039;&#039;battery&#039;&#039;&#039; von allen Devices. &lt;br /&gt;
| rowspan=3 | [[Datei:rgBattery.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr battStatus alias FHT Batteriestatus &amp;lt;/code&amp;gt;&lt;br /&gt;
| Der Alias wird als Zeilentitel verwendet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr battStatus mapping %ROOM &amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;Mapping %ROOM&#039;&#039; führt dazu, dass der Raumname als Zeilentitel angezeigt wird.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Übersicht HomeMatic Geräte ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define HM_Components readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Name&amp;gt;,&amp;lt;Model&amp;gt;,&amp;lt;S/N&amp;gt; TYPE=CUL_HM:+NAME,?model,D-serialNr&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Auswahl über Reading-Namen, Status als Symbol dargestellt ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define rg_battery readingsGroup .*:battery&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alle readings mit Namen &#039;&#039;&#039;battery&#039;&#039;&#039; von allen Devices. &lt;br /&gt;
| rowspan=4 | [[Datei:rgBattery2.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_battery alias Batteriestatus &amp;lt;/code&amp;gt;&lt;br /&gt;
| Der Alias wird als Überschrift verwendet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_battery valueIcon {&#039;battery.ok&#039; =&amp;gt; &#039;batterie&#039;, &#039;battery.low&#039; =&amp;gt; &#039;batterie@red&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Statt der reading Werte &amp;quot;ok&amp;quot; und &amp;quot;low&amp;quot; soll ein Icon angezeigt werden.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;attr rg_battery commands { &amp;quot;battery.low&amp;quot; =&amp;gt; &amp;quot;set %DEVICE replaceBatteryForSec 60&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für LaCrosse devices kann man beim Klick auf ein rotes &amp;quot;battery low icon&amp;quot; direkt replaceBatteryForSec setzen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reading-Werte zuordnen (Icon / Text) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define rg readingsGroup Contact.Dachboden_gross:sensed.*&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alle sensedreadings des Contact.Dachboden_gross device. &lt;br /&gt;
| rowspan=4 | [[Datei:rgFenster.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg mapping { &#039;sensed.A&#039; =&amp;gt; &#039;links&#039;, &#039;sensed.B&#039; =&amp;gt; &#039;rechts&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Zuordnung rechts/links&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg valueFormat {($VALUE eq &#039;1&#039;)?&amp;quot;fts_window_roof&amp;quot;:&amp;quot;fts_window_roof_open_2&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Zuordnung von reading Wert zu Icon Namen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_battery valueIcon %VALUE &amp;lt;/code&amp;gt;&lt;br /&gt;
| Statt des reading Werts soll ein Icon angezeigt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Formatvorgabe für Ausgabewerte ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define TempHygro readingsGroup TYPE=CUL_WS:temperature,humidity,dewpoint&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alle readings mit Namen &#039;&#039;&#039;temperature&#039;&#039;&#039;, &#039;&#039;&#039;humidity&#039;&#039;&#039;, &#039;&#039;&#039;dewpoint&#039;&#039;&#039; von allen Devices des Typs &#039;&#039;&#039;CUL_WS&#039;&#039;&#039;&lt;br /&gt;
| rowspan=4 | [[Datei:rgTemperatur.png|thumb|[[S300TH]]-Werte in einer readingsGroup]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr TempHygro alias Temperatur / rel. Feuchte / Taupunkt&amp;lt;/code&amp;gt;&lt;br /&gt;
| Der Alias der readingsGroup wird als Überschrift verwendet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr TempHygro mapping %ALIAS&amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;Mapping %ALIAS&#039;&#039; führt dazu, dass der Alias des Geräts als Zeilentitel angezeigt wird.&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;attr TempHygro valueFormat { temperature =&amp;gt; &amp;quot;%.1f&amp;amp;amp;deg;C&amp;quot;, humidity =&amp;gt; &amp;quot;%.1f %%&amp;quot;, dewpoint =&amp;gt; &amp;quot;%.1f&amp;amp;amp;deg;C&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Formatierung der Ausgabewerte. &#039;&#039;&#039;Achtung:&#039;&#039;&#039; &amp;quot;%&amp;quot; die in der Ausgabe erscheinen sollen, müssen verdoppelt werden!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Ausgabestil (hier rechtsbündig) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Wetter readingsGroup WetterXXX:&amp;lt;%temp_temperature&amp;gt;,&amp;lt;Temperatur&amp;gt;,temperature WetterXXX:&amp;lt;%weather_humidity&amp;gt;,&amp;lt;Luftfeuchte&amp;gt;,humidity WetterXXX:&amp;lt;%weather_barometric_pressure&amp;gt;,&amp;lt;Luftdruck&amp;gt;,pressure&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die readings mit Namen &#039;&#039;&#039;temperature&#039;&#039;&#039;, &#039;&#039;&#039;humidity&#039;&#039;&#039; und &#039;&#039;&#039;pressure&#039;&#039;&#039; vom Device WetterXXX jeweils mit einem Icon und einem Label davor.&lt;br /&gt;
| rowspan=3 | [[Datei:rgWetter.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Wetter valueFormat { temperature =&amp;gt; &#039;%1.f &amp;amp;amp;deg;C&#039;, humidity =&amp;gt; &#039;%1.f %%&#039;, pressure =&amp;gt; &#039;%i mbar&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Formatierung der Readingswerte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Wetter valueStyle style=&amp;quot;text-align:right&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Readings sollen rechtsbündig dargestellt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Internal Value ausgeben ===&lt;br /&gt;
Diese Beispiel könnte entfallen (nächstes Beispiel ist sehr ähnlich; es wird lediglich ein weiterer Wert ausgegeben).&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define culRSSI readingsGroup cul_RSSI=.*:+cul_RSSI&amp;lt;/code&amp;gt;&lt;br /&gt;
| Den RSSI Wert aller Devices (am IODev &#039;&#039;cul&#039;&#039;) die einen solchen haben anzeigen.&amp;lt;br&amp;gt; &#039;&#039;&#039;Achtung&#039;&#039;&#039;: &amp;quot;internal values&amp;quot; werden nicht per longpoll aktualisiert, sondern nur beim Seitenaufbau.&lt;br /&gt;
| rowspan=1 | [[Datei:rgculRSSI.png|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Internal Values ausgeben ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define culRSSI readingsGroup cul_RSSI=.*:+cul_RSSI,+cul_TIME&amp;lt;/code&amp;gt;&lt;br /&gt;
| Den RSSI Wert mit der zugehörigen Zeit aller Devices (am IODev &#039;&#039;cul&#039;&#039;) die einen solchen haben anzeigen.&amp;lt;br&amp;gt; &#039;&#039;&#039;Achtung&#039;&#039;&#039;: &amp;quot;internal values&amp;quot; werden nicht per longpoll aktualisiert, sondern nur beim Seitenaufbau.&amp;lt;br&amp;gt;&amp;quot;Internal Values&amp;quot; werden durch das vorangestellte &#039;&#039;&#039;+&#039;&#039;&#039; (Pluszeichen) identifiziert.&lt;br /&gt;
| rowspan=2 | [[Datei:rgculRSSI2.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
|attr culRSSI valueStyle {return undef if($READING =~ m/TIME/); ($VALUE &amp;lt;= -85)?&#039;style=&amp;quot;color:red&amp;quot;&#039;:($VALUE &amp;lt;= -80)?&#039;style=&amp;quot;color:yellow&amp;quot;&#039;:undef}&lt;br /&gt;
|Schlechte RSSI Werte sollen abhängig von zwei Schwellwerten gelb oder rot eingefärbt werden (auf dem Screenshot nicht zu sehen).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Alle Readings eines Gerätes, mit Ausnahme von... ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Systemstatus readingsGroup sysstat&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alle readings des sysstat Device&lt;br /&gt;
| rowspan=4 | [[Datei:rgSysstat.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Systemstatus nostate 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ohne state&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Systemstatus notime 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ohne readings timestamp&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Systemstatus mapping {&#039;load&#039; =&amp;gt; &#039;Systemauslastung&#039;, &#039;temperature&#039; =&amp;gt; &#039;Systemtemperatur in &amp;amp;amp;deg;C&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Zuordnung der reading Namen zu den Zeilentiteln&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Anzeige auf einem Floorplan ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Heizung readingsGroup t(1|2|3):temperature&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Temperatur readings der Devices t1, t2 und t3&lt;br /&gt;
| rowspan=6 | [[Datei:rgHeizung.png|thumb|220px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizung mapping {&#039;t1.temperature&#039; =&amp;gt; &#039;Vorlauf&#039;, &#039;t2.temperature&#039; =&amp;gt; &#039;R&amp;amp;amp;&amp;amp;uuml;cklauf&#039;, &#039;t3.temperature&#039; =&amp;gt; &#039;Zirkulation&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Zuordnung der reading Namen zu den Zeilentiteln&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizung nameStyle style=&amp;quot;text-align:left&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Zeilentitel linksbündig wegen floorplan&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizung style style=&amp;quot;font-size:20px;color:lightgray&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Großer Font und Farbe passend für den floorplan&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizung notime 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ohne readings timestamp&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizung valueFormat : %.1f &amp;amp;amp;deg;C&amp;lt;/code&amp;gt;&lt;br /&gt;
| Doppelpunkt zwischen Zeilentitel und Wert, eine Nachkommastelle plus Einheit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== LightScene DropDown-Menü für smallscreen Styles oder Floorplan ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define lcDropDown readingsGroup meineLightScene:!state&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für die LightScene &#039;&#039;meineLightScene&#039;&#039; soll ein DropDown-Menü zur Auswahl der Szene erstellt werden.&lt;br /&gt;
| rowspan=6 |&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr lcDropDown commands { state =&amp;gt; &#039;scene:&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Anzeige des state Readings wird auf das DropDown-Menü für das scene Kommando gemapped.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr lcDropDown nonames 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Keine Readingnamen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr lcDropDown notime 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Kein Timestamp&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Schriftgrößen, Farben, Icons ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:rgVerbrauchPCA301.png|links|mini|400px|Schriftgröße, Farbe, Icons...]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Verbrauch readingsGroup TYPE=PCA301:state,power,consumption&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die readings state, power und consumption aller [[PCA301 Funkschaltsteckdose mit Energieverbrauchsmessung|PCA301]] Devices mit einer Zeile pro Device. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Verbrauch mapping %ROOM %ALIAS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Der Raumname und der Alias werden als Zeilentitel verwendet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Verbrauch nameStyle style=&amp;quot;font-weight:bold&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Der Zeilentitel soll fett sein&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Verbrauch style style=&amp;quot;font-size:20px&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alles in einem größeren Font&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Verbrauch valueFormat {power =&amp;gt; &amp;quot;%.1f W&amp;quot;, consumption =&amp;gt; &amp;quot;%.2f kWh&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Formatierung für die power und consumption readings: eine Nachkommastelle plus Einheit.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;attr Verbrauch valueIcon { state =&amp;gt; &#039;%devStateIcon&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für die Dosen, die schaltbar sind, soll das anklickbare device icon gezeigt werden.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;attr Verbrauch valueStyle {($READING eq &amp;quot;power&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 40)?&#039;style=&amp;quot;color:red&amp;quot;&#039;:&#039;style=&amp;quot;color:green&amp;quot;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
|Wenn das power reading &amp;gt;40 ist, soll es in rot angezeigt werden, alle anderen Werte und readings in grün&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Wertabhängige Farbgebung ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:TemperaturenRG.png|600px|mini|links|Wertabhängige Farben]]&lt;br /&gt;
[[Datei:TemperaturenRG2.png|600px|mini|links|Andere Werte - andere Farben]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define wzTemperaturenRG readingsGroup Aussen:,&amp;lt;Temperatur&amp;gt;,temperature,&amp;lt;Luftfeuchte&amp;gt;,humidity Wohnzimmer:,&amp;lt;Temperatur&amp;gt;,temperature,&amp;lt;Luftfeuchte&amp;gt;,humidity Kasten_E_Geraete:,&amp;lt;Temperatur&amp;gt;,temperature,&amp;lt;Luftfeuchte&amp;gt;,humidity&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die readings temperatur und humidity der Devices Aussen, Wohnzimmer und Kasten_E_Geraete in einer Zeile pro Device. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzTemperaturenRG group 3. Temperaturen&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die readingsGroup kommt in eine Gruppe&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzTemperaturenRG noheading 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| noheading&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzTemperaturenRG nostate 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| nostate&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzTemperaturenRG notime 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| notime&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzTemperaturenRG valueFormat {temperature =&amp;gt; &amp;quot;%.1f °C&amp;quot;, humidity =&amp;gt;&amp;quot;%.1f %%&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Formatierung für die temperatur und humidity readings: eine Nachkommastelle plus Einheit.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;attr wzTemperaturenRG valueStyle { if($DEVICE eq &amp;quot;Aussen&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 30) { &#039;style=&amp;quot;color:red&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Aussen&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 20) { &#039;style=&amp;quot;color:orange&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Aussen&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;lt; 5) { &#039;style=&amp;quot;color:blue&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Wohnzimmer&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 23) { &#039;style=&amp;quot;color:red&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Wohnzimmer&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 21) { &#039;style=&amp;quot;color:orange&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Wohnzimmer&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;lt; 20) { &#039;style=&amp;quot;color:blue&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Kasten_E_Geraete&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 30) { &#039;style=&amp;quot;color:red&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Kasten_E_Geraete&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 28) { &#039;style=&amp;quot;color:orange&amp;quot;&#039;}elsif($READING eq &amp;quot;humidity&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 65) { &#039;style=&amp;quot;color:red&amp;quot;&#039;}elsif($READING eq &amp;quot;humidity&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 60) { &#039;style=&amp;quot;color:orange&amp;quot;&#039;}else{&#039;style=&amp;quot;color:green&amp;quot;&#039;} }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse Farbkombinationen sind möglich&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Enigma Receiver ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:ReceiverRG.jpg|600px|mini|links|Wertabhängige Farben]]&lt;br /&gt;
[[Datei:ReceiverRGmute.jpg|600px|mini|links|Wertabhängige Farben]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define wzReceiverRG readingsGroup wzReceiver:,&amp;lt;Aktuell&amp;gt;,eventtitle,&amp;lt;Rest&amp;gt;,eventremaining_hr,&amp;lt;Dauer&amp;gt;,eventduration_hr wzReceiver:&amp;lt;Beschreibung&amp;gt;,eventdescription wzReceiver:,&amp;lt;Nächste&amp;gt;,eventtitle_next,&amp;lt;Start&amp;gt;,eventstart_next_hr,&amp;lt;Dauer&amp;gt;,eventduration_next_hr wzReceiver:,&amp;lt;HDD Kapazität&amp;gt;,hdd1_capacity,&amp;lt;Frei&amp;gt;,wzReceiver:hdd1_free wzReceiver:,&amp;lt;Lautstärke&amp;gt;,volume,&amp;lt;HDD&amp;gt;,hdd1_capacity,&amp;lt;Frei&amp;gt;,hdd1_free&amp;lt;/code&amp;gt;&lt;br /&gt;
| Mehrere readings des Device wzReceiver in mehreren Zeilen. Wenn der Receiver auf mute ist, wird anstatt der Lautstärke, mute angezeigt. Farbige Anzeige des freien Speicherplatzes&lt;br /&gt;
&#039;&#039;&#039;Benötigt:&#039;&#039;&#039; ENIGMA2 Receiver, 70_ENIGMA2.pm - Siehe: [[Enigma2 Receiver (Dreambox, VUplus etc.) steuern]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG group Fernseher Receiver&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die readingsGroup kommt in eine Gruppe&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG mapping &amp;amp;amp;nbsp;&amp;lt;/code&amp;gt;&lt;br /&gt;
| mapping wird auf &amp;amp;amp;nbsp; (Leerzeichen) gesetzt, damit der Device Name nicht angezeigt wird&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG noheading 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| noheading&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG nostate 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| nostate&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG notime 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| notime&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG valueColumns { eventdescription =&amp;gt; &#039;colspan=&amp;quot;4&amp;quot;&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Beschreibung soll über 4 Spalten gehen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG valueFormat { wzReceiverRGvalueFormat($DEVICE,$READING,$VALUE);; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Formatierung wird in die 99_myUtils.pm ausgelagert. Siehe: [[99 myUtils anlegen]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;attr wzReceiverRG valueStyle { if($READING eq &amp;quot;hdd1_free&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;lt; 200){ &#039;style=&amp;quot;color:red&amp;quot;&#039; }elsif( $READING eq &amp;quot;hdd1_free&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;lt; 500 ){ &#039;style=&amp;quot;color:orange&amp;quot;&#039; }elsif( $READING eq &amp;quot;volume&amp;quot; &amp;amp;&amp;amp; ReadingsVal($DEVICE, &amp;quot;mute&amp;quot;, &amp;quot;&amp;quot;) eq &amp;quot;on&amp;quot; ){ &#039;style=&amp;quot;color:red&amp;quot;&#039; }else{ &#039;style=&amp;quot;color:green&amp;quot;&#039; } }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse Farbkombinationen sind möglich. Wenn der Receiver auf mute ist, wird anstatt der Lautstärke &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;mute&amp;lt;/span&amp;gt; angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub&lt;br /&gt;
wzReceiverRGvalueFormat($$$)&lt;br /&gt;
{&lt;br /&gt;
  my ($DEVICE,$READING,$VALUE) = @_;&lt;br /&gt;
 &lt;br /&gt;
  if($READING eq &#039;hdd1_capacity&#039;) { &lt;br /&gt;
    return &amp;quot;%.2f MB&amp;quot;;&lt;br /&gt;
  } elsif( $READING eq &#039;hdd1_free&#039;) {&lt;br /&gt;
    return &amp;quot;%.2f MB&amp;quot;;&lt;br /&gt;
  } elsif( $READING eq &#039;volume&#039; ) {&lt;br /&gt;
    if( ReadingsVal($DEVICE, &amp;quot;mute&amp;quot;, &amp;quot;&amp;quot;) eq &amp;quot;on&amp;quot;) {&lt;br /&gt;
      return &amp;quot;mute&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
      return &amp;quot;%i %%&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
| Dieser Teil kommt in die [[99_myUtils_anlegen|99_myUtils.pm]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Heizungswerte inklusive Batterie- und Fensterstatus ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:rgHeizung3.png|thumb|links|500px|Heizungswerte inklusive Batterie- und Fensterstatus]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Heizungswerte readingsGroup &amp;lt;%sani_heating&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;Act&amp;gt;,&amp;lt;Soll&amp;gt;,&amp;lt;Ist&amp;gt; TYPE=FHT:actuator,desired-temp,measured-temp,&amp;lt;%18&amp;gt;,&amp;lt;%20&amp;gt;,&amp;lt;%22&amp;gt;,window,battery&amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse readings aller Devices des Typs &amp;lt;b&amp;gt;FHT&amp;lt;/b&amp;gt;. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte commands { &#039;Heizungswerte.18&#039; =&amp;gt; &#039;set $DEVICE desired-temp 18&#039;, &#039;Heizungswerte.20&#039; =&amp;gt; &#039;set $DEVICE desired-temp 20&#039;, &#039;Heizungswerte.22&#039; =&amp;gt; &#039;set $DEVICE desired-temp 22&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Links/Kommandos die hinter den 18, 20 und 22 liegen sollen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte nameStyle style=&amp;quot;color:yellow;font-weight:bold&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Überschriften sollen gelb sein.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte valueIcon {&#039;battery.ok&#039; =&amp;gt; &#039;batterie@lightgreen&#039;, &#039;battery.low&#039; =&amp;gt; &#039;batterie@red&#039;, &#039;window.closed&#039; =&amp;gt; &#039;fts_window_1w@lightgreen&#039;, &#039;window.open&#039; =&amp;gt; &#039;fts_window_1w_open@red&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für den Batteriestand und den Zustand der Fenster sollen jeweils Icons angezeigt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Heizungswerte inklusive Ventilposition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:Rg_Heizung_Valveposition.png|thumb|links|500px|Heizungswerte inklusive Statusinformationen (MAX!)]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Heizungswerte readingsGroup &amp;lt;%sani_heating&amp;gt;,&amp;lt;Ventil&amp;gt;,&amp;lt;Soll&amp;gt;,&amp;lt;Ist&amp;gt;,&amp;lt;MaxV&amp;gt;,&amp;lt;GID&amp;gt;,&amp;lt;Mode&amp;gt;,&amp;lt;Batterie&amp;gt; TYPE=CUL_HM:ValvePosition,desired-temp,measured-temp,R-valveMaxPos,groupid,mode,battery&amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse readings aller Devices des Typs &amp;lt;b&amp;gt;MAX&amp;lt;/b&amp;gt;. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte mapping %ROOM&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Raumnamen werden angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte nameStyle style=&amp;quot;color:yellow;font-weight:bold&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Überschriften sollen gelb (fett) sein.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte room Heizung&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die &amp;quot;readingsgroup&amp;quot; wird dem Raum &amp;quot;Heizung&amp;quot; zugeordnet.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte valueFormat {&#039;temperature&#039; =&amp;gt; &amp;quot;%.0f °C&amp;quot;, &#039;desiredTemperature&#039; =&amp;gt; &amp;quot;%.0f °C&amp;quot;, &#039;valveposition&#039; =&amp;gt;&amp;quot;%.0f %%&amp;quot;, &#039;maxValveSetting&#039; =&amp;gt;&amp;quot;%.0f %%&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Es wird noch die Einheit °C hinter den Temperaturwerten angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte valueIcon {&#039;battery.ok&#039; =&amp;gt; &#039;batterie@lightgreen&#039;, &#039;battery.low&#039; =&amp;gt; &#039;batterie@red&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für den Batteriezustand werden Icons anstatt Klartextwerte genommen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte valueStyle { if($READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 20){ &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; }elsif( $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;lt;= 20 ){ &#039;style=&amp;quot;color:blue&amp;quot;&#039; }elsif( $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 23 ){ &#039;style=&amp;quot;color:red&amp;quot;&#039; }else{ &#039;style=&amp;quot;color:gray&amp;quot;&#039; } }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Temperaturwerte werden abhängig vom Wert farbig dargestellt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte valueIcon {&#039;battery.ok&#039; =&amp;gt; &#039;batterie@lightgreen&#039;, &#039;battery.low&#039; =&amp;gt; &#039;batterie@red&#039;, &#039;window.closed&#039; =&amp;gt; &#039;fts_window_1w@lightgreen&#039;, &#039;window.open&#039; =&amp;gt; &#039;fts_window_1w_open@red&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für den Batteriestand und den Zustand der Fenster sollen jeweils Icons angezeigt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Heizungswerte, Status und Regelmöglichkeit ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:rgHeizung2.png|thumb|500px|links|Anzeige + Regelmöglichkeit]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Heizungswerte2 readingsGroup &amp;lt;%sani_heating&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;Act&amp;gt;,&amp;lt;Soll&amp;gt;,&amp;lt;Ist&amp;gt; TYPE=FHT:actuator,desired-temp,measured-temp,&amp;lt;{myUtils_HeizungUpDown($DEVICE,&amp;quot;up&amp;quot;)}@desired-temp&amp;gt;,desired-new,&amp;lt;{myUtils_HeizungUpDown($DEVICE,&amp;quot;down&amp;quot;)}@desired-temp&amp;gt;,window,battery&amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse readings aller Devices des Typs &amp;lt;b&amp;gt;FHT&amp;lt;/b&amp;gt;. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte2 nameStyle style=&amp;quot;color:yellow;font-weight:bold&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Überschriften sollen gelb sein.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte2 valueIcon {&#039;battery.ok&#039; =&amp;gt; &#039;batterie@lightgreen&#039;, &#039;battery.low&#039; =&amp;gt; &#039;batterie@red&#039;, &#039;window.closed&#039; =&amp;gt; &#039;fts_window_1w@lightgreen&#039;, &#039;window.open&#039; =&amp;gt; &#039;fts_window_1w_open@red&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für den Batteriestand und den Zustand der Fenster sollen jeweils Icons angezeigt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte2 valueStyle {($VALUE eq &amp;quot;00&amp;quot;)?&#039;style=&amp;quot;visibility:hidden&amp;quot;&#039;:&#039;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Nach dem Einstellen den Wert wieder ausblenden. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#Heizung regeln in readingsGroup&lt;br /&gt;
sub&lt;br /&gt;
myUtils_HeizungUpDown($$)&lt;br /&gt;
{&lt;br /&gt;
  my($DEVICE,$CMD) = @_;&lt;br /&gt;
  &lt;br /&gt;
  my $icon = $CMD;&lt;br /&gt;
  my $VALUE = ReadingsVal($DEVICE,&amp;quot;desired-new&amp;quot;,&amp;quot;20&amp;quot; );&lt;br /&gt;
  $VALUE = ReadingsVal($DEVICE,&amp;quot;desired-temp&amp;quot;,&amp;quot;20&amp;quot; )&lt;br /&gt;
     if( !$VALUE || $VALUE == 0 );&lt;br /&gt;
  my $link;&lt;br /&gt;
  &lt;br /&gt;
  if( $CMD eq &amp;quot;up&amp;quot; ) {&lt;br /&gt;
    $icon = &amp;quot;control_arrow_upward&amp;quot;;&lt;br /&gt;
    $VALUE += 1;&lt;br /&gt;
  &lt;br /&gt;
    if( $VALUE &amp;lt;= 24 ) {&lt;br /&gt;
      $icon .= &amp;quot;\@red&amp;quot;;&lt;br /&gt;
      $link = &amp;quot;setreading $DEVICE desired-new $VALUE&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
  } elsif( $CMD eq &amp;quot;down&amp;quot; ) {&lt;br /&gt;
    $icon = &amp;quot;control_arrow_downward&amp;quot;;&lt;br /&gt;
    $VALUE -= 1;&lt;br /&gt;
  &lt;br /&gt;
    if( $VALUE &amp;gt;= 18 ) {&lt;br /&gt;
      $icon .= &amp;quot;\@blue&amp;quot;;&lt;br /&gt;
      $link = &amp;quot;setreading $DEVICE desired-new $VALUE&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  my $notify = &amp;quot;notifyHeizungUpDown&amp;quot;;&lt;br /&gt;
  if( !defined($defs{$notify}) ) {&lt;br /&gt;
    CommandDefine(undef,&lt;br /&gt;
                   &amp;quot;$notify notify .*:desired-new.* &amp;quot;&lt;br /&gt;
                   .&amp;quot;{ myUtils_HeizungUpDownNotify(\$NAME,\$EVTPART1); }&amp;quot; );&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  my $ret = &amp;quot;%$icon&amp;quot;;&lt;br /&gt;
  $ret .= &amp;quot;%$link&amp;quot; if( $link );&lt;br /&gt;
  &lt;br /&gt;
  return $ret;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub&lt;br /&gt;
myUtils_HeizungUpDownNotify($$)&lt;br /&gt;
{&lt;br /&gt;
  my($DEVICE,$VALUE) = @_;&lt;br /&gt;
  &lt;br /&gt;
  return if( $VALUE == 0 );&lt;br /&gt;
  &lt;br /&gt;
  my $at = &amp;quot;triggerHeizungUpDown_$DEVICE&amp;quot;;&lt;br /&gt;
  CommandDelete(undef, $at) if( defined($defs{$at}) );&lt;br /&gt;
  CommandDefine(undef,&lt;br /&gt;
                &amp;quot;$at at +00:00:03 &amp;quot;&lt;br /&gt;
                .&amp;quot;{my \$v = ReadingsVal(\&amp;quot;$DEVICE\&amp;quot;,\&amp;quot;desired-new\&amp;quot;,undef);&amp;quot;&lt;br /&gt;
                .&amp;quot;fhem(\&amp;quot;set $DEVICE desired-temp \$v\&amp;quot;) if( \$v );&amp;quot;&lt;br /&gt;
                .&amp;quot;fhem(\&amp;quot;setreading $DEVICE desired-new 00\&amp;quot;);}&amp;quot; );&lt;br /&gt;
  &lt;br /&gt;
  return undef;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
| Dieser Teil kommt in die [[99_myUtils_anlegen|99_myUtils.pm]]: Hiermit werden die Icons zum Ändern der gewünschten Temperatur dargestellt und im Bereich &amp;gt;=18 und &amp;lt;= 24 Grad anklickbar gemacht. Zwischen den Pfeilen wird der gerade eingestellte Wert angezeigt. Wenn dieser drei Sekunden nicht mehr geändert wurde wird die desired-temp auf diesen Wert gesetzt und die Anzeige zwischen den Pfeilen ausgeblendet.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Heizungswerte, Status, Steuerung und Wochenprofil ===&lt;br /&gt;
Dieses Beispiel funktioniert nur mit HomeMatic HM-CC-RT-DN, für andere Thermostate müssen an diversen Stellen Änderungen vorgenommen werden.&lt;br /&gt;
{{Todo|Überarbeiten: umstellen auf readingList oder setreading, label als readings in die readingsGroup selber stecken statt in einen extra dummy. oder !&amp;lt;reading&amp;gt; und mapping verwenden.}}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:RgThermostate.png|thumb|750px|links|Status, Steuerung und Wochenprofil]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;pre&amp;gt;&lt;br /&gt;
define d_label dummy&lt;br /&gt;
setreading d_label Heizung Heizung &lt;br /&gt;
setreading d_label Temperatur Temperatur &lt;br /&gt;
setreading d_label  Status Status &lt;br /&gt;
setreading d_label Wochenplan Wochenplan &lt;br /&gt;
setreading d_label Werktag Werktag &lt;br /&gt;
setreading d_label Samstag Samstag &lt;br /&gt;
setreading d_label Sonntag Sonntag &lt;br /&gt;
setreading d_label Zeitraum1 Zeitraum 1 &lt;br /&gt;
setreading d_label Zeitraum2 Zeitraum 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
|Erzeugen der Readings im Device [[dummy#d_label|d_label]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt; &lt;br /&gt;
define rg_thermostate readingsGroup &amp;lt;&amp;gt;,Heizung@d_label,&amp;lt;|&amp;gt;,Temperatur@d_label,&amp;lt;|&amp;gt;,Status@d_label,&amp;lt;|&amp;gt;,Wochenplan@d_label,&amp;lt;|&amp;gt;,Werktag@d_label,&amp;lt;|&amp;gt;,Samstag@d_label,&amp;lt;|&amp;gt;,Sonntag@d_label,&amp;lt;|&amp;gt;,&amp;lt;&amp;gt; CUL_HM_HM_CC_RT_DN_......_Clima:&amp;lt;&amp;gt;,?alias,&amp;lt;|&amp;gt;,&amp;lt;Soll&amp;gt;,desired-temp,&amp;lt;Tag&amp;gt;,dayTemp@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},impossible@{$DEVICE},&amp;lt;|&amp;gt;,controlMode,R-globalBtnLock@{rg($DEVICE.&amp;quot;§device&amp;quot;)},&amp;lt;|&amp;gt;,Zeitraum1@d_label,&amp;lt;|&amp;gt;,workday_period_1_start@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},workday_period_1_stop@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,saturday_period_1_start@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},saturday_period_1_stop@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,sunday_period_1_start@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},sunday_period_1_stop@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,impossible@{$DEVICE},&amp;lt;%system_fhem_update&amp;gt;,&amp;lt;nowiki&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/nowiki&amp;gt;,state@{rg($DEVICE.&amp;quot;§device&amp;quot;)},&amp;lt;%getConfig&amp;gt;,&amp;lt;|&amp;gt;,&amp;lt;Ist&amp;gt;,measured-temp,&amp;lt;Nacht&amp;gt;,nightTemp@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,&amp;lt;Ventil&amp;gt;,ValvePosition,&amp;lt;|&amp;gt;,Zeitraum2@d_label,&amp;lt;|&amp;gt;,workday_period_2_start@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},workday_period_2_stop@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,saturday_period_2_start@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},saturday_period_2_stop@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,sunday_period_2_start@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},sunday_period_2_stop@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,impossible@{$DEVICE},impossible@{rg($DEVICE.&amp;quot;§device&amp;quot;)},&amp;lt;%burstXmit&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse readings aller Devices &amp;lt;b&amp;gt;CUL_HM_HM_CC_RT_DN_......_Clima&amp;lt;/b&amp;gt;, entsprechender [[Makefine#d_climaControl|d_climaControl]] (müssen vorher angelegt werden) und [[dummy#d_label|d_label]]. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_thermostate commands { &#039;desired-temp&#039; =&amp;gt; &#039;desired-temp:&#039;, &#039;dayTemp&#039; =&amp;gt; &#039;dayTemp:&#039;, &#039;controlMode&#039; =&amp;gt; &#039;trigger ntfy_rg $DEVICE controlMode&#039;, &#039;R-globalBtnLock&#039; =&amp;gt; &#039;trigger ntfy_rg $DEVICE globalBtnLock&#039;, &#039;workday_period_1_start&#039; =&amp;gt; &#039;workday_period_1_start:&#039;, &#039;workday_period_1_stop&#039; =&amp;gt; &#039;workday_period_1_stop:&#039;, &#039;saturday_period_1_start&#039; =&amp;gt; &#039;saturday_period_1_start:&#039;, &#039;saturday_period_1_stop&#039; =&amp;gt; &#039;saturday_period_1_stop:&#039;, &#039;sunday_period_1_start&#039; =&amp;gt; &#039;sunday_period_1_start:&#039;, &#039;sunday_period_1_stop&#039; =&amp;gt; &#039;sunday_period_1_stop:&#039;, &#039;rg_thermostate.system_fhem_update&#039; =&amp;gt; &#039;trigger ntfy_rg $DEVICE setTimeTable&#039;, &#039;rg_thermostate.getConfig&#039; =&amp;gt; &#039;set $DEVICE getConfig&#039;, &#039;nightTemp&#039; =&amp;gt; &#039;nightTemp:&#039;, &#039;workday_period_2_start&#039; =&amp;gt; &#039;workday_period_2_start:&#039;, &#039;workday_period_2_stop&#039; =&amp;gt; &#039;workday_period_2_stop:&#039;, &#039;saturday_period_2_start&#039; =&amp;gt; &#039;saturday_period_2_start:&#039;, &#039;saturday_period_2_stop&#039; =&amp;gt; &#039;saturday_period_2_stop:&#039;, &#039;sunday_period_2_start&#039; =&amp;gt; &#039;sunday_period_2_start:&#039;, &#039;sunday_period_2_stop&#039; =&amp;gt; &#039;sunday_period_2_stop:&#039;, &#039;rg_thermostate.burstXmit&#039; =&amp;gt; &#039;set $DEVICE burstXmit&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Temperaturen werden als DropDown Auswahl dargestellt, Icons triggern [[readingsGroup#sub_rg|ntfy_rg]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_thermostate mapping { &#039;desired-temp&#039; =&amp;gt; &#039;&#039;, &#039;dayTemp&#039; =&amp;gt; &#039;&#039;, &#039;workday_period_1_start&#039; =&amp;gt; &#039;&#039;, &#039;workday_period_1_stop&#039; =&amp;gt; &#039;&#039;, &#039;saturday_period_1_start&#039; =&amp;gt; &#039;&#039;, &#039;saturday_period_1_stop&#039; =&amp;gt; &#039;&#039;, &#039;sunday_period_1_start&#039; =&amp;gt; &#039;&#039;, &#039;sunday_period_1_stop&#039; =&amp;gt; &#039;&#039;, &#039;nightTemp&#039; =&amp;gt; &#039;&#039;, &#039;workday_period_2_start&#039; =&amp;gt; &#039;&#039;, &#039;workday_period_2_stop&#039; =&amp;gt; &#039;&#039;, &#039;saturday_period_2_start&#039; =&amp;gt; &#039;&#039;, &#039;saturday_period_2_stop&#039; =&amp;gt; &#039;&#039;, &#039;sunday_period_2_start&#039; =&amp;gt; &#039;&#039;, &#039;sunday_period_2_stop&#039; =&amp;gt; &#039;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ausblenden der Texte vor den DropDowns.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt; &lt;br /&gt;
attr rg_thermostate nameStyle{($READING eq &amp;quot;Soll&amp;quot; ||$READING eq &amp;quot;Tag&amp;quot; ||$READING eq &amp;quot;%getConfig&amp;quot; ||$READING eq &amp;quot;Ist&amp;quot; ||$READING eq &amp;quot;Nacht&amp;quot; ||$READING eq &amp;quot;Ventil&amp;quot; )?&#039;style=&amp;quot;text-align:right&amp;quot;&#039; :($READING eq &amp;quot;%burstXmit&amp;quot; )?&#039;style=&amp;quot;text-align:center&amp;quot;&#039; :&#039;style=&amp;quot;&amp;quot;&#039;}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ausrichten der Überschriften die keine readings sind.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_thermostate nonames 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ausblenden der Device Namen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_thermostate valueColumns { &#039;Heizung&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;, &#039;Temperatur&#039; =&amp;gt; &#039;colspan=&amp;quot;4&amp;quot;&#039;, &#039;Status&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;, &#039;Werktag&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;, &#039;Samstag&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;, &#039;Sonntag&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;, &#039;alias&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse Readings sollen über mehrere Spalten dargestellt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_thermostate valueFormat { &#039;measured-temp&#039; =&amp;gt; &amp;quot;%0.1f &amp;amp;deg;C&amp;quot;, &#039;ValvePosition&#039; =&amp;gt; &amp;quot;%0.1f %%&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Formatierung für measured-temp und ValvePosition.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_thermostate valueIcon { &#039;controlMode.auto&#039; =&amp;gt; &#039;sani_heating_automatic@green&#039;, &#039;controlMode.set_auto&#039; =&amp;gt; &#039;sani_heating_automatic@orange&#039;, &#039;controlMode.manual&#039; =&amp;gt; &#039;sani_heating_manual@red&#039;, &#039;controlMode.set_manual&#039; =&amp;gt; &#039;sani_heating_manual@orange&#039;, &#039;R-globalBtnLock.on&#039; =&amp;gt; &#039;secur_locked@green&#039;, &#039;R-globalBtnLock.on &#039; =&amp;gt; &#039;secur_locked@green&#039;, &#039;R-globalBtnLock.set_on &#039; =&amp;gt; &#039;secur_locked@orange&#039;, &#039;R-globalBtnLock.off&#039; =&amp;gt; &#039;secur_open@red&#039;, &#039;R-globalBtnLock.off &#039; =&amp;gt; &#039;secur_open@red&#039;, &#039;R-globalBtnLock.set_off &#039; =&amp;gt; &#039;secur_open@orange&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Zuweisung der Icons.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&lt;br /&gt;
attr rg_thermostate valueStyle{($READING eq &amp;quot;Heizung&amp;quot; ||$READING eq &amp;quot;Temperatur&amp;quot; ||$READING eq &amp;quot;Status&amp;quot; ||$READING eq &amp;quot;Wochenplan&amp;quot; ||$READING eq &amp;quot;Werktag&amp;quot; ||$READING eq &amp;quot;Samstag&amp;quot; ||$READING eq &amp;quot;Sonntag&amp;quot; )?&#039;style=&amp;quot;font-size:20px;;color:RoyalBlue;;text-align:center&amp;quot;&#039; :($READING eq &amp;quot;alias&amp;quot; )?&#039;style=&amp;quot;font-size:11px;;font-weight:bold;;text-align:left&amp;quot;&#039; :($READING eq &amp;quot;ValvePosition&amp;quot; &amp;amp;&amp;amp;$VALUE &amp;gt; 40 )?&#039;style=&amp;quot;font-weight:bold;;color:Orange;;text-align:left&amp;quot;&#039; :($READING eq &amp;quot;desired-temp&amp;quot; ||$READING eq &amp;quot;measured-temp&amp;quot; )?&#039;style=&amp;quot;text-align:center&amp;quot;&#039; :($READING eq &amp;quot;state&amp;quot; ||$READING eq &amp;quot;ValvePosition&amp;quot; )?&#039;style=&amp;quot;text-align:left&amp;quot;&#039; :&#039;style=&amp;quot;text-align:right&amp;quot;&#039;}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ausrichten und Einfärben der Readings.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Heizungsteuerung für HM Wand- und Heizkörperthermostate ===&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel wurde für HM-TC-IT-WM-W-EU / HM-CC-RT-DN Geräte erstellt. Verwendung anderer Thermostate wird ggf. Anpassungen erforderlich machen. Die Geräte werden nicht automatisch ermittelt, sondern sind einzeln angegeben.&lt;br /&gt;
Es werden Soll- und Ist-Temperaturen angezeigt, Luftfeuchte und Ventilpositionen, Modus, Batterie und Global-Tastenlock.&lt;br /&gt;
Steuerungsmöglichkeiten: Solltemperatur, Modus (Manual/Automatik), (globale) Tastenlock.&lt;br /&gt;
Die Abweichung der Isttemperatur, die Ventilpositionen, Batteriestand etc. werden farblich hervorgehoben. &lt;br /&gt;
&lt;br /&gt;
Die Gerätenamen (EG_WZ_WT01_Climate / EG_WZ_WT01, EG_WZ_TT01_Clima / EG_WZ_TT01 / EG_WZ_TT02, OG_BZ_WT01_Climate / OG_BZ_WT01, OG_BZ_TT01_Clima / OG_BZ_TT01, OG_SZ_WT01_Climate / OG_SZ_WT01, OG_SZ_TT01_Clima / OG_SZ_TT01, OG_DZ_WT01_Climate / OG_DZ_WT01, OG_DZ_TT01_Clima / OG_DZ_TT01) müssen natürlich entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Bei den Geräten muss das Attribut „expert“ auf &amp;quot;1_on&amp;quot; gesetzt werden, andernfalls fehlt das Reading „R-globalBtnLock“. Dies hätte zur Folge, dass in der Spalte Lock der batteryLevel dargestellt wird.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:RgHMTh.jpg|thumb|500px|links|Status, Steuerung und Wochenprofil]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;define heatingInfo readingsGroup &amp;lt;%sani_heating&amp;gt;,&amp;lt;Soll&amp;gt;,&amp;lt;Soll neu&amp;gt;,&amp;lt;Ist&amp;gt;,&amp;lt;Ventil / RH&amp;gt;,&amp;lt;Modus&amp;gt;,&amp;lt;Lock&amp;gt;,&amp;lt;Bat&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
EG_WZ_WT01_Climate:desired-temp,&amp;lt;sollsetz&amp;gt;,measured-temp,humidity,controlMode,R-globalBtnLock@EG_WZ_WT01,batteryLevel@EG_WZ_WT01 \&amp;lt;br&amp;gt;&lt;br /&gt;
EG_WZ_TT01_Clima:desired-temp,&amp;lt;&amp;gt;,measured-temp,ValvePosition,controlMode,R-globalBtnLock@EG_WZ_TT01,batteryLevel@EG_WZ_TT01 \&amp;lt;br&amp;gt;&lt;br /&gt;
EG_WZ_TT02_Clima:desired-temp,&amp;lt;&amp;gt;,measured-temp,ValvePosition,controlMode,R-globalBtnLock@EG_WZ_TT02,batteryLevel@EG_WZ_TT02  \&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt; \&amp;lt;br&amp;gt;&lt;br /&gt;
OG_BZ_WT01_Climate:desired-temp,&amp;lt;sollsetz&amp;gt;,measured-temp,humidity,controlMode,R-globalBtnLock@OG_BZ_WT01,batteryLevel@OG_BZ_WT01  \&amp;lt;br&amp;gt;&lt;br /&gt;
OG_BZ_TT01_Clima:desired-temp,&amp;lt;&amp;gt;,measured-temp,ValvePosition,controlMode,R-globalBtnLock@OG_BZ_TT01,batteryLevel@OG_BZ_TT01  \&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt; \&amp;lt;br&amp;gt;&lt;br /&gt;
OG_SZ_WT01_Climate:desired-temp,&amp;lt;sollsetz&amp;gt;,measured-temp,humidity,controlMode,R-globalBtnLock@OG_SZ_WT01,batteryLevel@OG_SZ_WT01  \&amp;lt;br&amp;gt;&lt;br /&gt;
OG_SZ_TT01_Clima:desired-temp,&amp;lt;&amp;gt;,measured-temp,ValvePosition,controlMode,R-globalBtnLock@OG_SZ_TT01,batteryLevel@OG_SZ_TT01  \&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt; \&amp;lt;br&amp;gt;&lt;br /&gt;
OG_DZ_WT01_Climate:desired-temp,&amp;lt;sollsetz&amp;gt;,measured-temp,humidity,controlMode,R-globalBtnLock@OG_DZ_WT01,batteryLevel@OG_DZ_WT01  \&amp;lt;br&amp;gt;&lt;br /&gt;
OG_DZ_TT01_Clima:desired-temp,&amp;lt;&amp;gt;,measured-temp,ValvePosition,controlMode,R-globalBtnLock@OG_DZ_TT01,batteryLevel@OG_DZ_TT01&amp;lt;/code&amp;gt;&lt;br /&gt;
| ReadingsGoup anlegen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr heatingInfo cellStyle { &amp;quot;r:1&amp;quot;=&amp;gt;&#039;style=&amp;quot;font-weight:bold;;font-size:16px&amp;quot;&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;r:2,c:0&amp;quot;=&amp;gt;&#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;,&amp;quot;r:6,c:0&amp;quot; =&amp;gt;&#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;r:9,c:0&amp;quot;=&amp;gt;&#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;,&amp;quot;r:12,c:0&amp;quot;=&amp;gt;&#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Schrift fett setzen etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr heatingInfo commands {&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;heatingInfo.sollsetz&#039;=&amp;gt;&#039;desired-temp:5.0,12.0,18.0,19.0,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;controlMode.manual&amp;quot;=&amp;gt;&amp;quot;set %DEVICE controlMode auto&amp;quot;,&amp;quot;controlMode.auto&amp;quot;=&amp;gt;&amp;quot;set %DEVICE controlMode manual&amp;quot;,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;R-globalBtnLock.on&amp;quot;=&amp;gt;&amp;quot;set %DEVICE regSet globalBtnLock off&amp;quot;,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;R-globalBtnLock.off&amp;quot;=&amp;gt;&amp;quot;set %DEVICE regSet globalBtnLock on&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Heizungssteuerung ermöglichen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&lt;br /&gt;
attr heatingInfo mapping {OG_BZ_WT01_Climate=&amp;gt;&amp;quot;Bad&amp;quot;,&amp;lt;br&amp;gt;&lt;br /&gt;
OG_BZ_TT01_Clima=&amp;gt;&amp;quot;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;Regler&amp;quot;,OG_SZ_WT01_Climate=&amp;gt;&amp;quot;Schlafzimmer&amp;quot;,&amp;lt;br&amp;gt;&lt;br /&gt;
OG_SZ_TT01_Clima=&amp;gt;&amp;quot;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;Regler&amp;quot;,OG_DZ_WT01_Climate=&amp;gt;&amp;quot;Duschbad&amp;quot;,&amp;lt;br&amp;gt;&lt;br /&gt;
OG_DZ_TT01_Clima=&amp;gt;&amp;quot;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;Regler&amp;quot;,EG_WZ_WT01_Climate=&amp;gt;&amp;quot;Wohnzimmer&amp;quot;,&amp;lt;br&amp;gt;&lt;br /&gt;
EG_WZ_TT01_Clima=&amp;gt;&amp;quot;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;Regler1&amp;quot;,EG_WZ_TT02_Clima=&amp;gt;&amp;quot;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;Regler2&amp;quot;,&#039;desired-temp&#039; =&amp;gt; &#039;&#039;}&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Gewünschte Namen definieren.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&lt;br /&gt;
attr heatingInfo valueFormat {if($READING eq &amp;quot;ValvePosition&amp;quot; &amp;amp;&amp;amp; $VALUE ne &amp;quot;0&amp;quot;){$VALUE = int($VALUE/10)*10}&amp;lt;br&amp;gt;&lt;br /&gt;
elsif($READING eq &amp;quot;batteryLevel&amp;quot;){if($VALUE&amp;gt;=3){$VALUE=100}&amp;lt;br&amp;gt;&lt;br /&gt;
elsif($VALUE&amp;gt;=2.7){$VALUE=75}elsif($VALUE&amp;gt;=2.5){$VALUE=50}elsif($VALUE&amp;gt;=2.2){$VALUE=25}&amp;lt;br&amp;gt;&lt;br /&gt;
else{$VALUE=0}}}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Werte vorformatieren (für die Icon-Zuordnung).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&lt;br /&gt;
attr heatingInfo valueIcon {&#039;controlMode.manual&#039; =&amp;gt; &#039;sani_heating_manual@795CFF&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;controlMode.auto&#039; =&amp;gt; &#039;sani_heating_automatic@FFC13A&#039;, &#039;controlMode.boost&#039; =&amp;gt; &#039;sani_heating_boost@FB0C02&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;humidity&#039;=&amp;gt;&#039;humidity@6FD9FB&#039;, &#039;R-globalBtnLock.on&#039;=&amp;gt;&#039;secur_locked@F7301D&#039;, &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;R-globalBtnLock.off&#039;=&amp;gt;&#039;secur_open@0CFB0C&#039;,&#039;ValvePosition.0&#039; =&amp;gt; &#039;sani_heating_level_0@002AE0&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;ValvePosition.10&#039; =&amp;gt; &#039;sani_heating_level_10@F8D53D&#039;,&#039;ValvePosition.20&#039; =&amp;gt; &#039;sani_heating_level_20@FF9341&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;ValvePosition.30&#039; =&amp;gt; &#039;sani_heating_level_30@F17F3F&#039;,&#039;ValvePosition.40&#039; =&amp;gt; &#039;sani_heating_level_40@E46C3C&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;ValvePosition.50&#039; =&amp;gt; &#039;sani_heating_level_50@DE3B3A&#039;,&#039;ValvePosition.60&#039; =&amp;gt; &#039;sani_heating_level_60@A30D2D&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;ValvePosition.70&#039; =&amp;gt; &#039;sani_heating_level_70@B40A23&#039;,&#039;ValvePosition.80&#039; =&amp;gt; &#039;sani_heating_level_80@C40619&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;ValvePosition.90&#039; =&amp;gt; &#039;sani_heating_level_90@D4030F&#039;,&#039;ValvePosition.100&#039; =&amp;gt; &#039;sani_heating_level_100@E50005&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;batteryLevel.100&#039;=&amp;gt;&#039;measure_battery_100@0CFB0C&#039;,&#039;batteryLevel.75&#039;=&amp;gt;&#039;measure_battery_75@42BC0A&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;batteryLevel.50&#039;=&amp;gt;&#039;measure_battery_50@F5FF10&#039;,&#039;batteryLevel.25&#039;=&amp;gt;&#039;measure_battery_25@FB5909&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;batteryLevel.0&#039;=&amp;gt;&#039;measure_battery_0@E50005&#039;,&#039;controlMode.set_boost&#039; =&amp;gt; &#039;hourglass&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;controlMode.set_auto&#039; =&amp;gt; &#039;hourglass&#039;,&#039;controlMode.set_manual&#039; =&amp;gt; &#039;hourglass&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;R-globalBtnLock.set_on&#039; =&amp;gt; &#039;hourglass&#039;,&#039;R-globalBtnLock.set_off&#039; =&amp;gt; &#039;hourglass&#039;}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Icons zuordnen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&lt;br /&gt;
attr heatingInfo valueStyle {if($READING eq &amp;quot;measured-temp&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
{my $t=$VALUE;;my $d=ReadingsVal($DEVICE,&#039;desired-temp&#039;,0);;&amp;lt;br&amp;gt;&lt;br /&gt;
if($t-$d&amp;gt;=1){&#039;style=&amp;quot;color:rgb(251,63,11);;&amp;quot;&#039;}elsif($t-$d&amp;lt;=-1){&#039;style=&amp;quot;color:rgb(79,58,251);;&amp;quot;&#039;}&amp;lt;br&amp;gt;&lt;br /&gt;
else{&#039;style=&amp;quot;color:rgb(12,251,12);;&amp;quot;&#039;}}}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Farben (zu kalt: blau, zu warm: rot, ok: grün).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&lt;br /&gt;
attr heatingInfo valueSuffix {&amp;quot;desired-temp&amp;quot;=&amp;gt;&amp;quot; °C&amp;quot;, &amp;quot;measured-temp&amp;quot;=&amp;gt;&amp;quot; °C&amp;quot;, &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;ValvePosition&amp;quot;=&amp;gt;&amp;quot; (&amp;quot;.ReadingsVal($DEVICE,$READING,0).&amp;quot; %)&amp;quot;, &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;humidity&amp;quot;=&amp;gt;&amp;quot; &amp;quot;.ReadingsVal($DEVICE,$READING,0).&amp;quot; % RH&amp;quot;, &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;batteryLevel&amp;quot;=&amp;gt;&amp;quot; (&amp;quot;.ReadingsVal($DEVICE,$READING,0).&amp;quot; V)&amp;quot;}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Messeinheiten und Zahlenwerte.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings aus zusätzlichen Devices ===&lt;br /&gt;
Im folgenden Beispiel wird gezeigt wie sich Readings zusätzlicher Devices zu einer Zeile mit mehreren Readings hinzufügen lassen. Diese zusätzlichen Devices können z.b. die unterschiedlichen Channel eines HomeMatic Gerätes sein. Im folgenden Beispiel wird der Name des zugehörigen Geräts dynamisch bestimmt.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:rgHeizung4.png|thumb|750px|links|Anzeige + Regelmöglichkeit]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define myTemp readingsGroup &amp;lt;Raum&amp;gt;,&amp;lt;Tist&amp;gt;,&amp;lt;Tsoll&amp;gt;,&amp;lt;Mode&amp;gt;,&amp;lt;Tnight&amp;gt;,&amp;lt;Tday&amp;gt;,&amp;lt;Hum&amp;gt;,&amp;lt;BatTC&amp;gt;,&amp;lt;Vist&amp;gt;,&amp;lt;Vsoll&amp;gt;,&amp;lt;Verr&amp;gt;,&amp;lt;BatVD&amp;gt; Thermostat.(WZ|OZ|AZ|Bad|Kueche|SZ|GZ|Bad.OG):measured-temp,desired-temp,controlMode,night-temp,day-temp,humidity,battery,ValvePosition@{valveOfDevice($DEVICE)},ValveDesired@{valveOfDevice($DEVICE)},R-valveErrorPos@{valveOfDevice($DEVICE)},battery@{valveOfDevice($DEVICE)} Broetje:ToutIst &amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse Readings aller Thermostat Devices und des jeweils zugehörigen Ventilantriebs. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr myTemp mapping    { &#039;Broetje&#039; =&amp;gt; &#039;Garten&#039;,&#039;Thermostat.AZ&#039; =&amp;gt; &#039;EG Arbeitszimmer&#039;,&#039;Thermostat.SZ&#039; =&amp;gt; &#039;OG Schlafzimmer&#039;,&#039;Thermostat.WZ&#039;=&amp;gt;&#039;EG Wohnzimmer&#039;,&#039;Thermostat.Kueche&#039; =&amp;gt; &#039;EG Küche&#039;,&#039;Thermostat.GZ&#039; =&amp;gt; &#039;OG Gästezimmer&#039;,&#039;Thermostat.Bad&#039; =&amp;gt; &#039;EG Bad&#039;,&#039;Thermostat.Bad.OG&#039; =&amp;gt; &#039;OG Bad&#039;,&#039;Thermostat.OZ&#039; =&amp;gt; &#039;EG Kaminzimmer&#039;,&#039;desired-temp&#039; =&amp;gt; &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Benennung der Zeilentitel (Das ist je nach Konfiguration auch über $ALIAS und/oder $ROOM lösbar).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr myTemp commands   { &#039;desired-temp&#039; =&amp;gt; &#039;desired-temp:&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| desired-temp soll per dropDown einstellbar sein.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr myTemp nameStyle style=&amp;quot;color:yellow&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Überschriften sollen gelb sein.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr myTemp valueIcon {&#039;battery.ok&#039; =&amp;gt; &#039;batterie@lightgreen&#039;, &#039;battery.low&#039; =&amp;gt; &#039;batterie@red&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für den Batteriestand sollen jeweils Icons angezeigt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr myTemp valueFormat { &#039;measured-temp&#039; =&amp;gt; &amp;quot;%0.1f &amp;amp;amp;deg;C&amp;quot;,&#039;ToutIst&#039; =&amp;gt; &amp;quot;%.1f &amp;amp;amp;deg;C&amp;quot;,&#039;night-temp&#039; =&amp;gt; &amp;quot;%.1f &amp;amp;amp;deg;C&amp;quot;,&#039;day-temp&#039; =&amp;gt; &amp;quot;%.1f &amp;amp;amp;deg;C&amp;quot;,&#039;humidity&#039; =&amp;gt; &amp;quot;%.0f &lt;br /&gt;
%%&amp;quot;,&#039;ValvePosition&#039; =&amp;gt; &amp;quot;%.0f %%&amp;quot;,&#039;ValveDesired&#039; =&amp;gt; &amp;quot;%.0f %%&amp;quot;,&#039;R-valveErrorPos&#039; =&amp;gt; &amp;quot;%.0f %%&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Formatierung der Werte. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#namen des ventil device aus thermostat device ableiten&lt;br /&gt;
sub valveOfDevice ($) {&lt;br /&gt;
  my ($DEVICE) = @_;&lt;br /&gt;
  &lt;br /&gt;
  if ($DEVICE =~ m/AZ/) {&lt;br /&gt;
 	return &amp;quot;Ventil.&amp;quot;.substr($DEVICE,11).&amp;quot;.Nord&amp;quot;;&lt;br /&gt;
  } else {&lt;br /&gt;
 	return &amp;quot;Ventil.&amp;quot;.substr($DEVICE,11);  	&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
| Dieser Teil kommt in die [[99_myUtils_anlegen|99_myUtils.pm]]: Hier wird aus dem Namen des Thermostaten der Name des zugehörigen Ventilantriebs abgeleitet.&lt;br /&gt;
|}&lt;br /&gt;
Da im {...} Teil des &amp;lt;reading&amp;gt;@&amp;lt;device&amp;gt; Arguments keine Leerzeichen oder Kommas vorkommen dürfen ist er in der Regel das Einfachste die Funktionalität wie in diesem Beispiel in eine eigene Routine auszulagern. Mit ein paar &#039;Tricks&#039; lässt es sich aber manchmal auch ohne Leerzeichen oder Kommas lösen und dann direkt in die Definition schreiben:&amp;lt;code&amp;gt;...,ValvePosition@{$DEVICE=~s/Thermostat/Ventil/;$DEVICE;},...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inhalte filtern ===&lt;br /&gt;
Wenn man gewisse Zeilen einer Readingsgroup nicht dargestellt haben möchte, so kann man diese mit Hilfe von &amp;lt;code&amp;gt;valueFormat&amp;lt;/code&amp;gt; ausfiltern, bspw.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr rg valueFormat { return $VALUE if ( $VALUE &amp;gt; 0 );; return undef;; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Bsp. werden alle Zeilen/Devices, deren Value &amp;gt; 0 sind, angezeigt. Alle anderen werden als &amp;lt;code&amp;gt;undef&amp;lt;/code&amp;gt; formatiert und erscheinen damit nicht im Listing.&lt;br /&gt;
&lt;br /&gt;
Dies kann man noch weiter ausbauen und dynamische Auswahllisten erstellen (s. [[ReadingsGroup#Dynamische Inhalte]]).&lt;br /&gt;
&lt;br /&gt;
=== Dynamische Inhalte ===&lt;br /&gt;
[[Datei:rgDynamic-1.png|mini|450px|readingsGroup mit umschaltbarem Inhalt 1]]&lt;br /&gt;
[[Datei:rgDynamic-2.png|mini|450px|readingsGroup mit umschaltbarem Inhalt 2]]&lt;br /&gt;
Es ist möglich, den in einer readingsGroup dargestellten Inhalt dynamisch von zusätzlichen Bedingungen abhängig zu machen. Im folgenden Beispiel lässt sich&lt;br /&gt;
einstellen, dass nur die Devices angezeigt werden, die einen bestimmten Zustand (hier: on/off, open/tilted/closed) haben. Hier wird zum Umschalten ein dummy, der direkt über der readingsGroup dargestellt wird, verwendet. Über das links und/oder commands lässt sich auch eine Darstellung erzeugen, bei der das Umschalten direkt innerhalb der readingsGroup möglich ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define LXrg dummy&lt;br /&gt;
attr LXrg group -&lt;br /&gt;
attr LXrg setList mode1:on,off mode2:open,closed,tilted&lt;br /&gt;
attr LXrg stateFormat 1=mode1 2=mode2&lt;br /&gt;
attr LXrg webCmd mode1:mode2&lt;br /&gt;
&lt;br /&gt;
define rg readingsGroup Window.*:state Light.*:state&lt;br /&gt;
attr rg group -&lt;br /&gt;
attr rg valueFormat { return $VALUE if ( $VALUE eq ReadingsVal(&amp;quot;LXrg&amp;quot;,&amp;quot;mode1&amp;quot;,&amp;quot;&amp;quot;) || $VALUE eq ReadingsVal(&amp;quot;LXrg&amp;quot;,&amp;quot;mode2&amp;quot;,&amp;quot;&amp;quot;) );; return undef;;}&lt;br /&gt;
&lt;br /&gt;
define Watch_LX notify LX.*:.* {my $value = ReadingsVal($NAME,&#039;state&#039;,&#039;&#039;);;;;fhem(&amp;quot;setreading $NAME $value&amp;quot;)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Enable/Disable Button am Beispiel eines WeekdayTimer ===&lt;br /&gt;
Dieses Beispiel zeigt die Anwendung einer readingsGroup, um im Frontend einen Enable/Disable Button für ein Objekt darzustellen. Für den [[WeekdayTimer]] gibt es hier spezielle Erweiterungen (set Routinen, um das Attribut &#039;&#039;disable&#039;&#039; zu setzen). Es gibt aber auch eine allgemeinere Variante (siehe [http://forum.fhem.de/index.php/topic,23655.msg169141.html#msg169141 diesen Forumsbeitrag]) für alle Objekte, die das Fhem Attribut &#039;&#039;disable&#039;&#039; unterstützen.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:rg_scheduling.png|thumb|500px|links|Enable/Disable Button]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define rg_Timer_Wasser readingsGroup timer_Wasser_..:disabled,+DEF,&amp;lt;{rg_timer_Wasser_show_conditional($DEVICE,&amp;quot;nextUpdate&amp;quot;)}@disabled&amp;gt;,&amp;lt;{rg_timer_Wasser_show_conditional($DEVICE,&amp;quot;nextValue&amp;quot;)}@disabled&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Definition der angezeigten Readings. Das Attribut &#039;&#039;disabled&#039;&#039; wird mit weiteren Einstellungen (&#039;&#039;commands&#039;&#039;) zum Button, +DEF zeigt die Definition, d.h. die Schaltzeiten, des Timers an. Die Readings nextUpdate und nextValue sollen nur angezeigt werden, falls der Timer aktiv ist. Hierfür sorgt eine Routine &amp;lt;code&amp;gt;rg_timer_Wasser_show_conditional&amp;lt;/code&amp;gt;, die in der 99_myUtils.pm definiert wird. Das abschließende @disabled sorgt dafür, dass der LongPoll Mechanismus die Anzeige sofort ändert, wenn der Button betätigt wird. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_Timer_Wasser valueFormat  { if ( $READING =~ m/.*DEF/ ) { my @text = split(&amp;quot; &amp;quot;, $VALUE); shift @text; return join(&amp;quot; &amp;quot;, @text) }}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Der Name des Timers wird aus dem Internal &amp;quot;+DEF&amp;quot; vorne abgeschnitten. Damit werden nur die definierten Schaltpunkte angezeigt. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_Timer_Wasser valueIcon { &#039;disabled.0&#039; =&amp;gt; &#039;Restart&#039;, &#039;disabled.1&#039; =&amp;gt; &#039;Shutdown&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die beiden Zustände für den Button werden durch zwei Standard-Icons angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_Timer_Wasser commands  { &#039;disabled.0&#039; =&amp;gt; &#039;set $DEVICE disable&#039;, &#039;disabled.1&#039; =&amp;gt; &#039;set $DEVICE enable&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Toggle-Funktion für den Button. Wenn der Timer aktiv (&amp;quot;disabled.0&amp;quot;) sorgt ein Klick auf den Button, dass der Timer deaktiviert wird (&amp;quot;set $DEVICE disable&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub rg_timer_Wasser_show_conditional($$)&lt;br /&gt;
{&lt;br /&gt;
  my ($DEVICE,$READING) = @_;&lt;br /&gt;
  return ( ReadingsVal($DEVICE, &amp;quot;disabled&amp;quot;, &amp;quot;1&amp;quot;) eq &amp;quot;0&amp;quot; )? &lt;br /&gt;
     ReadingsVal($DEVICE, $READING, &amp;quot;reading_undef&amp;quot;) : &amp;quot;disabled&amp;quot;;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
| Dieser Teil kommt in die [[99_myUtils_anlegen|99_myUtils.pm]]: Hiermit wird das übergebene Reading des Timers nur angezeigt, wenn der Timer aktiv ist. Andernfalls wird der String &amp;quot;disabled&amp;quot; angezeigt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Ändern von Attributen: Noch ein WeekdayTimer Beispiel ===&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Dieses Beispiel benutzt Funktionen, die erst ab [[version|Modulversion]] 8761/16.6.2015 verfügbar sind.}}&lt;br /&gt;
Inzwischen ist es auch möglich das commands Mapping auf Attribute anzuwenden. Die Syntax ist die gleiche wie für die set Kommandos. Um das Beispiel übersichtlich zu halten werden hier die Werte und Icons auch für deaktiviert WeekdayTimer angezeigt. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:rg_timer.png|thumb|500px|links|FhemWidget für das &#039;disable&#039; Attribut]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define rgTimer readingsGroup &amp;lt;&amp;gt;,&amp;lt;Current&amp;gt;,&amp;lt;Update-Time&amp;gt;,&amp;lt;New&amp;gt;,&amp;lt;disable&amp;gt; TYPE=WeekdayTimer:state,nextUpdate,nextValue,?!disable&amp;lt;/code&amp;gt;&lt;br /&gt;
| Definition der angezeigten Readings. Das Attribut &#039;&#039;disable&#039;&#039; wird mit weiteren Einstellungen (&#039;&#039;commands&#039;&#039;) zum Button. Durch das ! wird das Attribut auch dann angezeigt wenn es noch nicht gesetzt ist.   &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rgTimer valueIcon { state =&amp;gt; &#039;%devStateIcon&#039;, nextValue =&amp;gt; &#039;{(split(&amp;quot;:&amp;quot;,Color::devStateIcon($DEVICE,&amp;quot;dimmer&amp;quot;,undef,&amp;quot;nextValue&amp;quot;)))[1]}&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für den aktuellen Zustand wird das devStateIcon angezeigt und für den nächsten Zustand das passende Lampen-Icon.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rgTimer valueFormat  &#039;{(split(&amp;quot; &amp;quot;, $VALUE))[1]}&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Vom nächsten Schaltpunkt wird nur die Zeit angezeigt. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rgTimer commands  { disable =&amp;gt; &#039;disable:&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für das disable attribut wird das normale dropDown mit 0 und 1 angezeigt das auch in der Device Detail Ansicht verwendet wird.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings löschen ===&lt;br /&gt;
Es kann vorkommen, dass Readings angezeigt werden, die garnicht existieren sollten - bspw. wenn man in einer HTTPMOD ein Reading umbeannt hat, kann auch der alte Readingsname immernoch angezeigt werden. Solche Readings können mit der globalen Funktion [http://fhem.de/commandref.html#deletereading deletereading] gelöscht werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Auf jeden Fall die [http://fhem.de/commandref.html#deletereading CommandRef dazu] lesen!&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
Im HTTPMOD des [[Pollenflug]] war zuerst das &amp;lt;code&amp;gt;reading04Name Graeser&amp;lt;/code&amp;gt; definiert und wurde später in &amp;lt;code&amp;gt;reading04Name Gräser&amp;lt;/code&amp;gt; umbenannt. In der zugehörigen ReadingGroup wurden dann konsequent beide Varianten dargestellt - auch nachdem alle Alt-Einträge aus den Logs entfernt wurden. Erst ein &amp;lt;code&amp;gt;deletereading Pollenflug Graeser&amp;lt;/code&amp;gt; in der fhem-Befehltszeile hat das veraltete Reading entfernt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ausrichtung der Tabelle drehen (horizontal/vertikal) ===&lt;br /&gt;
Eine Readingsgroup wird standardmäßig immer zeilenweise aufgebaut, zB. jedes Gerät in eine neue Zeile. Die Werte der Geräte werden dann in den Spalten dargestellt. &lt;br /&gt;
Wenn man eine Readingsgroup für nur ein Gerät mit vielen Readings hat (zB. [[Allergy]]), so kann man die Darstellung horizontal oder vertikal ausrichten, indem man die Readingsgroup detailliert definiert. Ein Bsp. dazu liefert der Foreneintrag [https://forum.fhem.de/index.php/topic,37194.msg440446.html#msg440446] :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Pollenflugvorhersage allergy &amp;lt;PLZ&amp;gt;&lt;br /&gt;
attr Pollenflugvorhersage levelsFormat rc_dot@white,rc_dot@yellow,rc_dot@orange,rc_dot@red&lt;br /&gt;
attr Pollenflugvorhersage stateFormat fc1_maximum&lt;br /&gt;
attr Pollenflugvorhersage updateEmpty 1&lt;br /&gt;
attr Pollenflugvorhersage updateIgnored 1&lt;br /&gt;
&lt;br /&gt;
# Pollen in Spalten, Tage in Zeilen&lt;br /&gt;
define PollenAlarmHorizontal readingsGroup &amp;lt;&amp;gt;,&amp;lt;Ampfer&amp;gt;,&amp;lt;Ambrosia&amp;gt;,&amp;lt;Beifuß&amp;gt;,&amp;lt;Birke&amp;gt;,&amp;lt;Buche&amp;gt;,&amp;lt;Eiche&amp;gt;,&amp;lt;Erle&amp;gt;,&amp;lt;Gräser&amp;gt;,&amp;lt;Hasel&amp;gt;,&amp;lt;Pappel&amp;gt;,&amp;lt;Roggen&amp;gt;,&amp;lt;Ulme&amp;gt;,&amp;lt;Wegerich&amp;gt;,&amp;lt;Weide&amp;gt; \&lt;br /&gt;
Pollenflugvorhersage:fc1_day_of_week,fc1_Ampfer,fc1_Ambrosia,fc1_Beifuß,fc1_Birke,fc1_Buche,fc1_Eiche,fc1_Erle,fc1_Gräser,fc1_Hasel,fc1_Pappel,fc1_Roggen,fc1_Ulme,fc1_Wegerich,fc1_Weide \&lt;br /&gt;
Pollenflugvorhersage:fc2_day_of_week,fc2_Ampfer,fc2_Ambrosia,fc2_Beifuß,fc2_Birke,fc2_Buche,fc2_Eiche,fc2_Erle,fc2_Gräser,fc2_Hasel,fc2_Pappel,fc2_Roggen,fc2_Ulme,fc2_Wegerich,fc2_Weide \&lt;br /&gt;
Pollenflugvorhersage:fc3_day_of_week,fc3_Ampfer,fc3_Ambrosia,fc3_Beifuß,fc3_Birke,fc3_Buche,fc3_Eiche,fc3_Erle,fc3_Gräser,fc3_Hasel,fc3_Pappel,fc3_Roggen,fc3_Ulme,fc3_Wegerich,fc3_Weide \&lt;br /&gt;
Pollenflugvorhersage:fc4_day_of_week,fc4_Ampfer,fc4_Ambrosia,fc4_Beifuß,fc4_Birke,fc4_Buche,fc4_Eiche,fc4_Erle,fc4_Gräser,fc4_Hasel,fc4_Pappel,fc4_Roggen,fc4_Ulme,fc4_Wegerich,fc4_Weide \&lt;br /&gt;
Pollenflugvorhersage:fc5_day_of_week,fc5_Ampfer,fc5_Ambrosia,fc5_Beifuß,fc5_Birke,fc5_Buche,fc5_Eiche,fc5_Erle,fc5_Gräser,fc5_Hasel,fc5_Pappel,fc5_Roggen,fc5_Ulme,fc5_Wegerich,fc5_Weide \&lt;br /&gt;
Pollenflugvorhersage:fc6_day_of_week,fc6_Ampfer,fc6_Ambrosia,fc6_Beifuß,fc6_Birke,fc6_Buche,fc6_Eiche,fc6_Erle,fc6_Gräser,fc6_Hasel,fc6_Pappel,fc6_Roggen,fc6_Ulme,fc6_Wegerich,fc6_Weide \&lt;br /&gt;
Pollenflugvorhersage:fc7_day_of_week,fc7_Ampfer,fc7_Ambrosia,fc7_Beifuß,fc7_Birke,fc7_Buche,fc7_Eiche,fc7_Erle,fc7_Gräser,fc7_Hasel,fc7_Pappel,fc7_Roggen,fc7_Ulme,fc7_Wegerich,fc7_Weide&lt;br /&gt;
attr PollenAlarm nonames 1&lt;br /&gt;
attr PollenAlarm valueFormat %VALUE&lt;br /&gt;
attr PollenAlarm valueIcon %VALUE&lt;br /&gt;
&lt;br /&gt;
# Tage in Spalten, Pollen in Zeilen&lt;br /&gt;
define PollenAlarmVertikal readingsGroup Pollenflugvorhersage:&amp;lt;Pollen&amp;gt;,fc0_day_of_week,fc1_day_of_week,fc2_day_of_week,fc3_day_of_week,fc4_day_of_week,fc5_day_of_week,fc6_day_of_week,fc7_day_of_week \&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Ambrosia&amp;gt;,fc0_Ambrosia,fc1_Ambrosia,fc2_Ambrosia,fc3_Ambrosia,fc4_Ambrosia,fc5_Ambrosia,fc6_Ambrosia,fc7_Ambrosia\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Ampfer&amp;gt;,fc0_Ampfer,fc1_Ampfer,fc2_Ampfer,fc3_Ampfer,fc4_Ampfer,fc5_Ampfer,fc6_Ampfer,fc7_Ampfer\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Beifuß&amp;gt;,fc0_Beifuss,fc1_Beifuss,fc2_Beifuss,fc3_Beifuss,fc4_Beifuss,fc5_Beifuss,fc6_Beifuss,fc7_Beifuss\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;&amp;lt;b&amp;gt;Birke&amp;lt;Birke&amp;lt;/b&amp;gt;&amp;gt;,fc0_Birke,fc1_Birke,fc2_Birke,fc3_Birke,fc4_Birke,fc5_Birke,fc6_Birke,fc7_Birke\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Buche&amp;gt;,fc0_Buche,fc1_Buche,fc2_Buche,fc3_Buche,fc4_Buche,fc5_Buche,fc6_Buche,fc7_Buche\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Eiche&amp;gt;,fc0_Eiche,fc1_Eiche,fc2_Eiche,fc3_Eiche,fc4_Eiche,fc5_Eiche,fc6_Eiche,fc7_Eiche\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;&amp;lt;b&amp;gt;Erle&amp;lt;Erle&amp;lt;/b&amp;gt;&amp;gt;,fc0_Erle,fc1_Erle,fc2_Erle,fc3_Erle,fc4_Erle,fc5_Erle,fc6_Erle,fc7_Erle\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Gräser&amp;gt;,fc0_Graeser,fc1_Graeser,fc2_Graeser,fc3_Graeser,fc4_Graeser,fc5_Graeser,fc6_Graeser,fc7_Graeser\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;&amp;lt;b&amp;gt;Hasel&amp;lt;Hasel&amp;lt;/b&amp;gt;&amp;gt;,fc0_Hasel,fc1_Hasel,fc2_Hasel,fc3_Hasel,fc4_Hasel,fc5_Hasel,fc6_Hasel,fc7_Hasel\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Pappel&amp;gt;,fc0_Pappel,fc1_Pappel,fc2_Pappel,fc3_Pappel,fc4_Pappel,fc5_Pappel,fc6_Pappel,fc7_Pappel\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Roggen&amp;gt;,fc0_Roggen,fc1_Roggen,fc2_Roggen,fc3_Roggen,fc4_Roggen,fc5_Roggen,fc6_Roggen,fc7_Roggen\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Ulme&amp;gt;,fc0_Ulme,fc1_Ulme,fc2_Ulme,fc3_Ulme,fc4_Ulme,fc5_Ulme,fc6_Ulme,fc7_Ulme\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Wegerich&amp;gt;,fc0_Wegerich,fc1_Wegerich,fc2_Ulme,fc3_Wegerich,fc4_Wegerich,fc5_Wegerich,fc6_Wegerich,fc7_Wegerich\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Weide&amp;gt;,fc0_Weide,fc1_Weide,fc2_Weide,fc3_Weide,fc4_Weide,fc5_Weide,fc6_Weide,fc7_Weide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Berechnungen ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Dieses Beispiel benutzt Funktionen, die erst ab [[version|Modulversion]] 8761/16.6.2015 verfügbar sind.}}&lt;br /&gt;
Das Rechnen funktioniert über das Flag &amp;quot;$&amp;quot;, mit dem eine Funktion angegeben werden kann, die auf beliebige Kombinationen von Zeilen, Spalten und einzelnen Zellen angewendet wird. Ähnlich wie in einer Tabellenkalkulation.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel:&lt;br /&gt;
:&amp;lt;code&amp;gt;define rg readingsGroup .*:temperature rg:$avg&amp;lt;/code&amp;gt;&lt;br /&gt;
Damit wird eine readingsGroup über alle &#039;&#039;temperature&#039;&#039; Readings definiert. In einer zusätzlichen Zeile am Ende wird mit &#039;&#039;$avg&#039;&#039; der Durchschnittswert aller darüber liegenden Temperaturen angezeigt.&lt;br /&gt;
&lt;br /&gt;
Das genaue Format: &amp;lt;code&amp;gt;$&amp;lt;operator&amp;gt;[(&amp;lt;zellen&amp;gt;)]&amp;lt;/code&amp;gt; mit&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;operator&amp;gt;&amp;lt;/code&amp;gt;: sum, avg, min, max, scalar, count oder der Name einer beliebigen anderen Funktion, die ein Array mit allen Werten übergeben bekommt und ein Ergebnis zurückliefert.&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;zellen&amp;gt;&amp;lt;/code&amp;gt; ist eine durch Semikolon getrennte Liste aus &amp;lt;code&amp;gt;&amp;lt;zeilen&amp;gt;:&amp;lt;spalten&amp;gt;&amp;lt;/code&amp;gt; Paaren. &lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;zeilen&amp;gt;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&amp;lt;spalten&amp;gt;&amp;lt;/code&amp;gt; sind jeweils eine Perl Liste, d.h. hier können &lt;br /&gt;
** einzelne Werte,&lt;br /&gt;
** durch Komma getrennte Aufzählungen,&lt;br /&gt;
** mit .. angegebene Wertebereiche&lt;br /&gt;
** sowie &amp;lt;code&amp;gt;$ROW&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;$COLUMN&amp;lt;/code&amp;gt; als Bezeichner für die aktuelle Zelle&lt;br /&gt;
:verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Alle Möglichkeiten sind kombinierbar. Die Zählung der Zeilen und Spalten beginnt bei 1. Eine nicht vorhandene Zeilenangabe wird durch den Bereich von Zeile 1 bis zur aktuellen Zeile ersetzt, eine nicht vorhandene Spalte durch die aktuelle Spalte.&lt;br /&gt;
&lt;br /&gt;
Es ergeben sich somit unter anderem folgende Möglichkeiten:&lt;br /&gt;
*&amp;lt;code&amp;gt;$sum&amp;lt;/code&amp;gt; equivalent zu &amp;lt;code&amp;gt;$sum(1..$ROW), $sum(:$COLUMN)&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;$sum(1..$ROW:$COLUMN)&amp;lt;/code&amp;gt; die Summe der Werte in der Spalte über der aktuellen Zelle.&lt;br /&gt;
*&amp;lt;code&amp;gt;$max($ROW:1..$COLUMN-1)&amp;lt;/code&amp;gt; Maximum aller Werte links von der aktuellen Zelle (in der aktuellen Zeile)&lt;br /&gt;
*&amp;lt;code&amp;gt;$avg(1..$ROW:1)&amp;lt;/code&amp;gt; Durchschnitt aller Werte in Spalte 1 bis zur aktuellen Zeile&lt;br /&gt;
*&amp;lt;code&amp;gt;$scalar(:1)&amp;lt;/code&amp;gt; Anzahl der Werte in Spalte 1&lt;br /&gt;
*&amp;lt;code&amp;gt;$min(1..5:1,2,4)&amp;lt;/code&amp;gt; Minimum der Werte aus den Zeilen 1-5 in den Spalten 1, 2 und 4&lt;br /&gt;
&lt;br /&gt;
Eigene Funktionen lassen sich über 99_myUtils anlegen und z.B. verwenden um Häufigkeiten zu zählen oder mit nichtnumerischen Readings umzugehen.&lt;br /&gt;
&lt;br /&gt;
Die Ergebnisse werden im Weiteren wie normale Readings behandelt. Sie lassen sich von links oben nach rechts unten kaskadieren und lassen sich über valuePrefix, valueSuffix, valueFormat und valueStyle in der Darstellung beeinflussen. Also z.B. einfärben, als Balkendiagramm darstellen, ...&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe der Funktionalität zum auf- und zu-klappen von Teilen einer readingsGroup lassen sich z.B. im zusammengeklappten Zustand Summen, Extremwerte oder andere Ausreißer anzeigen und die Details nur beim Aufklappen zeigen.&lt;br /&gt;
&lt;br /&gt;
Weitere Möglichkeiten:&lt;br /&gt;
* Attribut &amp;lt;code&amp;gt;firstCalcRow&amp;lt;/code&amp;gt;: Hiermit kann der Default für die Nummer der ersten Zeile vorgegeben werden (sofern im Ausdruck nichts genaueres angegeben ist). firstCalcRow sollte z.B. auf 2 gesetzt werden, wenn in der readingsGroup Spaltenüberschriften verwendet werden.&lt;br /&gt;
* special &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;hr&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; um eine horizontale Linie über die volle Breite einzufügen&lt;br /&gt;
* Über ein angehängtes &amp;lt;code&amp;gt;@&amp;lt;alias&amp;gt;&amp;lt;/code&amp;gt; kann einem Rechenergebniss ein Alias-Name gegeben werden. Über diesen kann der Wert dann zur Formatierung mit den value-Attributen angesprochen werden.&lt;br /&gt;
* das &amp;lt;code&amp;gt;alwaysTrigger&amp;lt;/code&amp;gt; Attribut kann jetzt auch den Wert 2 bekommen. Damit werden in der readingsGroup Readings für alle durch die Aggregation gebildeten Werte und entsprechende Events auch dann erzeugt wenn die readingsGroup nicht angezeigt wird. Wenn ein Alias-Name vergeben ist, wird dieser auch für den Reading-Namen verwendet.&lt;br /&gt;
* Über den operator &amp;lt;code&amp;gt;$count(&amp;lt;wert&amp;gt;)(&amp;lt;zellen&amp;gt;)&amp;lt;/code&amp;gt; um das Vorkommen von &amp;lt;code&amp;gt;&amp;lt;wert&amp;gt;&amp;lt;/code&amp;gt; in den angegebenen Zellen zu zählen. &amp;lt;code&amp;gt;&amp;lt;wert&amp;gt;&amp;lt;/code&amp;gt; kann enweder direkt der zu zählende Wert sein (ohne Anführungzeichen) oder eine in / eingeschlossene regex. Mit &amp;lt;code&amp;gt;!&amp;lt;wert&amp;gt;&amp;lt;/code&amp;gt; kann das Nicht-Vorkommen von &amp;lt;code&amp;gt;&amp;lt;wert&amp;gt;&amp;lt;/code&amp;gt; gezählt werden.&lt;br /&gt;
&lt;br /&gt;
=== Ein interaktives Beispiel ===&lt;br /&gt;
[[Datei:rgCalc.png|mini|right|400px|Beispiel-readingsGroup mit Berechnungen]]&lt;br /&gt;
In drei [[dummy]] Objekten lässt sich jeweils ein Reading über einen Slider einstellen. In der darunter liegenden readingsGroup werden diese Readings und diverse daraus abgeleitete Werte dargestellt. Alle Readings und die daraus abgeleiteten Werte werden live per longpoll aktualisiert, wenn die slider bewegt werden.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  define t1 dummy&lt;br /&gt;
  attr t1 room rg&lt;br /&gt;
  attr t1 setList state:slider,-10,1,30&lt;br /&gt;
  attr t1 webCmd state&lt;br /&gt;
  define t2 dummy&lt;br /&gt;
  attr t2 room rg&lt;br /&gt;
  attr t2 setList state:slider,-10,1,30&lt;br /&gt;
  attr t2 webCmd state&lt;br /&gt;
  define t3 dummy&lt;br /&gt;
  attr t3 room rg&lt;br /&gt;
  attr t3 setList state:slider,-10,1,30&lt;br /&gt;
  attr t3 webCmd state&lt;br /&gt;
&lt;br /&gt;
  define rg readingsGroup &amp;lt;&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;sum&amp;gt;,&amp;lt;min&amp;gt;,&amp;lt;max&amp;gt;,&amp;lt;avg&amp;gt;\&lt;br /&gt;
  t\d:+NAME,state,$sum(1..$ROW:2),$min(1..$ROW:2),$max(1..$ROW:2),$avg(1..$ROW:2)\&lt;br /&gt;
  &amp;lt;hr&amp;gt;\&lt;br /&gt;
  rg:&amp;lt;&amp;gt;,$scalar,$sum(:2)@SUM,$min(:2)@MIN,$max(:2)@MAX,$avg(:2)@AVG\&lt;br /&gt;
  &amp;lt;hr&amp;gt;\&lt;br /&gt;
  t1:&amp;lt;t1,t2,t3&amp;gt;,state,state@t2,state@t3,$sum($ROW:2..4)@SUM,$count(/\d/)(2..$ROW-4:2)\&lt;br /&gt;
 &lt;br /&gt;
  attr rg nonames 1&lt;br /&gt;
  attr rg room rg&lt;br /&gt;
  attr rg style style=&#039;text-align:center&#039;&lt;br /&gt;
  attr rg valueFormat { &#039;avg&#039; =&amp;gt; &#039;%.2f&#039;, &#039;AVG&#039; =&amp;gt; &#039;%.2f&#039; }&lt;br /&gt;
  attr rg valuePrefix { &#039;rg.scalar&#039; =&amp;gt; &#039;#&#039;, &#039;rg.SUM&#039; =&amp;gt;&#039;&amp;amp;Sigma;; &#039;, &#039;rg.MIN&#039; =&amp;gt;&#039;Min: &#039;, &#039;rg.MAX&#039; =&amp;gt;&#039;Max: &#039;, &#039;rg.AVG&#039; =&amp;gt;&#039;&amp;amp;empty;; &#039;, &#039;rg.count&#039; =&amp;gt; &#039;#(X): &#039; }&lt;br /&gt;
  attr rg valueSuffix { state =&amp;gt; &#039;&amp;amp;deg;;C&#039; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links und Trigger ==&lt;br /&gt;
=== readingsGroup mit Link ===&lt;br /&gt;
[[Datei:rgPCA-detail.png|mini|400px|readingsGroup mit Link]]&lt;br /&gt;
Das PCA301 Beispiel oben lässt sich mit einem ans Ende des define angehängten &lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;{appendTrigger($DEVICE,&amp;quot;clear&amp;quot;,&amp;quot;Alle löschen&amp;quot;)}&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
und der folgenden appendTrigger Definition in 99_myUtils.pm um einen Link erweitern, der ein Event auslöst, an das z.B. ein notify gehängt werden kann, um die Verbrauchszähler der PCA301 Dosen zurückzusetzen. &lt;br /&gt;
:&amp;lt;code&amp;gt;define clearVerbrauch notify Verbrauch:clear set TYPE=PCA301 clear&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
use vars qw($FW_ME);&lt;br /&gt;
use vars qw($FW_subdir);&lt;br /&gt;
sub&lt;br /&gt;
appendTrigger($$$)&lt;br /&gt;
{&lt;br /&gt;
  my ($name,$trigger,$label) = @_; &lt;br /&gt;
&lt;br /&gt;
  my $ret .= &amp;quot;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  my $link = &amp;quot;cmd=trigger $name $trigger&amp;quot;;&lt;br /&gt;
  my $txt = &amp;quot;&amp;lt;a onClick=\&amp;quot;FW_cmd(&#039;$FW_ME$FW_subdir?XHR=1&amp;amp;$link&#039;)\&amp;quot;&amp;gt;$label&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
  $ret .= &amp;quot;&amp;lt;td colspan=\&amp;quot;99\&amp;quot;&amp;gt;&amp;lt;div style=\&amp;quot;cursor:pointer;color:#888888;text-align:right\&amp;quot;&amp;gt;$txt&amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  return ($ret,0);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wenn hierdurch Änderungen an einer readingsGroup erfolgen, die ein Neuladen der Seite erforderlich machen, kann dies so erfolgen:&lt;br /&gt;
:&amp;lt;code&amp;gt;{myUtils_refresh(&amp;quot;WEB&amp;quot;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
mit folgendem code in 99_myUtils.pm:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub                                                                                     &lt;br /&gt;
myUtils_refresh($)                                                                      &lt;br /&gt;
{                                                                                       &lt;br /&gt;
  my ($name) = @_;                                                                      &lt;br /&gt;
                                                                                        &lt;br /&gt;
  FW_directNotify(&amp;quot;#FHEMWEB:$name&amp;quot;, &amp;quot;location.reload(true);&amp;quot;,&amp;quot;&amp;quot; );&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Beispiel für &#039;custom links und trigger&#039; findet sich in {{Link2Forum|Topic=14425|Message=109383|LinkText=diesem Forenbeitrag}}: dort wird damit eine readingsGroup dynamisch umgeschaltet, um nur die eingeschalteten, nur die ausgeschalteten oder alle Lampen anzuzeigen.&lt;br /&gt;
&lt;br /&gt;
=== sub rg ===&lt;br /&gt;
Damit beim klicken auf ein Icon oder einen Text in einer readingsGroup etwas passiert ist es möglich dies über das commands Attribut auf ein &amp;lt;code&amp;gt;&#039;trigger ntfy_rg $DEVICE $READING&#039;&amp;lt;/code&amp;gt; oder Ähnliches zu mappen.&lt;br /&gt;
Anlegen des ntfy_rg notify&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define ntfy_rg notify ntfy_rg {rg($EVENT)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Folgender Code muss noch in de [[99_myUtils_anlegen|99_myUtils.pm]]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub rg($){&lt;br /&gt;
  my @input    = split(/[§\s]+/,shift);&lt;br /&gt;
  my $device   = $input[0];&lt;br /&gt;
  my $function = $input[1];&lt;br /&gt;
&lt;br /&gt;
if($function eq &amp;quot;clima&amp;quot;){&lt;br /&gt;
  my $room =  AttrVal($device, &#039;room&#039;, &#039;undef&#039;);&lt;br /&gt;
  $room =~ s/\D//g;&lt;br /&gt;
  &lt;br /&gt;
  return((&amp;quot;d_climaControl_&amp;quot;.$room));&lt;br /&gt;
}&lt;br /&gt;
elsif($function eq &amp;quot;device&amp;quot;){&lt;br /&gt;
  return InternalVal($device,&amp;quot;device&amp;quot;,&amp;quot;device error&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
elsif($function eq &amp;quot;controlMode&amp;quot;){&lt;br /&gt;
  my $controlMode = ReadingsVal($device,&amp;quot;controlMode&amp;quot;,&amp;quot;controlMode error&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if($controlMode ~~ /manual/)&lt;br /&gt;
    {fhem(&amp;quot;set $device controlMode auto&amp;quot;)}&lt;br /&gt;
  elsif($controlMode ~~ /auto/)&lt;br /&gt;
    {fhem(&amp;quot;set $device controlMode manual&amp;quot;)};&lt;br /&gt;
}&lt;br /&gt;
elsif($function eq &amp;quot;globalBtnLock&amp;quot;){&lt;br /&gt;
  my $globalBtnLock = ReadingsVal($device,&amp;quot;R-globalBtnLock&amp;quot;,&amp;quot;globalBtnLock error&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if($globalBtnLock ~~ /off/){&lt;br /&gt;
    {fhem(&amp;quot;set $device regSet globalBtnLock on&amp;quot;)}&lt;br /&gt;
    {fhem (&amp;quot;set $device getConfig&amp;quot;)}&lt;br /&gt;
  }&lt;br /&gt;
  elsif($globalBtnLock ~~ /on/){&lt;br /&gt;
    {fhem(&amp;quot;set $device regSet globalBtnLock off&amp;quot;)}&lt;br /&gt;
    {fhem (&amp;quot;set $device getConfig&amp;quot;)}&lt;br /&gt;
  };&lt;br /&gt;
}&lt;br /&gt;
elsif($function eq &amp;quot;state&amp;quot;){&lt;br /&gt;
  my $state = Value($device);&lt;br /&gt;
&lt;br /&gt;
  if($state ~~ /off/){&lt;br /&gt;
    {fhem(&amp;quot;set $device on&amp;quot;)}&lt;br /&gt;
  }&lt;br /&gt;
  elsif($state ~~ /on/){&lt;br /&gt;
    {fhem(&amp;quot;set $device off&amp;quot;)}&lt;br /&gt;
  };&lt;br /&gt;
}&lt;br /&gt;
elsif($function eq &amp;quot;setTimeTable&amp;quot;){&lt;br /&gt;
  my $room         =  AttrVal($device, &#039;room&#039;, &#039;undef&#039;);&lt;br /&gt;
  $room         =~ s/\D//g;&lt;br /&gt;
  my $climaControl = (&amp;quot;d_climaControl_&amp;quot;.$room);&lt;br /&gt;
  my $dayTemp           = ReadingsVal( $climaControl, &amp;quot;dayTemp&amp;quot;          , 21.0    );&lt;br /&gt;
  my $nightTemp         = ReadingsVal( $climaControl, &amp;quot;nightTemp&amp;quot;        , 17.0    );&lt;br /&gt;
  my $workday_period_1_start  = ReadingsVal( $climaControl, &amp;quot;workday_period_1_start&amp;quot;  , &amp;quot;06:30&amp;quot; );&lt;br /&gt;
  my $workday_period_1_stop   = ReadingsVal( $climaControl, &amp;quot;workday_period_1_stop&amp;quot;   , &amp;quot;18:00&amp;quot; );&lt;br /&gt;
  my $workday_period_2_start  = ReadingsVal( $climaControl, &amp;quot;workday_period_2_start&amp;quot;  , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $workday_period_2_stop   = ReadingsVal( $climaControl, &amp;quot;workday_period_2_stop&amp;quot;   , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $saturday_period_1_start = ReadingsVal( $climaControl, &amp;quot;saturday_period_1_start&amp;quot; , &amp;quot;06:30&amp;quot; );&lt;br /&gt;
  my $saturday_period_1_stop  = ReadingsVal( $climaControl, &amp;quot;saturday_period_1_stop&amp;quot;  , &amp;quot;12:00&amp;quot; );&lt;br /&gt;
  my $saturday_period_2_start = ReadingsVal( $climaControl, &amp;quot;saturday_period_2_start&amp;quot; , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $saturday_period_2_stop  = ReadingsVal( $climaControl, &amp;quot;saturday_period_2_stop&amp;quot;  , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $sunday_period_1_start   = ReadingsVal( $climaControl, &amp;quot;sunday_period_1_start&amp;quot;   , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $sunday_period_1_stop    = ReadingsVal( $climaControl, &amp;quot;sunday_period_1_stop&amp;quot;    , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $sunday_period_2_start   = ReadingsVal( $climaControl, &amp;quot;sunday_period_2_start&amp;quot;   , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $sunday_period_2_stop    = ReadingsVal( $climaControl, &amp;quot;sunday_period_2_stop&amp;quot;    , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListMon prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListTue prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListWed prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListThu prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListFri prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListSat prep $saturday_period_1_start $nightTemp $saturday_period_1_stop $dayTemp $saturday_period_2_start $nightTemp $saturday_period_2_stop $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListSun exec $sunday_period_1_start   $nightTemp $sunday_period_1_stop   $dayTemp $sunday_period_2_start   $nightTemp $sunday_period_2_stop   $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hier sind die benötigten CodeBlöcke für [[ReadingsGroup#Heizungswerte.2C_Status.2C_Steuerung_und_Wochenprofil|Heizungswerte, Status, Steuerung und Wochenprofil]] enthalten, aber auch um state zu triggern.&lt;br /&gt;
&lt;br /&gt;
== Sonstiges ==&lt;br /&gt;
In der Regel werden die Parameter zu einem reading in den mappings unter &amp;lt;$DEVICE&amp;gt; und dann &amp;lt;$DEVICE&amp;gt;.&amp;lt;$READING&amp;gt; und dann unter &amp;lt;$READING&amp;gt;.&amp;lt;$VALUE&amp;gt; gesucht.&lt;br /&gt;
&lt;br /&gt;
=== Lesbar machen ===&lt;br /&gt;
Für die meisten Attribute gilt:&lt;br /&gt;
&lt;br /&gt;
* Wenn es komplexer wird ist es einfacher, den Code in eine eigene Routine in (beispielsweise) [[99 myUtils anlegen|99_myUtils]] auszulagern und diese aufzurufen:&lt;br /&gt;
:&amp;lt;code&amp;gt; attr &amp;lt;name&amp;gt; valueStyle {myValueToFormat($READING,$VALUE)}&amp;lt;/code&amp;gt;&lt;br /&gt;
* code für unterschiedliche readings kann auch im mapping schon aufgeteilt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;name&amp;gt; valueStyle { SuperE5 =&amp;gt; &#039;{perl code}&#039;, Diesel =&amp;gt; &#039;{perl code}&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
* Ifs lassen sich verschachteln und sortieren. So kann die Anzahl der Klammern und Else-Zweige reduziert werden:&lt;br /&gt;
 if( $READING eq ... ) {&lt;br /&gt;
   return xxx if( $VALUE &amp;lt; 1 );&lt;br /&gt;
   return yyy if( $VALUE &amp;lt; 1.5 );&lt;br /&gt;
   return zzz;&lt;br /&gt;
 } elsif( $READING eq ... ) {&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Da alles lässt sich natürlich auch kombinieren und so viel lesbarer machen als ein einziger langer Bandwurm.&lt;br /&gt;
&lt;br /&gt;
=== readingsGroup in einer Gruppe ===&lt;br /&gt;
Wenn der doppelte Rahmen um eine readingsGroup bei Darstellung in einer Gruppe stört, lässt er sich mit dem passenden style entfernen: &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;rgName&amp;gt; style style=&amp;quot;border:0px;background:none;box-shadow:none&amp;quot;&amp;lt;/code&amp;gt; &lt;br /&gt;
Für die readingsGroup &#039;&#039;rgName&#039;&#039; wird der Darstellungsstil verändert.&lt;br /&gt;
&lt;br /&gt;
Anwendungs-Bsp: [[Pollenflug]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache Balkendiagramme ===&lt;br /&gt;
[[Datei:rgBars.png|mini|400px|readingsGroup mit Balken]]&lt;br /&gt;
Readings lassen sich mit einem valueStyle der folgenden Art mit einem &amp;quot;Füllstandsbalken&amp;quot; hinterlegen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;rgName&amp;gt; valueStyle style=&amp;quot;width:200px; text-align:center; border: 1px solid #ccc; background:-webkit-linear-gradient(left, red $VALUE%, rgba(0,0,0,0) $VALUE%)&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Balken werden bei Änderungen der Readings automatisch per longpoll aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Diese direkte Definition des &amp;lt;code&amp;gt;valueStyle&amp;lt;/code&amp;gt; ist allerdings sehr unflexibel - bspw. müsste der &amp;lt;code&amp;gt;$VALUE&amp;lt;/code&amp;gt; zufällig max 100 erreichen und es darf nur ein Browsertyp eingesetzt werden, damit alles sauber funktioniert. &lt;br /&gt;
&lt;br /&gt;
Deutlich flexibler ist eine Auslagerung als eigenständige Funktion in die [[99_myUtils_anlegen|99_myUtils.pm]], die den valueStyle dynamisch generiert, bspw.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub Balkenanzeige($) &lt;br /&gt;
{&lt;br /&gt;
    # Zuweisung der übergebenen Variablen&lt;br /&gt;
    my ($val) = @_;&lt;br /&gt;
&lt;br /&gt;
    # Konfiguration des maximal übergebenen Werts (hier wäre der höchste zu erwartende Wert = 3)&lt;br /&gt;
    my $maxValue = 3;&lt;br /&gt;
&lt;br /&gt;
    # Normalisierung auf 100%-Wert&lt;br /&gt;
    my $percent = $val / $maxValue * 100;&lt;br /&gt;
&lt;br /&gt;
    # Definition des valueStyles&lt;br /&gt;
    my $stylestring = &#039;style=&amp;quot;&lt;br /&gt;
        width: 200px; &lt;br /&gt;
	text-align:center; &lt;br /&gt;
	border: 1px solid #ccc; &lt;br /&gt;
	background-image: -webkit-linear-gradient(left,red &#039;.$percent.&#039;%, rgba(0,0,0,0) &#039;.$percent.&#039;%); &lt;br /&gt;
	background-image:    -moz-linear-gradient(left,red &#039;.$percent.&#039;%, rgba(0,0,0,0) &#039;.$percent.&#039;%); &lt;br /&gt;
	background-image:     -ms-linear-gradient(left,red &#039;.$percent.&#039;%, rgba(0,0,0,0) &#039;.$percent.&#039;%); &lt;br /&gt;
	background-image:      -o-linear-gradient(left,red &#039;.$percent.&#039;%, rgba(0,0,0,0) &#039;.$percent.&#039;%); &lt;br /&gt;
	background-image:         linear-gradient(left,red &#039;.$percent.&#039;%, rgba(0,0,0,0) &#039;.$percent.&#039;%);&lt;br /&gt;
	&amp;quot;&#039;;&lt;br /&gt;
&lt;br /&gt;
    # Rückgabe des definierten Strings&lt;br /&gt;
    return $stylestring;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Aufruf sähe dann wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; attr &amp;lt;rgName&amp;gt; valueStyle { Balkenanzeige($VALUE) } &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die einzelnen Werte des &amp;lt;code&amp;gt;$stylestring&amp;lt;/code&amp;gt; haben folgende Bedeutungen:&lt;br /&gt;
* width      - Breite des Balkenrahmens&lt;br /&gt;
* text-align - Ausrichtung des Texts&lt;br /&gt;
* border     - Format des Balkenrahmens&lt;br /&gt;
* background-image - Format des Hintergrunds des Balkenrahmens, also des Balkens selbst&lt;br /&gt;
** linear-gradient - css-Funktion zur Erstellung von Farbverläufen &#039;&#039;(*)&#039;&#039;&lt;br /&gt;
*** left             - linksbündiger Balken&lt;br /&gt;
*** red x%           - roter Balken x% breit&lt;br /&gt;
*** rgba(0,0,0,0) x% - farbloser Teil startet bei x%&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(*) linear-gradient wird in verschiedenen Browsern unterschiedlich umgesetzt. Deshalb sollten immer alle Varianten zusammen angegeben werden, damit die Darstellung auf allen Browsern funktioniert. (vgl. Link unten)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Weitere Infos zu:&lt;br /&gt;
* linear-gradient - [https://developer.mozilla.org/de/docs/Web/CSS/linear-gradient]&lt;br /&gt;
* Farbanpassungen, z.B. auch unter Verwendung der [[Color#Skalenfarbe_mit_Color::pahColor|Color::pahColor]] Routine.&lt;br /&gt;
* Anpassung von Werten s.o. [[ReadingsGroup#Lesbar_machen]]&lt;br /&gt;
* weiteren Möglichkeiten zur Erzeugung von Balkendiagrammen in Forenbeiträgen {{Link2Forum|Topic=25313|LinkText=hier}} und {{Link2Forum|Topic=28318|LinkText=hier}}&lt;br /&gt;
* [[99_myUtils_anlegen|99_myUtils.pm]]&lt;br /&gt;
&lt;br /&gt;
Anwendungs-Bsp: [[Pollenflug]]&lt;br /&gt;
&lt;br /&gt;
=== readingsGroup Styling mit CSS ===&lt;br /&gt;
Jede readingsGroup lässt sich durch CSS individuell stylen. &lt;br /&gt;
&lt;br /&gt;
==== Allgemeines ====&lt;br /&gt;
Damit der eigene CSS Code nach einem [[Update]] der FHEM-Style Dateien vorhanden bleibt, ist es notwenig eine eigene .css Datei (zB ios7ReadingsGroups.css) zu erstellen und ins Verzeichnis &#039;&#039;fhem/www/pgm2/&#039;&#039; zu kopieren. Anschließend muss in der [[FHEMWEB]] Instanz das Attribut &#039;&#039;CssFiles&#039;&#039; auf zB &#039;&#039;pgm2/ios7ReadingsGroups.css&#039;&#039; gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
==== Erweiterte Device Übersicht ====&lt;br /&gt;
Diese ReadingsGroup ist an der [[FHEMWEB]] Device-Übersicht angelehnt. Zusätzlich werden weitere Readings, hier Leistung, Betriebszeit Heute und Jahr, ein Link zu Detail-Seite der ReadingsGroup und Links zu den jeweiligen Device-Detail-Seite, dargestellt.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| [[Datei:RgStylingOhneCss.png|600px|mini|left|Device ReadingsGroup ohne CSS]] [[Datei:RgStylingMitCss.png|600px|mini|left|Device ReadingsGroup mit CSS]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Definition =====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_devices readingsGroup &amp;lt;{rgLink($DEVICE,&amp;quot;konfigurieren&amp;quot;,&amp;quot;Details&amp;quot;)}&amp;gt;,&amp;lt;Device&amp;gt;,&amp;lt;Status&amp;gt;,&amp;lt;Leistung&amp;gt;,&amp;lt;Heute&amp;gt;,&amp;lt;Jahr&amp;gt;\&lt;br /&gt;
wzDeckenfluter:&amp;lt;%light_floor_lamp&amp;gt;,&amp;lt;{rgLink(&amp;quot;wzDeckenfluter&amp;quot;,&amp;quot;detail&amp;quot;,&amp;quot;Deckenfluter&amp;quot;)}&amp;gt;,state,&amp;lt;&amp;gt;,dauerHeute,dauerJahr\&lt;br /&gt;
wzMacMini:&amp;lt;%it_nas&amp;gt;,&amp;lt;{rgLink(&amp;quot;wzMacMini&amp;quot;,&amp;quot;detail&amp;quot;,&amp;quot;MacMini&amp;quot;)}&amp;gt;,state,power,consumption,consumptionYear\&lt;br /&gt;
attr rg_devices noheading 1&lt;br /&gt;
attr rg_devices nonames 1&lt;br /&gt;
attr rg_devices notime 1&lt;br /&gt;
attr rg_devices room ReadingsGroup Styling&lt;br /&gt;
attr rg_devices style class=&amp;quot;block wide rgDevices&amp;quot;&lt;br /&gt;
attr rg_devices valueFormat { &#039;power&#039; =&amp;gt; &amp;quot;%.1f W &amp;quot;, consumption =&amp;gt; &amp;quot;%.2f kWh&amp;quot;, &#039;consumptionYear&#039; =&amp;gt; &amp;quot;%.2f kWh&amp;quot;  }&lt;br /&gt;
attr rg_devices valueIcon { state =&amp;gt; &#039;%devStateIcon&#039; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sich der CSS auf die richtige readingsGroup bezieht, ist es nötigt &lt;br /&gt;
das Attribut &#039;&#039;style&#039;&#039; anzupassen.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;attr &amp;lt;rgName&amp;gt; style class=&amp;quot;block wide rgDevices&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Klassen &#039;&#039;block&#039;&#039; und &#039;&#039;wide&#039;&#039; müssen eingetragen werden. Der Name der Nachfolgenden Klasse, hier &#039;&#039;rgDevices&#039;&#039;, ist frei wählbar.&lt;br /&gt;
|}&lt;br /&gt;
===== Funktion rgLink() =====&lt;br /&gt;
Die Funktion rgLink($name,$action,$label) liefert einen Link mit dem Namen $label zurück. Der Code gehört in die [[99 myUtils anlegen|99_myUtils.pm]].&lt;br /&gt;
* $name - Name des Device das aufgerufen werden soll &lt;br /&gt;
* $action - Aktion die Ausgeführt werden soll. &lt;br /&gt;
**&#039;&#039;konfigurieren&#039;&#039; erzeugt den kleinen &#039;&#039;Details&#039;&#039; Button links oben der einem zur Detail Seite der ReadingsGroup führt - nützlich wenn das ReadingsGroup-Attribut &#039;&#039;noheading&#039;&#039; gesetzt ist&lt;br /&gt;
** &#039;&#039;detail&#039;&#039; erzeugt einen Link zu Device-Detail Seite&lt;br /&gt;
* $label - Link-Name&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub rgLink($$$){&lt;br /&gt;
  my ($name,$action,$label) = @_; &lt;br /&gt;
  my $link = &amp;quot;&amp;quot;;&lt;br /&gt;
  my $fhemLink = &amp;quot;&amp;quot;;&lt;br /&gt;
  my $txt = &amp;quot;&amp;quot;;&lt;br /&gt;
  my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
  my $divStyle = &amp;quot;&amp;quot;;&lt;br /&gt;
  my $aStyle = &amp;quot;&amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
  # FHEM Variablen einbinden&lt;br /&gt;
  use vars qw($FW_ME);&lt;br /&gt;
  use vars qw($FW_subdir);&lt;br /&gt;
  use vars qw($FW_ss);&lt;br /&gt;
  use vars qw($FW_tp);&lt;br /&gt;
&lt;br /&gt;
  if( $action eq &amp;quot;konfigurieren&amp;quot; ){&lt;br /&gt;
    $fhemLink  = &amp;quot;detail=$name&amp;quot;;&lt;br /&gt;
    $divStyle = &amp;quot;cursor:pointer;font-size:11px;padding-bottom:2px;padding-left:3px;&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  elsif( $action eq &amp;quot;detail&amp;quot; ){&lt;br /&gt;
    $fhemLink  = &amp;quot;detail=$name&amp;quot;;&lt;br /&gt;
    $divStyle = &amp;quot;cursor:pointer;display:inline;&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  $link = &#039;&amp;lt;a onclick=&amp;quot;location.href=\&#039;&#039; . $FW_ME . $FW_subdir . &#039;?&#039; . $fhemLink . &#039;\&#039;&amp;quot; style=&amp;quot;&#039; . $aStyle . &#039;&amp;quot;&amp;gt;&#039; . $label . &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
  $txt  = &#039;&amp;lt;div style=&amp;quot;&#039; . $divStyle . &#039;&amp;quot;&amp;gt;&#039; . $link . &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
  $ret  = &amp;quot;$txt&amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
  return $ret;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=Tipp&lt;br /&gt;
Verwende zum Bearbeiten der eigenen .css Dateien entweder den [[Konfiguration#Syntaxhervorhebung|Codemirror Editor]] oder einen eigenen Editor mit [http://de.wikipedia.org/wiki/Syntaxhervorhebung Syntax Highlighting] . Das hilft bei der Fehlersuche enorm. }}&lt;br /&gt;
&lt;br /&gt;
===== Styling =====&lt;br /&gt;
Die eigene .css Datei erscheint in FHEM unter Edit-Files --&amp;gt; styles und kann direkt im FHEM-Editor oder mit eigenen Editor bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
ios7ReadingsGroups.css:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*  Readings Groups Devices */&lt;br /&gt;
table.rgDevices tr td{ text-align: center; }&lt;br /&gt;
table.rgDevices tr:first-child td:nth-child(2){ /* 1. Zeile 2. Spalte */ text-align: center; }&lt;br /&gt;
table.rgDevices tr td:first-child{  /* 1. Spalte */ width: 45px; text-align: center; }&lt;br /&gt;
table.rgDevices tr td:nth-child(2){ /* 2. Spalte */ width: 33%;  text-align: left; }&lt;br /&gt;
table.rgDevices tr td:nth-child(3){ /* 3. Spalte */ width: 15%; }&lt;br /&gt;
table.rgDevices tr td:nth-child(4){ /* 4. Spalte */ width: 15%; }&lt;br /&gt;
table.rgDevices tr td:nth-child(5){ /* 5. Spalte */ width: 15%; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Auf Portrait / Landscape Modus des Smartphone unterscheiden ====&lt;br /&gt;
Dieses Beispiel ist an das obige Beispiel [[#Erweiterte_Device_.C3.9Cbersicht|Erweiterte Device Übersicht]] angelehnt. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |[[Datei:RgStylingSmallscreenPortrait.png|300px|mini|center|Device ReadingsGroup im Portrait Modus]]&lt;br /&gt;
|[[Datei:RgStylingSmallscreenLandscape.png|550px|mini|center|Device ReadingsGroup im Landscape Modus]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Allgemeines =====&lt;br /&gt;
Mit CSS ist man in der Lage auf die aktuelle Bildschirmlage zu reagieren. Alle Anweisungen die in diesen beiden Funktionen zwischen den beiden { } stehen, werden je nach Bildschirmlage aufgerufen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* Portrait Modus */&lt;br /&gt;
@media all and (orientation:portrait) { }&lt;br /&gt;
&lt;br /&gt;
/* Landscape Modus */&lt;br /&gt;
@media all and (orientation:landscape) { }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Styling =====&lt;br /&gt;
{{Randnotiz|RNText=Info&lt;br /&gt;
* &#039;&#039;width: xx%&#039;&#039; ändert die Breite der Spalte&lt;br /&gt;
* &#039;&#039;display: none&#039;&#039; blendet die Spalte aus}}&lt;br /&gt;
In der FHEMWEB_phone Instanz muss wie [[#Allgemeines|hier]] beschrieben eine neue eigene .css Datei eingetragen werden. In diesem Beispiel ios7smallscreenReadingsGroups.css&lt;br /&gt;
&lt;br /&gt;
ios7smallscreenReadingsGroups.css&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* landscape und portrait modus */&lt;br /&gt;
table.rgDevices tr td { /* Zuerst alles centern */ text-align: center; }&lt;br /&gt;
table.rgDevices tr:first-child td:nth-child(1){ /* 1. Zeile 1. Spalte */ text-align: center; }&lt;br /&gt;
table.rgDevices tr td:first-child { /* 1. Spalte */ width: 5%; }&lt;br /&gt;
table.rgDevices tr:first-child td:nth-child(2) { /* 1. Zeile 2. Spalte */ text-align: center; }&lt;br /&gt;
table.block table tr td table.rgDevices tr td { border-bottom: 1px solid #cbcbcb; }&lt;br /&gt;
&lt;br /&gt;
/* Portrait Modus */&lt;br /&gt;
@media all and (orientation:portrait) {&lt;br /&gt;
  table.rgDevices tr td:nth-child(2){ /* 2. Spalte */ width: 50%; text-align: left; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(3){ /* 3. Spalte */ width: auto; text-align: right; display: table-cell; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(4){ /* 4. Spalte */ width: 0; display: none; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(5){ /* 5. Spalte */ width: 0; display: none; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(6){ width: 0; display: none; }	&lt;br /&gt;
  table.rgDevices tr td div a svg{ margin-left: 90px; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Landscape Modus */&lt;br /&gt;
@media all and (orientation:landscape) { &lt;br /&gt;
  table.rgDevices tr td:nth-child(2){ /* 2. Spalte */ width: 35%; text-align: left; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(3){ /* 3. Spalte */ width: 15%; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(4){ /* 4. Spalte */ width: 15%; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(5){ /* 5. Spalte */ width: 15%; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(5){ /* 5. Spalte */ width: 15%; }	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Plots im Portrait Modus des Smartphones ausblenden ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |[[Datei:RgStylingSmallscreenPortraitPlot.png|350px|mini|center|Device ReadingsGroup im Portrait Modus]]&lt;br /&gt;
|[[Datei:RgStylingSmallscreenLandscapePlot.PNG|550px|mini|center|Plot nur im Landscape]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Um die Plot und alle Steuerelemente im Portrait Modus auszublenden fügt man in seine eigene smallscreen.css wie [[#Allgemeines|hier beschrieben]] folgendes ein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@media all and (orientation:portrait) {&lt;br /&gt;
  .SVGplot, .SVGlabel, .Zoom-in, .Zoom-out, .Prev { width: 0; display: none; }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=ReadingsGroup&amp;diff=17253</id>
		<title>ReadingsGroup</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=ReadingsGroup&amp;diff=17253"/>
		<updated>2016-11-13T20:33:26Z</updated>

		<summary type="html">&lt;p&gt;LHBL2003: /* Heizungswerte, Status, Steuerung und Wochenprofil */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:readingsGroup}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Einfache zusammenfassende Darstellung von Informationen über mehrere Geräte und deren Steuerung&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=readingsGroup&lt;br /&gt;
|ModForumArea=Frontends&lt;br /&gt;
|ModTechName=33_readingsGroup.pm&lt;br /&gt;
|ModOwner=Andre ({{Link2FU|430|Forum}} / [[Benutzer Diskussion:justme|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das Fhem-[[:Kategorie:Hilfsmodul|Hilfsmodul]] [[readingsGroup]] bietet eine einfache Möglichkeit, &#039;&#039;Readings&#039;&#039; (kein Präfix vor dem Reading-Namen), &#039;&#039;Internals&#039;&#039; (Präfix &amp;quot;+&amp;quot; vor dem Namen des internen Wertes) und &#039;&#039;Attributes&#039;&#039; (Präfix &amp;quot;?&amp;quot; vor dem Namen des Attributs) von einem oder mehreren &#039;&#039;Devices&#039;&#039; darzustellen und flexibel zu formatieren.&lt;br /&gt;
&lt;br /&gt;
Die Aktualisierung im Browserfenster geschieht per longpoll und überträgt nur die jeweils geänderten Zellen. Wenn eine readingsGroup in keinem Browserfenster angezeigt wird findet keine longpoll aktualisierung statt.&lt;br /&gt;
&lt;br /&gt;
== Definition == &lt;br /&gt;
Siehe [http://fhem.de/commandref.html#readingsGroup commandref].&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
{{Randnotiz|RNText=In allen Mappings die einen Hash verwenden muss der Key (das was jeweils links von =&amp;gt; Operator steht) in Anführungszeichen stehen. Die einzige Ausnahme hiervon sind Keys die aus einem String bestehen der mit einem Buchstaben beginnt und nur Buchstaben und Zahlen enthält.}}&lt;br /&gt;
Weitergehende Erläuterungen zu einzelnen Attributen.&lt;br /&gt;
&lt;br /&gt;
Die komplette Liste der Attribute ist der commandref zu entnehmen.&lt;br /&gt;
&lt;br /&gt;
=== noheading ===&lt;br /&gt;
[[Datei:ReadingsGroup_noheading.png|mini|rechts|400px|ReadingsGroup: rechts mit &amp;quot;noheading&amp;quot; Attribut, links der anklickbare Titel]]&lt;br /&gt;
Das Attribut &amp;lt;code&amp;gt;noheading&amp;lt;/code&amp;gt; führt dazu, dass der Alias der ReadingsGroup nicht mehr als Titel angezeigt wird. Das kann wünschenswert sein, wenn die ReadingsGroup auf einer [[Dashboard]]-Seite angezeigt werden soll, hat allerdings den Nachteil, dass die Detail-Ansicht der ReadingsGroup nicht mehr über einen Klick auf den Titel aufgerufen werden kann. Der Einstellungsdialog der ReadingsGroup ist dann nur noch (z.&amp;amp;nbsp;B.) über&lt;br /&gt;
* &amp;lt;code&amp;gt;list TYPE=readingsGroup&amp;lt;/code&amp;gt;&lt;br /&gt;
* einen &amp;quot;Probably associated with&amp;quot;-Link eines anderen Objekts oder über&lt;br /&gt;
* manuelle Modifikation der URL eines anderen Objekts (&amp;lt;code&amp;gt;http:.../fhem?detail=&amp;lt;objektname&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
erreichbar.&lt;br /&gt;
&lt;br /&gt;
=== nolinks ===&lt;br /&gt;
Devicenamen und Titel der readingsGroup verlinken nicht mehr zur zugehörigen Detailansicht und sind nicht mehr anklickbar.&lt;br /&gt;
&lt;br /&gt;
=== nostate ===&lt;br /&gt;
Das state-Reading wird bei regex match nicht berücksichtigt und nicht angezeigt.&lt;br /&gt;
&lt;br /&gt;
=== notime ===&lt;br /&gt;
Es werden keine Timestamps für die Readings angezeigt. Nur für einspaltige readingsGroups sinnvoll.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
Bitte beachten: die folgenden Beispiele enthalten keine Maskierungen oder Verdoppelungen für ; und Zeilenende, sondern sind so angegeben, wie sie im [[PGM2|Web Interface]] im Befehls-Eingabefeld, nach Klick auf DEF und im Attribut-Eingabefeld eingegeben werden. Beim manuellen Einfügen in eine [[Konfiguration|Konfigurationsdatei]] sind diese Maskierungen oder Verdoppelungen natürlich vorzunehmen.&lt;br /&gt;
&lt;br /&gt;
=== Einfache Auswahl über Reading-Namen ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define battStatus readingsGroup .*:[Bb]attery&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alle readings mit Namen &#039;&#039;&#039;Battery&#039;&#039;&#039; oder &#039;&#039;&#039;battery&#039;&#039;&#039; von allen Devices. &lt;br /&gt;
| rowspan=3 | [[Datei:rgBattery.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr battStatus alias FHT Batteriestatus &amp;lt;/code&amp;gt;&lt;br /&gt;
| Der Alias wird als Zeilentitel verwendet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr battStatus mapping %ROOM &amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;Mapping %ROOM&#039;&#039; führt dazu, dass der Raumname als Zeilentitel angezeigt wird.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Übersicht HomeMatic Geräte ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define HM_Components readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Name&amp;gt;,&amp;lt;Model&amp;gt;,&amp;lt;S/N&amp;gt; TYPE=CUL_HM:+NAME,?model,D-serialNr&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Auswahl über Reading-Namen, Status als Symbol dargestellt ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define rg_battery readingsGroup .*:battery&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alle readings mit Namen &#039;&#039;&#039;battery&#039;&#039;&#039; von allen Devices. &lt;br /&gt;
| rowspan=4 | [[Datei:rgBattery2.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_battery alias Batteriestatus &amp;lt;/code&amp;gt;&lt;br /&gt;
| Der Alias wird als Überschrift verwendet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_battery valueIcon {&#039;battery.ok&#039; =&amp;gt; &#039;batterie&#039;, &#039;battery.low&#039; =&amp;gt; &#039;batterie@red&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Statt der reading Werte &amp;quot;ok&amp;quot; und &amp;quot;low&amp;quot; soll ein Icon angezeigt werden.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;attr rg_battery commands { &amp;quot;battery.low&amp;quot; =&amp;gt; &amp;quot;set %DEVICE replaceBatteryForSec 60&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für LaCrosse devices kann man beim Klick auf ein rotes &amp;quot;battery low icon&amp;quot; direkt replaceBatteryForSec setzen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reading-Werte zuordnen (Icon / Text) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define rg readingsGroup Contact.Dachboden_gross:sensed.*&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alle sensedreadings des Contact.Dachboden_gross device. &lt;br /&gt;
| rowspan=4 | [[Datei:rgFenster.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg mapping { &#039;sensed.A&#039; =&amp;gt; &#039;links&#039;, &#039;sensed.B&#039; =&amp;gt; &#039;rechts&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Zuordnung rechts/links&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg valueFormat {($VALUE eq &#039;1&#039;)?&amp;quot;fts_window_roof&amp;quot;:&amp;quot;fts_window_roof_open_2&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Zuordnung von reading Wert zu Icon Namen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_battery valueIcon %VALUE &amp;lt;/code&amp;gt;&lt;br /&gt;
| Statt des reading Werts soll ein Icon angezeigt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Formatvorgabe für Ausgabewerte ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define TempHygro readingsGroup TYPE=CUL_WS:temperature,humidity,dewpoint&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alle readings mit Namen &#039;&#039;&#039;temperature&#039;&#039;&#039;, &#039;&#039;&#039;humidity&#039;&#039;&#039;, &#039;&#039;&#039;dewpoint&#039;&#039;&#039; von allen Devices des Typs &#039;&#039;&#039;CUL_WS&#039;&#039;&#039;&lt;br /&gt;
| rowspan=4 | [[Datei:rgTemperatur.png|thumb|[[S300TH]]-Werte in einer readingsGroup]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr TempHygro alias Temperatur / rel. Feuchte / Taupunkt&amp;lt;/code&amp;gt;&lt;br /&gt;
| Der Alias der readingsGroup wird als Überschrift verwendet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr TempHygro mapping %ALIAS&amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;Mapping %ALIAS&#039;&#039; führt dazu, dass der Alias des Geräts als Zeilentitel angezeigt wird.&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;attr TempHygro valueFormat { temperature =&amp;gt; &amp;quot;%.1f&amp;amp;amp;deg;C&amp;quot;, humidity =&amp;gt; &amp;quot;%.1f %%&amp;quot;, dewpoint =&amp;gt; &amp;quot;%.1f&amp;amp;amp;deg;C&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Formatierung der Ausgabewerte. &#039;&#039;&#039;Achtung:&#039;&#039;&#039; &amp;quot;%&amp;quot; die in der Ausgabe erscheinen sollen, müssen verdoppelt werden!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Ausgabestil (hier rechtsbündig) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Wetter readingsGroup WetterXXX:&amp;lt;%temp_temperature&amp;gt;,&amp;lt;Temperatur&amp;gt;,temperature WetterXXX:&amp;lt;%weather_humidity&amp;gt;,&amp;lt;Luftfeuchte&amp;gt;,humidity WetterXXX:&amp;lt;%weather_barometric_pressure&amp;gt;,&amp;lt;Luftdruck&amp;gt;,pressure&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die readings mit Namen &#039;&#039;&#039;temperature&#039;&#039;&#039;, &#039;&#039;&#039;humidity&#039;&#039;&#039; und &#039;&#039;&#039;pressure&#039;&#039;&#039; vom Device WetterXXX jeweils mit einem Icon und einem Label davor.&lt;br /&gt;
| rowspan=3 | [[Datei:rgWetter.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Wetter valueFormat { temperature =&amp;gt; &#039;%1.f &amp;amp;amp;deg;C&#039;, humidity =&amp;gt; &#039;%1.f %%&#039;, pressure =&amp;gt; &#039;%i mbar&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Formatierung der Readingswerte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Wetter valueStyle style=&amp;quot;text-align:right&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Readings sollen rechtsbündig dargestellt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Internal Value ausgeben ===&lt;br /&gt;
Diese Beispiel könnte entfallen (nächstes Beispiel ist sehr ähnlich; es wird lediglich ein weiterer Wert ausgegeben).&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define culRSSI readingsGroup cul_RSSI=.*:+cul_RSSI&amp;lt;/code&amp;gt;&lt;br /&gt;
| Den RSSI Wert aller Devices (am IODev &#039;&#039;cul&#039;&#039;) die einen solchen haben anzeigen.&amp;lt;br&amp;gt; &#039;&#039;&#039;Achtung&#039;&#039;&#039;: &amp;quot;internal values&amp;quot; werden nicht per longpoll aktualisiert, sondern nur beim Seitenaufbau.&lt;br /&gt;
| rowspan=1 | [[Datei:rgculRSSI.png|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Internal Values ausgeben ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define culRSSI readingsGroup cul_RSSI=.*:+cul_RSSI,+cul_TIME&amp;lt;/code&amp;gt;&lt;br /&gt;
| Den RSSI Wert mit der zugehörigen Zeit aller Devices (am IODev &#039;&#039;cul&#039;&#039;) die einen solchen haben anzeigen.&amp;lt;br&amp;gt; &#039;&#039;&#039;Achtung&#039;&#039;&#039;: &amp;quot;internal values&amp;quot; werden nicht per longpoll aktualisiert, sondern nur beim Seitenaufbau.&amp;lt;br&amp;gt;&amp;quot;Internal Values&amp;quot; werden durch das vorangestellte &#039;&#039;&#039;+&#039;&#039;&#039; (Pluszeichen) identifiziert.&lt;br /&gt;
| rowspan=2 | [[Datei:rgculRSSI2.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
|attr culRSSI valueStyle {return undef if($READING =~ m/TIME/); ($VALUE &amp;lt;= -85)?&#039;style=&amp;quot;color:red&amp;quot;&#039;:($VALUE &amp;lt;= -80)?&#039;style=&amp;quot;color:yellow&amp;quot;&#039;:undef}&lt;br /&gt;
|Schlechte RSSI Werte sollen abhängig von zwei Schwellwerten gelb oder rot eingefärbt werden (auf dem Screenshot nicht zu sehen).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Alle Readings eines Gerätes, mit Ausnahme von... ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Systemstatus readingsGroup sysstat&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alle readings des sysstat Device&lt;br /&gt;
| rowspan=4 | [[Datei:rgSysstat.png|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Systemstatus nostate 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ohne state&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Systemstatus notime 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ohne readings timestamp&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Systemstatus mapping {&#039;load&#039; =&amp;gt; &#039;Systemauslastung&#039;, &#039;temperature&#039; =&amp;gt; &#039;Systemtemperatur in &amp;amp;amp;deg;C&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Zuordnung der reading Namen zu den Zeilentiteln&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Anzeige auf einem Floorplan ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Heizung readingsGroup t(1|2|3):temperature&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Temperatur readings der Devices t1, t2 und t3&lt;br /&gt;
| rowspan=6 | [[Datei:rgHeizung.png|thumb|220px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizung mapping {&#039;t1.temperature&#039; =&amp;gt; &#039;Vorlauf&#039;, &#039;t2.temperature&#039; =&amp;gt; &#039;R&amp;amp;amp;&amp;amp;uuml;cklauf&#039;, &#039;t3.temperature&#039; =&amp;gt; &#039;Zirkulation&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Zuordnung der reading Namen zu den Zeilentiteln&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizung nameStyle style=&amp;quot;text-align:left&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Zeilentitel linksbündig wegen floorplan&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizung style style=&amp;quot;font-size:20px;color:lightgray&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Großer Font und Farbe passend für den floorplan&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizung notime 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ohne readings timestamp&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizung valueFormat : %.1f &amp;amp;amp;deg;C&amp;lt;/code&amp;gt;&lt;br /&gt;
| Doppelpunkt zwischen Zeilentitel und Wert, eine Nachkommastelle plus Einheit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== LightScene DropDown-Menü für smallscreen Styles oder Floorplan ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen !! Aussehen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define lcDropDown readingsGroup meineLightScene:!state&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für die LightScene &#039;&#039;meineLightScene&#039;&#039; soll ein DropDown-Menü zur Auswahl der Szene erstellt werden.&lt;br /&gt;
| rowspan=6 |&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr lcDropDown commands { state =&amp;gt; &#039;scene:&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Anzeige des state Readings wird auf das DropDown-Menü für das scene Kommando gemapped.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr lcDropDown nonames 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Keine Readingnamen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr lcDropDown notime 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Kein Timestamp&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Schriftgrößen, Farben, Icons ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:rgVerbrauchPCA301.png|links|mini|400px|Schriftgröße, Farbe, Icons...]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Verbrauch readingsGroup TYPE=PCA301:state,power,consumption&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die readings state, power und consumption aller [[PCA301 Funkschaltsteckdose mit Energieverbrauchsmessung|PCA301]] Devices mit einer Zeile pro Device. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Verbrauch mapping %ROOM %ALIAS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Der Raumname und der Alias werden als Zeilentitel verwendet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Verbrauch nameStyle style=&amp;quot;font-weight:bold&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Der Zeilentitel soll fett sein&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Verbrauch style style=&amp;quot;font-size:20px&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alles in einem größeren Font&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Verbrauch valueFormat {power =&amp;gt; &amp;quot;%.1f W&amp;quot;, consumption =&amp;gt; &amp;quot;%.2f kWh&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Formatierung für die power und consumption readings: eine Nachkommastelle plus Einheit.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;attr Verbrauch valueIcon { state =&amp;gt; &#039;%devStateIcon&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für die Dosen, die schaltbar sind, soll das anklickbare device icon gezeigt werden.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;attr Verbrauch valueStyle {($READING eq &amp;quot;power&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 40)?&#039;style=&amp;quot;color:red&amp;quot;&#039;:&#039;style=&amp;quot;color:green&amp;quot;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
|Wenn das power reading &amp;gt;40 ist, soll es in rot angezeigt werden, alle anderen Werte und readings in grün&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Wertabhängige Farbgebung ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:TemperaturenRG.png|600px|mini|links|Wertabhängige Farben]]&lt;br /&gt;
[[Datei:TemperaturenRG2.png|600px|mini|links|Andere Werte - andere Farben]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define wzTemperaturenRG readingsGroup Aussen:,&amp;lt;Temperatur&amp;gt;,temperature,&amp;lt;Luftfeuchte&amp;gt;,humidity Wohnzimmer:,&amp;lt;Temperatur&amp;gt;,temperature,&amp;lt;Luftfeuchte&amp;gt;,humidity Kasten_E_Geraete:,&amp;lt;Temperatur&amp;gt;,temperature,&amp;lt;Luftfeuchte&amp;gt;,humidity&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die readings temperatur und humidity der Devices Aussen, Wohnzimmer und Kasten_E_Geraete in einer Zeile pro Device. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzTemperaturenRG group 3. Temperaturen&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die readingsGroup kommt in eine Gruppe&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzTemperaturenRG noheading 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| noheading&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzTemperaturenRG nostate 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| nostate&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzTemperaturenRG notime 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| notime&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzTemperaturenRG valueFormat {temperature =&amp;gt; &amp;quot;%.1f °C&amp;quot;, humidity =&amp;gt;&amp;quot;%.1f %%&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Formatierung für die temperatur und humidity readings: eine Nachkommastelle plus Einheit.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;attr wzTemperaturenRG valueStyle { if($DEVICE eq &amp;quot;Aussen&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 30) { &#039;style=&amp;quot;color:red&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Aussen&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 20) { &#039;style=&amp;quot;color:orange&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Aussen&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;lt; 5) { &#039;style=&amp;quot;color:blue&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Wohnzimmer&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 23) { &#039;style=&amp;quot;color:red&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Wohnzimmer&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 21) { &#039;style=&amp;quot;color:orange&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Wohnzimmer&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;lt; 20) { &#039;style=&amp;quot;color:blue&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Kasten_E_Geraete&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 30) { &#039;style=&amp;quot;color:red&amp;quot;&#039;}elsif($DEVICE eq &amp;quot;Kasten_E_Geraete&amp;quot; &amp;amp;&amp;amp; $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 28) { &#039;style=&amp;quot;color:orange&amp;quot;&#039;}elsif($READING eq &amp;quot;humidity&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 65) { &#039;style=&amp;quot;color:red&amp;quot;&#039;}elsif($READING eq &amp;quot;humidity&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 60) { &#039;style=&amp;quot;color:orange&amp;quot;&#039;}else{&#039;style=&amp;quot;color:green&amp;quot;&#039;} }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse Farbkombinationen sind möglich&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Enigma Receiver ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:ReceiverRG.jpg|600px|mini|links|Wertabhängige Farben]]&lt;br /&gt;
[[Datei:ReceiverRGmute.jpg|600px|mini|links|Wertabhängige Farben]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define wzReceiverRG readingsGroup wzReceiver:,&amp;lt;Aktuell&amp;gt;,eventtitle,&amp;lt;Rest&amp;gt;,eventremaining_hr,&amp;lt;Dauer&amp;gt;,eventduration_hr wzReceiver:&amp;lt;Beschreibung&amp;gt;,eventdescription wzReceiver:,&amp;lt;Nächste&amp;gt;,eventtitle_next,&amp;lt;Start&amp;gt;,eventstart_next_hr,&amp;lt;Dauer&amp;gt;,eventduration_next_hr wzReceiver:,&amp;lt;HDD Kapazität&amp;gt;,hdd1_capacity,&amp;lt;Frei&amp;gt;,wzReceiver:hdd1_free wzReceiver:,&amp;lt;Lautstärke&amp;gt;,volume,&amp;lt;HDD&amp;gt;,hdd1_capacity,&amp;lt;Frei&amp;gt;,hdd1_free&amp;lt;/code&amp;gt;&lt;br /&gt;
| Mehrere readings des Device wzReceiver in mehreren Zeilen. Wenn der Receiver auf mute ist, wird anstatt der Lautstärke, mute angezeigt. Farbige Anzeige des freien Speicherplatzes&lt;br /&gt;
&#039;&#039;&#039;Benötigt:&#039;&#039;&#039; ENIGMA2 Receiver, 70_ENIGMA2.pm - Siehe: [[Enigma2 Receiver (Dreambox, VUplus etc.) steuern]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG group Fernseher Receiver&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die readingsGroup kommt in eine Gruppe&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG mapping &amp;amp;amp;nbsp;&amp;lt;/code&amp;gt;&lt;br /&gt;
| mapping wird auf &amp;amp;amp;nbsp; (Leerzeichen) gesetzt, damit der Device Name nicht angezeigt wird&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG noheading 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| noheading&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG nostate 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| nostate&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG notime 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| notime&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG valueColumns { eventdescription =&amp;gt; &#039;colspan=&amp;quot;4&amp;quot;&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Beschreibung soll über 4 Spalten gehen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr wzReceiverRG valueFormat { wzReceiverRGvalueFormat($DEVICE,$READING,$VALUE);; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Formatierung wird in die 99_myUtils.pm ausgelagert. Siehe: [[99 myUtils anlegen]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;attr wzReceiverRG valueStyle { if($READING eq &amp;quot;hdd1_free&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;lt; 200){ &#039;style=&amp;quot;color:red&amp;quot;&#039; }elsif( $READING eq &amp;quot;hdd1_free&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;lt; 500 ){ &#039;style=&amp;quot;color:orange&amp;quot;&#039; }elsif( $READING eq &amp;quot;volume&amp;quot; &amp;amp;&amp;amp; ReadingsVal($DEVICE, &amp;quot;mute&amp;quot;, &amp;quot;&amp;quot;) eq &amp;quot;on&amp;quot; ){ &#039;style=&amp;quot;color:red&amp;quot;&#039; }else{ &#039;style=&amp;quot;color:green&amp;quot;&#039; } }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse Farbkombinationen sind möglich. Wenn der Receiver auf mute ist, wird anstatt der Lautstärke &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;mute&amp;lt;/span&amp;gt; angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub&lt;br /&gt;
wzReceiverRGvalueFormat($$$)&lt;br /&gt;
{&lt;br /&gt;
  my ($DEVICE,$READING,$VALUE) = @_;&lt;br /&gt;
 &lt;br /&gt;
  if($READING eq &#039;hdd1_capacity&#039;) { &lt;br /&gt;
    return &amp;quot;%.2f MB&amp;quot;;&lt;br /&gt;
  } elsif( $READING eq &#039;hdd1_free&#039;) {&lt;br /&gt;
    return &amp;quot;%.2f MB&amp;quot;;&lt;br /&gt;
  } elsif( $READING eq &#039;volume&#039; ) {&lt;br /&gt;
    if( ReadingsVal($DEVICE, &amp;quot;mute&amp;quot;, &amp;quot;&amp;quot;) eq &amp;quot;on&amp;quot;) {&lt;br /&gt;
      return &amp;quot;mute&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
      return &amp;quot;%i %%&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
| Dieser Teil kommt in die [[99_myUtils_anlegen|99_myUtils.pm]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Heizungswerte inklusive Batterie- und Fensterstatus ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:rgHeizung3.png|thumb|links|500px|Heizungswerte inklusive Batterie- und Fensterstatus]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Heizungswerte readingsGroup &amp;lt;%sani_heating&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;Act&amp;gt;,&amp;lt;Soll&amp;gt;,&amp;lt;Ist&amp;gt; TYPE=FHT:actuator,desired-temp,measured-temp,&amp;lt;%18&amp;gt;,&amp;lt;%20&amp;gt;,&amp;lt;%22&amp;gt;,window,battery&amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse readings aller Devices des Typs &amp;lt;b&amp;gt;FHT&amp;lt;/b&amp;gt;. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte commands { &#039;Heizungswerte.18&#039; =&amp;gt; &#039;set $DEVICE desired-temp 18&#039;, &#039;Heizungswerte.20&#039; =&amp;gt; &#039;set $DEVICE desired-temp 20&#039;, &#039;Heizungswerte.22&#039; =&amp;gt; &#039;set $DEVICE desired-temp 22&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Links/Kommandos die hinter den 18, 20 und 22 liegen sollen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte nameStyle style=&amp;quot;color:yellow;font-weight:bold&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Überschriften sollen gelb sein.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte valueIcon {&#039;battery.ok&#039; =&amp;gt; &#039;batterie@lightgreen&#039;, &#039;battery.low&#039; =&amp;gt; &#039;batterie@red&#039;, &#039;window.closed&#039; =&amp;gt; &#039;fts_window_1w@lightgreen&#039;, &#039;window.open&#039; =&amp;gt; &#039;fts_window_1w_open@red&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für den Batteriestand und den Zustand der Fenster sollen jeweils Icons angezeigt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Heizungswerte inklusive Ventilposition ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:Rg_Heizung_Valveposition.png|thumb|links|500px|Heizungswerte inklusive Statusinformationen (MAX!)]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Heizungswerte readingsGroup &amp;lt;%sani_heating&amp;gt;,&amp;lt;Ventil&amp;gt;,&amp;lt;Soll&amp;gt;,&amp;lt;Ist&amp;gt;,&amp;lt;MaxV&amp;gt;,&amp;lt;GID&amp;gt;,&amp;lt;Mode&amp;gt;,&amp;lt;Batterie&amp;gt; TYPE=CUL_HM:ValvePosition,desired-temp,measured-temp,R-valveMaxPos,groupid,mode,battery&amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse readings aller Devices des Typs &amp;lt;b&amp;gt;MAX&amp;lt;/b&amp;gt;. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte mapping %ROOM&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Raumnamen werden angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte nameStyle style=&amp;quot;color:yellow;font-weight:bold&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Überschriften sollen gelb (fett) sein.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte room Heizung&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die &amp;quot;readingsgroup&amp;quot; wird dem Raum &amp;quot;Heizung&amp;quot; zugeordnet.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte valueFormat {&#039;temperature&#039; =&amp;gt; &amp;quot;%.0f °C&amp;quot;, &#039;desiredTemperature&#039; =&amp;gt; &amp;quot;%.0f °C&amp;quot;, &#039;valveposition&#039; =&amp;gt;&amp;quot;%.0f %%&amp;quot;, &#039;maxValveSetting&#039; =&amp;gt;&amp;quot;%.0f %%&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Es wird noch die Einheit °C hinter den Temperaturwerten angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte valueIcon {&#039;battery.ok&#039; =&amp;gt; &#039;batterie@lightgreen&#039;, &#039;battery.low&#039; =&amp;gt; &#039;batterie@red&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für den Batteriezustand werden Icons anstatt Klartextwerte genommen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte valueStyle { if($READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 20){ &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; }elsif( $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;lt;= 20 ){ &#039;style=&amp;quot;color:blue&amp;quot;&#039; }elsif( $READING eq &amp;quot;temperature&amp;quot; &amp;amp;&amp;amp; $VALUE &amp;gt; 23 ){ &#039;style=&amp;quot;color:red&amp;quot;&#039; }else{ &#039;style=&amp;quot;color:gray&amp;quot;&#039; } }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Temperaturwerte werden abhängig vom Wert farbig dargestellt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte valueIcon {&#039;battery.ok&#039; =&amp;gt; &#039;batterie@lightgreen&#039;, &#039;battery.low&#039; =&amp;gt; &#039;batterie@red&#039;, &#039;window.closed&#039; =&amp;gt; &#039;fts_window_1w@lightgreen&#039;, &#039;window.open&#039; =&amp;gt; &#039;fts_window_1w_open@red&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für den Batteriestand und den Zustand der Fenster sollen jeweils Icons angezeigt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Heizungswerte, Status und Regelmöglichkeit ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:rgHeizung2.png|thumb|500px|links|Anzeige + Regelmöglichkeit]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define Heizungswerte2 readingsGroup &amp;lt;%sani_heating&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;Act&amp;gt;,&amp;lt;Soll&amp;gt;,&amp;lt;Ist&amp;gt; TYPE=FHT:actuator,desired-temp,measured-temp,&amp;lt;{myUtils_HeizungUpDown($DEVICE,&amp;quot;up&amp;quot;)}@desired-temp&amp;gt;,desired-new,&amp;lt;{myUtils_HeizungUpDown($DEVICE,&amp;quot;down&amp;quot;)}@desired-temp&amp;gt;,window,battery&amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse readings aller Devices des Typs &amp;lt;b&amp;gt;FHT&amp;lt;/b&amp;gt;. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte2 nameStyle style=&amp;quot;color:yellow;font-weight:bold&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Überschriften sollen gelb sein.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte2 valueIcon {&#039;battery.ok&#039; =&amp;gt; &#039;batterie@lightgreen&#039;, &#039;battery.low&#039; =&amp;gt; &#039;batterie@red&#039;, &#039;window.closed&#039; =&amp;gt; &#039;fts_window_1w@lightgreen&#039;, &#039;window.open&#039; =&amp;gt; &#039;fts_window_1w_open@red&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für den Batteriestand und den Zustand der Fenster sollen jeweils Icons angezeigt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Heizungswerte2 valueStyle {($VALUE eq &amp;quot;00&amp;quot;)?&#039;style=&amp;quot;visibility:hidden&amp;quot;&#039;:&#039;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Nach dem Einstellen den Wert wieder ausblenden. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#Heizung regeln in readingsGroup&lt;br /&gt;
sub&lt;br /&gt;
myUtils_HeizungUpDown($$)&lt;br /&gt;
{&lt;br /&gt;
  my($DEVICE,$CMD) = @_;&lt;br /&gt;
  &lt;br /&gt;
  my $icon = $CMD;&lt;br /&gt;
  my $VALUE = ReadingsVal($DEVICE,&amp;quot;desired-new&amp;quot;,&amp;quot;20&amp;quot; );&lt;br /&gt;
  $VALUE = ReadingsVal($DEVICE,&amp;quot;desired-temp&amp;quot;,&amp;quot;20&amp;quot; )&lt;br /&gt;
     if( !$VALUE || $VALUE == 0 );&lt;br /&gt;
  my $link;&lt;br /&gt;
  &lt;br /&gt;
  if( $CMD eq &amp;quot;up&amp;quot; ) {&lt;br /&gt;
    $icon = &amp;quot;control_arrow_upward&amp;quot;;&lt;br /&gt;
    $VALUE += 1;&lt;br /&gt;
  &lt;br /&gt;
    if( $VALUE &amp;lt;= 24 ) {&lt;br /&gt;
      $icon .= &amp;quot;\@red&amp;quot;;&lt;br /&gt;
      $link = &amp;quot;setreading $DEVICE desired-new $VALUE&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
  } elsif( $CMD eq &amp;quot;down&amp;quot; ) {&lt;br /&gt;
    $icon = &amp;quot;control_arrow_downward&amp;quot;;&lt;br /&gt;
    $VALUE -= 1;&lt;br /&gt;
  &lt;br /&gt;
    if( $VALUE &amp;gt;= 18 ) {&lt;br /&gt;
      $icon .= &amp;quot;\@blue&amp;quot;;&lt;br /&gt;
      $link = &amp;quot;setreading $DEVICE desired-new $VALUE&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  my $notify = &amp;quot;notifyHeizungUpDown&amp;quot;;&lt;br /&gt;
  if( !defined($defs{$notify}) ) {&lt;br /&gt;
    CommandDefine(undef,&lt;br /&gt;
                   &amp;quot;$notify notify .*:desired-new.* &amp;quot;&lt;br /&gt;
                   .&amp;quot;{ myUtils_HeizungUpDownNotify(\$NAME,\$EVTPART1); }&amp;quot; );&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  my $ret = &amp;quot;%$icon&amp;quot;;&lt;br /&gt;
  $ret .= &amp;quot;%$link&amp;quot; if( $link );&lt;br /&gt;
  &lt;br /&gt;
  return $ret;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub&lt;br /&gt;
myUtils_HeizungUpDownNotify($$)&lt;br /&gt;
{&lt;br /&gt;
  my($DEVICE,$VALUE) = @_;&lt;br /&gt;
  &lt;br /&gt;
  return if( $VALUE == 0 );&lt;br /&gt;
  &lt;br /&gt;
  my $at = &amp;quot;triggerHeizungUpDown_$DEVICE&amp;quot;;&lt;br /&gt;
  CommandDelete(undef, $at) if( defined($defs{$at}) );&lt;br /&gt;
  CommandDefine(undef,&lt;br /&gt;
                &amp;quot;$at at +00:00:03 &amp;quot;&lt;br /&gt;
                .&amp;quot;{my \$v = ReadingsVal(\&amp;quot;$DEVICE\&amp;quot;,\&amp;quot;desired-new\&amp;quot;,undef);&amp;quot;&lt;br /&gt;
                .&amp;quot;fhem(\&amp;quot;set $DEVICE desired-temp \$v\&amp;quot;) if( \$v );&amp;quot;&lt;br /&gt;
                .&amp;quot;fhem(\&amp;quot;setreading $DEVICE desired-new 00\&amp;quot;);}&amp;quot; );&lt;br /&gt;
  &lt;br /&gt;
  return undef;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
| Dieser Teil kommt in die [[99_myUtils_anlegen|99_myUtils.pm]]: Hiermit werden die Icons zum Ändern der gewünschten Temperatur dargestellt und im Bereich &amp;gt;=18 und &amp;lt;= 24 Grad anklickbar gemacht. Zwischen den Pfeilen wird der gerade eingestellte Wert angezeigt. Wenn dieser drei Sekunden nicht mehr geändert wurde wird die desired-temp auf diesen Wert gesetzt und die Anzeige zwischen den Pfeilen ausgeblendet.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Heizungswerte, Status, Steuerung und Wochenprofil ===&lt;br /&gt;
Dieses Beispiel funktioniert nur mit HomeMatic HM-CC-RT-DN, für andere Thermostate müssen an diversen Stellen Änderungen vorgenommen werden.&lt;br /&gt;
{{Todo|Überarbeiten: umstellen auf readingList oder setreading, label als readings in die readingsGroup selber stecken statt in einen extra dummy. oder !&amp;lt;reading&amp;gt; und mapping verwenden.}}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:RgThermostate.png|thumb|750px|links|Status, Steuerung und Wochenprofil]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;pre&amp;gt;set d_label Heizung Heizung &lt;br /&gt;
setreading d_label Temperatur Temperatur &lt;br /&gt;
setreading d_label  Status Status &lt;br /&gt;
setreading d_label Wochenplan Wochenplan &lt;br /&gt;
setreading d_label Werktag Werktag &lt;br /&gt;
setreading d_label Samstag Samstag &lt;br /&gt;
setreading d_label Sonntag Sonntag &lt;br /&gt;
setreading d_label Zeitraum1 Zeitraum 1 &lt;br /&gt;
setreading d_label Zeitraum2 Zeitraum 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
|Erzeugen der Readings im Device [[dummy#d_label|d_label]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt; &lt;br /&gt;
define rg_thermostate readingsGroup &amp;lt;&amp;gt;,Heizung@d_label,&amp;lt;|&amp;gt;,Temperatur@d_label,&amp;lt;|&amp;gt;,Status@d_label,&amp;lt;|&amp;gt;,Wochenplan@d_label,&amp;lt;|&amp;gt;,Werktag@d_label,&amp;lt;|&amp;gt;,Samstag@d_label,&amp;lt;|&amp;gt;,Sonntag@d_label,&amp;lt;|&amp;gt;,&amp;lt;&amp;gt; CUL_HM_HM_CC_RT_DN_......_Clima:&amp;lt;&amp;gt;,?alias,&amp;lt;|&amp;gt;,&amp;lt;Soll&amp;gt;,desired-temp,&amp;lt;Tag&amp;gt;,dayTemp@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},impossible@{$DEVICE},&amp;lt;|&amp;gt;,controlMode,R-globalBtnLock@{rg($DEVICE.&amp;quot;§device&amp;quot;)},&amp;lt;|&amp;gt;,Zeitraum1@d_label,&amp;lt;|&amp;gt;,workday_period_1_start@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},workday_period_1_stop@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,saturday_period_1_start@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},saturday_period_1_stop@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,sunday_period_1_start@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},sunday_period_1_stop@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,impossible@{$DEVICE},&amp;lt;%system_fhem_update&amp;gt;,&amp;lt;nowiki&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/nowiki&amp;gt;,state@{rg($DEVICE.&amp;quot;§device&amp;quot;)},&amp;lt;%getConfig&amp;gt;,&amp;lt;|&amp;gt;,&amp;lt;Ist&amp;gt;,measured-temp,&amp;lt;Nacht&amp;gt;,nightTemp@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,&amp;lt;Ventil&amp;gt;,ValvePosition,&amp;lt;|&amp;gt;,Zeitraum2@d_label,&amp;lt;|&amp;gt;,workday_period_2_start@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},workday_period_2_stop@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,saturday_period_2_start@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},saturday_period_2_stop@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,sunday_period_2_start@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},sunday_period_2_stop@{rg($DEVICE.&amp;quot;§clima&amp;quot;)},&amp;lt;|&amp;gt;,impossible@{$DEVICE},impossible@{rg($DEVICE.&amp;quot;§device&amp;quot;)},&amp;lt;%burstXmit&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse readings aller Devices &amp;lt;b&amp;gt;CUL_HM_HM_CC_RT_DN_......_Clima&amp;lt;/b&amp;gt;, entsprechender [[Makefine#d_climaControl|d_climaControl]] (müssen vorher angelegt werden) und [[dummy#d_label|d_label]]. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_thermostate commands { &#039;desired-temp&#039; =&amp;gt; &#039;desired-temp:&#039;, &#039;dayTemp&#039; =&amp;gt; &#039;dayTemp:&#039;, &#039;controlMode&#039; =&amp;gt; &#039;trigger ntfy_rg $DEVICE controlMode&#039;, &#039;R-globalBtnLock&#039; =&amp;gt; &#039;trigger ntfy_rg $DEVICE globalBtnLock&#039;, &#039;workday_period_1_start&#039; =&amp;gt; &#039;workday_period_1_start:&#039;, &#039;workday_period_1_stop&#039; =&amp;gt; &#039;workday_period_1_stop:&#039;, &#039;saturday_period_1_start&#039; =&amp;gt; &#039;saturday_period_1_start:&#039;, &#039;saturday_period_1_stop&#039; =&amp;gt; &#039;saturday_period_1_stop:&#039;, &#039;sunday_period_1_start&#039; =&amp;gt; &#039;sunday_period_1_start:&#039;, &#039;sunday_period_1_stop&#039; =&amp;gt; &#039;sunday_period_1_stop:&#039;, &#039;rg_thermostate.system_fhem_update&#039; =&amp;gt; &#039;trigger ntfy_rg $DEVICE setTimeTable&#039;, &#039;rg_thermostate.getConfig&#039; =&amp;gt; &#039;set $DEVICE getConfig&#039;, &#039;nightTemp&#039; =&amp;gt; &#039;nightTemp:&#039;, &#039;workday_period_2_start&#039; =&amp;gt; &#039;workday_period_2_start:&#039;, &#039;workday_period_2_stop&#039; =&amp;gt; &#039;workday_period_2_stop:&#039;, &#039;saturday_period_2_start&#039; =&amp;gt; &#039;saturday_period_2_start:&#039;, &#039;saturday_period_2_stop&#039; =&amp;gt; &#039;saturday_period_2_stop:&#039;, &#039;sunday_period_2_start&#039; =&amp;gt; &#039;sunday_period_2_start:&#039;, &#039;sunday_period_2_stop&#039; =&amp;gt; &#039;sunday_period_2_stop:&#039;, &#039;rg_thermostate.burstXmit&#039; =&amp;gt; &#039;set $DEVICE burstXmit&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Temperaturen werden als DropDown Auswahl dargestellt, Icons triggern [[readingsGroup#sub_rg|ntfy_rg]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_thermostate mapping { &#039;desired-temp&#039; =&amp;gt; &#039;&#039;, &#039;dayTemp&#039; =&amp;gt; &#039;&#039;, &#039;workday_period_1_start&#039; =&amp;gt; &#039;&#039;, &#039;workday_period_1_stop&#039; =&amp;gt; &#039;&#039;, &#039;saturday_period_1_start&#039; =&amp;gt; &#039;&#039;, &#039;saturday_period_1_stop&#039; =&amp;gt; &#039;&#039;, &#039;sunday_period_1_start&#039; =&amp;gt; &#039;&#039;, &#039;sunday_period_1_stop&#039; =&amp;gt; &#039;&#039;, &#039;nightTemp&#039; =&amp;gt; &#039;&#039;, &#039;workday_period_2_start&#039; =&amp;gt; &#039;&#039;, &#039;workday_period_2_stop&#039; =&amp;gt; &#039;&#039;, &#039;saturday_period_2_start&#039; =&amp;gt; &#039;&#039;, &#039;saturday_period_2_stop&#039; =&amp;gt; &#039;&#039;, &#039;sunday_period_2_start&#039; =&amp;gt; &#039;&#039;, &#039;sunday_period_2_stop&#039; =&amp;gt; &#039;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ausblenden der Texte vor den DropDowns.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt; &lt;br /&gt;
attr rg_thermostate nameStyle{($READING eq &amp;quot;Soll&amp;quot; ||$READING eq &amp;quot;Tag&amp;quot; ||$READING eq &amp;quot;%getConfig&amp;quot; ||$READING eq &amp;quot;Ist&amp;quot; ||$READING eq &amp;quot;Nacht&amp;quot; ||$READING eq &amp;quot;Ventil&amp;quot; )?&#039;style=&amp;quot;text-align:right&amp;quot;&#039; :($READING eq &amp;quot;%burstXmit&amp;quot; )?&#039;style=&amp;quot;text-align:center&amp;quot;&#039; :&#039;style=&amp;quot;&amp;quot;&#039;}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ausrichten der Überschriften die keine readings sind.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_thermostate nonames 1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ausblenden der Device Namen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_thermostate valueColumns { &#039;Heizung&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;, &#039;Temperatur&#039; =&amp;gt; &#039;colspan=&amp;quot;4&amp;quot;&#039;, &#039;Status&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;, &#039;Werktag&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;, &#039;Samstag&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;, &#039;Sonntag&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;, &#039;alias&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse Readings sollen über mehrere Spalten dargestellt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_thermostate valueFormat { &#039;measured-temp&#039; =&amp;gt; &amp;quot;%0.1f &amp;amp;deg;C&amp;quot;, &#039;ValvePosition&#039; =&amp;gt; &amp;quot;%0.1f %%&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Formatierung für measured-temp und ValvePosition.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_thermostate valueIcon { &#039;controlMode.auto&#039; =&amp;gt; &#039;sani_heating_automatic@green&#039;, &#039;controlMode.set_auto&#039; =&amp;gt; &#039;sani_heating_automatic@orange&#039;, &#039;controlMode.manual&#039; =&amp;gt; &#039;sani_heating_manual@red&#039;, &#039;controlMode.set_manual&#039; =&amp;gt; &#039;sani_heating_manual@orange&#039;, &#039;R-globalBtnLock.on&#039; =&amp;gt; &#039;secur_locked@green&#039;, &#039;R-globalBtnLock.on &#039; =&amp;gt; &#039;secur_locked@green&#039;, &#039;R-globalBtnLock.set_on &#039; =&amp;gt; &#039;secur_locked@orange&#039;, &#039;R-globalBtnLock.off&#039; =&amp;gt; &#039;secur_open@red&#039;, &#039;R-globalBtnLock.off &#039; =&amp;gt; &#039;secur_open@red&#039;, &#039;R-globalBtnLock.set_off &#039; =&amp;gt; &#039;secur_open@orange&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Zuweisung der Icons.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&lt;br /&gt;
attr rg_thermostate valueStyle{($READING eq &amp;quot;Heizung&amp;quot; ||$READING eq &amp;quot;Temperatur&amp;quot; ||$READING eq &amp;quot;Status&amp;quot; ||$READING eq &amp;quot;Wochenplan&amp;quot; ||$READING eq &amp;quot;Werktag&amp;quot; ||$READING eq &amp;quot;Samstag&amp;quot; ||$READING eq &amp;quot;Sonntag&amp;quot; )?&#039;style=&amp;quot;font-size:20px;;color:RoyalBlue;;text-align:center&amp;quot;&#039; :($READING eq &amp;quot;alias&amp;quot; )?&#039;style=&amp;quot;font-size:11px;;font-weight:bold;;text-align:left&amp;quot;&#039; :($READING eq &amp;quot;ValvePosition&amp;quot; &amp;amp;&amp;amp;$VALUE &amp;gt; 40 )?&#039;style=&amp;quot;font-weight:bold;;color:Orange;;text-align:left&amp;quot;&#039; :($READING eq &amp;quot;desired-temp&amp;quot; ||$READING eq &amp;quot;measured-temp&amp;quot; )?&#039;style=&amp;quot;text-align:center&amp;quot;&#039; :($READING eq &amp;quot;state&amp;quot; ||$READING eq &amp;quot;ValvePosition&amp;quot; )?&#039;style=&amp;quot;text-align:left&amp;quot;&#039; :&#039;style=&amp;quot;text-align:right&amp;quot;&#039;}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ausrichten und Einfärben der Readings.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Heizungsteuerung für HM Wand- und Heizkörperthermostate ===&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel wurde für HM-TC-IT-WM-W-EU / HM-CC-RT-DN Geräte erstellt. Verwendung anderer Thermostate wird ggf. Anpassungen erforderlich machen. Die Geräte werden nicht automatisch ermittelt, sondern sind einzeln angegeben.&lt;br /&gt;
Es werden Soll- und Ist-Temperaturen angezeigt, Luftfeuchte und Ventilpositionen, Modus, Batterie und Global-Tastenlock.&lt;br /&gt;
Steuerungsmöglichkeiten: Solltemperatur, Modus (Manual/Automatik), (globale) Tastenlock.&lt;br /&gt;
Die Abweichung der Isttemperatur, die Ventilpositionen, Batteriestand etc. werden farblich hervorgehoben. &lt;br /&gt;
&lt;br /&gt;
Die Gerätenamen (EG_WZ_WT01_Climate / EG_WZ_WT01, EG_WZ_TT01_Clima / EG_WZ_TT01 / EG_WZ_TT02, OG_BZ_WT01_Climate / OG_BZ_WT01, OG_BZ_TT01_Clima / OG_BZ_TT01, OG_SZ_WT01_Climate / OG_SZ_WT01, OG_SZ_TT01_Clima / OG_SZ_TT01, OG_DZ_WT01_Climate / OG_DZ_WT01, OG_DZ_TT01_Clima / OG_DZ_TT01) müssen natürlich entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Bei den Geräten muss das Attribut „expert“ auf &amp;quot;1_on&amp;quot; gesetzt werden, andernfalls fehlt das Reading „R-globalBtnLock“. Dies hätte zur Folge, dass in der Spalte Lock der batteryLevel dargestellt wird.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:RgHMTh.jpg|thumb|500px|links|Status, Steuerung und Wochenprofil]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;define heatingInfo readingsGroup &amp;lt;%sani_heating&amp;gt;,&amp;lt;Soll&amp;gt;,&amp;lt;Soll neu&amp;gt;,&amp;lt;Ist&amp;gt;,&amp;lt;Ventil / RH&amp;gt;,&amp;lt;Modus&amp;gt;,&amp;lt;Lock&amp;gt;,&amp;lt;Bat&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
EG_WZ_WT01_Climate:desired-temp,&amp;lt;sollsetz&amp;gt;,measured-temp,humidity,controlMode,R-globalBtnLock@EG_WZ_WT01,batteryLevel@EG_WZ_WT01 \&amp;lt;br&amp;gt;&lt;br /&gt;
EG_WZ_TT01_Clima:desired-temp,&amp;lt;&amp;gt;,measured-temp,ValvePosition,controlMode,R-globalBtnLock@EG_WZ_TT01,batteryLevel@EG_WZ_TT01 \&amp;lt;br&amp;gt;&lt;br /&gt;
EG_WZ_TT02_Clima:desired-temp,&amp;lt;&amp;gt;,measured-temp,ValvePosition,controlMode,R-globalBtnLock@EG_WZ_TT02,batteryLevel@EG_WZ_TT02  \&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt; \&amp;lt;br&amp;gt;&lt;br /&gt;
OG_BZ_WT01_Climate:desired-temp,&amp;lt;sollsetz&amp;gt;,measured-temp,humidity,controlMode,R-globalBtnLock@OG_BZ_WT01,batteryLevel@OG_BZ_WT01  \&amp;lt;br&amp;gt;&lt;br /&gt;
OG_BZ_TT01_Clima:desired-temp,&amp;lt;&amp;gt;,measured-temp,ValvePosition,controlMode,R-globalBtnLock@OG_BZ_TT01,batteryLevel@OG_BZ_TT01  \&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt; \&amp;lt;br&amp;gt;&lt;br /&gt;
OG_SZ_WT01_Climate:desired-temp,&amp;lt;sollsetz&amp;gt;,measured-temp,humidity,controlMode,R-globalBtnLock@OG_SZ_WT01,batteryLevel@OG_SZ_WT01  \&amp;lt;br&amp;gt;&lt;br /&gt;
OG_SZ_TT01_Clima:desired-temp,&amp;lt;&amp;gt;,measured-temp,ValvePosition,controlMode,R-globalBtnLock@OG_SZ_TT01,batteryLevel@OG_SZ_TT01  \&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt;,&amp;lt;&amp;gt; \&amp;lt;br&amp;gt;&lt;br /&gt;
OG_DZ_WT01_Climate:desired-temp,&amp;lt;sollsetz&amp;gt;,measured-temp,humidity,controlMode,R-globalBtnLock@OG_DZ_WT01,batteryLevel@OG_DZ_WT01  \&amp;lt;br&amp;gt;&lt;br /&gt;
OG_DZ_TT01_Clima:desired-temp,&amp;lt;&amp;gt;,measured-temp,ValvePosition,controlMode,R-globalBtnLock@OG_DZ_TT01,batteryLevel@OG_DZ_TT01&amp;lt;/code&amp;gt;&lt;br /&gt;
| ReadingsGoup anlegen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr heatingInfo cellStyle { &amp;quot;r:1&amp;quot;=&amp;gt;&#039;style=&amp;quot;font-weight:bold;;font-size:16px&amp;quot;&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;r:2,c:0&amp;quot;=&amp;gt;&#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;,&amp;quot;r:6,c:0&amp;quot; =&amp;gt;&#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;r:9,c:0&amp;quot;=&amp;gt;&#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;,&amp;quot;r:12,c:0&amp;quot;=&amp;gt;&#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Schrift fett setzen etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr heatingInfo commands {&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;heatingInfo.sollsetz&#039;=&amp;gt;&#039;desired-temp:5.0,12.0,18.0,19.0,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;controlMode.manual&amp;quot;=&amp;gt;&amp;quot;set %DEVICE controlMode auto&amp;quot;,&amp;quot;controlMode.auto&amp;quot;=&amp;gt;&amp;quot;set %DEVICE controlMode manual&amp;quot;,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;R-globalBtnLock.on&amp;quot;=&amp;gt;&amp;quot;set %DEVICE regSet globalBtnLock off&amp;quot;,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;R-globalBtnLock.off&amp;quot;=&amp;gt;&amp;quot;set %DEVICE regSet globalBtnLock on&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Heizungssteuerung ermöglichen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&lt;br /&gt;
attr heatingInfo mapping {OG_BZ_WT01_Climate=&amp;gt;&amp;quot;Bad&amp;quot;,&amp;lt;br&amp;gt;&lt;br /&gt;
OG_BZ_TT01_Clima=&amp;gt;&amp;quot;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;Regler&amp;quot;,OG_SZ_WT01_Climate=&amp;gt;&amp;quot;Schlafzimmer&amp;quot;,&amp;lt;br&amp;gt;&lt;br /&gt;
OG_SZ_TT01_Clima=&amp;gt;&amp;quot;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;Regler&amp;quot;,OG_DZ_WT01_Climate=&amp;gt;&amp;quot;Duschbad&amp;quot;,&amp;lt;br&amp;gt;&lt;br /&gt;
OG_DZ_TT01_Clima=&amp;gt;&amp;quot;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;Regler&amp;quot;,EG_WZ_WT01_Climate=&amp;gt;&amp;quot;Wohnzimmer&amp;quot;,&amp;lt;br&amp;gt;&lt;br /&gt;
EG_WZ_TT01_Clima=&amp;gt;&amp;quot;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;Regler1&amp;quot;,EG_WZ_TT02_Clima=&amp;gt;&amp;quot;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;&amp;amp;amp;nbsp;;Regler2&amp;quot;,&#039;desired-temp&#039; =&amp;gt; &#039;&#039;}&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Gewünschte Namen definieren.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&lt;br /&gt;
attr heatingInfo valueFormat {if($READING eq &amp;quot;ValvePosition&amp;quot; &amp;amp;&amp;amp; $VALUE ne &amp;quot;0&amp;quot;){$VALUE = int($VALUE/10)*10}&amp;lt;br&amp;gt;&lt;br /&gt;
elsif($READING eq &amp;quot;batteryLevel&amp;quot;){if($VALUE&amp;gt;=3){$VALUE=100}&amp;lt;br&amp;gt;&lt;br /&gt;
elsif($VALUE&amp;gt;=2.7){$VALUE=75}elsif($VALUE&amp;gt;=2.5){$VALUE=50}elsif($VALUE&amp;gt;=2.2){$VALUE=25}&amp;lt;br&amp;gt;&lt;br /&gt;
else{$VALUE=0}}}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Werte vorformatieren (für die Icon-Zuordnung).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&lt;br /&gt;
attr heatingInfo valueIcon {&#039;controlMode.manual&#039; =&amp;gt; &#039;sani_heating_manual@795CFF&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;controlMode.auto&#039; =&amp;gt; &#039;sani_heating_automatic@FFC13A&#039;, &#039;controlMode.boost&#039; =&amp;gt; &#039;sani_heating_boost@FB0C02&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;humidity&#039;=&amp;gt;&#039;humidity@6FD9FB&#039;, &#039;R-globalBtnLock.on&#039;=&amp;gt;&#039;secur_locked@F7301D&#039;, &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;R-globalBtnLock.off&#039;=&amp;gt;&#039;secur_open@0CFB0C&#039;,&#039;ValvePosition.0&#039; =&amp;gt; &#039;sani_heating_level_0@002AE0&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;ValvePosition.10&#039; =&amp;gt; &#039;sani_heating_level_10@F8D53D&#039;,&#039;ValvePosition.20&#039; =&amp;gt; &#039;sani_heating_level_20@FF9341&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;ValvePosition.30&#039; =&amp;gt; &#039;sani_heating_level_30@F17F3F&#039;,&#039;ValvePosition.40&#039; =&amp;gt; &#039;sani_heating_level_40@E46C3C&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;ValvePosition.50&#039; =&amp;gt; &#039;sani_heating_level_50@DE3B3A&#039;,&#039;ValvePosition.60&#039; =&amp;gt; &#039;sani_heating_level_60@A30D2D&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;ValvePosition.70&#039; =&amp;gt; &#039;sani_heating_level_70@B40A23&#039;,&#039;ValvePosition.80&#039; =&amp;gt; &#039;sani_heating_level_80@C40619&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;ValvePosition.90&#039; =&amp;gt; &#039;sani_heating_level_90@D4030F&#039;,&#039;ValvePosition.100&#039; =&amp;gt; &#039;sani_heating_level_100@E50005&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;batteryLevel.100&#039;=&amp;gt;&#039;measure_battery_100@0CFB0C&#039;,&#039;batteryLevel.75&#039;=&amp;gt;&#039;measure_battery_75@42BC0A&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;batteryLevel.50&#039;=&amp;gt;&#039;measure_battery_50@F5FF10&#039;,&#039;batteryLevel.25&#039;=&amp;gt;&#039;measure_battery_25@FB5909&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;batteryLevel.0&#039;=&amp;gt;&#039;measure_battery_0@E50005&#039;,&#039;controlMode.set_boost&#039; =&amp;gt; &#039;hourglass&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;controlMode.set_auto&#039; =&amp;gt; &#039;hourglass&#039;,&#039;controlMode.set_manual&#039; =&amp;gt; &#039;hourglass&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;R-globalBtnLock.set_on&#039; =&amp;gt; &#039;hourglass&#039;,&#039;R-globalBtnLock.set_off&#039; =&amp;gt; &#039;hourglass&#039;}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Icons zuordnen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&lt;br /&gt;
attr heatingInfo valueStyle {if($READING eq &amp;quot;measured-temp&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
{my $t=$VALUE;;my $d=ReadingsVal($DEVICE,&#039;desired-temp&#039;,0);;&amp;lt;br&amp;gt;&lt;br /&gt;
if($t-$d&amp;gt;=1){&#039;style=&amp;quot;color:rgb(251,63,11);;&amp;quot;&#039;}elsif($t-$d&amp;lt;=-1){&#039;style=&amp;quot;color:rgb(79,58,251);;&amp;quot;&#039;}&amp;lt;br&amp;gt;&lt;br /&gt;
else{&#039;style=&amp;quot;color:rgb(12,251,12);;&amp;quot;&#039;}}}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Farben (zu kalt: blau, zu warm: rot, ok: grün).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&lt;br /&gt;
attr heatingInfo valueSuffix {&amp;quot;desired-temp&amp;quot;=&amp;gt;&amp;quot; °C&amp;quot;, &amp;quot;measured-temp&amp;quot;=&amp;gt;&amp;quot; °C&amp;quot;, &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;ValvePosition&amp;quot;=&amp;gt;&amp;quot; (&amp;quot;.ReadingsVal($DEVICE,$READING,0).&amp;quot; %)&amp;quot;, &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;humidity&amp;quot;=&amp;gt;&amp;quot; &amp;quot;.ReadingsVal($DEVICE,$READING,0).&amp;quot; % RH&amp;quot;, &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;batteryLevel&amp;quot;=&amp;gt;&amp;quot; (&amp;quot;.ReadingsVal($DEVICE,$READING,0).&amp;quot; V)&amp;quot;}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
| Messeinheiten und Zahlenwerte.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings aus zusätzlichen Devices ===&lt;br /&gt;
Im folgenden Beispiel wird gezeigt wie sich Readings zusätzlicher Devices zu einer Zeile mit mehreren Readings hinzufügen lassen. Diese zusätzlichen Devices können z.b. die unterschiedlichen Channel eines HomeMatic Gerätes sein. Im folgenden Beispiel wird der Name des zugehörigen Geräts dynamisch bestimmt.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:rgHeizung4.png|thumb|750px|links|Anzeige + Regelmöglichkeit]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define myTemp readingsGroup &amp;lt;Raum&amp;gt;,&amp;lt;Tist&amp;gt;,&amp;lt;Tsoll&amp;gt;,&amp;lt;Mode&amp;gt;,&amp;lt;Tnight&amp;gt;,&amp;lt;Tday&amp;gt;,&amp;lt;Hum&amp;gt;,&amp;lt;BatTC&amp;gt;,&amp;lt;Vist&amp;gt;,&amp;lt;Vsoll&amp;gt;,&amp;lt;Verr&amp;gt;,&amp;lt;BatVD&amp;gt; Thermostat.(WZ|OZ|AZ|Bad|Kueche|SZ|GZ|Bad.OG):measured-temp,desired-temp,controlMode,night-temp,day-temp,humidity,battery,ValvePosition@{valveOfDevice($DEVICE)},ValveDesired@{valveOfDevice($DEVICE)},R-valveErrorPos@{valveOfDevice($DEVICE)},battery@{valveOfDevice($DEVICE)} Broetje:ToutIst &amp;lt;/code&amp;gt;&lt;br /&gt;
| Diverse Readings aller Thermostat Devices und des jeweils zugehörigen Ventilantriebs. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr myTemp mapping    { &#039;Broetje&#039; =&amp;gt; &#039;Garten&#039;,&#039;Thermostat.AZ&#039; =&amp;gt; &#039;EG Arbeitszimmer&#039;,&#039;Thermostat.SZ&#039; =&amp;gt; &#039;OG Schlafzimmer&#039;,&#039;Thermostat.WZ&#039;=&amp;gt;&#039;EG Wohnzimmer&#039;,&#039;Thermostat.Kueche&#039; =&amp;gt; &#039;EG Küche&#039;,&#039;Thermostat.GZ&#039; =&amp;gt; &#039;OG Gästezimmer&#039;,&#039;Thermostat.Bad&#039; =&amp;gt; &#039;EG Bad&#039;,&#039;Thermostat.Bad.OG&#039; =&amp;gt; &#039;OG Bad&#039;,&#039;Thermostat.OZ&#039; =&amp;gt; &#039;EG Kaminzimmer&#039;,&#039;desired-temp&#039; =&amp;gt; &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Benennung der Zeilentitel (Das ist je nach Konfiguration auch über $ALIAS und/oder $ROOM lösbar).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr myTemp commands   { &#039;desired-temp&#039; =&amp;gt; &#039;desired-temp:&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| desired-temp soll per dropDown einstellbar sein.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr myTemp nameStyle style=&amp;quot;color:yellow&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Überschriften sollen gelb sein.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr myTemp valueIcon {&#039;battery.ok&#039; =&amp;gt; &#039;batterie@lightgreen&#039;, &#039;battery.low&#039; =&amp;gt; &#039;batterie@red&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für den Batteriestand sollen jeweils Icons angezeigt werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr myTemp valueFormat { &#039;measured-temp&#039; =&amp;gt; &amp;quot;%0.1f &amp;amp;amp;deg;C&amp;quot;,&#039;ToutIst&#039; =&amp;gt; &amp;quot;%.1f &amp;amp;amp;deg;C&amp;quot;,&#039;night-temp&#039; =&amp;gt; &amp;quot;%.1f &amp;amp;amp;deg;C&amp;quot;,&#039;day-temp&#039; =&amp;gt; &amp;quot;%.1f &amp;amp;amp;deg;C&amp;quot;,&#039;humidity&#039; =&amp;gt; &amp;quot;%.0f &lt;br /&gt;
%%&amp;quot;,&#039;ValvePosition&#039; =&amp;gt; &amp;quot;%.0f %%&amp;quot;,&#039;ValveDesired&#039; =&amp;gt; &amp;quot;%.0f %%&amp;quot;,&#039;R-valveErrorPos&#039; =&amp;gt; &amp;quot;%.0f %%&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Formatierung der Werte. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#namen des ventil device aus thermostat device ableiten&lt;br /&gt;
sub valveOfDevice ($) {&lt;br /&gt;
  my ($DEVICE) = @_;&lt;br /&gt;
  &lt;br /&gt;
  if ($DEVICE =~ m/AZ/) {&lt;br /&gt;
 	return &amp;quot;Ventil.&amp;quot;.substr($DEVICE,11).&amp;quot;.Nord&amp;quot;;&lt;br /&gt;
  } else {&lt;br /&gt;
 	return &amp;quot;Ventil.&amp;quot;.substr($DEVICE,11);  	&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
| Dieser Teil kommt in die [[99_myUtils_anlegen|99_myUtils.pm]]: Hier wird aus dem Namen des Thermostaten der Name des zugehörigen Ventilantriebs abgeleitet.&lt;br /&gt;
|}&lt;br /&gt;
Da im {...} Teil des &amp;lt;reading&amp;gt;@&amp;lt;device&amp;gt; Arguments keine Leerzeichen oder Kommas vorkommen dürfen ist er in der Regel das Einfachste die Funktionalität wie in diesem Beispiel in eine eigene Routine auszulagern. Mit ein paar &#039;Tricks&#039; lässt es sich aber manchmal auch ohne Leerzeichen oder Kommas lösen und dann direkt in die Definition schreiben:&amp;lt;code&amp;gt;...,ValvePosition@{$DEVICE=~s/Thermostat/Ventil/;$DEVICE;},...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inhalte filtern ===&lt;br /&gt;
Wenn man gewisse Zeilen einer Readingsgroup nicht dargestellt haben möchte, so kann man diese mit Hilfe von &amp;lt;code&amp;gt;valueFormat&amp;lt;/code&amp;gt; ausfiltern, bspw.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr rg valueFormat { return $VALUE if ( $VALUE &amp;gt; 0 );; return undef;; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Bsp. werden alle Zeilen/Devices, deren Value &amp;gt; 0 sind, angezeigt. Alle anderen werden als &amp;lt;code&amp;gt;undef&amp;lt;/code&amp;gt; formatiert und erscheinen damit nicht im Listing.&lt;br /&gt;
&lt;br /&gt;
Dies kann man noch weiter ausbauen und dynamische Auswahllisten erstellen (s. [[ReadingsGroup#Dynamische Inhalte]]).&lt;br /&gt;
&lt;br /&gt;
=== Dynamische Inhalte ===&lt;br /&gt;
[[Datei:rgDynamic-1.png|mini|450px|readingsGroup mit umschaltbarem Inhalt 1]]&lt;br /&gt;
[[Datei:rgDynamic-2.png|mini|450px|readingsGroup mit umschaltbarem Inhalt 2]]&lt;br /&gt;
Es ist möglich, den in einer readingsGroup dargestellten Inhalt dynamisch von zusätzlichen Bedingungen abhängig zu machen. Im folgenden Beispiel lässt sich&lt;br /&gt;
einstellen, dass nur die Devices angezeigt werden, die einen bestimmten Zustand (hier: on/off, open/tilted/closed) haben. Hier wird zum Umschalten ein dummy, der direkt über der readingsGroup dargestellt wird, verwendet. Über das links und/oder commands lässt sich auch eine Darstellung erzeugen, bei der das Umschalten direkt innerhalb der readingsGroup möglich ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define LXrg dummy&lt;br /&gt;
attr LXrg group -&lt;br /&gt;
attr LXrg setList mode1:on,off mode2:open,closed,tilted&lt;br /&gt;
attr LXrg stateFormat 1=mode1 2=mode2&lt;br /&gt;
attr LXrg webCmd mode1:mode2&lt;br /&gt;
&lt;br /&gt;
define rg readingsGroup Window.*:state Light.*:state&lt;br /&gt;
attr rg group -&lt;br /&gt;
attr rg valueFormat { return $VALUE if ( $VALUE eq ReadingsVal(&amp;quot;LXrg&amp;quot;,&amp;quot;mode1&amp;quot;,&amp;quot;&amp;quot;) || $VALUE eq ReadingsVal(&amp;quot;LXrg&amp;quot;,&amp;quot;mode2&amp;quot;,&amp;quot;&amp;quot;) );; return undef;;}&lt;br /&gt;
&lt;br /&gt;
define Watch_LX notify LX.*:.* {my $value = ReadingsVal($NAME,&#039;state&#039;,&#039;&#039;);;;;fhem(&amp;quot;setreading $NAME $value&amp;quot;)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Enable/Disable Button am Beispiel eines WeekdayTimer ===&lt;br /&gt;
Dieses Beispiel zeigt die Anwendung einer readingsGroup, um im Frontend einen Enable/Disable Button für ein Objekt darzustellen. Für den [[WeekdayTimer]] gibt es hier spezielle Erweiterungen (set Routinen, um das Attribut &#039;&#039;disable&#039;&#039; zu setzen). Es gibt aber auch eine allgemeinere Variante (siehe [http://forum.fhem.de/index.php/topic,23655.msg169141.html#msg169141 diesen Forumsbeitrag]) für alle Objekte, die das Fhem Attribut &#039;&#039;disable&#039;&#039; unterstützen.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:rg_scheduling.png|thumb|500px|links|Enable/Disable Button]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define rg_Timer_Wasser readingsGroup timer_Wasser_..:disabled,+DEF,&amp;lt;{rg_timer_Wasser_show_conditional($DEVICE,&amp;quot;nextUpdate&amp;quot;)}@disabled&amp;gt;,&amp;lt;{rg_timer_Wasser_show_conditional($DEVICE,&amp;quot;nextValue&amp;quot;)}@disabled&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Definition der angezeigten Readings. Das Attribut &#039;&#039;disabled&#039;&#039; wird mit weiteren Einstellungen (&#039;&#039;commands&#039;&#039;) zum Button, +DEF zeigt die Definition, d.h. die Schaltzeiten, des Timers an. Die Readings nextUpdate und nextValue sollen nur angezeigt werden, falls der Timer aktiv ist. Hierfür sorgt eine Routine &amp;lt;code&amp;gt;rg_timer_Wasser_show_conditional&amp;lt;/code&amp;gt;, die in der 99_myUtils.pm definiert wird. Das abschließende @disabled sorgt dafür, dass der LongPoll Mechanismus die Anzeige sofort ändert, wenn der Button betätigt wird. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_Timer_Wasser valueFormat  { if ( $READING =~ m/.*DEF/ ) { my @text = split(&amp;quot; &amp;quot;, $VALUE); shift @text; return join(&amp;quot; &amp;quot;, @text) }}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Der Name des Timers wird aus dem Internal &amp;quot;+DEF&amp;quot; vorne abgeschnitten. Damit werden nur die definierten Schaltpunkte angezeigt. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_Timer_Wasser valueIcon { &#039;disabled.0&#039; =&amp;gt; &#039;Restart&#039;, &#039;disabled.1&#039; =&amp;gt; &#039;Shutdown&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die beiden Zustände für den Button werden durch zwei Standard-Icons angezeigt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rg_Timer_Wasser commands  { &#039;disabled.0&#039; =&amp;gt; &#039;set $DEVICE disable&#039;, &#039;disabled.1&#039; =&amp;gt; &#039;set $DEVICE enable&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Toggle-Funktion für den Button. Wenn der Timer aktiv (&amp;quot;disabled.0&amp;quot;) sorgt ein Klick auf den Button, dass der Timer deaktiviert wird (&amp;quot;set $DEVICE disable&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub rg_timer_Wasser_show_conditional($$)&lt;br /&gt;
{&lt;br /&gt;
  my ($DEVICE,$READING) = @_;&lt;br /&gt;
  return ( ReadingsVal($DEVICE, &amp;quot;disabled&amp;quot;, &amp;quot;1&amp;quot;) eq &amp;quot;0&amp;quot; )? &lt;br /&gt;
     ReadingsVal($DEVICE, $READING, &amp;quot;reading_undef&amp;quot;) : &amp;quot;disabled&amp;quot;;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
| Dieser Teil kommt in die [[99_myUtils_anlegen|99_myUtils.pm]]: Hiermit wird das übergebene Reading des Timers nur angezeigt, wenn der Timer aktiv ist. Andernfalls wird der String &amp;quot;disabled&amp;quot; angezeigt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Ändern von Attributen: Noch ein WeekdayTimer Beispiel ===&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Dieses Beispiel benutzt Funktionen, die erst ab [[version|Modulversion]] 8761/16.6.2015 verfügbar sind.}}&lt;br /&gt;
Inzwischen ist es auch möglich das commands Mapping auf Attribute anzuwenden. Die Syntax ist die gleiche wie für die set Kommandos. Um das Beispiel übersichtlich zu halten werden hier die Werte und Icons auch für deaktiviert WeekdayTimer angezeigt. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Datei:rg_timer.png|thumb|500px|links|FhemWidget für das &#039;disable&#039; Attribut]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;define rgTimer readingsGroup &amp;lt;&amp;gt;,&amp;lt;Current&amp;gt;,&amp;lt;Update-Time&amp;gt;,&amp;lt;New&amp;gt;,&amp;lt;disable&amp;gt; TYPE=WeekdayTimer:state,nextUpdate,nextValue,?!disable&amp;lt;/code&amp;gt;&lt;br /&gt;
| Definition der angezeigten Readings. Das Attribut &#039;&#039;disable&#039;&#039; wird mit weiteren Einstellungen (&#039;&#039;commands&#039;&#039;) zum Button. Durch das ! wird das Attribut auch dann angezeigt wenn es noch nicht gesetzt ist.   &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rgTimer valueIcon { state =&amp;gt; &#039;%devStateIcon&#039;, nextValue =&amp;gt; &#039;{(split(&amp;quot;:&amp;quot;,Color::devStateIcon($DEVICE,&amp;quot;dimmer&amp;quot;,undef,&amp;quot;nextValue&amp;quot;)))[1]}&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für den aktuellen Zustand wird das devStateIcon angezeigt und für den nächsten Zustand das passende Lampen-Icon.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rgTimer valueFormat  &#039;{(split(&amp;quot; &amp;quot;, $VALUE))[1]}&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Vom nächsten Schaltpunkt wird nur die Zeit angezeigt. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr rgTimer commands  { disable =&amp;gt; &#039;disable:&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
| Für das disable attribut wird das normale dropDown mit 0 und 1 angezeigt das auch in der Device Detail Ansicht verwendet wird.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings löschen ===&lt;br /&gt;
Es kann vorkommen, dass Readings angezeigt werden, die garnicht existieren sollten - bspw. wenn man in einer HTTPMOD ein Reading umbeannt hat, kann auch der alte Readingsname immernoch angezeigt werden. Solche Readings können mit der globalen Funktion [http://fhem.de/commandref.html#deletereading deletereading] gelöscht werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Auf jeden Fall die [http://fhem.de/commandref.html#deletereading CommandRef dazu] lesen!&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
Im HTTPMOD des [[Pollenflug]] war zuerst das &amp;lt;code&amp;gt;reading04Name Graeser&amp;lt;/code&amp;gt; definiert und wurde später in &amp;lt;code&amp;gt;reading04Name Gräser&amp;lt;/code&amp;gt; umbenannt. In der zugehörigen ReadingGroup wurden dann konsequent beide Varianten dargestellt - auch nachdem alle Alt-Einträge aus den Logs entfernt wurden. Erst ein &amp;lt;code&amp;gt;deletereading Pollenflug Graeser&amp;lt;/code&amp;gt; in der fhem-Befehltszeile hat das veraltete Reading entfernt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ausrichtung der Tabelle drehen (horizontal/vertikal) ===&lt;br /&gt;
Eine Readingsgroup wird standardmäßig immer zeilenweise aufgebaut, zB. jedes Gerät in eine neue Zeile. Die Werte der Geräte werden dann in den Spalten dargestellt. &lt;br /&gt;
Wenn man eine Readingsgroup für nur ein Gerät mit vielen Readings hat (zB. [[Allergy]]), so kann man die Darstellung horizontal oder vertikal ausrichten, indem man die Readingsgroup detailliert definiert. Ein Bsp. dazu liefert der Foreneintrag [https://forum.fhem.de/index.php/topic,37194.msg440446.html#msg440446] :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Pollenflugvorhersage allergy &amp;lt;PLZ&amp;gt;&lt;br /&gt;
attr Pollenflugvorhersage levelsFormat rc_dot@white,rc_dot@yellow,rc_dot@orange,rc_dot@red&lt;br /&gt;
attr Pollenflugvorhersage stateFormat fc1_maximum&lt;br /&gt;
attr Pollenflugvorhersage updateEmpty 1&lt;br /&gt;
attr Pollenflugvorhersage updateIgnored 1&lt;br /&gt;
&lt;br /&gt;
# Pollen in Spalten, Tage in Zeilen&lt;br /&gt;
define PollenAlarmHorizontal readingsGroup &amp;lt;&amp;gt;,&amp;lt;Ampfer&amp;gt;,&amp;lt;Ambrosia&amp;gt;,&amp;lt;Beifuß&amp;gt;,&amp;lt;Birke&amp;gt;,&amp;lt;Buche&amp;gt;,&amp;lt;Eiche&amp;gt;,&amp;lt;Erle&amp;gt;,&amp;lt;Gräser&amp;gt;,&amp;lt;Hasel&amp;gt;,&amp;lt;Pappel&amp;gt;,&amp;lt;Roggen&amp;gt;,&amp;lt;Ulme&amp;gt;,&amp;lt;Wegerich&amp;gt;,&amp;lt;Weide&amp;gt; \&lt;br /&gt;
Pollenflugvorhersage:fc1_day_of_week,fc1_Ampfer,fc1_Ambrosia,fc1_Beifuß,fc1_Birke,fc1_Buche,fc1_Eiche,fc1_Erle,fc1_Gräser,fc1_Hasel,fc1_Pappel,fc1_Roggen,fc1_Ulme,fc1_Wegerich,fc1_Weide \&lt;br /&gt;
Pollenflugvorhersage:fc2_day_of_week,fc2_Ampfer,fc2_Ambrosia,fc2_Beifuß,fc2_Birke,fc2_Buche,fc2_Eiche,fc2_Erle,fc2_Gräser,fc2_Hasel,fc2_Pappel,fc2_Roggen,fc2_Ulme,fc2_Wegerich,fc2_Weide \&lt;br /&gt;
Pollenflugvorhersage:fc3_day_of_week,fc3_Ampfer,fc3_Ambrosia,fc3_Beifuß,fc3_Birke,fc3_Buche,fc3_Eiche,fc3_Erle,fc3_Gräser,fc3_Hasel,fc3_Pappel,fc3_Roggen,fc3_Ulme,fc3_Wegerich,fc3_Weide \&lt;br /&gt;
Pollenflugvorhersage:fc4_day_of_week,fc4_Ampfer,fc4_Ambrosia,fc4_Beifuß,fc4_Birke,fc4_Buche,fc4_Eiche,fc4_Erle,fc4_Gräser,fc4_Hasel,fc4_Pappel,fc4_Roggen,fc4_Ulme,fc4_Wegerich,fc4_Weide \&lt;br /&gt;
Pollenflugvorhersage:fc5_day_of_week,fc5_Ampfer,fc5_Ambrosia,fc5_Beifuß,fc5_Birke,fc5_Buche,fc5_Eiche,fc5_Erle,fc5_Gräser,fc5_Hasel,fc5_Pappel,fc5_Roggen,fc5_Ulme,fc5_Wegerich,fc5_Weide \&lt;br /&gt;
Pollenflugvorhersage:fc6_day_of_week,fc6_Ampfer,fc6_Ambrosia,fc6_Beifuß,fc6_Birke,fc6_Buche,fc6_Eiche,fc6_Erle,fc6_Gräser,fc6_Hasel,fc6_Pappel,fc6_Roggen,fc6_Ulme,fc6_Wegerich,fc6_Weide \&lt;br /&gt;
Pollenflugvorhersage:fc7_day_of_week,fc7_Ampfer,fc7_Ambrosia,fc7_Beifuß,fc7_Birke,fc7_Buche,fc7_Eiche,fc7_Erle,fc7_Gräser,fc7_Hasel,fc7_Pappel,fc7_Roggen,fc7_Ulme,fc7_Wegerich,fc7_Weide&lt;br /&gt;
attr PollenAlarm nonames 1&lt;br /&gt;
attr PollenAlarm valueFormat %VALUE&lt;br /&gt;
attr PollenAlarm valueIcon %VALUE&lt;br /&gt;
&lt;br /&gt;
# Tage in Spalten, Pollen in Zeilen&lt;br /&gt;
define PollenAlarmVertikal readingsGroup Pollenflugvorhersage:&amp;lt;Pollen&amp;gt;,fc0_day_of_week,fc1_day_of_week,fc2_day_of_week,fc3_day_of_week,fc4_day_of_week,fc5_day_of_week,fc6_day_of_week,fc7_day_of_week \&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Ambrosia&amp;gt;,fc0_Ambrosia,fc1_Ambrosia,fc2_Ambrosia,fc3_Ambrosia,fc4_Ambrosia,fc5_Ambrosia,fc6_Ambrosia,fc7_Ambrosia\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Ampfer&amp;gt;,fc0_Ampfer,fc1_Ampfer,fc2_Ampfer,fc3_Ampfer,fc4_Ampfer,fc5_Ampfer,fc6_Ampfer,fc7_Ampfer\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Beifuß&amp;gt;,fc0_Beifuss,fc1_Beifuss,fc2_Beifuss,fc3_Beifuss,fc4_Beifuss,fc5_Beifuss,fc6_Beifuss,fc7_Beifuss\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;&amp;lt;b&amp;gt;Birke&amp;lt;Birke&amp;lt;/b&amp;gt;&amp;gt;,fc0_Birke,fc1_Birke,fc2_Birke,fc3_Birke,fc4_Birke,fc5_Birke,fc6_Birke,fc7_Birke\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Buche&amp;gt;,fc0_Buche,fc1_Buche,fc2_Buche,fc3_Buche,fc4_Buche,fc5_Buche,fc6_Buche,fc7_Buche\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Eiche&amp;gt;,fc0_Eiche,fc1_Eiche,fc2_Eiche,fc3_Eiche,fc4_Eiche,fc5_Eiche,fc6_Eiche,fc7_Eiche\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;&amp;lt;b&amp;gt;Erle&amp;lt;Erle&amp;lt;/b&amp;gt;&amp;gt;,fc0_Erle,fc1_Erle,fc2_Erle,fc3_Erle,fc4_Erle,fc5_Erle,fc6_Erle,fc7_Erle\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Gräser&amp;gt;,fc0_Graeser,fc1_Graeser,fc2_Graeser,fc3_Graeser,fc4_Graeser,fc5_Graeser,fc6_Graeser,fc7_Graeser\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;&amp;lt;b&amp;gt;Hasel&amp;lt;Hasel&amp;lt;/b&amp;gt;&amp;gt;,fc0_Hasel,fc1_Hasel,fc2_Hasel,fc3_Hasel,fc4_Hasel,fc5_Hasel,fc6_Hasel,fc7_Hasel\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Pappel&amp;gt;,fc0_Pappel,fc1_Pappel,fc2_Pappel,fc3_Pappel,fc4_Pappel,fc5_Pappel,fc6_Pappel,fc7_Pappel\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Roggen&amp;gt;,fc0_Roggen,fc1_Roggen,fc2_Roggen,fc3_Roggen,fc4_Roggen,fc5_Roggen,fc6_Roggen,fc7_Roggen\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Ulme&amp;gt;,fc0_Ulme,fc1_Ulme,fc2_Ulme,fc3_Ulme,fc4_Ulme,fc5_Ulme,fc6_Ulme,fc7_Ulme\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Wegerich&amp;gt;,fc0_Wegerich,fc1_Wegerich,fc2_Ulme,fc3_Wegerich,fc4_Wegerich,fc5_Wegerich,fc6_Wegerich,fc7_Wegerich\&lt;br /&gt;
Pollenflugvorhersage:&amp;lt;Weide&amp;gt;,fc0_Weide,fc1_Weide,fc2_Weide,fc3_Weide,fc4_Weide,fc5_Weide,fc6_Weide,fc7_Weide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Berechnungen ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Dieses Beispiel benutzt Funktionen, die erst ab [[version|Modulversion]] 8761/16.6.2015 verfügbar sind.}}&lt;br /&gt;
Das Rechnen funktioniert über das Flag &amp;quot;$&amp;quot;, mit dem eine Funktion angegeben werden kann, die auf beliebige Kombinationen von Zeilen, Spalten und einzelnen Zellen angewendet wird. Ähnlich wie in einer Tabellenkalkulation.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel:&lt;br /&gt;
:&amp;lt;code&amp;gt;define rg readingsGroup .*:temperature rg:$avg&amp;lt;/code&amp;gt;&lt;br /&gt;
Damit wird eine readingsGroup über alle &#039;&#039;temperature&#039;&#039; Readings definiert. In einer zusätzlichen Zeile am Ende wird mit &#039;&#039;$avg&#039;&#039; der Durchschnittswert aller darüber liegenden Temperaturen angezeigt.&lt;br /&gt;
&lt;br /&gt;
Das genaue Format: &amp;lt;code&amp;gt;$&amp;lt;operator&amp;gt;[(&amp;lt;zellen&amp;gt;)]&amp;lt;/code&amp;gt; mit&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;operator&amp;gt;&amp;lt;/code&amp;gt;: sum, avg, min, max, scalar, count oder der Name einer beliebigen anderen Funktion, die ein Array mit allen Werten übergeben bekommt und ein Ergebnis zurückliefert.&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;zellen&amp;gt;&amp;lt;/code&amp;gt; ist eine durch Semikolon getrennte Liste aus &amp;lt;code&amp;gt;&amp;lt;zeilen&amp;gt;:&amp;lt;spalten&amp;gt;&amp;lt;/code&amp;gt; Paaren. &lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;zeilen&amp;gt;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&amp;lt;spalten&amp;gt;&amp;lt;/code&amp;gt; sind jeweils eine Perl Liste, d.h. hier können &lt;br /&gt;
** einzelne Werte,&lt;br /&gt;
** durch Komma getrennte Aufzählungen,&lt;br /&gt;
** mit .. angegebene Wertebereiche&lt;br /&gt;
** sowie &amp;lt;code&amp;gt;$ROW&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;$COLUMN&amp;lt;/code&amp;gt; als Bezeichner für die aktuelle Zelle&lt;br /&gt;
:verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Alle Möglichkeiten sind kombinierbar. Die Zählung der Zeilen und Spalten beginnt bei 1. Eine nicht vorhandene Zeilenangabe wird durch den Bereich von Zeile 1 bis zur aktuellen Zeile ersetzt, eine nicht vorhandene Spalte durch die aktuelle Spalte.&lt;br /&gt;
&lt;br /&gt;
Es ergeben sich somit unter anderem folgende Möglichkeiten:&lt;br /&gt;
*&amp;lt;code&amp;gt;$sum&amp;lt;/code&amp;gt; equivalent zu &amp;lt;code&amp;gt;$sum(1..$ROW), $sum(:$COLUMN)&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;$sum(1..$ROW:$COLUMN)&amp;lt;/code&amp;gt; die Summe der Werte in der Spalte über der aktuellen Zelle.&lt;br /&gt;
*&amp;lt;code&amp;gt;$max($ROW:1..$COLUMN-1)&amp;lt;/code&amp;gt; Maximum aller Werte links von der aktuellen Zelle (in der aktuellen Zeile)&lt;br /&gt;
*&amp;lt;code&amp;gt;$avg(1..$ROW:1)&amp;lt;/code&amp;gt; Durchschnitt aller Werte in Spalte 1 bis zur aktuellen Zeile&lt;br /&gt;
*&amp;lt;code&amp;gt;$scalar(:1)&amp;lt;/code&amp;gt; Anzahl der Werte in Spalte 1&lt;br /&gt;
*&amp;lt;code&amp;gt;$min(1..5:1,2,4)&amp;lt;/code&amp;gt; Minimum der Werte aus den Zeilen 1-5 in den Spalten 1, 2 und 4&lt;br /&gt;
&lt;br /&gt;
Eigene Funktionen lassen sich über 99_myUtils anlegen und z.B. verwenden um Häufigkeiten zu zählen oder mit nichtnumerischen Readings umzugehen.&lt;br /&gt;
&lt;br /&gt;
Die Ergebnisse werden im Weiteren wie normale Readings behandelt. Sie lassen sich von links oben nach rechts unten kaskadieren und lassen sich über valuePrefix, valueSuffix, valueFormat und valueStyle in der Darstellung beeinflussen. Also z.B. einfärben, als Balkendiagramm darstellen, ...&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe der Funktionalität zum auf- und zu-klappen von Teilen einer readingsGroup lassen sich z.B. im zusammengeklappten Zustand Summen, Extremwerte oder andere Ausreißer anzeigen und die Details nur beim Aufklappen zeigen.&lt;br /&gt;
&lt;br /&gt;
Weitere Möglichkeiten:&lt;br /&gt;
* Attribut &amp;lt;code&amp;gt;firstCalcRow&amp;lt;/code&amp;gt;: Hiermit kann der Default für die Nummer der ersten Zeile vorgegeben werden (sofern im Ausdruck nichts genaueres angegeben ist). firstCalcRow sollte z.B. auf 2 gesetzt werden, wenn in der readingsGroup Spaltenüberschriften verwendet werden.&lt;br /&gt;
* special &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;hr&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; um eine horizontale Linie über die volle Breite einzufügen&lt;br /&gt;
* Über ein angehängtes &amp;lt;code&amp;gt;@&amp;lt;alias&amp;gt;&amp;lt;/code&amp;gt; kann einem Rechenergebniss ein Alias-Name gegeben werden. Über diesen kann der Wert dann zur Formatierung mit den value-Attributen angesprochen werden.&lt;br /&gt;
* das &amp;lt;code&amp;gt;alwaysTrigger&amp;lt;/code&amp;gt; Attribut kann jetzt auch den Wert 2 bekommen. Damit werden in der readingsGroup Readings für alle durch die Aggregation gebildeten Werte und entsprechende Events auch dann erzeugt wenn die readingsGroup nicht angezeigt wird. Wenn ein Alias-Name vergeben ist, wird dieser auch für den Reading-Namen verwendet.&lt;br /&gt;
* Über den operator &amp;lt;code&amp;gt;$count(&amp;lt;wert&amp;gt;)(&amp;lt;zellen&amp;gt;)&amp;lt;/code&amp;gt; um das Vorkommen von &amp;lt;code&amp;gt;&amp;lt;wert&amp;gt;&amp;lt;/code&amp;gt; in den angegebenen Zellen zu zählen. &amp;lt;code&amp;gt;&amp;lt;wert&amp;gt;&amp;lt;/code&amp;gt; kann enweder direkt der zu zählende Wert sein (ohne Anführungzeichen) oder eine in / eingeschlossene regex. Mit &amp;lt;code&amp;gt;!&amp;lt;wert&amp;gt;&amp;lt;/code&amp;gt; kann das Nicht-Vorkommen von &amp;lt;code&amp;gt;&amp;lt;wert&amp;gt;&amp;lt;/code&amp;gt; gezählt werden.&lt;br /&gt;
&lt;br /&gt;
=== Ein interaktives Beispiel ===&lt;br /&gt;
[[Datei:rgCalc.png|mini|right|400px|Beispiel-readingsGroup mit Berechnungen]]&lt;br /&gt;
In drei [[dummy]] Objekten lässt sich jeweils ein Reading über einen Slider einstellen. In der darunter liegenden readingsGroup werden diese Readings und diverse daraus abgeleitete Werte dargestellt. Alle Readings und die daraus abgeleiteten Werte werden live per longpoll aktualisiert, wenn die slider bewegt werden.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  define t1 dummy&lt;br /&gt;
  attr t1 room rg&lt;br /&gt;
  attr t1 setList state:slider,-10,1,30&lt;br /&gt;
  attr t1 webCmd state&lt;br /&gt;
  define t2 dummy&lt;br /&gt;
  attr t2 room rg&lt;br /&gt;
  attr t2 setList state:slider,-10,1,30&lt;br /&gt;
  attr t2 webCmd state&lt;br /&gt;
  define t3 dummy&lt;br /&gt;
  attr t3 room rg&lt;br /&gt;
  attr t3 setList state:slider,-10,1,30&lt;br /&gt;
  attr t3 webCmd state&lt;br /&gt;
&lt;br /&gt;
  define rg readingsGroup &amp;lt;&amp;gt;,&amp;lt;value&amp;gt;,&amp;lt;sum&amp;gt;,&amp;lt;min&amp;gt;,&amp;lt;max&amp;gt;,&amp;lt;avg&amp;gt;\&lt;br /&gt;
  t\d:+NAME,state,$sum(1..$ROW:2),$min(1..$ROW:2),$max(1..$ROW:2),$avg(1..$ROW:2)\&lt;br /&gt;
  &amp;lt;hr&amp;gt;\&lt;br /&gt;
  rg:&amp;lt;&amp;gt;,$scalar,$sum(:2)@SUM,$min(:2)@MIN,$max(:2)@MAX,$avg(:2)@AVG\&lt;br /&gt;
  &amp;lt;hr&amp;gt;\&lt;br /&gt;
  t1:&amp;lt;t1,t2,t3&amp;gt;,state,state@t2,state@t3,$sum($ROW:2..4)@SUM,$count(/\d/)(2..$ROW-4:2)\&lt;br /&gt;
 &lt;br /&gt;
  attr rg nonames 1&lt;br /&gt;
  attr rg room rg&lt;br /&gt;
  attr rg style style=&#039;text-align:center&#039;&lt;br /&gt;
  attr rg valueFormat { &#039;avg&#039; =&amp;gt; &#039;%.2f&#039;, &#039;AVG&#039; =&amp;gt; &#039;%.2f&#039; }&lt;br /&gt;
  attr rg valuePrefix { &#039;rg.scalar&#039; =&amp;gt; &#039;#&#039;, &#039;rg.SUM&#039; =&amp;gt;&#039;&amp;amp;Sigma;; &#039;, &#039;rg.MIN&#039; =&amp;gt;&#039;Min: &#039;, &#039;rg.MAX&#039; =&amp;gt;&#039;Max: &#039;, &#039;rg.AVG&#039; =&amp;gt;&#039;&amp;amp;empty;; &#039;, &#039;rg.count&#039; =&amp;gt; &#039;#(X): &#039; }&lt;br /&gt;
  attr rg valueSuffix { state =&amp;gt; &#039;&amp;amp;deg;;C&#039; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links und Trigger ==&lt;br /&gt;
=== readingsGroup mit Link ===&lt;br /&gt;
[[Datei:rgPCA-detail.png|mini|400px|readingsGroup mit Link]]&lt;br /&gt;
Das PCA301 Beispiel oben lässt sich mit einem ans Ende des define angehängten &lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;{appendTrigger($DEVICE,&amp;quot;clear&amp;quot;,&amp;quot;Alle löschen&amp;quot;)}&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
und der folgenden appendTrigger Definition in 99_myUtils.pm um einen Link erweitern, der ein Event auslöst, an das z.B. ein notify gehängt werden kann, um die Verbrauchszähler der PCA301 Dosen zurückzusetzen. &lt;br /&gt;
:&amp;lt;code&amp;gt;define clearVerbrauch notify Verbrauch:clear set TYPE=PCA301 clear&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
use vars qw($FW_ME);&lt;br /&gt;
use vars qw($FW_subdir);&lt;br /&gt;
sub&lt;br /&gt;
appendTrigger($$$)&lt;br /&gt;
{&lt;br /&gt;
  my ($name,$trigger,$label) = @_; &lt;br /&gt;
&lt;br /&gt;
  my $ret .= &amp;quot;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  my $link = &amp;quot;cmd=trigger $name $trigger&amp;quot;;&lt;br /&gt;
  my $txt = &amp;quot;&amp;lt;a onClick=\&amp;quot;FW_cmd(&#039;$FW_ME$FW_subdir?XHR=1&amp;amp;$link&#039;)\&amp;quot;&amp;gt;$label&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
  $ret .= &amp;quot;&amp;lt;td colspan=\&amp;quot;99\&amp;quot;&amp;gt;&amp;lt;div style=\&amp;quot;cursor:pointer;color:#888888;text-align:right\&amp;quot;&amp;gt;$txt&amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  return ($ret,0);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wenn hierdurch Änderungen an einer readingsGroup erfolgen, die ein Neuladen der Seite erforderlich machen, kann dies so erfolgen:&lt;br /&gt;
:&amp;lt;code&amp;gt;{myUtils_refresh(&amp;quot;WEB&amp;quot;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
mit folgendem code in 99_myUtils.pm:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub                                                                                     &lt;br /&gt;
myUtils_refresh($)                                                                      &lt;br /&gt;
{                                                                                       &lt;br /&gt;
  my ($name) = @_;                                                                      &lt;br /&gt;
                                                                                        &lt;br /&gt;
  FW_directNotify(&amp;quot;#FHEMWEB:$name&amp;quot;, &amp;quot;location.reload(true);&amp;quot;,&amp;quot;&amp;quot; );&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Beispiel für &#039;custom links und trigger&#039; findet sich in {{Link2Forum|Topic=14425|Message=109383|LinkText=diesem Forenbeitrag}}: dort wird damit eine readingsGroup dynamisch umgeschaltet, um nur die eingeschalteten, nur die ausgeschalteten oder alle Lampen anzuzeigen.&lt;br /&gt;
&lt;br /&gt;
=== sub rg ===&lt;br /&gt;
Damit beim klicken auf ein Icon oder einen Text in einer readingsGroup etwas passiert ist es möglich dies über das commands Attribut auf ein &amp;lt;code&amp;gt;&#039;trigger ntfy_rg $DEVICE $READING&#039;&amp;lt;/code&amp;gt; oder Ähnliches zu mappen.&lt;br /&gt;
Anlegen des ntfy_rg notify&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define ntfy_rg notify ntfy_rg {rg($EVENT)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Folgender Code muss noch in de [[99_myUtils_anlegen|99_myUtils.pm]]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub rg($){&lt;br /&gt;
  my @input    = split(/[§\s]+/,shift);&lt;br /&gt;
  my $device   = $input[0];&lt;br /&gt;
  my $function = $input[1];&lt;br /&gt;
&lt;br /&gt;
if($function eq &amp;quot;clima&amp;quot;){&lt;br /&gt;
  my $room =  AttrVal($device, &#039;room&#039;, &#039;undef&#039;);&lt;br /&gt;
  $room =~ s/\D//g;&lt;br /&gt;
  &lt;br /&gt;
  return((&amp;quot;d_climaControl_&amp;quot;.$room));&lt;br /&gt;
}&lt;br /&gt;
elsif($function eq &amp;quot;device&amp;quot;){&lt;br /&gt;
  return InternalVal($device,&amp;quot;device&amp;quot;,&amp;quot;device error&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
elsif($function eq &amp;quot;controlMode&amp;quot;){&lt;br /&gt;
  my $controlMode = ReadingsVal($device,&amp;quot;controlMode&amp;quot;,&amp;quot;controlMode error&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if($controlMode ~~ /manual/)&lt;br /&gt;
    {fhem(&amp;quot;set $device controlMode auto&amp;quot;)}&lt;br /&gt;
  elsif($controlMode ~~ /auto/)&lt;br /&gt;
    {fhem(&amp;quot;set $device controlMode manual&amp;quot;)};&lt;br /&gt;
}&lt;br /&gt;
elsif($function eq &amp;quot;globalBtnLock&amp;quot;){&lt;br /&gt;
  my $globalBtnLock = ReadingsVal($device,&amp;quot;R-globalBtnLock&amp;quot;,&amp;quot;globalBtnLock error&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if($globalBtnLock ~~ /off/){&lt;br /&gt;
    {fhem(&amp;quot;set $device regSet globalBtnLock on&amp;quot;)}&lt;br /&gt;
    {fhem (&amp;quot;set $device getConfig&amp;quot;)}&lt;br /&gt;
  }&lt;br /&gt;
  elsif($globalBtnLock ~~ /on/){&lt;br /&gt;
    {fhem(&amp;quot;set $device regSet globalBtnLock off&amp;quot;)}&lt;br /&gt;
    {fhem (&amp;quot;set $device getConfig&amp;quot;)}&lt;br /&gt;
  };&lt;br /&gt;
}&lt;br /&gt;
elsif($function eq &amp;quot;state&amp;quot;){&lt;br /&gt;
  my $state = Value($device);&lt;br /&gt;
&lt;br /&gt;
  if($state ~~ /off/){&lt;br /&gt;
    {fhem(&amp;quot;set $device on&amp;quot;)}&lt;br /&gt;
  }&lt;br /&gt;
  elsif($state ~~ /on/){&lt;br /&gt;
    {fhem(&amp;quot;set $device off&amp;quot;)}&lt;br /&gt;
  };&lt;br /&gt;
}&lt;br /&gt;
elsif($function eq &amp;quot;setTimeTable&amp;quot;){&lt;br /&gt;
  my $room         =  AttrVal($device, &#039;room&#039;, &#039;undef&#039;);&lt;br /&gt;
  $room         =~ s/\D//g;&lt;br /&gt;
  my $climaControl = (&amp;quot;d_climaControl_&amp;quot;.$room);&lt;br /&gt;
  my $dayTemp           = ReadingsVal( $climaControl, &amp;quot;dayTemp&amp;quot;          , 21.0    );&lt;br /&gt;
  my $nightTemp         = ReadingsVal( $climaControl, &amp;quot;nightTemp&amp;quot;        , 17.0    );&lt;br /&gt;
  my $workday_period_1_start  = ReadingsVal( $climaControl, &amp;quot;workday_period_1_start&amp;quot;  , &amp;quot;06:30&amp;quot; );&lt;br /&gt;
  my $workday_period_1_stop   = ReadingsVal( $climaControl, &amp;quot;workday_period_1_stop&amp;quot;   , &amp;quot;18:00&amp;quot; );&lt;br /&gt;
  my $workday_period_2_start  = ReadingsVal( $climaControl, &amp;quot;workday_period_2_start&amp;quot;  , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $workday_period_2_stop   = ReadingsVal( $climaControl, &amp;quot;workday_period_2_stop&amp;quot;   , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $saturday_period_1_start = ReadingsVal( $climaControl, &amp;quot;saturday_period_1_start&amp;quot; , &amp;quot;06:30&amp;quot; );&lt;br /&gt;
  my $saturday_period_1_stop  = ReadingsVal( $climaControl, &amp;quot;saturday_period_1_stop&amp;quot;  , &amp;quot;12:00&amp;quot; );&lt;br /&gt;
  my $saturday_period_2_start = ReadingsVal( $climaControl, &amp;quot;saturday_period_2_start&amp;quot; , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $saturday_period_2_stop  = ReadingsVal( $climaControl, &amp;quot;saturday_period_2_stop&amp;quot;  , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $sunday_period_1_start   = ReadingsVal( $climaControl, &amp;quot;sunday_period_1_start&amp;quot;   , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $sunday_period_1_stop    = ReadingsVal( $climaControl, &amp;quot;sunday_period_1_stop&amp;quot;    , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $sunday_period_2_start   = ReadingsVal( $climaControl, &amp;quot;sunday_period_2_start&amp;quot;   , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
  my $sunday_period_2_stop    = ReadingsVal( $climaControl, &amp;quot;sunday_period_2_stop&amp;quot;    , &amp;quot;24:00&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListMon prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListTue prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListWed prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListThu prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListFri prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListSat prep $saturday_period_1_start $nightTemp $saturday_period_1_stop $dayTemp $saturday_period_2_start $nightTemp $saturday_period_2_stop $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
  {fhem(&amp;quot;set $device tempListSun exec $sunday_period_1_start   $nightTemp $sunday_period_1_stop   $dayTemp $sunday_period_2_start   $nightTemp $sunday_period_2_stop   $dayTemp 24:00 $nightTemp&amp;quot;)};&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hier sind die benötigten CodeBlöcke für [[ReadingsGroup#Heizungswerte.2C_Status.2C_Steuerung_und_Wochenprofil|Heizungswerte, Status, Steuerung und Wochenprofil]] enthalten, aber auch um state zu triggern.&lt;br /&gt;
&lt;br /&gt;
== Sonstiges ==&lt;br /&gt;
In der Regel werden die Parameter zu einem reading in den mappings unter &amp;lt;$DEVICE&amp;gt; und dann &amp;lt;$DEVICE&amp;gt;.&amp;lt;$READING&amp;gt; und dann unter &amp;lt;$READING&amp;gt;.&amp;lt;$VALUE&amp;gt; gesucht.&lt;br /&gt;
&lt;br /&gt;
=== Lesbar machen ===&lt;br /&gt;
Für die meisten Attribute gilt:&lt;br /&gt;
&lt;br /&gt;
* Wenn es komplexer wird ist es einfacher, den Code in eine eigene Routine in (beispielsweise) [[99 myUtils anlegen|99_myUtils]] auszulagern und diese aufzurufen:&lt;br /&gt;
:&amp;lt;code&amp;gt; attr &amp;lt;name&amp;gt; valueStyle {myValueToFormat($READING,$VALUE)}&amp;lt;/code&amp;gt;&lt;br /&gt;
* code für unterschiedliche readings kann auch im mapping schon aufgeteilt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;name&amp;gt; valueStyle { SuperE5 =&amp;gt; &#039;{perl code}&#039;, Diesel =&amp;gt; &#039;{perl code}&#039; }&amp;lt;/code&amp;gt;&lt;br /&gt;
* Ifs lassen sich verschachteln und sortieren. So kann die Anzahl der Klammern und Else-Zweige reduziert werden:&lt;br /&gt;
 if( $READING eq ... ) {&lt;br /&gt;
   return xxx if( $VALUE &amp;lt; 1 );&lt;br /&gt;
   return yyy if( $VALUE &amp;lt; 1.5 );&lt;br /&gt;
   return zzz;&lt;br /&gt;
 } elsif( $READING eq ... ) {&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Da alles lässt sich natürlich auch kombinieren und so viel lesbarer machen als ein einziger langer Bandwurm.&lt;br /&gt;
&lt;br /&gt;
=== readingsGroup in einer Gruppe ===&lt;br /&gt;
Wenn der doppelte Rahmen um eine readingsGroup bei Darstellung in einer Gruppe stört, lässt er sich mit dem passenden style entfernen: &lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;rgName&amp;gt; style style=&amp;quot;border:0px;background:none;box-shadow:none&amp;quot;&amp;lt;/code&amp;gt; &lt;br /&gt;
Für die readingsGroup &#039;&#039;rgName&#039;&#039; wird der Darstellungsstil verändert.&lt;br /&gt;
&lt;br /&gt;
Anwendungs-Bsp: [[Pollenflug]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache Balkendiagramme ===&lt;br /&gt;
[[Datei:rgBars.png|mini|400px|readingsGroup mit Balken]]&lt;br /&gt;
Readings lassen sich mit einem valueStyle der folgenden Art mit einem &amp;quot;Füllstandsbalken&amp;quot; hinterlegen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;rgName&amp;gt; valueStyle style=&amp;quot;width:200px; text-align:center; border: 1px solid #ccc; background:-webkit-linear-gradient(left, red $VALUE%, rgba(0,0,0,0) $VALUE%)&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Balken werden bei Änderungen der Readings automatisch per longpoll aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Diese direkte Definition des &amp;lt;code&amp;gt;valueStyle&amp;lt;/code&amp;gt; ist allerdings sehr unflexibel - bspw. müsste der &amp;lt;code&amp;gt;$VALUE&amp;lt;/code&amp;gt; zufällig max 100 erreichen und es darf nur ein Browsertyp eingesetzt werden, damit alles sauber funktioniert. &lt;br /&gt;
&lt;br /&gt;
Deutlich flexibler ist eine Auslagerung als eigenständige Funktion in die [[99_myUtils_anlegen|99_myUtils.pm]], die den valueStyle dynamisch generiert, bspw.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub Balkenanzeige($) &lt;br /&gt;
{&lt;br /&gt;
    # Zuweisung der übergebenen Variablen&lt;br /&gt;
    my ($val) = @_;&lt;br /&gt;
&lt;br /&gt;
    # Konfiguration des maximal übergebenen Werts (hier wäre der höchste zu erwartende Wert = 3)&lt;br /&gt;
    my $maxValue = 3;&lt;br /&gt;
&lt;br /&gt;
    # Normalisierung auf 100%-Wert&lt;br /&gt;
    my $percent = $val / $maxValue * 100;&lt;br /&gt;
&lt;br /&gt;
    # Definition des valueStyles&lt;br /&gt;
    my $stylestring = &#039;style=&amp;quot;&lt;br /&gt;
        width: 200px; &lt;br /&gt;
	text-align:center; &lt;br /&gt;
	border: 1px solid #ccc; &lt;br /&gt;
	background-image: -webkit-linear-gradient(left,red &#039;.$percent.&#039;%, rgba(0,0,0,0) &#039;.$percent.&#039;%); &lt;br /&gt;
	background-image:    -moz-linear-gradient(left,red &#039;.$percent.&#039;%, rgba(0,0,0,0) &#039;.$percent.&#039;%); &lt;br /&gt;
	background-image:     -ms-linear-gradient(left,red &#039;.$percent.&#039;%, rgba(0,0,0,0) &#039;.$percent.&#039;%); &lt;br /&gt;
	background-image:      -o-linear-gradient(left,red &#039;.$percent.&#039;%, rgba(0,0,0,0) &#039;.$percent.&#039;%); &lt;br /&gt;
	background-image:         linear-gradient(left,red &#039;.$percent.&#039;%, rgba(0,0,0,0) &#039;.$percent.&#039;%);&lt;br /&gt;
	&amp;quot;&#039;;&lt;br /&gt;
&lt;br /&gt;
    # Rückgabe des definierten Strings&lt;br /&gt;
    return $stylestring;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Aufruf sähe dann wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; attr &amp;lt;rgName&amp;gt; valueStyle { Balkenanzeige($VALUE) } &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die einzelnen Werte des &amp;lt;code&amp;gt;$stylestring&amp;lt;/code&amp;gt; haben folgende Bedeutungen:&lt;br /&gt;
* width      - Breite des Balkenrahmens&lt;br /&gt;
* text-align - Ausrichtung des Texts&lt;br /&gt;
* border     - Format des Balkenrahmens&lt;br /&gt;
* background-image - Format des Hintergrunds des Balkenrahmens, also des Balkens selbst&lt;br /&gt;
** linear-gradient - css-Funktion zur Erstellung von Farbverläufen &#039;&#039;(*)&#039;&#039;&lt;br /&gt;
*** left             - linksbündiger Balken&lt;br /&gt;
*** red x%           - roter Balken x% breit&lt;br /&gt;
*** rgba(0,0,0,0) x% - farbloser Teil startet bei x%&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(*) linear-gradient wird in verschiedenen Browsern unterschiedlich umgesetzt. Deshalb sollten immer alle Varianten zusammen angegeben werden, damit die Darstellung auf allen Browsern funktioniert. (vgl. Link unten)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Weitere Infos zu:&lt;br /&gt;
* linear-gradient - [https://developer.mozilla.org/de/docs/Web/CSS/linear-gradient]&lt;br /&gt;
* Farbanpassungen, z.B. auch unter Verwendung der [[Color#Skalenfarbe_mit_Color::pahColor|Color::pahColor]] Routine.&lt;br /&gt;
* Anpassung von Werten s.o. [[ReadingsGroup#Lesbar_machen]]&lt;br /&gt;
* weiteren Möglichkeiten zur Erzeugung von Balkendiagrammen in Forenbeiträgen {{Link2Forum|Topic=25313|LinkText=hier}} und {{Link2Forum|Topic=28318|LinkText=hier}}&lt;br /&gt;
* [[99_myUtils_anlegen|99_myUtils.pm]]&lt;br /&gt;
&lt;br /&gt;
Anwendungs-Bsp: [[Pollenflug]]&lt;br /&gt;
&lt;br /&gt;
=== readingsGroup Styling mit CSS ===&lt;br /&gt;
Jede readingsGroup lässt sich durch CSS individuell stylen. &lt;br /&gt;
&lt;br /&gt;
==== Allgemeines ====&lt;br /&gt;
Damit der eigene CSS Code nach einem [[Update]] der FHEM-Style Dateien vorhanden bleibt, ist es notwenig eine eigene .css Datei (zB ios7ReadingsGroups.css) zu erstellen und ins Verzeichnis &#039;&#039;fhem/www/pgm2/&#039;&#039; zu kopieren. Anschließend muss in der [[FHEMWEB]] Instanz das Attribut &#039;&#039;CssFiles&#039;&#039; auf zB &#039;&#039;pgm2/ios7ReadingsGroups.css&#039;&#039; gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
==== Erweiterte Device Übersicht ====&lt;br /&gt;
Diese ReadingsGroup ist an der [[FHEMWEB]] Device-Übersicht angelehnt. Zusätzlich werden weitere Readings, hier Leistung, Betriebszeit Heute und Jahr, ein Link zu Detail-Seite der ReadingsGroup und Links zu den jeweiligen Device-Detail-Seite, dargestellt.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| [[Datei:RgStylingOhneCss.png|600px|mini|left|Device ReadingsGroup ohne CSS]] [[Datei:RgStylingMitCss.png|600px|mini|left|Device ReadingsGroup mit CSS]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Definition =====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_devices readingsGroup &amp;lt;{rgLink($DEVICE,&amp;quot;konfigurieren&amp;quot;,&amp;quot;Details&amp;quot;)}&amp;gt;,&amp;lt;Device&amp;gt;,&amp;lt;Status&amp;gt;,&amp;lt;Leistung&amp;gt;,&amp;lt;Heute&amp;gt;,&amp;lt;Jahr&amp;gt;\&lt;br /&gt;
wzDeckenfluter:&amp;lt;%light_floor_lamp&amp;gt;,&amp;lt;{rgLink(&amp;quot;wzDeckenfluter&amp;quot;,&amp;quot;detail&amp;quot;,&amp;quot;Deckenfluter&amp;quot;)}&amp;gt;,state,&amp;lt;&amp;gt;,dauerHeute,dauerJahr\&lt;br /&gt;
wzMacMini:&amp;lt;%it_nas&amp;gt;,&amp;lt;{rgLink(&amp;quot;wzMacMini&amp;quot;,&amp;quot;detail&amp;quot;,&amp;quot;MacMini&amp;quot;)}&amp;gt;,state,power,consumption,consumptionYear\&lt;br /&gt;
attr rg_devices noheading 1&lt;br /&gt;
attr rg_devices nonames 1&lt;br /&gt;
attr rg_devices notime 1&lt;br /&gt;
attr rg_devices room ReadingsGroup Styling&lt;br /&gt;
attr rg_devices style class=&amp;quot;block wide rgDevices&amp;quot;&lt;br /&gt;
attr rg_devices valueFormat { &#039;power&#039; =&amp;gt; &amp;quot;%.1f W &amp;quot;, consumption =&amp;gt; &amp;quot;%.2f kWh&amp;quot;, &#039;consumptionYear&#039; =&amp;gt; &amp;quot;%.2f kWh&amp;quot;  }&lt;br /&gt;
attr rg_devices valueIcon { state =&amp;gt; &#039;%devStateIcon&#039; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sich der CSS auf die richtige readingsGroup bezieht, ist es nötigt &lt;br /&gt;
das Attribut &#039;&#039;style&#039;&#039; anzupassen.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |&amp;lt;code&amp;gt;attr &amp;lt;rgName&amp;gt; style class=&amp;quot;block wide rgDevices&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Klassen &#039;&#039;block&#039;&#039; und &#039;&#039;wide&#039;&#039; müssen eingetragen werden. Der Name der Nachfolgenden Klasse, hier &#039;&#039;rgDevices&#039;&#039;, ist frei wählbar.&lt;br /&gt;
|}&lt;br /&gt;
===== Funktion rgLink() =====&lt;br /&gt;
Die Funktion rgLink($name,$action,$label) liefert einen Link mit dem Namen $label zurück. Der Code gehört in die [[99 myUtils anlegen|99_myUtils.pm]].&lt;br /&gt;
* $name - Name des Device das aufgerufen werden soll &lt;br /&gt;
* $action - Aktion die Ausgeführt werden soll. &lt;br /&gt;
**&#039;&#039;konfigurieren&#039;&#039; erzeugt den kleinen &#039;&#039;Details&#039;&#039; Button links oben der einem zur Detail Seite der ReadingsGroup führt - nützlich wenn das ReadingsGroup-Attribut &#039;&#039;noheading&#039;&#039; gesetzt ist&lt;br /&gt;
** &#039;&#039;detail&#039;&#039; erzeugt einen Link zu Device-Detail Seite&lt;br /&gt;
* $label - Link-Name&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub rgLink($$$){&lt;br /&gt;
  my ($name,$action,$label) = @_; &lt;br /&gt;
  my $link = &amp;quot;&amp;quot;;&lt;br /&gt;
  my $fhemLink = &amp;quot;&amp;quot;;&lt;br /&gt;
  my $txt = &amp;quot;&amp;quot;;&lt;br /&gt;
  my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
  my $divStyle = &amp;quot;&amp;quot;;&lt;br /&gt;
  my $aStyle = &amp;quot;&amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
  # FHEM Variablen einbinden&lt;br /&gt;
  use vars qw($FW_ME);&lt;br /&gt;
  use vars qw($FW_subdir);&lt;br /&gt;
  use vars qw($FW_ss);&lt;br /&gt;
  use vars qw($FW_tp);&lt;br /&gt;
&lt;br /&gt;
  if( $action eq &amp;quot;konfigurieren&amp;quot; ){&lt;br /&gt;
    $fhemLink  = &amp;quot;detail=$name&amp;quot;;&lt;br /&gt;
    $divStyle = &amp;quot;cursor:pointer;font-size:11px;padding-bottom:2px;padding-left:3px;&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  elsif( $action eq &amp;quot;detail&amp;quot; ){&lt;br /&gt;
    $fhemLink  = &amp;quot;detail=$name&amp;quot;;&lt;br /&gt;
    $divStyle = &amp;quot;cursor:pointer;display:inline;&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  $link = &#039;&amp;lt;a onclick=&amp;quot;location.href=\&#039;&#039; . $FW_ME . $FW_subdir . &#039;?&#039; . $fhemLink . &#039;\&#039;&amp;quot; style=&amp;quot;&#039; . $aStyle . &#039;&amp;quot;&amp;gt;&#039; . $label . &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
  $txt  = &#039;&amp;lt;div style=&amp;quot;&#039; . $divStyle . &#039;&amp;quot;&amp;gt;&#039; . $link . &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
  $ret  = &amp;quot;$txt&amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
  return $ret;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=Tipp&lt;br /&gt;
Verwende zum Bearbeiten der eigenen .css Dateien entweder den [[Konfiguration#Syntaxhervorhebung|Codemirror Editor]] oder einen eigenen Editor mit [http://de.wikipedia.org/wiki/Syntaxhervorhebung Syntax Highlighting] . Das hilft bei der Fehlersuche enorm. }}&lt;br /&gt;
&lt;br /&gt;
===== Styling =====&lt;br /&gt;
Die eigene .css Datei erscheint in FHEM unter Edit-Files --&amp;gt; styles und kann direkt im FHEM-Editor oder mit eigenen Editor bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
ios7ReadingsGroups.css:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*  Readings Groups Devices */&lt;br /&gt;
table.rgDevices tr td{ text-align: center; }&lt;br /&gt;
table.rgDevices tr:first-child td:nth-child(2){ /* 1. Zeile 2. Spalte */ text-align: center; }&lt;br /&gt;
table.rgDevices tr td:first-child{  /* 1. Spalte */ width: 45px; text-align: center; }&lt;br /&gt;
table.rgDevices tr td:nth-child(2){ /* 2. Spalte */ width: 33%;  text-align: left; }&lt;br /&gt;
table.rgDevices tr td:nth-child(3){ /* 3. Spalte */ width: 15%; }&lt;br /&gt;
table.rgDevices tr td:nth-child(4){ /* 4. Spalte */ width: 15%; }&lt;br /&gt;
table.rgDevices tr td:nth-child(5){ /* 5. Spalte */ width: 15%; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Auf Portrait / Landscape Modus des Smartphone unterscheiden ====&lt;br /&gt;
Dieses Beispiel ist an das obige Beispiel [[#Erweiterte_Device_.C3.9Cbersicht|Erweiterte Device Übersicht]] angelehnt. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |[[Datei:RgStylingSmallscreenPortrait.png|300px|mini|center|Device ReadingsGroup im Portrait Modus]]&lt;br /&gt;
|[[Datei:RgStylingSmallscreenLandscape.png|550px|mini|center|Device ReadingsGroup im Landscape Modus]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Allgemeines =====&lt;br /&gt;
Mit CSS ist man in der Lage auf die aktuelle Bildschirmlage zu reagieren. Alle Anweisungen die in diesen beiden Funktionen zwischen den beiden { } stehen, werden je nach Bildschirmlage aufgerufen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* Portrait Modus */&lt;br /&gt;
@media all and (orientation:portrait) { }&lt;br /&gt;
&lt;br /&gt;
/* Landscape Modus */&lt;br /&gt;
@media all and (orientation:landscape) { }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Styling =====&lt;br /&gt;
{{Randnotiz|RNText=Info&lt;br /&gt;
* &#039;&#039;width: xx%&#039;&#039; ändert die Breite der Spalte&lt;br /&gt;
* &#039;&#039;display: none&#039;&#039; blendet die Spalte aus}}&lt;br /&gt;
In der FHEMWEB_phone Instanz muss wie [[#Allgemeines|hier]] beschrieben eine neue eigene .css Datei eingetragen werden. In diesem Beispiel ios7smallscreenReadingsGroups.css&lt;br /&gt;
&lt;br /&gt;
ios7smallscreenReadingsGroups.css&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* landscape und portrait modus */&lt;br /&gt;
table.rgDevices tr td { /* Zuerst alles centern */ text-align: center; }&lt;br /&gt;
table.rgDevices tr:first-child td:nth-child(1){ /* 1. Zeile 1. Spalte */ text-align: center; }&lt;br /&gt;
table.rgDevices tr td:first-child { /* 1. Spalte */ width: 5%; }&lt;br /&gt;
table.rgDevices tr:first-child td:nth-child(2) { /* 1. Zeile 2. Spalte */ text-align: center; }&lt;br /&gt;
table.block table tr td table.rgDevices tr td { border-bottom: 1px solid #cbcbcb; }&lt;br /&gt;
&lt;br /&gt;
/* Portrait Modus */&lt;br /&gt;
@media all and (orientation:portrait) {&lt;br /&gt;
  table.rgDevices tr td:nth-child(2){ /* 2. Spalte */ width: 50%; text-align: left; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(3){ /* 3. Spalte */ width: auto; text-align: right; display: table-cell; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(4){ /* 4. Spalte */ width: 0; display: none; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(5){ /* 5. Spalte */ width: 0; display: none; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(6){ width: 0; display: none; }	&lt;br /&gt;
  table.rgDevices tr td div a svg{ margin-left: 90px; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Landscape Modus */&lt;br /&gt;
@media all and (orientation:landscape) { &lt;br /&gt;
  table.rgDevices tr td:nth-child(2){ /* 2. Spalte */ width: 35%; text-align: left; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(3){ /* 3. Spalte */ width: 15%; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(4){ /* 4. Spalte */ width: 15%; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(5){ /* 5. Spalte */ width: 15%; }&lt;br /&gt;
  table.rgDevices tr td:nth-child(5){ /* 5. Spalte */ width: 15%; }	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Plots im Portrait Modus des Smartphones ausblenden ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:40%&amp;quot; |[[Datei:RgStylingSmallscreenPortraitPlot.png|350px|mini|center|Device ReadingsGroup im Portrait Modus]]&lt;br /&gt;
|[[Datei:RgStylingSmallscreenLandscapePlot.PNG|550px|mini|center|Plot nur im Landscape]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Um die Plot und alle Steuerelemente im Portrait Modus auszublenden fügt man in seine eigene smallscreen.css wie [[#Allgemeines|hier beschrieben]] folgendes ein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@media all and (orientation:portrait) {&lt;br /&gt;
  .SVGplot, .SVGlabel, .Zoom-in, .Zoom-out, .Prev { width: 0; display: none; }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>LHBL2003</name></author>
	</entry>
</feed>