<?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=LordVoodoo</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=LordVoodoo"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/LordVoodoo"/>
	<updated>2026-04-09T21:23:33Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HTTPS-Absicherung_%26_Authentifizierung_via_nginx_Webserver&amp;diff=38248</id>
		<title>HTTPS-Absicherung &amp; Authentifizierung via nginx Webserver</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HTTPS-Absicherung_%26_Authentifizierung_via_nginx_Webserver&amp;diff=38248"/>
		<updated>2023-04-08T04:33:46Z</updated>

		<summary type="html">&lt;p&gt;LordVoodoo: Formatkorrekturen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ähnlich wie im Artikel [[Apache Authentication Proxy]] kann FHEM auch mit dem schlankeren nginx Webserver abgesichert werden. Nach diesem Artikel ist die Kommunikation zum FHEM-Server via HTTPS verschlüsselt und eine Authentifizierung nur via Benutzername und Passwort möglich. Externer Zugriff aus dem eigenen Netzwerk/Internet soll damit unterbunden werden; die Kommunikation und Authentifizierung findet verschlüsselt statt.&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Vorausgesetzt wird eine funktionierende FHEM Installation. Die dadurch erbrachten Linux Kenntnisse reichen für die Umsetzung dieses Artikels. Weiterführende Links zu Zertifikaten und dem nginx-Webserver befinden sich im Anhang des Artikels.&lt;br /&gt;
&lt;br /&gt;
Ausgegangen wird von einer FHEM-Installation, die auf Port 8083 via HTTP hört. Dieser Port wird abgesichert, indem er nur noch lokal und nicht mehr über das Netzwerk erreichbar ist. Anfragen auf Port 80 (HTTP, nginx) werden weitergeleitet zum lokalen Port 443 (HTTPS, nginx), der wiederum einen Reverse Proxy auf den Port 8083 (HTTPS, fhem) einrichtet. Mit leichten Modifizierungen könnte nginx auch auf einem separaten Server betrieben werden. Die benötigten Zertifikate für die HTTPS Verschlüsselung können eigenhändig angelegt werden. Der/die autorisierten Benutzer werden in einer verschlüsselten Datei hinterlegt, die nginx für die Authentifizierung benutzt.&lt;br /&gt;
&lt;br /&gt;
Getestet wurde das Setup auf einem Raspberry Pi (Raspbian - basierend auf Debian 8 und 9) und fhem 5.7 bzw. fhem 5.8. Die beschriebenen Befehle sollten sich ohne weiteres auf Ubuntu oder andere Debian-Derivate übertragen lassen. Das beschriebene Konzept lässt sich aber auf jedes Unix-Derivat anwenden.&lt;br /&gt;
&lt;br /&gt;
==Unterscheidung von Browser auf PC und mobilen Endgeräten==&lt;br /&gt;
&lt;br /&gt;
Zusätzlich kann man mit nginx sehr bequem zwischen PC und mobilen Endgeräten unterscheiden und damit verschiedene FHEMWEB - Instanzen aufrufen.&lt;br /&gt;
&lt;br /&gt;
==Anpassungen: fhem-Config==&lt;br /&gt;
In der FHEM-Konfiguration muss sichergestellt werden, dass kein Client außerhalb des Servers zugreifen kann. Dazu muss das normalerweise gesetzte Flag global von jeglicher Konfiguration entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# define telnetPort telnet 7072 global&lt;br /&gt;
&lt;br /&gt;
define WEB FHEMWEB 8083&lt;br /&gt;
attr WEB stylesheetPrefix dark&lt;br /&gt;
# attr WEB HTTPS&lt;br /&gt;
&lt;br /&gt;
define WEBphone FHEMWEB 8084&lt;br /&gt;
attr WEBphone stylesheetPrefix darksmallscreen&lt;br /&gt;
&lt;br /&gt;
# define WEBtablet FHEMWEB 8085 global&lt;br /&gt;
# attr WEBtablet stylesheetPrefix touchpad&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
fhem neustarten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; $ sudo service fhem stop &amp;amp;&amp;amp; sudo service fhem start &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installation: nginx als reverse Proxy ==&lt;br /&gt;
nginx installieren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;$ sudo apt-get install nginx &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach im Pfad &#039;&#039;&#039;/etc/nginx/sites-available&#039;&#039;&#039; eine neue Proxy Konfiguration anlegen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;$ sudo touch /etc/nginx/sites-available/reverse-proxy&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Inhalt der Datei &#039;&#039;&#039;reverse-proxy&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;go&amp;quot;&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 80;&lt;br /&gt;
    return 301 https://$host$request_uri;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
&lt;br /&gt;
    listen 443;&lt;br /&gt;
    server_name fhempi;&lt;br /&gt;
&lt;br /&gt;
    # check user agent&lt;br /&gt;
    if ($http_user_agent ~* &#039;(iPhone|iPod|Opera Mini|Android.*Mobile|NetFront|PSP|BlackBerry|Windows Phone)&#039;) {&lt;br /&gt;
    set $ua_type &amp;quot;@mobile&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate           /etc/nginx/cert.crt;&lt;br /&gt;
    ssl_certificate_key       /etc/nginx/cert.key;&lt;br /&gt;
&lt;br /&gt;
    ssl on;&lt;br /&gt;
    ssl_session_cache  builtin:1000  shared:SSL:10m;&lt;br /&gt;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;&lt;br /&gt;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;&lt;br /&gt;
    ssl_prefer_server_ciphers on;&lt;br /&gt;
&lt;br /&gt;
    access_log            /var/log/nginx/fhem.access.log;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
&lt;br /&gt;
      proxy_set_header        Host $host;&lt;br /&gt;
      proxy_set_header        X-Real-IP $remote_addr;&lt;br /&gt;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
      proxy_set_header        X-Forwarded-Proto $scheme;&lt;br /&gt;
      proxy_http_version      1.1;&lt;br /&gt;
&lt;br /&gt;
      # Gehe zu FHEMWEB wenn kein mobiler Browser&lt;br /&gt;
      if ($ua_type != &amp;quot;@mobile&amp;quot;){&lt;br /&gt;
          proxy_pass          http://localhost:8083;&lt;br /&gt;
      }&lt;br /&gt;
      # Gehe zu FHEMWEB smallscreen wenn mobiler Browser&lt;br /&gt;
      if ($ua_type = &amp;quot;@mobile&amp;quot;){&lt;br /&gt;
          proxy_pass          http://localhost:8084;&lt;br /&gt;
      }&lt;br /&gt;
      proxy_read_timeout  90;&lt;br /&gt;
      #proxy_read_timeout  20736000;&lt;br /&gt;
      #proxy_buffering     off;&lt;br /&gt;
&lt;br /&gt;
      # User Sickboy&#039;s Erweiterung für verschlüsselte Websocket-Kommunikation (siehe Diskussionsseite)&lt;br /&gt;
      # Für normale Benutzer derzeit kommentiert, vom Autor Andremotz noch bisher ungetestet&lt;br /&gt;
      #  ... daher derzeit auskommentiert&lt;br /&gt;
      # Wird für &#039;longpoll&#039; benötigt (z.B. bei FTUI)&lt;br /&gt;
      #set $my_http_upgrade &amp;quot;&amp;quot;;&lt;br /&gt;
      #set $my_connection &amp;quot;Connection&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
      #if ($http_upgrade = &amp;quot;websocket&amp;quot;) {&lt;br /&gt;
      #  set $my_http_upgrade $http_upgrade;&lt;br /&gt;
      #  set $my_connection &amp;quot;upgrade&amp;quot;;&lt;br /&gt;
      #}&lt;br /&gt;
      &lt;br /&gt;
      #proxy_set_header Upgrade $my_http_upgrade;&lt;br /&gt;
      #proxy_set_header Connection $my_connection;&lt;br /&gt;
&lt;br /&gt;
      auth_basic &amp;quot;Restricted Content&amp;quot;;&lt;br /&gt;
      auth_basic_user_file /etc/nginx/.htpasswd;&lt;br /&gt;
&lt;br /&gt;
      # proxy_redirect      http://localhost:8083 https://localhost;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mit dieser Konfiguration werden zwei Server-Instanzen auf Port 80 und Port 443 angelegt. Surft ein Browser/eine App Port 80 an, wird er umgehend zum verschlüsselten Port 443 weitergeleitet. Die Zertifikate befinden sich im lokalen Verzeichnis unter /etc/nginx und verschlüsselt wird via TLS.&lt;br /&gt;
&lt;br /&gt;
Nginx&#039; Default-Konfiguration muss noch deaktiviert und die Reverse-Proxy-Einstellungen verlinkt werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ sudo unlink /etc/nginx/sites-enabled/default&lt;br /&gt;
$ sudo ln -s /etc/nginx/sites-available/reverse-proxy /etc/nginx/sites-enabled/reverse-proxy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis: Ein User hatte für mich nicht nachvollziehbare Probleme und empfiehlt folgende Settings:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;go&amp;quot;&amp;gt;&lt;br /&gt;
   proxy_read_timeout  2073600;&lt;br /&gt;
   proxy_buffering off;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== User anlegen für Authentifizierung ==&lt;br /&gt;
Der Username und das verschlüsselte Passwort werden mit den folgenden Kommandos in die Datei ’’ ’/etc/nginx/.htpasswd’’’ geschrieben, das nginx in der Konfiguration für die User-Authentifizierung benutzt.&lt;br /&gt;
&lt;br /&gt;
Username &#039;&#039;&#039;maxmustermann&#039;&#039;&#039; anlegen (Doppelpunkt nach Username nicht übersehen!):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;$ sudo sh -c &amp;quot;echo -n &#039;maxmustermann:&#039; &amp;gt;&amp;gt; /etc/nginx/.htpasswd&amp;quot; &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Passwort-Prompt aufrufen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;$ sudo sh -c &amp;quot;openssl passwd -apr1 &amp;gt;&amp;gt; /etc/nginx/.htpasswd&amp;quot; &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zertifikatserstellung == &lt;br /&gt;
Erst durch die Zertifikate ist eine verschlüsselte Kommunikation zwischen Browser und nginx möglich&lt;br /&gt;
Beide beschriebenen Optionen sind dabei gleichermaßen sicher. Damit allerdings nicht jedes ausgestelle Zertifikat vertraut wird, gibt es das Konzept der Certificate Authorities (&#039;CA&#039;, näheres siehe Links). Jeder gängige Browser warnt den Benutzer vor einem Zertifikat, das von keiner Thrusted Authority ausgestellt wurde, bietet jedoch dem Benutzer die Möglichkeit, trotzdem fortzufahren. Durch die Tatsache, dass das Zertifikat selbst erstellt und signiert wird, kann diese Warnung im Browser später getrost umgangen werden. &lt;br /&gt;
&lt;br /&gt;
Selbst signiertes Zertifikat erstellen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/cert.key -out /etc/nginx/cert.crt &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dabei werden für die Erstellung ein paar Angaben abgefragt. Wichtig ist dabei der Common Name, der identisch mit der später verwendeten Domain oder öffentliche IP-Adresse sein muss.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Country Name (2 letter code) [AU]:AT&lt;br /&gt;
State or Province Name (full name) [Some-State]:Vienna&lt;br /&gt;
Locality Name (eg, city) []:Vienna&lt;br /&gt;
Organization Name (eg, company) []:privat&lt;br /&gt;
Organizational Unit Name (eg, section) []:privat&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:meine_domain_oder_ip&lt;br /&gt;
Email Address []:admin@meinedomain&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nginx neustarten, um die Änderungen und das Zertifikat zu übernehmen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;$ sudo service nginx reload &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der folgende Aufruf sollten bereits eingerichteten FHEM-Server via Passwort-Abfrage und HTTPS absichern:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;fhemserver&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Fehlerquellen ==&lt;br /&gt;
=== Beim Aufruf http://&amp;lt;fhempi&amp;gt; wird nur eine &amp;quot;Wilkommen bei nginx&amp;quot;-Seite angezeigt, statt der erwartete Login-Screen ===&lt;br /&gt;
Nach einer Neuinstallation dem Autor selber passiert. Fehler war, dass die nginx-Default-Konfiuguration noch aktiv war. Der Link zur Default-Konfiguration muss entfernt werden, bzw. gleich komplett gelöscht werden&lt;br /&gt;
&lt;br /&gt;
=== Wenn ich mich einlogge, bekomme ich nur einen 500 internal Server error. Ich habe garantiert alles richtig konfiguriert! ===&lt;br /&gt;
Ebenfalls dem Autor nach einer Neuinstallation passiert: Fehler war, dass das Passwort durch einen Copy &amp;amp; Paste-Fehler falsch eingetragen wurde. Der Fehlerfall kann umgangen werden, indem zuerst die .htpasswd-Datei gelöscht wird und der User und ein simples Passwort neu angelegt werden. Danach mit einer neuen Browser-Session Fhem ansurfen (am besten Firefox im Privat-Modus, damit sämtliche Cookies &amp;amp; sonstiges Buffering umgangen wird)&lt;br /&gt;
&lt;br /&gt;
== Alternative: Nutzung des NGINX Proxy Managers ==&lt;br /&gt;
FHEM ist kompatibel mit dem [https://nginxproxymanager.com NGINX Proxy Manager], welcher sich insbesondere für Docker-Umgebungen eignet. Falls eine Trennung zwischen mobilen Endgeräten und größeren Bildschirmen notwendig ist, dann kann dies über separate Subdomains erfolgen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig:&#039;&#039;&#039; Die FHEM-WEB-Instanz ist mit HTTPS und komplexen Passworten abzusichern.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Einstellungen&lt;br /&gt;
!Details&lt;br /&gt;
!&lt;br /&gt;
!SSL&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
|Domain Names:&lt;br /&gt;
|fhem.mydomain.com&lt;br /&gt;
|SSL Certificate&lt;br /&gt;
|Request a new SSL certificate&lt;br /&gt;
|-&lt;br /&gt;
|Scheme:&lt;br /&gt;
|https&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Forward Hostname / IP:&lt;br /&gt;
|fhem (hier kann der Docker-interne Service Name verwendet werden)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Port:&lt;br /&gt;
|8083&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Zusatzeinstellungen:&lt;br /&gt;
|Block Common Exploits&lt;br /&gt;
&lt;br /&gt;
Wegsocket Support&lt;br /&gt;
|Zusatzeinstellungen:&lt;br /&gt;
|Force SSL&lt;br /&gt;
&lt;br /&gt;
HSTS&lt;br /&gt;
&lt;br /&gt;
HTTP/2 Support&lt;br /&gt;
&lt;br /&gt;
HSTS Subdomains&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Quellen &amp;amp; weiterführende Links ==&lt;br /&gt;
* [https://www.digitalocean.com/community/tutorials/how-to-create-an-ssl-certificate-on-nginx-for-ubuntu-14-04 How To Create an SSL Certificate on Nginx for Ubuntu 14.04]&lt;br /&gt;
* [https://linuxconfig.org/setting-up-nginx-reverse-proxy-server-on-debian-linux Setting up Nginx Reverse Proxy server on Debian Linux]&lt;br /&gt;
* [https://www.digitalocean.com/community/tutorials/how-to-set-up-password-authentication-with-nginx-on-ubuntu-14-04 How To Set Up Password Authentication with Nginx on Ubuntu 14.04]&lt;br /&gt;
* [https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure Wikipedia: HTTPS]&lt;br /&gt;
* [https://de.wikipedia.org/wiki/Transport_Layer_Security Wikipedia: TLS]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>LordVoodoo</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HTTPS-Absicherung_%26_Authentifizierung_via_nginx_Webserver&amp;diff=38247</id>
		<title>HTTPS-Absicherung &amp; Authentifizierung via nginx Webserver</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HTTPS-Absicherung_%26_Authentifizierung_via_nginx_Webserver&amp;diff=38247"/>
		<updated>2023-04-08T04:32:34Z</updated>

		<summary type="html">&lt;p&gt;LordVoodoo: Abschnitt NGINX Proxy Manager&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ähnlich wie im Artikel [[Apache Authentication Proxy]] kann FHEM auch mit dem schlankeren nginx Webserver abgesichert werden. Nach diesem Artikel ist die Kommunikation zum FHEM-Server via HTTPS verschlüsselt und eine Authentifizierung nur via Benutzername und Passwort möglich. Externer Zugriff aus dem eigenen Netzwerk/Internet soll damit unterbunden werden; die Kommunikation und Authentifizierung findet verschlüsselt statt.&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Vorausgesetzt wird eine funktionierende FHEM Installation. Die dadurch erbrachten Linux Kenntnisse reichen für die Umsetzung dieses Artikels. Weiterführende Links zu Zertifikaten und dem nginx-Webserver befinden sich im Anhang des Artikels.&lt;br /&gt;
&lt;br /&gt;
Ausgegangen wird von einer FHEM-Installation, die auf Port 8083 via HTTP hört. Dieser Port wird abgesichert, indem er nur noch lokal und nicht mehr über das Netzwerk erreichbar ist. Anfragen auf Port 80 (HTTP, nginx) werden weitergeleitet zum lokalen Port 443 (HTTPS, nginx), der wiederum einen Reverse Proxy auf den Port 8083 (HTTPS, fhem) einrichtet. Mit leichten Modifizierungen könnte nginx auch auf einem separaten Server betrieben werden. Die benötigten Zertifikate für die HTTPS Verschlüsselung können eigenhändig angelegt werden. Der/die autorisierten Benutzer werden in einer verschlüsselten Datei hinterlegt, die nginx für die Authentifizierung benutzt.&lt;br /&gt;
&lt;br /&gt;
Getestet wurde das Setup auf einem Raspberry Pi (Raspbian - basierend auf Debian 8 und 9) und fhem 5.7 bzw. fhem 5.8. Die beschriebenen Befehle sollten sich ohne weiteres auf Ubuntu oder andere Debian-Derivate übertragen lassen. Das beschriebene Konzept lässt sich aber auf jedes Unix-Derivat anwenden.&lt;br /&gt;
&lt;br /&gt;
==Unterscheidung von Browser auf PC und mobilen Endgeräten==&lt;br /&gt;
&lt;br /&gt;
Zusätzlich kann man mit nginx sehr bequem zwischen PC und mobilen Endgeräten unterscheiden und damit verschiedene FHEMWEB - Instanzen aufrufen.&lt;br /&gt;
&lt;br /&gt;
==Anpassungen: fhem-Config==&lt;br /&gt;
In der FHEM-Konfiguration muss sichergestellt werden, dass kein Client außerhalb des Servers zugreifen kann. Dazu muss das normalerweise gesetzte Flag global von jeglicher Konfiguration entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# define telnetPort telnet 7072 global&lt;br /&gt;
&lt;br /&gt;
define WEB FHEMWEB 8083&lt;br /&gt;
attr WEB stylesheetPrefix dark&lt;br /&gt;
# attr WEB HTTPS&lt;br /&gt;
&lt;br /&gt;
define WEBphone FHEMWEB 8084&lt;br /&gt;
attr WEBphone stylesheetPrefix darksmallscreen&lt;br /&gt;
&lt;br /&gt;
# define WEBtablet FHEMWEB 8085 global&lt;br /&gt;
# attr WEBtablet stylesheetPrefix touchpad&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
fhem neustarten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt; $ sudo service fhem stop &amp;amp;&amp;amp; sudo service fhem start &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installation: nginx als reverse Proxy ==&lt;br /&gt;
nginx installieren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;$ sudo apt-get install nginx &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach im Pfad &#039;&#039;&#039;/etc/nginx/sites-available&#039;&#039;&#039; eine neue Proxy Konfiguration anlegen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;$ sudo touch /etc/nginx/sites-available/reverse-proxy&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Inhalt der Datei &#039;&#039;&#039;reverse-proxy&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;go&amp;quot;&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 80;&lt;br /&gt;
    return 301 https://$host$request_uri;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
&lt;br /&gt;
    listen 443;&lt;br /&gt;
    server_name fhempi;&lt;br /&gt;
&lt;br /&gt;
    # check user agent&lt;br /&gt;
    if ($http_user_agent ~* &#039;(iPhone|iPod|Opera Mini|Android.*Mobile|NetFront|PSP|BlackBerry|Windows Phone)&#039;) {&lt;br /&gt;
    set $ua_type &amp;quot;@mobile&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate           /etc/nginx/cert.crt;&lt;br /&gt;
    ssl_certificate_key       /etc/nginx/cert.key;&lt;br /&gt;
&lt;br /&gt;
    ssl on;&lt;br /&gt;
    ssl_session_cache  builtin:1000  shared:SSL:10m;&lt;br /&gt;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;&lt;br /&gt;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;&lt;br /&gt;
    ssl_prefer_server_ciphers on;&lt;br /&gt;
&lt;br /&gt;
    access_log            /var/log/nginx/fhem.access.log;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
&lt;br /&gt;
      proxy_set_header        Host $host;&lt;br /&gt;
      proxy_set_header        X-Real-IP $remote_addr;&lt;br /&gt;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
      proxy_set_header        X-Forwarded-Proto $scheme;&lt;br /&gt;
      proxy_http_version      1.1;&lt;br /&gt;
&lt;br /&gt;
      # Gehe zu FHEMWEB wenn kein mobiler Browser&lt;br /&gt;
      if ($ua_type != &amp;quot;@mobile&amp;quot;){&lt;br /&gt;
          proxy_pass          http://localhost:8083;&lt;br /&gt;
      }&lt;br /&gt;
      # Gehe zu FHEMWEB smallscreen wenn mobiler Browser&lt;br /&gt;
      if ($ua_type = &amp;quot;@mobile&amp;quot;){&lt;br /&gt;
          proxy_pass          http://localhost:8084;&lt;br /&gt;
      }&lt;br /&gt;
      proxy_read_timeout  90;&lt;br /&gt;
      #proxy_read_timeout  20736000;&lt;br /&gt;
      #proxy_buffering     off;&lt;br /&gt;
&lt;br /&gt;
      # User Sickboy&#039;s Erweiterung für verschlüsselte Websocket-Kommunikation (siehe Diskussionsseite)&lt;br /&gt;
      # Für normale Benutzer derzeit kommentiert, vom Autor Andremotz noch bisher ungetestet&lt;br /&gt;
      #  ... daher derzeit auskommentiert&lt;br /&gt;
      # Wird für &#039;longpoll&#039; benötigt (z.B. bei FTUI)&lt;br /&gt;
      #set $my_http_upgrade &amp;quot;&amp;quot;;&lt;br /&gt;
      #set $my_connection &amp;quot;Connection&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
      #if ($http_upgrade = &amp;quot;websocket&amp;quot;) {&lt;br /&gt;
      #  set $my_http_upgrade $http_upgrade;&lt;br /&gt;
      #  set $my_connection &amp;quot;upgrade&amp;quot;;&lt;br /&gt;
      #}&lt;br /&gt;
      &lt;br /&gt;
      #proxy_set_header Upgrade $my_http_upgrade;&lt;br /&gt;
      #proxy_set_header Connection $my_connection;&lt;br /&gt;
&lt;br /&gt;
      auth_basic &amp;quot;Restricted Content&amp;quot;;&lt;br /&gt;
      auth_basic_user_file /etc/nginx/.htpasswd;&lt;br /&gt;
&lt;br /&gt;
      # proxy_redirect      http://localhost:8083 https://localhost;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mit dieser Konfiguration werden zwei Server-Instanzen auf Port 80 und Port 443 angelegt. Surft ein Browser/eine App Port 80 an, wird er umgehend zum verschlüsselten Port 443 weitergeleitet. Die Zertifikate befinden sich im lokalen Verzeichnis unter /etc/nginx und verschlüsselt wird via TLS.&lt;br /&gt;
&lt;br /&gt;
Nginx&#039; Default-Konfiguration muss noch deaktiviert und die Reverse-Proxy-Einstellungen verlinkt werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ sudo unlink /etc/nginx/sites-enabled/default&lt;br /&gt;
$ sudo ln -s /etc/nginx/sites-available/reverse-proxy /etc/nginx/sites-enabled/reverse-proxy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis: Ein User hatte für mich nicht nachvollziehbare Probleme und empfiehlt folgende Settings:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;go&amp;quot;&amp;gt;&lt;br /&gt;
   proxy_read_timeout  2073600;&lt;br /&gt;
   proxy_buffering off;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== User anlegen für Authentifizierung ==&lt;br /&gt;
Der Username und das verschlüsselte Passwort werden mit den folgenden Kommandos in die Datei ’’ ’/etc/nginx/.htpasswd’’’ geschrieben, das nginx in der Konfiguration für die User-Authentifizierung benutzt.&lt;br /&gt;
&lt;br /&gt;
Username &#039;&#039;&#039;maxmustermann&#039;&#039;&#039; anlegen (Doppelpunkt nach Username nicht übersehen!):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;$ sudo sh -c &amp;quot;echo -n &#039;maxmustermann:&#039; &amp;gt;&amp;gt; /etc/nginx/.htpasswd&amp;quot; &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Passwort-Prompt aufrufen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;$ sudo sh -c &amp;quot;openssl passwd -apr1 &amp;gt;&amp;gt; /etc/nginx/.htpasswd&amp;quot; &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zertifikatserstellung == &lt;br /&gt;
Erst durch die Zertifikate ist eine verschlüsselte Kommunikation zwischen Browser und nginx möglich&lt;br /&gt;
Beide beschriebenen Optionen sind dabei gleichermaßen sicher. Damit allerdings nicht jedes ausgestelle Zertifikat vertraut wird, gibt es das Konzept der Certificate Authorities (&#039;CA&#039;, näheres siehe Links). Jeder gängige Browser warnt den Benutzer vor einem Zertifikat, das von keiner Thrusted Authority ausgestellt wurde, bietet jedoch dem Benutzer die Möglichkeit, trotzdem fortzufahren. Durch die Tatsache, dass das Zertifikat selbst erstellt und signiert wird, kann diese Warnung im Browser später getrost umgangen werden. &lt;br /&gt;
&lt;br /&gt;
Selbst signiertes Zertifikat erstellen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/cert.key -out /etc/nginx/cert.crt &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dabei werden für die Erstellung ein paar Angaben abgefragt. Wichtig ist dabei der Common Name, der identisch mit der später verwendeten Domain oder öffentliche IP-Adresse sein muss.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Country Name (2 letter code) [AU]:AT&lt;br /&gt;
State or Province Name (full name) [Some-State]:Vienna&lt;br /&gt;
Locality Name (eg, city) []:Vienna&lt;br /&gt;
Organization Name (eg, company) []:privat&lt;br /&gt;
Organizational Unit Name (eg, section) []:privat&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:meine_domain_oder_ip&lt;br /&gt;
Email Address []:admin@meinedomain&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nginx neustarten, um die Änderungen und das Zertifikat zu übernehmen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;$ sudo service nginx reload &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der folgende Aufruf sollten bereits eingerichteten FHEM-Server via Passwort-Abfrage und HTTPS absichern:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;fhemserver&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Fehlerquellen ==&lt;br /&gt;
=== Beim Aufruf http://&amp;lt;fhempi&amp;gt; wird nur eine &amp;quot;Wilkommen bei nginx&amp;quot;-Seite angezeigt, statt der erwartete Login-Screen ===&lt;br /&gt;
Nach einer Neuinstallation dem Autor selber passiert. Fehler war, dass die nginx-Default-Konfiuguration noch aktiv war. Der Link zur Default-Konfiguration muss entfernt werden, bzw. gleich komplett gelöscht werden&lt;br /&gt;
&lt;br /&gt;
=== Wenn ich mich einlogge, bekomme ich nur einen 500 internal Server error. Ich habe garantiert alles richtig konfiguriert! ===&lt;br /&gt;
Ebenfalls dem Autor nach einer Neuinstallation passiert: Fehler war, dass das Passwort durch einen Copy &amp;amp; Paste-Fehler falsch eingetragen wurde. Der Fehlerfall kann umgangen werden, indem zuerst die .htpasswd-Datei gelöscht wird und der User und ein simples Passwort neu angelegt werden. Danach mit einer neuen Browser-Session Fhem ansurfen (am besten Firefox im Privat-Modus, damit sämtliche Cookies &amp;amp; sonstiges Buffering umgangen wird)&lt;br /&gt;
&lt;br /&gt;
== Alternative: Nutzung des NGINX Proxy Managers ==&lt;br /&gt;
FHEM ist kompatibel mit dem [https://nginxproxymanager.com NGINX Proxy Manager], welcher sich insbesondere für Docker-Umgebungen eignet. Falls eine Trennung zwischen mobilen Endgeräten und größeren Bildschirmen notwendig ist, dann kann dies über separate Subdomains erfolgen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig:&#039;&#039;&#039; Die FHEM-WEB-Instanz ist mit HTTPS und komplexen Passworten abzusichern.&lt;br /&gt;
&lt;br /&gt;
Einstellungen:&lt;br /&gt;
&lt;br /&gt;
Port: 8083&lt;br /&gt;
&lt;br /&gt;
aktivieren&lt;br /&gt;
&lt;br /&gt;
aktivieren&lt;br /&gt;
&lt;br /&gt;
SSL:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Details&lt;br /&gt;
!&lt;br /&gt;
!SSL&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
|Domain Names:&lt;br /&gt;
|fhem.mydomain.com&lt;br /&gt;
|SSL Certificate&lt;br /&gt;
|Request a new SSL certificate&lt;br /&gt;
|-&lt;br /&gt;
|Scheme:&lt;br /&gt;
|https&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Forward Hostname / IP:&lt;br /&gt;
|fhem (hier kann der Docker-interne Service Name verwendet werden)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Port:&lt;br /&gt;
|8083&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Zusatzeinstellungen:&lt;br /&gt;
|Block Common Exploits&lt;br /&gt;
&lt;br /&gt;
Wegsocket Support&lt;br /&gt;
|Zusatzeinstellungen:&lt;br /&gt;
|Force SSL aktivieren&lt;br /&gt;
&lt;br /&gt;
HSTS aktivieren&lt;br /&gt;
&lt;br /&gt;
HTTP/2 Support aktivieren&lt;br /&gt;
&lt;br /&gt;
HSTS Subdomains aktivieren&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Quellen &amp;amp; weiterführende Links ==&lt;br /&gt;
* [https://www.digitalocean.com/community/tutorials/how-to-create-an-ssl-certificate-on-nginx-for-ubuntu-14-04 How To Create an SSL Certificate on Nginx for Ubuntu 14.04]&lt;br /&gt;
* [https://linuxconfig.org/setting-up-nginx-reverse-proxy-server-on-debian-linux Setting up Nginx Reverse Proxy server on Debian Linux]&lt;br /&gt;
* [https://www.digitalocean.com/community/tutorials/how-to-set-up-password-authentication-with-nginx-on-ubuntu-14-04 How To Set Up Password Authentication with Nginx on Ubuntu 14.04]&lt;br /&gt;
* [https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure Wikipedia: HTTPS]&lt;br /&gt;
* [https://de.wikipedia.org/wiki/Transport_Layer_Security Wikipedia: TLS]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>LordVoodoo</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=TV_Programm&amp;diff=37690</id>
		<title>TV Programm</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=TV_Programm&amp;diff=37690"/>
		<updated>2022-11-20T09:02:51Z</updated>

		<summary type="html">&lt;p&gt;LordVoodoo: /* Variante 4 (RSS Daten einlesen): */  Auslesen des rss-Feed mittels des Moduls rssFeed ohne Umweg über eine rss2json-Konvertierung. Der vorher genannte Dienst rss2json.com cached die Ergebnisse und so erhält man ohne dynamische URL-Anpassung, z.B. timestamp als Zusatzparameter in der URL, keine Zeitgenossen Ergebnisse. Weiterhin hat man eine dynamische Sortierreihenfolge, beim rssFeed scheint diese fix zu sein.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sich das aktuelle Fernsehprogramm in FHEM anzeigen zu lassen, ist leider gar nicht so einfach. Die einzelnen Anbieter stellen keine entsprechenden Schnittstellen zur Verfügung, um auf einfache Art und Weise das aktuelle Fernsehprogramm für beliebige Sender einlesen und darstellen zu können. Mit ein paar Tricks funktioniert es aber trotzdem.&lt;br /&gt;
&lt;br /&gt;
Hierfür gibt es gleich mehrere Ansätze:&lt;br /&gt;
* Im einfachsten Fall bindet man sich ein iframe in die FHEM Weboberfläche ein. Einige Anbieter bieten sogar einen personalisierten Zugriff, so das man sich eine Übersicht nur mit den gewünschten Sendern zusammen stellen kann.&lt;br /&gt;
* Es besteht die Möglichkeit EPG Daten in einem speziellen xmltv Format in die FHEM Installation zu laden (enthält das Programm für 6-7 Tage), diese XML Datei zu parsen und dann in FHEM z.B. über eine readingsGroup darzustellen.&lt;br /&gt;
* Für Linux und auch Windows sind Tools verfügbar, mit denen man die Seiten von verschiedenen TV Programmanbietern grabben und daraus eine XML Datei im xmltv Format erstellen kann (enthält das Programm von 1-14 Tagen je nach Anbieter). Einer der bekanntesten Vertreter ist WebGrab++. Diese XML Datei kann dann wieder in FHEM eingelesen und angezeigt werden z.B. über eine readingsGroup. Das Parsen der Daten ist mit einem sehr hohen Traffic verbunden, so das hier die vorher erwähnten Methoden vorzuziehen sind.&lt;br /&gt;
* Es gibt Webseiten, die das TV Programm als rss zur Verfügung stellen. Darüber hinaus gibt es Services die online rss zu json konvertieren. Kombiniert man nun beides, dann kann man mit httpmod das Ganze mit wenigen Zeilen einlesen.&lt;br /&gt;
* Über httpmod könnte man eine Webseite eines TV Programmanbieters zyklisch einlesen und die für FHEM notwendigen Daten extrahieren. Von dieser Methode ist dringend abzuraten, da diese einen enormen Traffic sowohl für einen selbst, als auch für den Anbieter bedeutet. Aus diesem Grund soll diese Methode hier auch nicht dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
== Variante 1 (iframe): ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define wl_TV weblink iframe &amp;lt;Webseite des TV Programmanbieters z.B. http://www.klack.de/fernsehprogramm/was-laeuft-gerade/0/0/all.html&amp;gt;&lt;br /&gt;
attr wl_TV htmlattr width=&amp;quot;1024&amp;quot; height=&amp;quot;768&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Attribut legt die Größe des iframes fest und kann beliebig angepasst werden.&lt;br /&gt;
&lt;br /&gt;
== Variante 2 (Download der EPG Daten): ==&lt;br /&gt;
&lt;br /&gt;
Dieser Ansatz ist bereits etwas komplizierter, aber immer noch sehr einfach einzubinden.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitungen: ===&lt;br /&gt;
==== Fehlende Perl Module installieren: ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libxml-bare-perl libdatetime-perl wget xz-utils&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die ersten beiden Bibliotheken werden benötigt, um die XML Datei zu parsen. wget wird benötigt um die Datei zu downloaden und xz enthält den Unpacker für die runtergeladene Datei.&lt;br /&gt;
&lt;br /&gt;
==== Pfad für den Download anlegen und mit den entsprechenden Rechten versehen: ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mkdir /opt/fhem/tv&lt;br /&gt;
sudo chown fhem:dialout /opt/fhem/tv&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis soll später die mit wget runtergeladene XML Datei landen.&lt;br /&gt;
&lt;br /&gt;
==== 99_myUtils.pm erweitern: ====&lt;br /&gt;
&lt;br /&gt;
Dieser Code kann einfach in die Zwischenablage kopiert und in die Datei 99_myUtils.pm eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub rgUnfold($$)&lt;br /&gt;
{&lt;br /&gt;
  my ($device, $reading) = @_;&lt;br /&gt;
  my $title = ReadingsVal($device, $reading.&#039;title&#039;, &#039;na&#039;);&lt;br /&gt;
  my $desc = ReadingsVal($device, $reading.&#039;stitle&#039;, &#039;na&#039;).&amp;quot;\n\n&amp;quot;.&lt;br /&gt;
             ReadingsVal($device, $reading.&#039;desc&#039;, &#039;na&#039;);&lt;br /&gt;
&lt;br /&gt;
  $title =~ s/(.{1,45}|\S{46,})(?:\s[^\S\r\n]*|\Z)/$1&amp;lt;br&amp;gt;/g;&lt;br /&gt;
  $desc =~ s/&amp;lt;br&amp;gt;/\n/g;&lt;br /&gt;
  $desc =~ s/(.{1,65}|\S{66,})(?:\s[^\S\r\n]*|\Z)/$1&amp;lt;br&amp;gt;/g; &lt;br /&gt;
  $desc =~ s/[\r\&#039;\&amp;quot;]/ /g;&lt;br /&gt;
  $desc =~ s/[\n]|\\n/&amp;lt;br&amp;gt;/g;&lt;br /&gt;
  return &amp;quot;&amp;lt;a href=\&amp;quot;#!\&amp;quot; onclick=\&amp;quot;FW_okDialog(&#039;&amp;quot;.$desc.&amp;quot;&#039;)\&amp;quot;&amp;gt;&amp;quot;.$title.&amp;quot;&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Dummy Device anlegen: ====&lt;br /&gt;
&lt;br /&gt;
Dieses Device dient zur Datenhaltung. Hier werden immer die nächsten 3 Sendungen und die 3 Primetime Sendungen des aktuellen Tages als Readings abgelegt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define dmy_TV dummy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Perl Script einrichten: ====&lt;br /&gt;
&lt;br /&gt;
Den folgenden Code in die Datei tv.pl kopieren und in den Ordner /opt/fhem/tv/tv.pl kopieren: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
use utf8;&lt;br /&gt;
use Date::Parse;&lt;br /&gt;
use Encode qw(encode_utf8 decode_utf8);&lt;br /&gt;
use XML::Bare 0.53 qw(forcearray);&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
my $channelFilter = qr/^(?:ARD\.|ZDF\.|Sat1\.|RTL\.|RTL2\.|Pro7\.|DMax\.|Vox\.|Kabel\.|KabelEinsClassic\.|KabelEinsDoku\.|ntv\.|ProSiebenMaxx\.|Sixx\.|TLC\.|N24Doku\.|SonyEntertainmentTV\.|AandE\.|TNTSerie\.|AnimalPlanet\.|History\.|Kinowelt\.|NatGeoHD\.|PLANET\.|Silverline\.|13thStreet\.|AXN\.|SciFi\.|TNTFilm\.)/;&lt;br /&gt;
my $timeAdjust = 0;&lt;br /&gt;
&lt;br /&gt;
#my $channelFilter = qr/^(?:ARD|ZDF$|SAT\.1|RTL$|RTL II|PRO 7|DMAX|VOX|KABEL 1|13TH STREET|ANIMAL PLANET|Silverline|TNT Film|N24|kabel eins classics|ProSieben MAXX|Syfy|AE|TLC|AXN|sixx|Kinowelt TV|History)/;&lt;br /&gt;
#my $timeAdjust = 86400;&lt;br /&gt;
&lt;br /&gt;
# internal variable&lt;br /&gt;
my $timepiece = 0;&lt;br /&gt;
&lt;br /&gt;
eval &amp;quot;use Time::Piece&amp;quot;;&lt;br /&gt;
$timepiece = 1 if (!$@);&lt;br /&gt;
&lt;br /&gt;
sub xmltv2epoch($)&lt;br /&gt;
{&lt;br /&gt;
  my $t = shift;&lt;br /&gt;
&lt;br /&gt;
  if (1 == $timepiece)&lt;br /&gt;
  {&lt;br /&gt;
    return Time::Piece-&amp;gt;strptime($t, &#039;%Y%m%d%H%M%S %z&#039;)-&amp;gt;epoch;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    substr($t, 8, 0) = &#039;T&#039;;&lt;br /&gt;
&lt;br /&gt;
    return str2time($t);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub FmtDateTime($)&lt;br /&gt;
{&lt;br /&gt;
  my @t = localtime(shift);&lt;br /&gt;
  return sprintf(&amp;quot;%04d-%02d-%02d %02d:%02d:%02d&amp;quot;, $t[5]+1900, $t[4]+1, $t[3], $t[2], $t[1], $t[0]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub filterText($)&lt;br /&gt;
{&lt;br /&gt;
  my $text = shift;&lt;br /&gt;
&lt;br /&gt;
  $text =~ s/[&amp;quot;`;&#039;\r]//g;&lt;br /&gt;
  $text =~ s/[\n]/&amp;lt;br&amp;gt;/g;&lt;br /&gt;
&lt;br /&gt;
  return $text;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub tvParse($;$)&lt;br /&gt;
{&lt;br /&gt;
  my ($device, $mode) = @_;&lt;br /&gt;
  my $obj = XML::Bare-&amp;gt;new(file =&amp;gt; &#039;/opt/fhem/tv/rytecDE_Basic&#039;);&lt;br /&gt;
  my $xml = $obj-&amp;gt;parse();&lt;br /&gt;
  my $lastChannel = &#039;&#039;;&lt;br /&gt;
  my $reading = &#039;&#039;;&lt;br /&gt;
  my $i = 0;&lt;br /&gt;
  my $n = 0;&lt;br /&gt;
  my $k = 0;&lt;br /&gt;
  my $primeTime = substr(FmtDateTime(time() + $timeAdjust), 0, 11).&#039;20:14:00&#039;;&lt;br /&gt;
  my $sendTelnet = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (!$@)&lt;br /&gt;
  {&lt;br /&gt;
    my $old = time() + $timeAdjust;&lt;br /&gt;
&lt;br /&gt;
    foreach (@{forcearray($xml-&amp;gt;{&#039;tv&#039;}{&#039;programme&#039;})})&lt;br /&gt;
    {&lt;br /&gt;
      if ($_-&amp;gt;{&#039;channel&#039;}{&#039;value&#039;} =~ $channelFilter)&lt;br /&gt;
      {&lt;br /&gt;
        my $stop = xmltv2epoch($_-&amp;gt;{&#039;stop&#039;}{&#039;value&#039;});&lt;br /&gt;
&lt;br /&gt;
        # filter old stuff&lt;br /&gt;
        if ($stop &amp;gt; $old)&lt;br /&gt;
        {&lt;br /&gt;
          if ($lastChannel ne $_-&amp;gt;{&#039;channel&#039;}{&#039;value&#039;})&lt;br /&gt;
          {&lt;br /&gt;
            $lastChannel = $_-&amp;gt;{&#039;channel&#039;}{&#039;value&#039;};&lt;br /&gt;
            $reading = $_-&amp;gt;{&#039;channel&#039;}{&#039;value&#039;};&lt;br /&gt;
            $reading =~ s/[\.\s]//g;&lt;br /&gt;
            $reading =~ s/de$//;&lt;br /&gt;
            $i = 0;&lt;br /&gt;
            $n = 0;&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if ($i &amp;lt; 3 &amp;amp;&amp;amp; (!defined($mode) || &#039;next&#039; eq $mode))&lt;br /&gt;
          {&lt;br /&gt;
            my $fi = sprintf(&amp;quot;%03d&amp;quot;, $i);&lt;br /&gt;
            my $start = xmltv2epoch($_-&amp;gt;{&#039;start&#039;}{&#039;value&#039;});&lt;br /&gt;
            my $readingName;&lt;br /&gt;
            my $readingValue;&lt;br /&gt;
&lt;br /&gt;
            $readingName = &#039;next_&#039;.$reading.&#039;_&#039;.$fi.&#039;_bdate&#039;;&lt;br /&gt;
            $readingValue = substr(FmtDateTime($start), 0, 10);&lt;br /&gt;
            $sendTelnet .= &amp;quot;;setreading $device $readingName $readingValue&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            $readingName = &#039;next_&#039;.$reading.&#039;_&#039;.$fi.&#039;_btime&#039;;&lt;br /&gt;
            $readingValue = substr(FmtDateTime($start), 11, 8);&lt;br /&gt;
            $sendTelnet .= &amp;quot;;setreading $device $readingName $readingValue&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            #$readingName = &#039;next_&#039;.$reading.&#039;_&#039;.$fi.&#039;_edate&#039;;&lt;br /&gt;
            #$readingValue = substr(FmtDateTime($stop), 0, 10);&lt;br /&gt;
            #$sendTelnet .= &amp;quot;;setreading $device $readingName $readingValue&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            #$readingName = &#039;next_&#039;.$reading.&#039;_&#039;.$fi.&#039;_etime&#039;;&lt;br /&gt;
            #$readingValue = substr(FmtDateTime($stop), 11, 8);&lt;br /&gt;
            #$sendTelnet .= &amp;quot;;setreading $device $readingName $readingValue&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            $readingName = &#039;next_&#039;.$reading.&#039;_&#039;.$fi.&#039;_title&#039;;&lt;br /&gt;
            $readingValue = filterText(@{forcearray($_-&amp;gt;{&#039;title&#039;})}[0]-&amp;gt;{&#039;value&#039;});&lt;br /&gt;
            $sendTelnet .= &amp;quot;;setreading $device $readingName $readingValue&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            $readingName = &#039;next_&#039;.$reading.&#039;_&#039;.$fi.&#039;_stitle&#039;;&lt;br /&gt;
            if (exists($_-&amp;gt;{&#039;sub-title&#039;}{&#039;value&#039;}))&lt;br /&gt;
            {&lt;br /&gt;
              $readingValue = filterText($_-&amp;gt;{&#039;sub-title&#039;}{&#039;value&#039;});&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
              $readingValue = &#039;na&#039;;&lt;br /&gt;
            }&lt;br /&gt;
            $sendTelnet .= &amp;quot;;setreading $device $readingName $readingValue&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            $readingName = &#039;next_&#039;.$reading.&#039;_&#039;.$fi.&#039;_desc&#039;;&lt;br /&gt;
            if (exists($_-&amp;gt;{&#039;desc&#039;}{&#039;value&#039;}))&lt;br /&gt;
            {&lt;br /&gt;
              $readingValue = filterText($_-&amp;gt;{&#039;desc&#039;}{&#039;value&#039;});&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
              $readingValue = &#039;na&#039;;&lt;br /&gt;
            }&lt;br /&gt;
            $sendTelnet .= &amp;quot;;setreading $device $readingName $readingValue&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            $i++;&lt;br /&gt;
            $k++;&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if ($n &amp;lt; 3 &amp;amp;&amp;amp; (!defined($mode) || &#039;prime&#039; eq $mode))&lt;br /&gt;
          {&lt;br /&gt;
            my $start = xmltv2epoch($_-&amp;gt;{&#039;start&#039;}{&#039;value&#039;});&lt;br /&gt;
            my $fmtStart = FmtDateTime($start);&lt;br /&gt;
            my $bdate = substr($fmtStart, 0, 10);&lt;br /&gt;
            my $btime = substr($fmtStart, 11, 8);&lt;br /&gt;
&lt;br /&gt;
            if ($bdate.&#039; &#039;.$btime gt $primeTime)&lt;br /&gt;
            {&lt;br /&gt;
              my $fn = sprintf(&amp;quot;%03d&amp;quot;, $n);&lt;br /&gt;
              my $readingName;&lt;br /&gt;
              my $readingValue;&lt;br /&gt;
&lt;br /&gt;
              $readingName = &#039;prime_&#039;.$reading.&#039;_&#039;.$fn.&#039;_bdate&#039;;&lt;br /&gt;
              $readingValue = substr(FmtDateTime($start), 0, 10);&lt;br /&gt;
              $sendTelnet .= &amp;quot;;setreading $device $readingName $readingValue&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
              $readingName = &#039;prime_&#039;.$reading.&#039;_&#039;.$fn.&#039;_btime&#039;;&lt;br /&gt;
              $readingValue = substr(FmtDateTime($start), 11, 8);&lt;br /&gt;
              $sendTelnet .= &amp;quot;;setreading $device $readingName $readingValue&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
              #$readingName = &#039;prime_&#039;.$reading.&#039;_&#039;.$fn.&#039;_edate&#039;;&lt;br /&gt;
              #$readingValue = substr(FmtDateTime($stop), 0, 10);&lt;br /&gt;
              #$sendTelnet .= &amp;quot;;setreading $device $readingName $readingValue&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
              #$readingName = &#039;prime_&#039;.$reading.&#039;_&#039;.$fn.&#039;_etime&#039;;&lt;br /&gt;
              #$readingValue = substr(FmtDateTime($stop), 11, 8);&lt;br /&gt;
              #$sendTelnet .= &amp;quot;;setreading $device $readingName $readingValue&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
              $readingName = &#039;prime_&#039;.$reading.&#039;_&#039;.$fn.&#039;_title&#039;;&lt;br /&gt;
              $readingValue = filterText(@{forcearray($_-&amp;gt;{&#039;title&#039;})}[0]-&amp;gt;{&#039;value&#039;});&lt;br /&gt;
              $sendTelnet .= &amp;quot;;setreading $device $readingName $readingValue&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
              $readingName = &#039;prime_&#039;.$reading.&#039;_&#039;.$fn.&#039;_stitle&#039;;&lt;br /&gt;
              if (exists($_-&amp;gt;{&#039;sub-title&#039;}{&#039;value&#039;}))&lt;br /&gt;
              {&lt;br /&gt;
                $readingValue = filterText($_-&amp;gt;{&#039;sub-title&#039;}{&#039;value&#039;});&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                $readingValue = &#039;na&#039;;&lt;br /&gt;
              }&lt;br /&gt;
              $sendTelnet .= &amp;quot;;setreading $device $readingName $readingValue&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
              $readingName = &#039;prime_&#039;.$reading.&#039;_&#039;.$fn.&#039;_desc&#039;;&lt;br /&gt;
              if (exists($_-&amp;gt;{&#039;desc&#039;}{&#039;value&#039;}))&lt;br /&gt;
              {&lt;br /&gt;
                $readingValue = filterText($_-&amp;gt;{&#039;desc&#039;}{&#039;value&#039;});&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                $readingValue = &#039;na&#039;;&lt;br /&gt;
              }&lt;br /&gt;
              $sendTelnet .= &amp;quot;;setreading $device $readingName $readingValue&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
              $n++;&lt;br /&gt;
              $k++;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          if ($k &amp;gt;= 10)&lt;br /&gt;
          {&lt;br /&gt;
            #system(&#039;/opt/fhem/fhem.pl 7072 &amp;quot;&#039;.$sendTelnet.&#039;&amp;quot;&#039;);&lt;br /&gt;
            my $result = `perl /opt/fhem/fhem.pl 7072 &amp;quot;$sendTelnet&amp;quot;`;&lt;br /&gt;
&lt;br /&gt;
            $k = 0;&lt;br /&gt;
            $sendTelnet = &#039;&#039;;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (&#039;&#039; ne $sendTelnet)&lt;br /&gt;
    {&lt;br /&gt;
      #system(&#039;/opt/fhem/fhem.pl 7072 &amp;quot;&#039;.$sendTelnet.&#039;&amp;quot;&#039;);&lt;br /&gt;
      my $result = `perl /opt/fhem/fhem.pl 7072 &amp;quot;$sendTelnet&amp;quot;`;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub tvMerge($$)&lt;br /&gt;
{&lt;br /&gt;
  my ($dstName, $srcName) = @_;&lt;br /&gt;
  my $fh;&lt;br /&gt;
  my $dst;&lt;br /&gt;
  my $src;&lt;br /&gt;
  my $start = &#039;&#039;;&lt;br /&gt;
  my $channels1 = &#039;&#039;;&lt;br /&gt;
  my $channels2 = &#039;&#039;;&lt;br /&gt;
  my $programms1 = &#039;&#039;;&lt;br /&gt;
  my $programms2 = &#039;&#039;;&lt;br /&gt;
  my $end = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  open($fh, &#039;&amp;lt;&#039;, $dstName) or die &amp;quot;Can&#039;t open file $!&amp;quot;;&lt;br /&gt;
  read($fh, $dst, -s $fh);&lt;br /&gt;
  close($fh);&lt;br /&gt;
&lt;br /&gt;
  open($fh, &#039;&amp;lt;&#039;, $srcName) or die &amp;quot;Can&#039;t open file $!&amp;quot;;&lt;br /&gt;
  read($fh, $src, -s $fh);&lt;br /&gt;
  close($fh);&lt;br /&gt;
&lt;br /&gt;
  if ($dst =~ /^(.*?)&amp;lt;channel/s)&lt;br /&gt;
  {&lt;br /&gt;
    $start = $1;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ($dst =~ /&amp;lt;\/programme&amp;gt;(?!.*&amp;lt;\/programme&amp;gt;)(.*)$/s)&lt;br /&gt;
  {&lt;br /&gt;
    $end = $1;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  while ($dst =~ /(\s*&amp;lt;channel\s.*?&amp;lt;\/channel&amp;gt;)/sg)&lt;br /&gt;
  {&lt;br /&gt;
    $channels1 .= $1;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  while ($dst =~ /(\s*&amp;lt;programme\s.*?&amp;lt;\/programme&amp;gt;)/sg)&lt;br /&gt;
  {&lt;br /&gt;
    $programms1 .= $1;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  while ($src =~ /(\s*&amp;lt;channel\s.*?&amp;lt;\/channel&amp;gt;)/sg)&lt;br /&gt;
  {&lt;br /&gt;
    $channels2 .= $1;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  while ($src =~ /(\s*&amp;lt;programme\s.*?&amp;lt;\/programme&amp;gt;)/sg)&lt;br /&gt;
  {&lt;br /&gt;
    $programms2 .= $1;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  open($fh, &#039;&amp;gt;&#039;, $dstName) or die &amp;quot;Can&#039;t open file $!&amp;quot;;&lt;br /&gt;
  print $fh $start.$channels1.$channels2.$programms1.$programms2.$end;&lt;br /&gt;
  close($fh);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub tvDownload()&lt;br /&gt;
{&lt;br /&gt;
  # other server&lt;br /&gt;
  # http://www.xmltvepg.nl/rytecDE_Basic.xz&lt;br /&gt;
  # http://91.121.106.172/~rytecepg/epg_data/rytecDE_Basic.xz&lt;br /&gt;
  # http://www.vuplus-community.net/rytec/rytecDE_Common.xz&lt;br /&gt;
  # http://www.xmltvepg.nl/rytecDE_Common.xz&lt;br /&gt;
  # http://91.121.106.172/~rytecepg/epg_data/rytecDE_Common.xz&lt;br /&gt;
  # http://www.vuplus-community.net/rytec/rytecDE_SportMovies.xz&lt;br /&gt;
  # http://www.xmltvepg.nl/rytecDE_SportMovies.xz&lt;br /&gt;
  # http://91.121.106.172/~rytecepg/epg_data/rytecDE_SportMovies.xz&lt;br /&gt;
  my $output = qx(wget http://www.vuplus-community.net/rytec/rytecDE_Basic.xz -O /opt/fhem/tv/rytecDE_Basic.xz 2&amp;gt;&amp;amp;1);&lt;br /&gt;
  #my $output = qx(wget http://192.168.178.100:8083/fhem/www/images/guide.xml -O /opt/fhem/tv/rytecDE_Basic 2&amp;gt;&amp;amp;1);&lt;br /&gt;
  #print $output;&lt;br /&gt;
  $output = qx(xz -df /opt/fhem/tv/rytecDE_Basic.xz 2&amp;gt;&amp;amp;1);&lt;br /&gt;
  #print $output;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub tvDownloadMerge()&lt;br /&gt;
{&lt;br /&gt;
  # other server&lt;br /&gt;
  # http://www.xmltvepg.nl/rytecDE_Basic.xz&lt;br /&gt;
  # http://91.121.106.172/~rytecepg/epg_data/rytecDE_Basic.xz&lt;br /&gt;
  # http://www.vuplus-community.net/rytec/rytecDE_Common.xz&lt;br /&gt;
  # http://www.xmltvepg.nl/rytecDE_Common.xz&lt;br /&gt;
  # http://91.121.106.172/~rytecepg/epg_data/rytecDE_Common.xz&lt;br /&gt;
  # http://www.vuplus-community.net/rytec/rytecDE_SportMovies.xz&lt;br /&gt;
  # http://www.xmltvepg.nl/rytecDE_SportMovies.xz&lt;br /&gt;
  # http://91.121.106.172/~rytecepg/epg_data/rytecDE_SportMovies.xz&lt;br /&gt;
  my $output = qx(wget http://www.vuplus-community.net/rytec/rytecDE_Basic.xz -O /opt/fhem/tv/rytecDE_Basic.xz 2&amp;gt;&amp;amp;1);&lt;br /&gt;
  #print $output;&lt;br /&gt;
  $output = qx(xz -df /opt/fhem/tv/rytecDE_Basic.xz 2&amp;gt;&amp;amp;1);&lt;br /&gt;
  #print $output;&lt;br /&gt;
  $output = qx(wget http://www.vuplus-community.net/rytec/rytecDE_Common.xz -O /opt/fhem/tv/rytecDE_Common.xz 2&amp;gt;&amp;amp;1);&lt;br /&gt;
  #print $output;&lt;br /&gt;
  $output = qx(xz -df /opt/fhem/tv/rytecDE_Common.xz 2&amp;gt;&amp;amp;1);&lt;br /&gt;
  #print $output;&lt;br /&gt;
  tvMerge(&#039;/opt/fhem/tv/rytecDE_Basic&#039;, &#039;/opt/fhem/tv/rytecDE_Common&#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my $d = shift || die &amp;quot;Need a device!\n&amp;quot;;&lt;br /&gt;
my $m = shift || die &amp;quot;Need a mode!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# mode &#039;parse&#039;: update next and prime&lt;br /&gt;
# mode &#039;next&#039; : update next only&lt;br /&gt;
# mode &#039;prime&#039;: update prime only&lt;br /&gt;
if (&#039;download&#039; eq $m)&lt;br /&gt;
{&lt;br /&gt;
  tvDownload();&lt;br /&gt;
}&lt;br /&gt;
elsif (&#039;downloadMerge&#039; eq $m)&lt;br /&gt;
{&lt;br /&gt;
  tvDownloadMerge();&lt;br /&gt;
}&lt;br /&gt;
elsif (&#039;parse&#039; eq $m)&lt;br /&gt;
{&lt;br /&gt;
  tvParse($d);&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
  tvParse($d, $m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
exit;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sowohl das Verzeichnis, als auch das Script selbst muss mit den entsprechenden Rechten versehen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chmod 744 /opt/fhem/tv/tv.pl&lt;br /&gt;
sudo chown fhem:dialout /opt/fhem/tv/tv.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei Bedarf kann nun innerhalb des Scriptes die Senderliste angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Jetzt muss der Download einmalig von der Konsole (nicht mit der FHEM Befehlszeile verwechseln!) gestartet werden, da man ansonsten mehrere Tage warten muss, bis alles funktioniert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
perl /opt/fhem/tv/tv.pl dmy_TV downloadMerge&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach muss die entstandene Datei /opt/fhem/tv/rytecDE_Basic mit den richtigen Rechten ausgestattet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chown fhem:dialout /opt/fhem/tv/rytecDE_Basic&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== at Devices anlegen: ====&lt;br /&gt;
&lt;br /&gt;
3 &amp;quot;at&amp;quot; Devices müssen angelegt werden. Eins für den Download (alle 3 Tage 1x), eins für das Parsen der aktuellen Daten ins Dummy Device (alle 15 Minuten) und eins für das Parsen der Primtime Sendungen (einmal am Tag). Die 3 &amp;quot;at&amp;quot; sind als raw Definitionen kopiert und können auch als solche wieder angelegt werden. Dazu irgend ein Device öffnen, ganz unten auf &amp;quot;Raw definition&amp;quot; klicken und alles entfernen. Den Code von hier einfügen und ausführen und die Devices sind angelegt. Jedes at Device muss separat angelegt werden!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod at_TV_DOWNLOAD at *00:10:00 {if ((1 == $wday) || (4 == $wday)) {fhem(&amp;quot;\&amp;quot;perl /opt/fhem/tv/tv.pl dmy_TV downloadMerge\&amp;quot;&amp;quot;)}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod at_TV_UPDATE at +*00:15:00 &amp;quot;perl /opt/fhem/tv/tv.pl dmy_TV next&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod at_TV_UPDATE_PRIME at *00:15:00 &amp;quot;perl /opt/fhem/tv/tv.pl dmy_TV prime&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind die Vorbereitungen abgeschlossen!&lt;br /&gt;
&lt;br /&gt;
=== Dummy Device mit Daten füllen: ===&lt;br /&gt;
&lt;br /&gt;
Dieser Vorgang muss nur einmalig gemacht werden, damit sofort Ergebnisse sichtbar sind und man nicht erst 15 Minuten warten muss.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set at_TV_UPDATE execNow&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== readingsGroups anlegen: ===&lt;br /&gt;
&lt;br /&gt;
Zuletzt müssen wir uns noch 2 readingsGroups anlegen, damit das aktuelle TV Programm in FHEM auch dargestellt werden kann. Die readingsGroups müssen, wie zuvor die at Devices, als Raw Import importiert werden!:&lt;br /&gt;
&lt;br /&gt;
Aktuelle Sendungen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod rg_TV readingsGroup &amp;lt;Sender&amp;gt;,&amp;lt;ab&amp;gt;,&amp;lt;Aktuelle Sendung&amp;gt;,&amp;lt;|&amp;gt;,&amp;lt;ab&amp;gt;,&amp;lt;Sendung&amp;gt;,&amp;lt;|&amp;gt;,&amp;lt;ab&amp;gt;,&amp;lt;Sendung&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/ard&amp;gt;,next_ARD_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_ARD_000_&#039;)}@next_ARD_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_ARD_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_ARD_001_&#039;)}@next_ARD_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_ARD_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_ARD_002_&#039;)}@next_ARD_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/zdf&amp;gt;,next_ZDF_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_ZDF_000_&#039;)}@next_ZDF_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_ZDF_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_ZDF_001_&#039;)}@next_ZDF_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_ZDF_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_ZDF_002_&#039;)}@next_ZDF_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/sat1&amp;gt;,next_Sat1_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_Sat1_000_&#039;)}@next_Sat1_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_Sat1_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_Sat1_001_&#039;)}@next_Sat1_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_Sat1_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_Sat1_002_&#039;)}@next_Sat1_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/rtl&amp;gt;,next_RTL_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_RTL_000_&#039;)}@next_RTL_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_RTL_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_RTL_001_&#039;)}@next_RTL_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_RTL_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_RTL_002_&#039;)}@next_RTL_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/rtl2&amp;gt;,next_RTL2_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_RTL2_000_&#039;)}@next_RTL2_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_RTL2_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_RTL2_001_&#039;)}@next_RTL2_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_RTL2_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_RTL2_002_&#039;)}@next_RTL2_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/pro7&amp;gt;,next_Pro7_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_Pro7_000_&#039;)}@next_Pro7_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_Pro7_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_Pro7_001_&#039;)}@next_Pro7_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_Pro7_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_Pro7_002_&#039;)}@next_Pro7_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/dmax&amp;gt;,next_DMax_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_DMax_000_&#039;)}@next_DMax_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_DMax_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_DMax_001_&#039;)}@next_DMax_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_DMax_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_DMax_002_&#039;)}@next_DMax_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/vox&amp;gt;,next_Vox_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_Vox_000_&#039;)}@next_Vox_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_Vox_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_Vox_001_&#039;)}@next_Vox_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_Vox_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_Vox_002_&#039;)}@next_Vox_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/kabel1&amp;gt;,next_Kabel_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_Kabel_000_&#039;)}@next_Kabel_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_Kabel_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_Kabel_001_&#039;)}@next_Kabel_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_Kabel_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_Kabel_002_&#039;)}@next_Kabel_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/kabel1classic&amp;gt;,next_KabelEinsClassic_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_KabelEinsClassic_000_&#039;)}@next_KabelEinsClassic_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_KabelEinsClassic_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_KabelEinsClassic_001_&#039;)}@next_KabelEinsClassic_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_KabelEinsClassic_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_KabelEinsClassic_002_&#039;)}@next_KabelEinsClassic_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/13thstreet&amp;gt;,next_13thStreet_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_13thStreet_000_&#039;)}@next_13thStreet_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_13thStreet_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_13thStreet_001_&#039;)}@next_13thStreet_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_13thStreet_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_13thStreet_002_&#039;)}@next_13thStreet_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/silverline&amp;gt;,next_Silverline_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_Silverline_000_&#039;)}@next_Silverline_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_Silverline_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_Silverline_001_&#039;)}@next_Silverline_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_Silverline_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_Silverline_002_&#039;)}@next_Silverline_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/tntfilm&amp;gt;,next_TNTFilm_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_TNTFilm_000_&#039;)}@next_TNTFilm_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_TNTFilm_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_TNTFilm_001_&#039;)}@next_TNTFilm_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_TNTFilm_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_TNTFilm_002_&#039;)}@next_TNTFilm_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/axn&amp;gt;,next_AXN_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_AXN_000_&#039;)}@next_AXN_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_AXN_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_AXN_001_&#039;)}@next_AXN_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_AXN_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_AXN_002_&#039;)}@next_AXN_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/sonytv&amp;gt;,next_SonyEntertainmentTV_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_SonyEntertainmentTV_000_&#039;)}@next_SonyEntertainmentTV_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_SonyEntertainmentTV_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_SonyEntertainmentTV_001_&#039;)}@next_SonyEntertainmentTV_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_SonyEntertainmentTV_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_SonyEntertainmentTV_002_&#039;)}@next_SonyEntertainmentTV_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/kinowelt&amp;gt;,next_Kinowelt_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_Kinowelt_000_&#039;)}@next_Kinowelt_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_Kinowelt_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_Kinowelt_001_&#039;)}@next_Kinowelt_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_Kinowelt_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_Kinowelt_002_&#039;)}@next_Kinowelt_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/pro7maxx&amp;gt;,next_ProSiebenMaxx_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_ProSiebenMaxx_000_&#039;)}@next_ProSiebenMaxx_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_ProSiebenMaxx_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_ProSiebenMaxx_001_&#039;)}@next_ProSiebenMaxx_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_ProSiebenMaxx_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_ProSiebenMaxx_002_&#039;)}@next_ProSiebenMaxx_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/sixx&amp;gt;,next_Sixx_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_Sixx_000_&#039;)}@next_Sixx_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_Sixx_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_Sixx_001_&#039;)}@next_Sixx_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_Sixx_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_Sixx_002_&#039;)}@next_Sixx_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/tntserie&amp;gt;,next_TNTSerie_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_TNTSerie_000_&#039;)}@next_TNTSerie_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_TNTSerie_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_TNTSerie_001_&#039;)}@next_TNTSerie_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_TNTSerie_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_TNTSerie_002_&#039;)}@next_TNTSerie_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/syfy&amp;gt;,next_SciFi_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_SciFi_000_&#039;)}@next_SciFi_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_SciFi_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_SciFi_001_&#039;)}@next_SciFi_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_SciFi_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_SciFi_002_&#039;)}@next_SciFi_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/ntv&amp;gt;,next_ntv_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_ntv_000_&#039;)}@next_ntv_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_ntv_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_ntv_001_&#039;)}@next_ntv_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_ntv_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_ntv_002_&#039;)}@next_ntv_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/n24&amp;gt;,next_N24Doku_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_N24Doku_000_&#039;)}@next_N24Doku_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_N24Doku_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_N24Doku_001_&#039;)}@next_N24Doku_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_N24Doku_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_N24Doku_002_&#039;)}@next_N24Doku_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/history&amp;gt;,next_History_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_History_000_&#039;)}@next_History_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_History_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_History_001_&#039;)}@next_History_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_History_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_History_002_&#039;)}@next_History_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/planet&amp;gt;,next_PLANET_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_PLANET_000_&#039;)}@next_PLANET_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_PLANET_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_PLANET_001_&#039;)}@next_PLANET_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_PLANET_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_PLANET_002_&#039;)}@next_PLANET_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/kabel1doku&amp;gt;,next_KabelEinsDoku_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_KabelEinsDoku_000_&#039;)}@next_KabelEinsDoku_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_KabelEinsDoku_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_KabelEinsDoku_001_&#039;)}@next_KabelEinsDoku_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_KabelEinsDoku_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_KabelEinsDoku_002_&#039;)}@next_KabelEinsDoku_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/animalplanet&amp;gt;,next_AnimalPlanet_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_AnimalPlanet_000_&#039;)}@next_AnimalPlanet_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_AnimalPlanet_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_AnimalPlanet_001_&#039;)}@next_AnimalPlanet_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_AnimalPlanet_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_AnimalPlanet_002_&#039;)}@next_AnimalPlanet_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/natgeo&amp;gt;,next_NatGeoHD_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_NatGeoHD_000_&#039;)}@next_NatGeoHD_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_NatGeoHD_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_NatGeoHD_001_&#039;)}@next_NatGeoHD_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_NatGeoHD_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_NatGeoHD_002_&#039;)}@next_NatGeoHD_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/tlc&amp;gt;,next_TLC_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_TLC_000_&#039;)}@next_TLC_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_TLC_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_TLC_001_&#039;)}@next_TLC_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_TLC_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_TLC_002_&#039;)}@next_TLC_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/ae&amp;gt;,next_AandE_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_AandE_000_&#039;)}@next_AandE_000_title&amp;gt;,&amp;lt;|&amp;gt;,next_AandE_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_AandE_001_&#039;)}@next_AandE_001_title&amp;gt;,&amp;lt;|&amp;gt;,next_AandE_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;next_AandE_002_&#039;)}@next_AandE_002_title&amp;gt;&lt;br /&gt;
attr rg_TV alias Aktuelles TV-Programm&lt;br /&gt;
attr rg_TV cellStyle { \&lt;br /&gt;
  &#039;r:1,c:1&#039; =&amp;gt; &#039;style=&amp;quot;color:yellow;;text-align:center;;font-weight:bold;;&amp;quot;&#039;,\&lt;br /&gt;
  &#039;r:1,c:2&#039; =&amp;gt; &#039;style=&amp;quot;color:yellow;;text-align:center;;font-weight:bold;;&amp;quot;&#039;,\&lt;br /&gt;
  &#039;r:1,c:3&#039; =&amp;gt; &#039;style=&amp;quot;color:yellow;;text-align:center;;font-weight:bold;;&amp;quot;&#039;,\&lt;br /&gt;
  &#039;r:1,c:5&#039; =&amp;gt; &#039;style=&amp;quot;color:yellow;;text-align:center;;font-weight:bold;;&amp;quot;&#039;,\&lt;br /&gt;
  &#039;r:1,c:6&#039; =&amp;gt; &#039;style=&amp;quot;color:yellow;;text-align:center;;font-weight:bold;;&amp;quot;&#039;,\&lt;br /&gt;
  &#039;r:1,c:8&#039; =&amp;gt; &#039;style=&amp;quot;color:yellow;;text-align:center;;font-weight:bold;;&amp;quot;&#039;,\&lt;br /&gt;
  &#039;r:1,c:9&#039; =&amp;gt; &#039;style=&amp;quot;color:yellow;;text-align:center;;font-weight:bold;;&amp;quot;&#039;\&lt;br /&gt;
}&lt;br /&gt;
attr rg_TV group TV Programm&lt;br /&gt;
attr rg_TV nonames 1&lt;br /&gt;
attr rg_TV style style=&amp;quot;font-size:16px;;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Primetime Sendungen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod rg_TV_PRIME readingsGroup &amp;lt;Sender&amp;gt;,&amp;lt;ab&amp;gt;,&amp;lt;Sendung&amp;gt;,&amp;lt;|&amp;gt;,&amp;lt;ab&amp;gt;,&amp;lt;Sendung&amp;gt;,&amp;lt;|&amp;gt;,&amp;lt;ab&amp;gt;,&amp;lt;Sendung&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/ard&amp;gt;,prime_ARD_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_ARD_000_&#039;)}@prime_ARD_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_ARD_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_ARD_001_&#039;)}@prime_ARD_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_ARD_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_ARD_002_&#039;)}@prime_ARD_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/zdf&amp;gt;,prime_ZDF_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_ZDF_000_&#039;)}@prime_ZDF_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_ZDF_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_ZDF_001_&#039;)}@prime_ZDF_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_ZDF_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_ZDF_002_&#039;)}@prime_ZDF_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/sat1&amp;gt;,prime_Sat1_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_Sat1_000_&#039;)}@prime_Sat1_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_Sat1_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_Sat1_001_&#039;)}@prime_Sat1_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_Sat1_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_Sat1_002_&#039;)}@prime_Sat1_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/rtl&amp;gt;,prime_RTL_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_RTL_000_&#039;)}@prime_RTL_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_RTL_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_RTL_001_&#039;)}@prime_RTL_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_RTL_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_RTL_002_&#039;)}@prime_RTL_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/rtl2&amp;gt;,prime_RTL2_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_RTL2_000_&#039;)}@prime_RTL2_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_RTL2_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_RTL2_001_&#039;)}@prime_RTL2_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_RTL2_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_RTL2_002_&#039;)}@prime_RTL2_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/pro7&amp;gt;,prime_Pro7_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_Pro7_000_&#039;)}@prime_Pro7_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_Pro7_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_Pro7_001_&#039;)}@prime_Pro7_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_Pro7_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_Pro7_002_&#039;)}@prime_Pro7_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/dmax&amp;gt;,prime_DMax_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_DMax_000_&#039;)}@prime_DMax_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_DMax_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_DMax_001_&#039;)}@prime_DMax_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_DMax_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_DMax_002_&#039;)}@prime_DMax_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/vox&amp;gt;,prime_Vox_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_Vox_000_&#039;)}@prime_Vox_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_Vox_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_Vox_001_&#039;)}@prime_Vox_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_Vox_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_Vox_002_&#039;)}@prime_Vox_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/kabel1&amp;gt;,prime_Kabel_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_Kabel_000_&#039;)}@prime_Kabel_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_Kabel_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_Kabel_001_&#039;)}@prime_Kabel_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_Kabel_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_Kabel_002_&#039;)}@prime_Kabel_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/kabel1classic&amp;gt;,prime_KabelEinsClassic_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_KabelEinsClassic_000_&#039;)}@prime_KabelEinsClassic_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_KabelEinsClassic_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_KabelEinsClassic_001_&#039;)}@prime_KabelEinsClassic_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_KabelEinsClassic_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_KabelEinsClassic_002_&#039;)}@prime_KabelEinsClassic_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/13thstreet&amp;gt;,prime_13thStreet_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_13thStreet_000_&#039;)}@prime_13thStreet_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_13thStreet_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_13thStreet_001_&#039;)}@prime_13thStreet_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_13thStreet_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_13thStreet_002_&#039;)}@prime_13thStreet_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/silverline&amp;gt;,prime_Silverline_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_Silverline_000_&#039;)}@prime_Silverline_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_Silverline_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_Silverline_001_&#039;)}@prime_Silverline_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_Silverline_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_Silverline_002_&#039;)}@prime_Silverline_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/tntfilm&amp;gt;,prime_TNTFilm_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_TNTFilm_000_&#039;)}@prime_TNTFilm_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_TNTFilm_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_TNTFilm_001_&#039;)}@prime_TNTFilm_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_TNTFilm_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_TNTFilm_002_&#039;)}@prime_TNTFilm_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/axn&amp;gt;,prime_AXN_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_AXN_000_&#039;)}@prime_AXN_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_AXN_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_AXN_001_&#039;)}@prime_AXN_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_AXN_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_AXN_002_&#039;)}@prime_AXN_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/sonytv&amp;gt;,prime_SonyEntertainmentTV_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_SonyEntertainmentTV_000_&#039;)}@prime_SonyEntertainmentTV_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_SonyEntertainmentTV_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_SonyEntertainmentTV_001_&#039;)}@prime_SonyEntertainmentTV_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_SonyEntertainmentTV_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_SonyEntertainmentTV_002_&#039;)}@prime_SonyEntertainmentTV_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/kinowelt&amp;gt;,prime_Kinowelt_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_Kinowelt_000_&#039;)}@prime_Kinowelt_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_Kinowelt_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_Kinowelt_001_&#039;)}@prime_Kinowelt_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_Kinowelt_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_Kinowelt_002_&#039;)}@prime_Kinowelt_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/pro7maxx&amp;gt;,prime_ProSiebenMaxx_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_ProSiebenMaxx_000_&#039;)}@prime_ProSiebenMaxx_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_ProSiebenMaxx_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_ProSiebenMaxx_001_&#039;)}@prime_ProSiebenMaxx_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_ProSiebenMaxx_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_ProSiebenMaxx_002_&#039;)}@prime_ProSiebenMaxx_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/sixx&amp;gt;,prime_Sixx_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_Sixx_000_&#039;)}@prime_Sixx_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_Sixx_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_Sixx_001_&#039;)}@prime_Sixx_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_Sixx_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_Sixx_002_&#039;)}@prime_Sixx_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/tntserie&amp;gt;,prime_TNTSerie_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_TNTSerie_000_&#039;)}@prime_TNTSerie_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_TNTSerie_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_TNTSerie_001_&#039;)}@prime_TNTSerie_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_TNTSerie_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_TNTSerie_002_&#039;)}@prime_TNTSerie_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/syfy&amp;gt;,prime_SciFi_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_SciFi_000_&#039;)}@prime_SciFi_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_SciFi_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_SciFi_001_&#039;)}@prime_SciFi_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_SciFi_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_SciFi_002_&#039;)}@prime_SciFi_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/ntv&amp;gt;,prime_ntv_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_ntv_000_&#039;)}@prime_ntv_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_ntv_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_ntv_001_&#039;)}@prime_ntv_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_ntv_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_ntv_002_&#039;)}@prime_ntv_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/n24&amp;gt;,prime_N24Doku_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_N24Doku_000_&#039;)}@prime_N24Doku_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_N24Doku_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_N24Doku_001_&#039;)}@prime_N24Doku_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_N24Doku_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_N24Doku_002_&#039;)}@prime_N24Doku_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/history&amp;gt;,prime_History_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_History_000_&#039;)}@prime_History_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_History_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_History_001_&#039;)}@prime_History_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_History_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_History_002_&#039;)}@prime_History_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/planet&amp;gt;,prime_PLANET_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_PLANET_000_&#039;)}@prime_PLANET_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_PLANET_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_PLANET_001_&#039;)}@prime_PLANET_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_PLANET_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_PLANET_002_&#039;)}@prime_PLANET_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/kabel1doku&amp;gt;,prime_KabelEinsDoku_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_KabelEinsDoku_000_&#039;)}@prime_KabelEinsDoku_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_KabelEinsDoku_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_KabelEinsDoku_001_&#039;)}@prime_KabelEinsDoku_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_KabelEinsDoku_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_KabelEinsDoku_002_&#039;)}@prime_KabelEinsDoku_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/animalplanet&amp;gt;,prime_AnimalPlanet_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_AnimalPlanet_000_&#039;)}@prime_AnimalPlanet_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_AnimalPlanet_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_AnimalPlanet_001_&#039;)}@prime_AnimalPlanet_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_AnimalPlanet_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_AnimalPlanet_002_&#039;)}@prime_AnimalPlanet_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/natgeo&amp;gt;,prime_NatGeoHD_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_NatGeoHD_000_&#039;)}@prime_NatGeoHD_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_NatGeoHD_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_NatGeoHD_001_&#039;)}@prime_NatGeoHD_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_NatGeoHD_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_NatGeoHD_002_&#039;)}@prime_NatGeoHD_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/tlc&amp;gt;,prime_TLC_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_TLC_000_&#039;)}@prime_TLC_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_TLC_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_TLC_001_&#039;)}@prime_TLC_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_TLC_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_TLC_002_&#039;)}@prime_TLC_002_title&amp;gt;\&lt;br /&gt;
dmy_TV:&amp;lt;%tv/ae&amp;gt;,prime_AandE_000_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_AandE_000_&#039;)}@prime_AandE_000_title&amp;gt;,&amp;lt;|&amp;gt;,prime_AandE_001_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_AandE_001_&#039;)}@prime_AandE_001_title&amp;gt;,&amp;lt;|&amp;gt;,prime_AandE_002_btime,&amp;lt;{rgUnfold($DEVICE,&#039;prime_AandE_002_&#039;)}@prime_AandE_002_title&amp;gt;&lt;br /&gt;
attr rg_TV_PRIME alias TV-Programm Primetime&lt;br /&gt;
attr rg_TV_PRIME cellStyle { \&lt;br /&gt;
  &#039;r:1,c:1&#039; =&amp;gt; &#039;style=&amp;quot;color:yellow;;text-align:center;;font-weight:bold;;&amp;quot;&#039;,\&lt;br /&gt;
  &#039;r:1,c:2&#039; =&amp;gt; &#039;style=&amp;quot;color:yellow;;text-align:center;;font-weight:bold;;&amp;quot;&#039;,\&lt;br /&gt;
  &#039;r:1,c:3&#039; =&amp;gt; &#039;style=&amp;quot;color:yellow;;text-align:center;;font-weight:bold;;&amp;quot;&#039;,\&lt;br /&gt;
  &#039;r:1,c:5&#039; =&amp;gt; &#039;style=&amp;quot;color:yellow;;text-align:center;;font-weight:bold;;&amp;quot;&#039;,\&lt;br /&gt;
  &#039;r:1,c:6&#039; =&amp;gt; &#039;style=&amp;quot;color:yellow;;text-align:center;;font-weight:bold;;&amp;quot;&#039;,\&lt;br /&gt;
  &#039;r:1,c:8&#039; =&amp;gt; &#039;style=&amp;quot;color:yellow;;text-align:center;;font-weight:bold;;&amp;quot;&#039;,\&lt;br /&gt;
  &#039;r:1,c:9&#039; =&amp;gt; &#039;style=&amp;quot;color:yellow;;text-align:center;;font-weight:bold;;&amp;quot;&#039;\&lt;br /&gt;
}&lt;br /&gt;
attr rg_TV_PRIME group TV Programm&lt;br /&gt;
attr rg_TV_PRIME nonames 1&lt;br /&gt;
attr rg_TV_PRIME style style=&amp;quot;font-size:16px;;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Icons der readingsGroups müsst ihr natürlich anpassen! Ladet euch einfach irgendwo die Senderlogos runter und speichert diese unter /opt/fhem/www/images/default/tv. Vergesst bitte nicht die entsprechenden Rechte zu setzen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mkdir /opt/fhem/www/images/default/tv&lt;br /&gt;
sudo chown fhem:dialout /opt/fhem/www/images/default/tv&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jetzt die Icons in das Verzeichnis kopieren und die entsprechenden Rechte für diese Dateien vergeben.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chown fhem:dialout *.png&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Falls die Icons nicht dargestellt werden sollten, könnte eventuell der folgende Befehl helfen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set WEB rereadicons&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variante 3 (EPG Daten selbst erstellen): ==&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitungen: ===&lt;br /&gt;
&lt;br /&gt;
Mono und screen installieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
sudo apt-get install mono-runtime libmono-system-data4.0-cil libmono-system-web4.0-cil screen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
WebGrab++ downloaden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget http://www.webgrabplus.com/sites/default/files/download/SW/V2.1.0/WebGrabPlus_V2.1_install.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
WebGrab++ entpacken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar -zxvf WebGrabPlus_V2.1_install.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
WebGrab++ installieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd .wg++&lt;br /&gt;
./install.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun müssen zuerst einmal die Konfigurationsdateien angepasst werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo nano WebGrab++.config.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Settings können z.B. verwendet werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;guide.xml&amp;lt;/filename&amp;gt;&lt;br /&gt;
  &amp;lt;mode&amp;gt;n&amp;lt;/mode&amp;gt;&lt;br /&gt;
  &amp;lt;postprocess grab=&amp;quot;y&amp;quot; run=&amp;quot;y&amp;quot;&amp;gt;rex&amp;lt;/postprocess&amp;gt;&lt;br /&gt;
  &amp;lt;user-agent&amp;gt;Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0&amp;lt;/user-agent&amp;gt;&lt;br /&gt;
  &amp;lt;logging&amp;gt;on&amp;lt;/logging&amp;gt;&lt;br /&gt;
  &amp;lt;retry time-out=&amp;quot;15&amp;quot;&amp;gt;5&amp;lt;/retry&amp;gt;&lt;br /&gt;
  &amp;lt;timespan&amp;gt;6&amp;lt;/timespan&amp;gt;&lt;br /&gt;
  &amp;lt;update&amp;gt;i&amp;lt;/update&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann müssen noch die Channels eingetragen werden. Diese Channels können von der Webseite von WebGrab++ kopiert werden. Hier einmal Beispielhaft eine Zeile:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;channel update=&amp;quot;i&amp;quot; site=&amp;quot;tvmovie.de&amp;quot; site_id=&amp;quot;ard&amp;quot; xmltv_id=&amp;quot;ARD&amp;quot;&amp;gt;ARD&amp;lt;/channel&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt die Datei speichern und schliessen.&lt;br /&gt;
&lt;br /&gt;
Jetzt muss noch die Datei für die Nachbearbeitung angepasst werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd rex&lt;br /&gt;
sudo nano rex.config.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier können diese Settings verwendet werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;title lang=&amp;quot;de&amp;quot;&amp;gt;&#039;title&#039;&amp;lt;/title&amp;gt;&lt;br /&gt;
  &amp;lt;sub-title lang=&amp;quot;de&amp;quot;&amp;gt;{Episode: &#039;episode&#039; }&#039;subtitle&#039;&amp;lt;/sub-title&amp;gt;&lt;br /&gt;
  &amp;lt;desc lang=&amp;quot;de&amp;quot;&amp;gt;&#039;description&#039;{\nProduced in: &#039;productiondate&#039;. }{\nCategory: &#039;category(, )&#039;. }{\nActors: &#039;actor(, )&#039;}{\nDirector: &#039;director(, )&#039;}{\nPresenter: &#039;presenter(, )&#039;}&amp;lt;/desc&amp;gt;&lt;br /&gt;
  &amp;lt;credits&amp;gt;&amp;lt;/credits&amp;gt;&lt;br /&gt;
  &amp;lt;episode-num&amp;gt;&amp;lt;/episode-num&amp;gt;&lt;br /&gt;
  &amp;lt;date&amp;gt;&amp;lt;/date&amp;gt;&lt;br /&gt;
  &amp;lt;category&amp;gt;&amp;lt;/category&amp;gt;&lt;br /&gt;
  &amp;lt;review&amp;gt;{Ratings: &#039;rating(, )&#039;.}&amp;lt;/review&amp;gt;&lt;br /&gt;
  &amp;lt;rating&amp;gt;&amp;lt;/rating&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Datei wieder abspeichern und schliessen.&lt;br /&gt;
&lt;br /&gt;
=== EPG Daten grabben und aufbereiten: ===&lt;br /&gt;
&lt;br /&gt;
Bitte vorsichtig sein, das grabben und aufbereiten der Daten kann extrem lange dauern. Fangt am besten mit einem oder 2 Sendern an, um einen ersten Eindruck zu bekommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/.wg++&lt;br /&gt;
./run.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WebGrab++ in Crontab einbinden: ===&lt;br /&gt;
&lt;br /&gt;
Einfach nur das Script aufzurufen hat bei mir nicht funktioniert. Ich habe deshalb screen verwenden müssen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
30 0 * * 1,4 /usr/bin/screen -dmS webgrab /home/&amp;lt;user z.B. pi&amp;gt;/.wg++/run.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit wird der Vorgang alle 3-4 Tage gestartet und generiert das Programm der nächsten Woche. Die entstandene Datei könnte dann über Variante 2 weiter verarbeitet werden.&lt;br /&gt;
&lt;br /&gt;
== Variante 4 (RSS Daten einlesen): ==&lt;br /&gt;
&lt;br /&gt;
Die Website texxas.de stellt das aktuelle TV-Programm in einem RSS-Feed bereit, dies erzeugt eine sehr geringe Downloadmenge. Die Website unterteilt das Programm in verschiedene Kategorien:&lt;br /&gt;
* Hauptsender (ARD, ZDF, RTL, ProSieben, Sat.1, Kabel1, VOX)&lt;br /&gt;
* Spartensender (Anixe HD, ARTE, Bibel TV, Comedy Central, DMAX, HGTV, Kabel Eins Classics, MTV, One)&lt;br /&gt;
* Regionalsender&lt;br /&gt;
* Dokumentation&lt;br /&gt;
* …&lt;br /&gt;
&lt;br /&gt;
=== rssFeed Device anlegen: ===&lt;br /&gt;
&lt;br /&gt;
Das Attribut rfAllReadingsEvents sorgt dafür, dass EPG-Aktualisierung auch zu Events führen in Verbindung mit event-on-change / event-on-update. Siehe dazu commandref zum Modul rssFeed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod Dev_Mutlimedia_EPG_Spartensender rssFeed http://www.texxas.de/tv/spartensenderJetzt.xml 300&lt;br /&gt;
attr Dev_Mutlimedia_EPG_Spartensender rfAllReadingsEvents 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend liegen je Sender zwei Readings vor:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Reading&lt;br /&gt;
!Wert&lt;br /&gt;
|-&lt;br /&gt;
|n01_title&lt;br /&gt;
|ARD Alpha: Panoramabilder&lt;br /&gt;
|-&lt;br /&gt;
|n01_description&lt;br /&gt;
|20.11.2022 08:20 - 09:45&lt;br /&gt;
|-&lt;br /&gt;
|n02_title&lt;br /&gt;
|ARTE: 27 - Das europäische Magazin&lt;br /&gt;
|-&lt;br /&gt;
|n02_description&lt;br /&gt;
|20.11.2022 09:30 - 10:15&amp;lt;nowiki&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/nowiki&amp;gt;In Europa ist die Sterbehilfe in gerade einmal vier Ländern erlaubt: in den Niederlanden, Belgien, Luxemburg und seit neuestem auch in Spanien. Die Schweiz hat mit der aktiven Sterbehilfe einen alternativen Weg gewählt. In Frankreich hat die nationale Ethikkommission das Thema im September wieder auf den Tisch gebracht und sich für eine &amp;quot;streng geregelte&amp;quot; Form der Sterbehilfe ausgesprochen. Wie sollten kranke Menschen mit Sterbewillen begleitet werden? Unter welchen Umständen ist die akt ...&lt;br /&gt;
|}&lt;br /&gt;
[[Datei:screenshot-2018-04-28-16-28-03.png|200px|thumb|left|Beispiel]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>LordVoodoo</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-CC-RT-DN_Funk-Heizk%C3%B6rperthermostat&amp;diff=34675</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=34675"/>
		<updated>2021-01-30T17:01:15Z</updated>

		<summary type="html">&lt;p&gt;LordVoodoo: Anmerkung ergänzt, nach dem das Vorgehen bei einem Thermostat mit Firmware 1.4 ebenfalls ein Pairing erfolgreich machte. Zuvor immer unvollständig.&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.5 (2020)&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 (mittlere Taste mindestens drei Sekunden drücken, um den Vorgang auszulösen). Vereinzelt muss mehrfach gepairt werden, es wurde auch berichtet, dass dabei die Batterie zwichendurch entfernt und neu eingelegt werden muss.&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 (siehe [https://forum.fhem.de/index.php/topic,41541.msg348044.html#msg348044 diesen Thread]):&lt;br /&gt;
 set &amp;lt;fensterSensor&amp;gt; peerChan 0 &amp;lt;rt_WindowRec&amp;gt;_WindowRec single &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;rt_WindowRec&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;rt_WindowRec&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;nowiki&amp;gt;&amp;lt;button&amp;gt; peerChan 0 &amp;lt;HM-CC-RT-DN&amp;gt;_remote single&amp;lt;/nowiki&amp;gt;&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=&amp;quot;perl&amp;quot;&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! Hat man mehrere unabhängig arbeitende RT&#039;s, muß für jeden auch ein &#039;&#039;&#039;eigenes virtuelles Gerät&#039;&#039;&#039; angelegt werden!  &lt;br /&gt;
&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 (bzw. mehrere, wenn sowohl ein virtueller Fensterkontakt wie ein virtueller Temperaturkanal benötigt werden).&lt;br /&gt;
* peere den Kanal mit dem RT (als Fenster-Kontakt oder als remote, wenn du willst)&lt;br /&gt;
* sende ein postEvent / stelle die neue Temperatur im Kanal ein&lt;br /&gt;
&lt;br /&gt;
=== Fensterkontakte ===&lt;br /&gt;
&#039;&#039;Angelehnt an diese {{Link2Forum|Topic=31078|Message=236245|LinkText=Forenbeitrag}}&#039;&#039;&lt;br /&gt;
 define virtKitchenSensors CUL_HM 221133&lt;br /&gt;
Um das Device als virtuelles zu kennzeichnen benötigt man den folgenden Befehl (legt weitere Attribute an): &lt;br /&gt;
 attr virtKitchenSensors modelForce VIRTUAL&lt;br /&gt;
&lt;br /&gt;
Kanal bzw. Kanäle erstellen:&lt;br /&gt;
 set virtKitchenSensors virtual 1 &lt;br /&gt;
oder (für das Anlegen je eines Kanals für einen Fenster- und Temperatur-Kanal):&lt;br /&gt;
 set virtKitchenSensors virtual 2 &lt;br /&gt;
Als Zwischenergebnis sehen wir in der Detailansicht des &#039;&#039;virtKitchenSensors&#039;&#039; ein bzw. zwei weitere Devices mit Namen &#039;&#039;virtKitchenSensors_Btn1&#039;&#039; bzw. &#039;&#039;virtKitchenSensors_Btn2&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Umbenennen des 1. Kanals: &lt;br /&gt;
 rename virtKitchenSensors_Btn1 virtualKitchenDoor&lt;br /&gt;
&lt;br /&gt;
Danach sollte man das webCmd-Attribut wie folgt vergeben:&lt;br /&gt;
 attr virtualKitchenDoor webCmd postEvent open:postEvent closed &lt;br /&gt;
&lt;br /&gt;
Anschließend peeren und (wer weniger wie den default-Wert von 12°C einstellen möchte) 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;
Einfache Form (nur ein Fensterkontakt im Raum):&lt;br /&gt;
 define notify_virtualKitchenDoor notify Fensterkontakt_1:(open|closed) set virtualKitchenDoor postEvent $EVENT&lt;br /&gt;
Komplexere Form (zwei Fensterkontakte):&lt;br /&gt;
 &amp;lt;nowiki&amp;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;virtualKitchenDoor&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;)}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{Hinweis|Die &#039;&#039;postEvent&#039;&#039;-Anweisung wird unmittelbar an die Funkschnittstelle weitergegeben und löst einen &#039;&#039;burst&#039;&#039; aus.}}&lt;br /&gt;
&lt;br /&gt;
=== Temperatursensoren ===&lt;br /&gt;
&#039;&#039;Angelehnt an diesen {{Link2Forum|Topic=19686|Message=233788|LinkText=Forenbeitrag}}&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Virtuelles HomeMatic Device mit eigener HM Id definieren, (s.o.), es kann auch ein weiterer Kanal des oben erstellten Devices genutzt werden&lt;br /&gt;
&lt;br /&gt;
2. Dem Device einen virtuellen Kanal (Default ist ein virtueller Button) hinzufügen, wieder mit &amp;lt;code&amp;gt;set virtKitchenSensors virtual 1&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;set virtKitchenSensors virtual 2&amp;lt;/code&amp;gt; (2 geht auch, wenn bereits ein erster Kanal vorhanden war).&lt;br /&gt;
&lt;br /&gt;
3. Es ist kein virtueller Button sondern ein virtueller Temperatursensor - darum rename:&lt;br /&gt;
 rename virtKitchenSensors_Btn1 Kitchen_vT_Sensor1&lt;br /&gt;
bzw. &amp;lt;code&amp;gt;rename virtKitchenSensors_Btn2 Kitchen_vT_Sensor1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Virtuellen Peer Sensor mit dem Weather Channel des RT-DN peeren:&lt;br /&gt;
 set Kitchen_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; Kitchen_vT_Sensor1 &lt;br /&gt;
    Kitchen_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. bei jeder Aktualisierung des Messwerts per notify:&lt;br /&gt;
 define at_Kitchen_vT notify myRealKitchenTempSensor:temperature:.* set Kitchen_vT_Sensor1 virtTemp $EVTPART1&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Die &#039;&#039;virtTemp&#039;&#039;-Anweisung ändert zunächst nur den Wert im virtuellen Kanal. Diese wird zu bestimmten Zeiten als &#039;&#039;broadcast&#039;&#039; gesendet. Diese Zeiten kennt der RT und hält sich kurzfristig empfangsbereit.}}&lt;br /&gt;
Sollte es Probleme geben, dass der RT des Öfteren wieder auf seine eigenen Messwerte wechselt, weil die von FHEM errechnete Sendezeit und die vom RT errechnete Empfangszeit zu weit auseinanderliegen, 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;
7. Sicherstellen, dass nicht längerfristig veraltete Temperaturdaten berücksichtigt werden:&lt;br /&gt;
Aufgrund des oben beschriebenen Verfahrens wird der im virtuellen Kanal vorhandene Wert solange immer wieder gesendet, wie dieser dort steht. Fällt z.B. der echte Sensor oder das Interface nicht nur vorübergehend aus, muß der Wert gelöscht werden. Hier ein Vorschlag für ein &#039;&#039;at&#039;&#039;, das alle 15 Minuten alle virtuellen Temperaturwerte löscht, die älter als eine Stunde sind, und damit den Rückfall des jeweiligen RT auf seinen internen Sensor bewirkt:&lt;br /&gt;
 defmod a_delete_outdated_virtTemps at +*00:15 {\&lt;br /&gt;
 my @vTemps = devspec2array(&amp;quot;TYPE=CUL_HM:FILTER=model=VIRTUAL:FILTER=temperature~.+&amp;quot;);;\&lt;br /&gt;
  for my $vTemp (@vTemps) {\&lt;br /&gt;
    CommandDeleteReading(undef,&amp;quot;$vTemp temperature&amp;quot; ) if ReadingsAge($vTemp,&amp;quot;temperature&amp;quot;,0) &amp;gt; HOURSECONDS ;;\&lt;br /&gt;
  }\&lt;br /&gt;
 }&lt;br /&gt;
Erhält der RT eine gewisse Zeitlang (ca. 15 Minuten) keinen Wert von seinem (virtuellen) Peer, schaltet er auf den internen Temperatursensor zurück und signalisiert dies durch ein blinkendes Funksymbol im Display.&lt;br /&gt;
&lt;br /&gt;
=== Exkurs: HMCCUDEV  ===&lt;br /&gt;
{{Hinweis|Das Nachfolgende entspricht dem Stand Janaur 2020. Die HMCCU-Module sind jedoch derzeit in der Weiterentwicklung, so dass es sich ggf. empfiehlt, im Forum nachzufragen.}}&lt;br /&gt;
Das Nutzen externer Sensoren scheint mit HMCCU nicht möglich zu sein, siehe {{Link2Forum|Topic=107134|LinkText=Forenbeitrag: RaspberryMatic (HMCCU) und LaCrosse Temperature als &amp;quot;Wandthermostat&amp;quot;}}, die Weitergabe eines externen Türkontakts ist eventuell  möglich, siehe {{Link2Forum|Topic=106807|LinkText=Forenbeitrag: HMCCU mit Thermostat HM-CC-RT-DN und ZWave Türsensor}}, an anderer Stelle hat der Modulentwickler ausgeführt, es könnten nur {{Link2Forum|Topic=107501|Message=1015944|LinkText=Homematic Geräte}} als Sensoren verwendet werden.&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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#A6A6A6&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#A6A6A6&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#A6A6A6&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#A6A6A6&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; 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=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; 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=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; 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=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; 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=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; 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=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; 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=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; 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=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; 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=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; 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=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; 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=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; 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=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; 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=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; 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=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; 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=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; 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=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; 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=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; 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=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; 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=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; 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=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#333333&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; 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=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#111111&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot; 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;
=== Pairen bei Firmware 1.5 ===&lt;br /&gt;
Das nachfolgende Vorgehen bietet sich ab Firmware 1.5 ab, da sonst das pairen nicht erfolgreich sein wird:&lt;br /&gt;
# Pairing wie angegeben&lt;br /&gt;
# &#039;&#039;&#039;&#039;&#039;GetConfig&#039;&#039;&#039;&#039;&#039; erst, nachdem die Zeit von &#039;&#039;&#039;&#039;&#039;hmPairForSec&#039;&#039;&#039;&#039;&#039; abgelaufen ist&lt;br /&gt;
# burstXmit&lt;br /&gt;
# set &amp;lt;gerät&amp;gt; reset&lt;br /&gt;
# set &amp;lt;gerät&amp;gt; unpair &lt;br /&gt;
# harten HW Reset nach Handbuch am Gerät&lt;br /&gt;
# erneut pairen&lt;br /&gt;
Der Tipp stammt aus [https://de.elv.com/forum/neue-firmware-1.5-an-fhem-uart-modul-hm-mod-rpi-pcb-mit-firmware-1.4.1-7481 diesem Beitrag] im ELV Forum. Dies Vorgang konnte teilweise auch für Geräte mit Firmware 1.4 bestätigt werden.&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>LordVoodoo</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Modul_YAAHM&amp;diff=27774</id>
		<title>Modul YAAHM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Modul_YAAHM&amp;diff=27774"/>
		<updated>2018-08-29T19:30:54Z</updated>

		<summary type="html">&lt;p&gt;LordVoodoo: /* Einstellung des Tages-Profils */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Das Modul stellt eine komfortable Oberfläche bereit, um per Webinterface die zyklische Ausführung von Kommandos - mit Tages- und Wochenprofil - zu konfigurieren&lt;br /&gt;
|ModType=h&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
|ModCmdRef=YAAHM&lt;br /&gt;
|ModForumArea=Unterstuetzende Dienste&lt;br /&gt;
|ModTechName=95_YAAHM.pm&lt;br /&gt;
|ModOwner=Prof. Dr. Peter A. Henning&lt;br /&gt;
}}&lt;br /&gt;
Diese Seite beschreibt die Konfiguration und Verwendung des Moduls 95_YAAHM.pm. &lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
Das Modul &#039;&#039;95_YAAHM.pm&#039;&#039; stellt eine komfortable Oberfläche bereit, um per Webinterface die zyklische Ausführung von Kommandos - mit Tages- und Wochenprofil - zu konfigurieren. Der Titel &#039;&#039;&#039;YAAHM&#039;&#039;&#039; ist das Akronym für &#039;&#039;Yet Another Auto Home Module&#039;&#039;, denn es gibt ja schon verschiedene Module, die den Zeitablauf in einem SmartHome vereinfachen sollen. Warum also noch Eines ?&lt;br /&gt;
&lt;br /&gt;
Ganz einfach: Die Philosophie von YAAHM ist die einfache Bedienbarkeit im Frontend, mit Eingabefeldern und Visualisierungselementen - statt dabei Unmengen von Attributen zu setzen. Dafür gilt es zunächst, verschiedene Begriffe zu verstehen.&lt;br /&gt;
&lt;br /&gt;
== Tages-Typ ==&lt;br /&gt;
Ohne weitere Angaben unterscheidet YAAHM die beiden Tagestypen Wochenende und Werktag.&lt;br /&gt;
Durch das Setzen der Attribute &#039;&#039;vacationDevices&#039;&#039; und &#039;&#039;holidayDevices&#039;&#039;, die jeweils eine komma-separierte Liste aus holiday-Devices oder Calendar-Devices sein können, holt YAAHM sich jeden Morgen kurz nach Mitternacht noch weitere Informationen. Nämlich, ob es sich um einen Ferientag (vacation) oder einen Feiertag (holiday) handelt. Der letztendliche Tagestyp wird dann in einer Priorisierung festgelegt: Feiertag hat die höchste Priorität, gefolgt von Wochenende, Ferientag und Werktag.&lt;br /&gt;
&lt;br /&gt;
Für jedes Wochen-Profil kann man angeben, ob es auch an einem Ferientag (=Fer) und an einem Feiertag (=Fei) gültig sein soll, siehe [[#Einstellung der Wochen-Profile | Wochen-Profile]].&lt;br /&gt;
&lt;br /&gt;
== Tages-Profil ==&lt;br /&gt;
Das Tagesprofil besteht aus einer Kette von Ereignissen (Events), die an jedem Tag zeitgesteuert ablaufen. Welcher Event als letztes durchgeführt wurde, steht im Reading &#039;&#039;&#039;housetime&#039;&#039;&#039;, der vorhergehende Event im Reading &#039;&#039;prev_housetime&#039;&#039; und der vom gegenwärtigen Zeitpunkt aus nächste Event im Reading &#039;&#039;next_housetime&#039;&#039;. Für jedes Event kann eine Liste von FHEM-Kommandos angegeben werden, die dann ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Das Modul ermöglicht mit dem Attribut &#039;&#039;timeHelper&#039;&#039; die Angabe einer Perl-Hilfsfunktion, die zu jedem Event mit den entsprechenden Argumenten aufgerufen wird, siehe [[#Attribute | Attribute]]&lt;br /&gt;
&lt;br /&gt;
Die vordefinierten Events sind nachfolgend aufgeführt:&lt;br /&gt;
*&#039;&#039;Nach Mitternacht&#039;&#039; und &#039;&#039;Vor Mitternacht&#039;&#039; (aftermidnight, beforemidnight) sind Events, die mit einem Offset an jedem Tag nach bzw. vor Mitternacht ausgeführt werden.&lt;br /&gt;
*&#039;&#039;Sonnenaufgang&#039;&#039;, &#039;&#039;Vor Sonnenaufgang&#039;&#039; und &#039;&#039;Nach Sonnenaufgang&#039;&#039; (sunrise, beforesunrise, aftersunrise) sind Events, die an jedem Tag zu Sonnenaufgang bzw. mit einem Offset davor und danach ausgeführt werden. Der Zeitpunkt des Sonnenaufgangs wird aus dem Modul 95_Astro.pm berechnet.&lt;br /&gt;
*&#039;&#039;Sonnenuntergang&#039;&#039;, &#039;&#039;Vor Sonnenuntergang&#039;&#039; und &#039;&#039;Nach Sonnenuntergang&#039;&#039; (sunset, beforesunset, aftersunset) sind Events, die an jedem Tag zu Sonnenuntergang bzw. mit einem Offset davor und danach ausgeführt werden. Der Zeitpunkt des Sonnenuntergangs wird aus dem Modul 95_Astro.pm berechnet.&lt;br /&gt;
*&#039;&#039;Morgen&#039;&#039;, &#039;&#039;Mittag&#039;&#039;, &#039;&#039;Nachmittag&#039;&#039;, &#039;&#039;Abend&#039;&#039; und &#039;&#039;Nacht&#039;&#039; (morning, noon, afternoon, evening, night) sind Events, die zu einer einstellbaren Zeit an jedem Tag ausgeführt werden. Das Reading &#039;&#039;&#039;housephase&#039;&#039;&#039; nimmt zwischen &#039;&#039;Morgen&#039;&#039; und &#039;&#039;Nacht&#039;&#039; den Wert &#039;&#039;Tageszeit&#039;&#039; an, sonst den Wert &#039;&#039;Nachtzeit&#039;&#039;.&lt;br /&gt;
*&#039;&#039;Wecken&#039;&#039; und &#039;&#039;Schlafen&#039;&#039; (wakeup, sleep) sind Events, die durch die beiden Standard-Wochenprofile gleichen Namens ausgelöst werden. Die entsprechenden Zeiten können von Tag zu Tag beliebig variieren.&lt;br /&gt;
&lt;br /&gt;
== Wochen-Profile ==&lt;br /&gt;
Jedes Wochenprofil besteht aus einem Ereignis (Event) je Wochentag. Für dieses Event kann eine Liste von FHEM-Kommandos angegeben werden, die dann ausgeführt werden. Zwei Standard-Wochenprofile &#039;&#039;Wecken&#039;&#039; und &#039;&#039;Schlafen&#039;&#039; sind vordefiniert und können nicht gelöscht werden. Eine beliebige Anzahl weiterer Wochenprofile kann angelegt und wieder gelöscht werden. &lt;br /&gt;
&lt;br /&gt;
Das Modul ermöglicht mit dem Attribut &#039;&#039;timeHelper&#039;&#039; die Angabe einer Perl-Hilfsfunktion, die für die beiden ersten (Standard-)Wochenprofile bei Eintritt des Events mit den entsprechenden Argumenten aufgerufen wird, siehe [[#Attribute | Attribute]].&lt;br /&gt;
&lt;br /&gt;
Für jedes Wochenprofil kann eine &#039;&#039;&#039;manuelle Auslösezeit&#039;&#039;&#039; eingegeben werden. Ist diese später als der gegenwärtige Zeitpunkt, wird sie für den aktuellen Tag verwendet. Ist diese früher als der gegenwärtige Zeitpunkt, wird sie erst am nächsten Tag als Ausnahmezeit verwendet. Lautet die manuelle Auslösezeit &#039;off&#039;, wird der heutige Auslösezeitpunkt abgeschaltet, wenn er noch nicht verstrichen ist - sonst der morgige Auslösezeitpunkt.&lt;br /&gt;
&lt;br /&gt;
== (Nutzungs-)Modus ==&lt;br /&gt;
Der &#039;&#039;&#039;housemode&#039;&#039;&#039; (bzw. (Nutzungs-)Modus) besagt, dass sich das SmartHome in einem der vier Modi &#039;&#039;Normal&#039;&#039;, &#039;&#039;Party&#039;&#039;, &#039;&#039;Abwesenheit&#039;&#039; oder &#039;&#039;Nicht Stören&#039;&#039; befindet. Dabei bedeutet:&lt;br /&gt;
*&#039;&#039;Normal&#039;&#039; (Readingswert normal) = normale Tages- und Wochen-Profile werden angewandt, keine speziellen Anordnungen.&lt;br /&gt;
*&#039;&#039;Party&#039;&#039; (Readingswert party) = kann in Hilfsfunktionen verwendet werden, um spezielle Anordnungen betreffend die Sicherheit und den Übergang in den Nachtzustand zu realisieren. Das Modul selbst sorgt dafür, dass im Party-Modus das SmartHome nicht in einen gesicherten Zustand versetzt werden kann.&lt;br /&gt;
*&#039;&#039;Abwesenheit&#039;&#039; (Readingswert absence) = kann in Hilfsfunktionen verwendet werden, um spezielle Anordnungen zu realisieren. &lt;br /&gt;
*&#039;&#039;Nicht Stören&#039;&#039; (Readingswert donotdisturb) = kann in Hilfsfunktionen verwendet werden, um spezielle Anordnungen zu realisieren. &lt;br /&gt;
Die Festsetzung des Modus bleibt bestehen, bis eine erneute manuelle Änderung durchgeführt wird. Ausnahme: Wenn das Attribut &#039;&#039;modeAuto&#039;&#039; gesetzt wird, kann sich der Modus auch bei bestimmten Events ändern.&lt;br /&gt;
Für jedes Wochen-Profil kann man angeben, ob es auch im Party-Modus (=Par) und bei Abwesenheit (=Abw) gültig sein soll, siehe [[#Einstellung der Wochen-Profile | Wochen-Profile]].&lt;br /&gt;
&lt;br /&gt;
Das Modul ermöglicht mit dem Attribut &#039;&#039;modeHelper&#039;&#039; die Angabe einer Perl-Hilfsfunktion, die zu jedem Wechsel des Modus mit den entsprechenden Argumenten aufgerufen wird, siehe [[#Attribute | Attribute]]&lt;br /&gt;
&lt;br /&gt;
== (Sicherheits-)Zustand ==&lt;br /&gt;
Der &#039;&#039;&#039;housestate&#039;&#039;&#039; (bzw. (Sicherheits-)Zustand) besagt, dass sich das SmartHome in einem der vier Zustände &#039;&#039;Nicht gesichert&#039;&#039;, &#039;&#039;Gesichert&#039;&#039;, &#039;&#039;Geschützt&#039;&#039; oder &#039;&#039;Überwacht&#039;&#039; befindet. Die Festsetzung des Zustands bleibt bestehen, bis eine erneute manuelle Änderung durchgeführt wird. Ausnahme: Wenn das Attribut &#039;&#039;stateAuto&#039;&#039; gesetzt wird, kann sich der Zustand auch bei bestimmten Events ändern. Dabei bedeutet (beispielsweise !)&lt;br /&gt;
**&#039;&#039;Nicht gesichert&#039;&#039; (Readingswert unsecured) = Türen sind unverschlossen, Fenster dürfen geöffnet sein&lt;br /&gt;
**&#039;&#039;Gesichert&#039;&#039; (Readingswert secured) = Türen sind verschlossen, Fenster dürfen nur in Ausnahmefällen geöffnet sein&lt;br /&gt;
**&#039;&#039;Geschützt&#039;&#039; (Readingswert protected) = Türen sind verschlossen, Fenster dürfen nur in Ausnahmefällen geöffnet sein, die Alarmanlage ist scharf geschaltet&lt;br /&gt;
**&#039;&#039;Überwacht&#039;&#039; (Readingswert guarded) = Türen sind verschlossen, Fenster dürfen nur in Ausnahmefällen geöffnet sein, die Alarmanlage ist scharf geschaltet, in regelmäßigen Abständen wird der Zustand des Hauses überprüft und bei Veränderungen irgendwie gemeldet. Vielleicht läuft auch noch eine Anwesenheitssimulation&lt;br /&gt;
&lt;br /&gt;
Das Modul ermöglicht mit dem Attribut &#039;&#039;stateHelper&#039;&#039; die Angabe einer Perl-Hilfsfunktion, die zu jedem Wechsel des Zustands mit den entsprechenden Argumenten aufgerufen wird, siehe [[#Attribute | Attribute]]. Welche FHEM-Devices dabei geschaltet werden, muss also in dieser externen Hilfsfunktion angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Allerdings lässt sich in YAAHM der Schaltzustand dieser Devices periodisch überwachen. Sie werden dazu in das Attribut &#039;stateDevices&#039; eingetragen, siehe unten.&lt;br /&gt;
&lt;br /&gt;
=YAAHM-Device=&lt;br /&gt;
==Installation==&lt;br /&gt;
YAAHM ist Bestandteil der FHEM-Distribution. Die Installation erfolgt über den Standard-Updatemechanisnmus. Zu YAAHM gehören das Modul 95_YAAHM.pm und die Datei yaahm.js in /fhem/www/pgm2&lt;br /&gt;
==Definition==&lt;br /&gt;
Das YAAHM-Device - hier mit dem Namen &#039;&#039;YYY&#039;&#039; versehen - selbst wird über&lt;br /&gt;
 define YYY YAAHM&lt;br /&gt;
definiert. Diese Definition legt einen versteckten Raum &amp;quot;ProfileRoom&amp;quot; an, welcher über einen Weblink im oberen Menü des Webinterfaces erreichbar ist. &lt;br /&gt;
*Der Name dieses Raumes kann durch das Attribut &#039;&#039;hiddenRoom&#039;&#039; geändert werden.&lt;br /&gt;
*Dieses Modul verwendet das globale Attribut &#039;&#039;language&#039;&#039; zur Bestimmung der Anzeigedaten (Standard: EN=english). Für deutsche Ausgabedaten muss in FHEM das Attribut &lt;br /&gt;
 attr global language DE&lt;br /&gt;
gesetzt werden. Für dieses Wiki werden die deutschen Ausgabedaten verwendet.&lt;br /&gt;
&lt;br /&gt;
Beim Anklicken des Begriffes &#039;&#039;Profile&#039;&#039; (eben der genannte Weblink) im oberen Menü des Webinterfaces wird dieser versteckte Raum angezeigt. Er enthält an erster Stelle das YAAHM-Device. Für die Konfiguration dieses Devices siehe den nächsten Abschnitt, für die Bedienung siehe den Abschnitt [Bedienung].&lt;br /&gt;
&lt;br /&gt;
==Set-Befehle ==&lt;br /&gt;
Das YAAHM-Device kennt die folgenden Set-Befehle (&#039;&#039;YYY&#039;&#039; ist duch den tatsächlichen Device-Namen zu ersetzen):&lt;br /&gt;
 set YYY time (after|before)midnight | [before|after]sunrise | [before|after]sunset | morning | noon | afternoon | evening | night | wakeup | sleep&lt;br /&gt;
Erzeugt manuell den entsprechenden Event.&lt;br /&gt;
 set YYY manualnext &amp;amp;lt;timernumber&amp;amp;gt; &amp;amp;lt;time&amp;amp;gt;&lt;br /&gt;
 set YYY manualnext &amp;amp;lt;timername&amp;amp;gt; &amp;amp;lt;time&amp;amp;gt;&lt;br /&gt;
Setzt die manuelle Auslösezeit für das Wochen-Profil (Timer genannt), das durch die Angabe einer fortlaufenden Nummerierung (beginnend bei 0) oder seinen Namen identifiziert wird. Das nicht löschbare Standard-Wochen-Profil &#039;&#039;Wecken&#039;&#039; hat die Timer-Nummer 0, das nicht löschbare Standard-Wochen-Profil &#039;&#039;Schlafen&#039;&#039; hat die Timer-Nummer 1.&lt;br /&gt;
 set YYY mode normal | party | absence | donotdisturb&lt;br /&gt;
Setzt den (Nutzungs-)Modus des SmartHome&lt;br /&gt;
 set YYY state unsecured | secured | protected | guarded&lt;br /&gt;
Setzt den (Sicherheits-)Zustand des SmartHome&lt;br /&gt;
 set YYY checkstate (0|5|10)&lt;br /&gt;
Führe die Überprüfung, ob alle stateDevices (siehe Attribute) für diesen (Sicherheits-)Zustand den richtigen Wert haben, manuell sofort oder mit 5 bzw. 10 Sekunden Verzögerung aus.&lt;br /&gt;
 set YYY correctstate  &lt;br /&gt;
Führe für jedes stateDevice (siehe Attribute), das nicht den richtigen Wert hat, das FHEM-Kommando &#039;&#039;set &amp;lt;stateDevice&amp;gt; &amp;lt;sollzustand&amp;gt;&#039;&#039; aus.&lt;br /&gt;
 set YYY createWeekly &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
 set YYY deleteWeekly &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
Erzeuge oder entferne ein Wochen-Profil mit dem entsprechenden Namen. Die beiden Standard-Wochen-Profile &#039;&#039;Wecken&#039;&#039; und &#039;&#039;Schlafen&#039;&#039; können nicht gelöscht werden.&lt;br /&gt;
 set YYY locked  |unlocked&lt;br /&gt;
Sperre oder entsperre das Überschreiben der Timer, siehe [[#Sperrung | Sperrung]].&lt;br /&gt;
 set YYY save | restore&lt;br /&gt;
Speichere die Daten persistent, oder hole sie aus der betreffenden Datei &#039;&#039;YAAHMFile&#039;&#039; (Achtung für Nutzer der configdb: Das File wird in der Datenbank abgelegt, nicht im Dateisystem).&lt;br /&gt;
&lt;br /&gt;
==Get-Befehle==&lt;br /&gt;
Das YAAHM-Device kennt die folgenden Get-Befehle (&#039;&#039;YYY&#039;&#039; ist duch den tatsächlichen Device-Namen zu ersetzen):&lt;br /&gt;
 get YYY next &amp;amp;lt;timernumber&amp;amp;gt;  &lt;br /&gt;
 get YYY next &amp;amp;lt;timername&amp;amp;gt;  &lt;br /&gt;
 get YYY sayNext &amp;amp;lt;timernumber&amp;amp;gt;  &lt;br /&gt;
 get YYY sayNext &amp;amp;lt;timername&amp;amp;gt;  &lt;br /&gt;
Holt die nächste Auslösezeit für das betreffende Wochen-Profil (Timer genannt). Mit dem Befehl &#039;&#039;next&#039;&#039; erfolgt das in einem Format, das für textuelle Ausgabegeräte geeignet ist, mit dem Befehl &#039;&#039;sayNext&#039;&#039; in einem Format, das für Sprach-Ausgabegeräte geeignet ist. Die Identifikation des Wochen-Profiles (Timer genannt) erfolgt durch die Angabe einer fortlaufenden Nummerierung (beginnend bei 0) oder seinen Namen. Das nicht löschbare Standard-Wochen-Profil &#039;&#039;Wecken&#039;&#039; hat die Timer-Nummer 0, das nicht löschbare Standard-Wochen-Profil &#039;&#039;Schlafen&#039;&#039; hat die Timer-Nummer 1.&lt;br /&gt;
  get YYY version&lt;br /&gt;
Gibt die Versionsnummer des Moduls zurück&lt;br /&gt;
 get YYY template&lt;br /&gt;
Gibt Vorschläge für Helferfunktionen zurück.&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
*Wenn das Attribut &#039;&#039;&#039;timeHelper&#039;&#039;&#039; auf einen Perl-Funktionsnamen gesetzt wird, erfolgt automatisch der Eintrag des Perl-Funktionsnamens in das Aktionsfeld für das Tages-Profil und die Aktionsfelder der beiden ersten (=Standard-)Wochenprofile, verbunden mit dem Argument des entsprechenden Events. Einen entsprechenden Vorschlag für eine solche Helferfunktion kann man sich durch &#039;&#039;get YYY template&#039;&#039; anzeigen lassen.&lt;br /&gt;
&lt;br /&gt;
*Wenn das Attribut &#039;&#039;&#039;modeHelper&#039;&#039;&#039; auf einen Perl-Funktionsnamen gesetzt wird, erfolgt automatisch die Ausführung dieser Funktion (verbunden mit dem Argument des entsprechenden Events) bei einem Wechsel des (Nutzungs-)Modus. Einen entsprechenden Vorschlag für eine solche Helferfunktion kann man sich durch &#039;&#039;get YYY template&#039;&#039; anzeigen lassen.&lt;br /&gt;
*Wenn das Attribut &#039;&#039;&#039;modeAuto&#039;&#039;&#039; auf 1 gesetzt wird, wechselt der (Nutzungs-)Modus automatisch zu bestimmten Events:&lt;br /&gt;
**Die Events &#039;&#039;sleep&#039;&#039; und &#039;&#039;morning&#039;&#039; bewirken, dass der Modus &#039;&#039;Party&#039;&#039; aufgehoben wird und wieder &#039;&#039;Normal&#039;&#039; ist.&lt;br /&gt;
**Der Event &#039;&#039;wakeup&#039;&#039; bewirkt, dass der Modus &#039;&#039;Abwesenheit&#039;&#039; aufgehoben wird und wieder &#039;&#039;Normal&#039;&#039; ist.&lt;br /&gt;
**Jeder Event bewirkt, dass der Modus &#039;&#039;Nicht Stören&#039;&#039; aufgehoben wird und wieder &#039;&#039;Normal&#039;&#039; ist.&lt;br /&gt;
&lt;br /&gt;
*Wenn das Attribut &#039;&#039;&#039;stateHelper&#039;&#039;&#039; auf einen Perl-Funktionsnamen gesetzt wird, erfolgt automatisch die Ausführung dieser Funktion (verbunden mit dem Argument des entsprechenden Events) bei einem Wechsel des (Sicherheits-)Zustands. Einen entsprechenden Vorschlag für eine solche Helferfunktion kann man sich durch &#039;&#039;get YYY template&#039;&#039; anzeigen lassen.&lt;br /&gt;
*Wenn das Attribut &#039;&#039;&#039;stateAuto&#039;&#039;&#039; auf 1 gesetzt wird, wechselt der (Sicherheits-)Zustand automatisch zu bestimmten Events:&lt;br /&gt;
**Wenn der Modus &#039;&#039;Normal&#039;&#039; ist und der Zustand &#039;&#039;Nicht gesichert&#039;&#039; ist, wird bei Eintritt der Events &#039;&#039;sleep&#039;&#039; oder &#039;&#039;night&#039;&#039; der Zustand auf &#039;&#039;Gesichert&#039;&#039; gesetzt.&lt;br /&gt;
**Wenn der Modus &#039;&#039;Party&#039;&#039; durch den Event &#039;&#039;sleep&#039;&#039; verlassen wurde, und der Zustand &#039;&#039;Nicht gesichert&#039;&#039; ist, wird der Zustand auf &#039;&#039;Gesichert&#039;&#039; gesetzt.&lt;br /&gt;
&lt;br /&gt;
*Das Attribut &#039;&#039;&#039;stateDevices&#039;&#039;&#039; enthält eine kommagetrennte Liste von FHEM-Devices, die jeweils gefolgt werden von den erwarteten &#039;&#039;state&#039;&#039;-Readings (getrennt durch ein &amp;quot;:&amp;quot;-Zeichen) für die entsprechenden (Sicherheits-) Zustände, also z.B. für eine Haustür, die in den (Sicherheits-) Zuständen &#039;&#039;Gesichert&#039;&#039;, &#039;&#039;Geschützt&#039;&#039; und &#039;&#039;Überwacht&#039;&#039; abgeschlossen sein soll:&lt;br /&gt;
 HausTuer::locked:locked:locked:locked&lt;br /&gt;
**Ob die korrekte Stellung der jeweiligen Devices erreicht wurde, wird periodisch in jeweils &#039;&#039;&#039;stateInterval&#039;&#039;&#039; Minuten geprüft und in der [[#Zusammenfassung | Zusammenfassung]] angezeigt.&lt;br /&gt;
**Für jedes Device, dessen Zustand nicht der Vorgabe entspricht, wird die im Attribut &#039;&#039;&#039;stateWarning&#039;&#039;&#039; genannte Funktion mit den Argumenten &#039;&#039;Device&#039;&#039;, &#039;&#039;Sollzustand&#039;&#039;, &#039;&#039;Istzustand&#039;&#039; aufgerufen.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;linkname&#039;&#039;&#039; ist der Name für den Link im FHEM-Menü. Default: &#039;&#039;Profile&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;hiddenroom&#039;&#039;&#039; ist der Name für den versteckten Raum, der das YAAHM-Device enthält. Default: &#039;&#039;ProfileRoom&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;lockstate&#039;&#039;&#039; ist der Sperrzustand für das Device, siehe [[#Sperrung | Sperrung]]&lt;br /&gt;
*Wenn das Attribut &#039;&#039;&#039;simulation&#039;&#039;&#039; auf 1 gesetzt wird, werden die Kommandos in den Aktionsfeldern nicht ausgeführt, sondern nur eine Log-Meldung geschrieben.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;holidayDevices&#039;&#039;&#039;, &#039;&#039;&#039;vacationDevices&#039;&#039;&#039; und &#039;&#039;&#039;specialDevices&#039;&#039;&#039; sind attribute, die jeweils eine kommagetrennte Liste von FHEM-Devices enthalten. Diese dürfen vom Typ holiday oder vom Typ calendar sein.&lt;br /&gt;
**holidayDevices enthält die Liste der Feiertage (=höchste Tagespriorität)&lt;br /&gt;
**vacationDevices enthält die Liste der Schulferien (=dritthöchste Tagespriorität)&lt;br /&gt;
**specialDevices enthält eine Liste von Einzelterminen (z.B. der Müllabfuhr)&lt;br /&gt;
*Diese Kalenderdaten werden jeweils kurz nach Mitternacht eingelesen und in der [[#Zusammenfassung | Zusammenfassung]] angezeigt.&lt;br /&gt;
&lt;br /&gt;
=Webinterface=&lt;br /&gt;
In diesem Abschnitt wird die Bedienung des Webinterfaces und damit die Konfiguration der Hausautomatik beschrieben. Um sie zu erreichen, klickt man auf den Begriff &#039;&#039;Profile&#039;&#039; im oberen Menü des Webinterfaces.&lt;br /&gt;
&lt;br /&gt;
Das Webinterface teilt sich in zwei Abschnitte: Die Übersicht (oder toptable), bestehend aus den beiden Flächen &#039;&#039;&#039;Aktion&#039;&#039;&#039; und &#039;&#039;&#039;Zusammenfassung&#039;&#039;&#039;, sowie die Profilbereiche. Die Übersicht lässt sich auch separat als Weblink &#039;&#039;&#039;&amp;lt;YAAHM_Device-Name&amp;gt;_shortlink&#039;&#039;&#039; in einen beliebigen FHEM-Raum einbinden.&lt;br /&gt;
===Aktion===&lt;br /&gt;
[[Datei:action_2.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Im Aktionsfeld werden links der aktuelle Mode (=housemode) und der aktuelle (Sicherheits-) Zustand (housestate) angezeigt. Das rote Kreuz beim Zustand besagt, dass nicht alle in dem Attribut &#039;&#039;&#039;stateDevices&#039;&#039;&#039; definierten FHEM-Devices im korrekten Zustand für diesen (Sicherheits-) Zustand sind. Im Feld rechts daneben befinden sich Buttons zum Wechsel von Mode und Zustand.&lt;br /&gt;
&lt;br /&gt;
Unten befindet sich für jeden Wochentimer ein Eingabefeld für die &#039;nächste manuelle Auslösezeit&#039;. Trägt man dort einen Wert ein, der für den heutigen Tag in der Vergangenheit liegt, wird dies als die nächste Auslösezeit am morgigen Tag interpretiert. Liegt der Wert für den heutigen Tag in der Zukunft, wird es als die nächste Auslösezeit am heutigen Tag interpretiert. Die Werte werden im Device gespeichert, sobald man das Feld verlässt.&lt;br /&gt;
&lt;br /&gt;
===Zusammenfassung===&lt;br /&gt;
&lt;br /&gt;
[[Datei:summary_2.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Hier werden in nicht-editierbarer Form die wichtigsten Daten für den gegenwärtigen und den darauffolgenden Tag angezeigt. &lt;br /&gt;
*Rechts oben die Liste der &#039;&#039;&#039;stateDevices&#039;&#039;&#039;. Wie man hier sieht, ist eine der Türen nicht geschlossen und somit der Zustand &#039;&#039;Gesichert&#039;&#039; nicht vollständig erfüllt. Es ist Aufgabe der externen Helferfunktionen, dies ggf. zu korrigieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Das YAAHM-Widget ====&lt;br /&gt;
&lt;br /&gt;
[[Datei:YAAHM_widget_1.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
Dabei handelt es sich um eine dynamisch erzeugte SVG-Datei, die man auch in beliebige eigene Webseiten einbinden kann. Der Aufruf dafür lautet&lt;br /&gt;
 &amp;lt;IP-Adresse:Port&amp;gt;/fhem/YAAHM_timewidget?name=&#039;&amp;lt;Device-Name&amp;gt;&#039;&amp;amp;size=&#039;&amp;lt;breite&amp;gt;x&amp;lt;höhe&amp;gt;&#039;&lt;br /&gt;
Selbstverständlich kann man das auch in einen eigenen Weblink einbauen.&lt;br /&gt;
Markiert sind auf diesem Kreis die &#039;&#039;housetime&#039;&#039;-Events &#039;&#039;Sonnenaufgang&#039;&#039;, &#039;&#039;Morgen&#039;&#039;, &#039;&#039;Mittag&#039;&#039;, &#039;&#039;Nachmittag&#039;&#039;, &#039;&#039;Abend&#039;&#039;, &#039;&#039;Sonnenuntergang&#039;&#039; und &#039;&#039;Nacht&#039;&#039;. Die &#039;&#039;Tageszeit&#039;&#039; ist ferner durch einen türkisfarbenen Sektor gekennzeichnet, und Mitternacht ist immer &amp;quot;unten&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Die gegenwärtige Zeit (beim Aufruf !) wird in rot angezeigt.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Es ist angedacht, dieses Widget noch sehr viel interaktiver zu machen.&lt;br /&gt;
&lt;br /&gt;
===Einstellung des Tages-Profils===&lt;br /&gt;
&lt;br /&gt;
[[Datei:daily_2.png|600 px]]&lt;br /&gt;
*Der Startbutton erzeugt einen externen Timer (mit dem DOIF-Modul), der auf die Zeiten der definierten &#039;&#039;housetime&#039;&#039;-Events zugreift. &lt;br /&gt;
*Wenn dieser Timer erzeugt wurde, zeigt das Webinterface den entsprechenden Link an. Ein grüner Haken bedeutet, dass der Timer aktiv (enabled) ist, wenn er deaktiviert wurde (disabled), wird ein rotes Kreuz angezeigt.&lt;br /&gt;
*Die Aktionsfelder enthalten jeweils eine semikolon-getrennte List von FHEM-Befehlen, die bei Eintreten des Timer-Events abgearbeitet wird. &lt;br /&gt;
*Wenn das Attribut &#039;&#039;timeHelper&#039;&#039; auf einen Perl-Funktionsnamen gesetzt wird, erfolgt automatisch der Eintrag des Perl-Funktionsnamens in das Aktionsfeld, verbunden mit dem Argument des entsprechenden Events.&lt;br /&gt;
&lt;br /&gt;
==Einstellung der Wochen-Profile==&lt;br /&gt;
[[Datei:weekly_2.png|400 px]]&lt;br /&gt;
*Der Startbutton erzeugt externe Timer (mit dem DOIF-Modul), die auf das Reading &#039;&#039;ring_&amp;lt;timer-no&amp;gt;&#039;&#039; zugreifen. Dieses Reading wird jeweils kurs nach Mitternacht auf den korrekten Wert für den entsprechenden Tag gesetzt.&lt;br /&gt;
*Wenn diese Timer erzeugt wurden, zeigt das Webinterface den entsprechenden Link an. Ein grüner Haken bedeutet, dass der Timer aktiv (enabled) ist, wenn er deaktiviert wurde (disabled), wird ein rotes Kreuz angezeigt.&lt;br /&gt;
*Die Checkboxen Par und Abw geben an, ob das betreffende Wochen-Profil (und damit der Timer) auch in den Modi &#039;&#039;Party&#039;&#039; und &#039;&#039;Abwesenheit&#039;&#039; aktiv ist. Die Checkboxen Fer und Fei geben an, ob das betreffende Wochen-Profil (und damit der Timer) auch an den Tagestypen &#039;&#039;Ferientag&#039;&#039; und &#039;&#039;Feiertag&#039;&#039; aktiv ist.&lt;br /&gt;
*Die Aktionsfelder enthalten jeweils eine komma-getrennte List von FHEM-Befehlen, die bei Eintreten des Timer-Events abgearbeitet wird. &lt;br /&gt;
*Wenn das Attribut &#039;&#039;timeHelper&#039;&#039; auf einen Perl-Funktionsnamen gesetzt wird, erfolgt bei den beiden ersten (=Standard-) Timern automatisch der Eintrag des Perl-Funktionsnamens in das Aktionsfeld, verbunden mit dem Argument &#039;&#039;wakeup&#039;&#039; oder &#039;&#039;sleep&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=Sonstiges=&lt;br /&gt;
==Sperrung==&lt;br /&gt;
Das Reading &#039;&#039;lockstate&#039;&#039; muss den Wert &#039;&#039;unlocked&#039;&#039; haben, damit durch Anklicken der Start-Buttons für die Timer diese auch gestartet werden. Das ist in der Regel beim ersten Laden des Moduls &#039;&#039;&#039;nicht&#039;&#039;&#039; der Fall, hierzu muss also das Reading von Hand auf den richtigen Wert gesetzt werden. Dazu muss der Befehl &#039;&#039;&#039;set ... unlocked&#039;&#039;&#039; ausgeführt werden.&lt;/div&gt;</summary>
		<author><name>LordVoodoo</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Benutzer_Diskussion:LordVoodoo&amp;diff=20136</id>
		<title>Benutzer Diskussion:LordVoodoo</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Benutzer_Diskussion:LordVoodoo&amp;diff=20136"/>
		<updated>2017-02-20T21:43:41Z</updated>

		<summary type="html">&lt;p&gt;LordVoodoo: Antwort&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Willkommen! ==&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;6&amp;quot; style=&amp;quot;line-height: 20px; background: #E0E0E0; border: 2px solid #1874CD;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background:#1874CD;&amp;quot; |&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color: #FAFAFA&amp;quot;&amp;gt;&#039;&#039;&#039;Hallo LordVoodoo,&#039;&#039;&#039; willkommen im FHEM Wiki!&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Danke für dein Interesse an unserem Projekt, ich freue mich schon auf deine weiteren Beiträge. Die folgenden Seiten sollten dir die ersten Schritte erleichtern, bitte nimm dir daher etwas Zeit, sie zu lesen.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;FHEM-spezifische Informationen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;8%&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
| width=&amp;quot;38%&amp;quot; | &#039;&#039;&#039;[[Systemübersicht]]&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;FHEM Systemübersicht&#039;&#039;&lt;br /&gt;
| width=&amp;quot;8%&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
| width=&amp;quot;38%&amp;quot; | &#039;&#039;&#039;[[FHEMWiki:Über FHEMWiki]]&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;Informationen über dieses Wiki&#039;&#039;&lt;br /&gt;
&amp;lt;!-- Abschnitt auf Kommentar gesetzt&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{Todo|FHEM-spezifische Anleitungen und Regeln.}}&lt;br /&gt;
&lt;br /&gt;
---- &lt;br /&gt;
 Ende von &#039;Abschnitt auf Kommentar gesetzt&#039; --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | &lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Generelle Informationen über (Media)Wikis&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;8%&amp;quot; | [[Datei:Crystal Clear app kedit.svg|rechts|30px|link=Hilfe:Bearbeiten]]&lt;br /&gt;
| width=&amp;quot;38%&amp;quot; | &#039;&#039;&#039;[[Hilfe:Bearbeiten]]&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;Zugang zu allen wichtigen Informationen.&#039;&#039;&lt;br /&gt;
| width=&amp;quot;8%&amp;quot; | [[Datei:X-office-presentation.svg|rechts|30px|link=Wikipedia:Tutorial]]&lt;br /&gt;
| width=&amp;quot;38%&amp;quot; | &amp;lt;!-- &#039;&#039;&#039;[[Wikipedia:Tutorial]]&#039;&#039;&#039;--&amp;gt;&#039;&#039;&#039;[http://de.wikipedia.org/wiki/Wikipedia:Tutorial Wikipedia:Tutorial]&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;Schritt-für-Schritt-Anleitung für Einsteiger.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[Datei:Applications-system.svg|rechts|30px|link=Wikipedia:Grundprinzipien]]&lt;br /&gt;
| &#039;&#039;&#039;&amp;lt;!--[[Wikipedia:Grundprinzipien]]--&amp;gt;[http://de.wikipedia.org/wiki/Wikipedia:Grundprinzipien Wikipedia:Grundprinzipien]&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;Die grundlegende Philosophie unseres Projekts.&#039;&#039;&lt;br /&gt;
| [[Datei:MentorenProgrammLogo-7.svg|rechts|60px|link=Wikipedia:Mentorenprogramm]]&lt;br /&gt;
| &#039;&#039;&#039;&amp;lt;!--[[Wikipedia:Mentorenprogramm]]--&amp;gt;[http://de.wikipedia.org/wiki/Wikipedia:Mentorenprogramm Wikipedia:Mentorenprogramm]&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;Persönliche Einführung in die Beteiligung bei Wikipedia.&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
----&lt;br /&gt;
Bitte beachte, &amp;lt;!--[[Wikipedia:Was Wikipedia nicht ist|was Wikipedia nicht ist]]--&amp;gt;[http://de.wikipedia.org/wiki/Wikipedia:Was_Wikipedia_nicht_ist was Wikipedia nicht ist], und &amp;quot;unterschreibe&amp;quot; deine Diskussionsbeiträge durch Eingabe von &amp;lt;code&amp;gt;--&amp;lt;nowiki&amp;gt;~~~~&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder durch Drücken der Schaltfläche [[Datei:button_sig.png|Signaturknopf|20px|link=Hilfe:Signatur]] über dem Bearbeitungsfeld. Artikel werden jedoch nicht unterschrieben, und wofür die Zusammenfassungszeile da ist, erfährst du unter &amp;lt;!--[[wikipedia:Hilfe:Zusammenfassung und Quellen|Hilfe:Zusammenfassung und Quellen]]--&amp;gt;[http://de.wikipedia.org/wiki/Hilfe:Zusammenfassung_und_Quellen Zusammenfassung und Quellen]. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Datei:Nuvola apps ksirc.png|25px|link=Benutzer Diskussion:Ph1959de]] &amp;amp;nbsp;&amp;amp;nbsp; &#039;&#039;&#039;Hast du Fragen an mich?&#039;&#039;&#039; Schreib mir auf [[Benutzer Diskussion:Ph1959de|&amp;lt;u&amp;gt;meiner&amp;lt;/u&amp;gt; Diskussionsseite]]! Viele Grüße, [[Benutzer:Ph1959de|Peter]] ([[Benutzer Diskussion:Ph1959de|Diskussion]]) 15:41, 22. Dez. 2016 (CET)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Auslagerung des Abschnitts Z-Wave#Cyrus_Zwischenstecker aus dem ZWave-Grundlagenartikel ==&lt;br /&gt;
&lt;br /&gt;
Hallo!&lt;br /&gt;
&lt;br /&gt;
Vielen Dank für Deinen Beitrag [[Z-Wave#Cyrus_Zwischenstecker]] im FHEM-Wiki. Ich würde das nur gerne aus dem ZWave-Artikel auslagern. Zum Hintergrund: Der Grundlagen-Artikel [[Z-Wave]] soll im Bereich Geräte-Besonderheiten &#039;&#039;&#039;kurze&#039;&#039;&#039; Angaben zu Auffälligkeiten von bestimmten ZWave-Geräten im FHEM-Umfeld und Lösungsansätzen dazu enthalten. Die allgemeine und wichtige Beschreibung der Zerlegung von Readings und Übertragung von Teilstrings per notify auf einen dummy ist dort meiner Meinung nach nicht gut plaziert und zu lang. Das ist keine Besonderheit des Cyrus-Steckers, sondern ein allgemeines FHEM-Thema, das in vielen Fällen interessant und wichtig ist. Aus meiner Sicht bieten sich mehrere Lösungsansätze. Bspw. könnte man das im Bereich Code_Snippets als Artikel aufnehmen oder eine separaten Cyrus-Zwischensteckerartiel erstellen oder man behandelt das Thema in einem Readings-Artikel oder ...&lt;br /&gt;
&lt;br /&gt;
Würde mich freuen, wenn Du das übernehmen könntest.&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gruß, --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 12:14, 6. Jan. 2017 (CET)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
Hallo!&lt;br /&gt;
&lt;br /&gt;
Da nach über einem Monat noch keine Reaktion auf meine Bitte/Hinweis erfolgte, habe ich heute den Abschnitt aus dem ZWave-Grundlagenartikel entfernt. Da mir persönlich die dummy - Version der Readingsanpassung zu umständlich ist bzw. ich den Grund nicht kenne, habe ich das auch nirgendwo anders im Wiki plaziert. Das kannst Du aber gerne noch machen.&lt;br /&gt;
&lt;br /&gt;
Alternativen zur dummy-Variante hatte ich im gelöschten Artikeltext bereits ergänzt.&lt;br /&gt;
&lt;br /&gt;
Gruß, --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 12:02, 13. Feb. 2017 (CET)Christian&lt;br /&gt;
&lt;br /&gt;
Hallo Christian,&lt;br /&gt;
&lt;br /&gt;
danke für Deinen Hinweis. Verstehe ich, dass das nicht zwingend zum Z-Wave-Teil gehört. Ich hatte im Forum den Hinweis darauf bekommen, dass &amp;quot;current Power consumption&amp;quot; Reading so zubekommen und es daher bei dem Adapter so platziert.&lt;br /&gt;
Hoffe aber, dass ansonsten Form und Stil in Ordnung war.&lt;br /&gt;
&lt;br /&gt;
Viele Grüße, Matthias.&lt;/div&gt;</summary>
		<author><name>LordVoodoo</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Z-Wave&amp;diff=18267</id>
		<title>Z-Wave</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Z-Wave&amp;diff=18267"/>
		<updated>2017-01-04T08:45:16Z</updated>

		<summary type="html">&lt;p&gt;LordVoodoo: /* Geräte-Besonderheiten */&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=ZWDongle&lt;br /&gt;
|ModPurpose=Einbindung Z-Wave-Gateways&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=ZWDongle&lt;br /&gt;
|ModForumArea=ZWave&lt;br /&gt;
|ModTechName=00_ZWDongle.pm &lt;br /&gt;
|ModOwner=Rudolf König ([http://forum.fhem.de/index.php?action=profile;u=8 Forum])&lt;br /&gt;
}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|Name=ZWave&lt;br /&gt;
|ModPurpose=Ansteuerung Z-Wave-Geräte über ZWDongle&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=ZWave&lt;br /&gt;
|ModForumArea=ZWave&lt;br /&gt;
|ModTechName=10_ZWave.pm &lt;br /&gt;
|ModOwner=Rudolf König ([http://forum.fhem.de/index.php?action=profile;u=8 Forum])&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Z-Wave]] ist ein drahtloser Kommunikations-Standard im 868 Mhz-Band (Europa), der von der Firma Sigma Designs und der Z-Wave Alliance, einen Zusammenschluss von mehreren Hundert Herstellern, für die Heimautomatisierung entwickelt wurde. Es existieren mehr als [http://products.z-wavealliance.org 1000 zertifizierte Produkte] verschiedenster Hersteller, die innerhalb eines gemeinsamen Z-Wave-Netzes einsetzbar sind. (Quelle: [http://de.wikipedia.org/wiki/Z-Wave Wikipedia])&lt;br /&gt;
&lt;br /&gt;
Auf dieser Seite werden Grundlagen eines &#039;&#039;&#039;Z-Wave&#039;&#039;&#039; Systems und dessen Einrichtung in FHEM beschrieben.&lt;br /&gt;
== Z-Wave ==&lt;br /&gt;
=== Nodes - Controller und Slaves ===&lt;br /&gt;
Ein Z-Wave-Netz besteht aus mindestens 2 Geräten, den sogenannten &#039;&#039;&#039;Nodes&#039;&#039;&#039; (Knoten). Es setzt sich zusammen aus dem steuernden &#039;&#039;&#039;Controller&#039;&#039;&#039; (Zentrale) und min. 1 bis max. 231 gesteuerten &#039;&#039;&#039;Slaves&#039;&#039;&#039; (Geräten). &lt;br /&gt;
&lt;br /&gt;
=== Home-Id und Node-ID ===&lt;br /&gt;
Innerhalb eines Z-Wave-Netzes gibt es zu 2 Identifikationsnummern zur Kennzeichnung der Netzstruktur:&lt;br /&gt;
# &#039;&#039;&#039;Home-ID:&#039;&#039;&#039; Gemeinsame Identifikationsnummer aller Nodes in einem Netz zur Abgrenzung gegenüber anderen Netzen. Nur Nodes mit der gleichen Home-ID können miteinander kommunizieren.&lt;br /&gt;
# &#039;&#039;&#039;Node-ID:&#039;&#039;&#039; Identifikationsnummer zur eindeutigen Kennzeichnung von jedem Node im Netz. &lt;br /&gt;
&lt;br /&gt;
Die Home-ID ist im Controller (fest) hinterlegt und seine Node-ID ist typischerweise 1. Die Slaves haben zunächst keine Home-ID und Node-ID. Bei der &#039;&#039;&#039;Inklusion&#039;&#039;&#039; (Aufnahme) der Slaves in das Z-Wave-Netz überträgt der Controller seine Home-ID auf die Slaves und weist den Slaves eine eindeutige Node-ID im Netz zu, mit der Sie direkt angesprochen werden. &lt;br /&gt;
&lt;br /&gt;
Besondere Node-ID ist die 255. Eine Nachricht an die Node-ID 255 kann von allen Z-Wave-Nodes ausgewertet werden (Broadcast).&lt;br /&gt;
&lt;br /&gt;
=== Primär- und Sekundärcontroller ===&lt;br /&gt;
Der Controller, der durch Zuteilung seiner Home-ID auf die Slaves, das Netz aufbaut, ist der &#039;&#039;&#039;Primärcontroller&#039;&#039;&#039;. Grundsätzlich können in einem Netz mehrere Controller existieren, aber immer nur ein Primärcontroller. Weitere in das Netz eingebundene Controller werden zum &#039;&#039;&#039;Sekundärcontroller&#039;&#039;&#039;. Ohne besondere Maßnahmen kann nur der Primärcontroller die Inklusion (Einbindung) der Nodes in das Netz durchführen. Hingegen können sowohl Primär- als auch Sekundärcontroller die &#039;&#039;&#039;Exklusion&#039;&#039;&#039; (Ausschluss) eines Nodes aus dem Netz vornehmen.&lt;br /&gt;
&lt;br /&gt;
Der Controller speichert intern diverse Informationen (Home-ID, Node-IDs,..) über das ZWave-Netz. Hierdurch kann unter anderem die Haussteuerungssoftware bei einem PC-Controller relativ unkompliziert gewechselt werden, da die wesentlichen ZWave-Netzinformationen vom Controller selbst verwaltet und gespeichert werden. Andererseits muß bei einem Controllerdefekt das gesamte Netz grundsätzlich neu aufgebaut werden, wenn kein Backup der internen Controllerdaten vorhanden ist.&lt;br /&gt;
&lt;br /&gt;
=== Acknowledge ===&lt;br /&gt;
Im Z-Wave-Netz werden Nachrichten vom Empänger-Node an den Sender-Node rückbestätigt (Acknowledge). Bei ausbleibendem Acknowledge wiederholt der Sender-Node die Nachricht automatisch auf Protokollebene bis zu 2 mal. Hierdurch wird eine höhere Betriebssicherheit des Z-Wave-Netzes erreicht. Bei Broadcast-Nachrichten an die Node-ID 255 findet keine Rückbestätigung statt.&lt;br /&gt;
&lt;br /&gt;
=== Vermaschtes Netzwerk mit Routing ===&lt;br /&gt;
Z-Wave nutzt als Netzwerktopologie ein &#039;&#039;&#039;mesh network&#039;&#039;&#039; (vermaschtes Netzwerk), d. h. jeder Node ist mit einem oder mehreren anderen Nodes verbunden. Das hat den Vorteil, dass eine Nachricht zwischen zwei Nodes übermittelt werden kann, selbst wenn diese nicht direkt miteinander kommunizieren können, z. B. weil sie zu weit voneinander entfernt sind. In diesem Fall wird die Funk-Nachricht über einen oder mehrere „Zwischen-Nodes“ übertragen; dieser Vorgang wird &#039;&#039;&#039;Routing&#039;&#039;&#039; genannt. Nur netzgespeiste Z-Wave-Geräte sind Router. Batteriebetriebe Z-Wave-Geräte sind grundsätzlich keine Router und dienen somit auch nicht zur Reichweitenerhöhung. (Quelle: [http://de.wikipedia.org/wiki/Z-Wave Wikipedia]) Einzelne Geräte, die alternativ per Batterie oder USB-Anschluss betrieben werden können, werden bei USB-Anschluss automatisch ({{Link2Forum|Topic=40393|Message=328080}}) oder durch Konfigurationsänderungen ({{Link2Forum|Topic=40393|Message=327331}}) zu Routern.&lt;br /&gt;
&lt;br /&gt;
Informationen über das optimale Routing werden bei der Inklusion der Nodes in einer Routing-Tabelle des Primärcontrollers gespeichert. Dies geschieht durch Abfrage des Nodes, welche weiteren Nodes er erreichen kann. Durch örtliche Änderung oder Defekte von Nodes können die in der Routing-Tabelle gespeicherten Informationen fehlerhaft bzw. suboptimal werden. Dies kann sich in Funkkommunikationsproblemen im Netzwerk äußern. Hier kann ein per Software manuell angeforderter Neuaufbau der Routing-Tabelle gegebenenfalls Abhilfe schaffen. Bei Geräten und Controllern mit aktuellen Firmware-Versionen (SDK 4.5x und SDK 6.xx oder größer, aber &#039;&#039;nicht&#039;&#039; SDK 5.x) und Unterstützung von Explorer Frames kann sich die Routing-Tabelle unter bestimmten Bedingungen auch automatisch aktualisieren (&amp;quot;Selbstheilung&amp;quot;)[http://wiki.zwaveeurope.com/index.php?title=SDK_Versions_and_Explorer_Frames].&lt;br /&gt;
&lt;br /&gt;
=== Command Classes ===&lt;br /&gt;
Die Steuerung und Kommunikation der Nodes erfolgt über Befehle die funktionsbezogen in verschiedene &#039;&#039;&#039;Command Classes&#039;&#039;&#039; (Kommandoklassen) zusammengefasst sind.&lt;br /&gt;
&lt;br /&gt;
Alle Z-Wave-Geräte haben als gemeinsame kleinste Übereinstimmung die &#039;&#039;&#039;Class Basic&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Z-Wave-Geräte haben im Originalzustand eine bestimmte arbeitsfähige Grund-Konfiguration. Anpassbar an individuelle Bedürfnisse ist die Konfiguration über die &#039;&#039;&#039;Class Configuration&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Durch eine Assoziation wird definiert, welche Geräte miteinander direkt -ohne Umweg über den Controller- kommunizieren können. Auch bei Ausfall des Controllers können diese Geräte ihre gemeinsame Funkton ausüben. Zudem dienen Assoziationen der Geschwindigkeitssteigerung und Funklastreduzierung innerhalb des Netzes. Angelegt werden Assoziationen über die &#039;&#039;&#039;Class Association&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Dies sind nur die allerwichtigsten Command Classes. Weitere Command Classes sind den Handbüchern zu entnehmen. Zudem enthält die Wiki-Seite [[Z-Wave Command Classes]] weitergehende Informationen.&lt;br /&gt;
&lt;br /&gt;
=== Hinweise zur Z-Wave-Geräteauswahl ===&lt;br /&gt;
Aufgrund der vielen Z-Wave-Gerätehersteller mit jeweils eigenem Z-Wave-Gerätesortiment existiert eine große Produktauswahl. Jedoch gibt es auch große Unterschiede hinsichtlich Produkteigenschaften, Pflege der Produkte, Häufigkeit der Aktualisierung der Produktpalette und so weiter. Schwierigkeiten bereitet insbesondere, dass neben den aktuellesten Chipsätzen und SDKs auch die älteren Chipsätze und SDKs weiterhin in Produkten im Handel verfügbar sind. Neuere Chipsätze und aktuelle SDKs bieten gerade bei der Netzwerkstabilität (Explorer Frames, Reichweite usw.) Vorteile zu älteren Chipsätzen und SDKs. Beispielsweise beherrschen nur Geräte mit SDK 4.5x und 6.x oder neuer die für automatische Routenkorrekturen wichtigen Explorer Frames. Das ältere SDK 5.0, das verwirrenderweise auch noch eine höhere Versionsnummer als das neuere SDK 4.5 besitzt, beherrscht unter anderem keine Explorer Frames. Details hierzu enthält das [http://wiki.zwaveeurope.com/index.php?title=SDK_Versions_and_Explorer_Frames wiki.zwaveeurope.com]. Aktuellstes SDK ist Stand 06/2016 das SDK 6.5x, das in ZWave Plus - zertifizierten Produkten zum Einsatz kommt.&lt;br /&gt;
&lt;br /&gt;
Gerade Einsteiger beachten die Unterschiede bei den Chipsätze/SDKs aus Unkenntnis manchmal nicht und ärgern sich im Nachhinein über Probleme bei der Netzwerkstabilität und Reichweite. Darum nachfolgend allgemeine, aber sehr einfache Empfehlungen zur Geräteauswahl. Selbstverständlich wird hier nicht von anderen Produkten abgeraten, wenn man die Unterschiede kennt und Vorteile bei deren Produkteigenschaften sieht. Zudem kann man (leider) schlechtere Produkteigenschaften bei Geräten mit aktuelleren Chipsätzen/SDKs nie ausschließen.&lt;br /&gt;
&lt;br /&gt;
Gateway&lt;br /&gt;
# [http://z-wavealliance.org/z-wave_plus_certification Z-Wave Plus-Zertifizierung]. Diese ist mittlerweile bei nahezu allen erhältlichen Gateways gegebenen.&lt;br /&gt;
&lt;br /&gt;
Endgeräte&lt;br /&gt;
# Z-Wave Plus-Zertifizierung (aktuellste Technik, höhere theoretische Reichweite, SDK 6.5x) oder&lt;br /&gt;
# zumindest Explorer Frames-Unterstützung (SDK 4.5x und 6.0x) oder&lt;br /&gt;
# zuletzt -bei Kenntnis der Besonderheiten und Auswirkungen- Produkte ohne Explorer Frames (SDK 5.0x)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kurz&#039;&#039;&#039;: Produkte mit Z-Wave Plus-Zertifizierung einsetzen.&lt;br /&gt;
&lt;br /&gt;
Bitte unbedingt beachten, dass Z-Wave Plus-Vorteile bei einem Mischbetrieb mit älteren (ohne Plus) Geräten teilweise verloren gehen. Zum negativen Effekt des Einsatzes eines älteren, aber weiterhin erhältlichen Z-Wave-Repeaters mit aktuellen Z-Wave Plus-Geräten siehe beispielsweise den Hinweis in diesem {{Link2Forum|Topic=42591|Message=350066}}.&lt;br /&gt;
&lt;br /&gt;
Bei Fragen zu bestimmten Geräten bitte -nach Durchsicht der Hinweise hier im Wiki- im Forum suchen oder anschließend nachfragen.&lt;br /&gt;
&lt;br /&gt;
== Z-Wave in Fhem ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
FHEM wird fortwährend weiterentwickelt und verbessert. Daher ist es zwingend notwendig, dass FHEM auf dem aktuellsten Stand ist. Dazu nach der FHEM-Installation den Befehl &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; ausführen und anschließend &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; durchführen. Genauso auch vor [[#Welche_Infos_sollten_Anfragen_im_ZWave-Forum_enthalten.3F|Anfragen im Forum]] die Aktualität von FHEM überprüfen.&lt;br /&gt;
&lt;br /&gt;
Die Einbindung von Z-Wave in FHEM ist (nicht nur für den Anfänger) ausschließlich mit der standardmäßig eingeschalteten [[autocreate|autocreate-Funktion]] einfach möglich. Die Kenntnis der FHEM-Grundlagen und Durcharbeitung der Anfänger-Lektüren wird im Folgenden vorausgesetzt. Insbesondere sind [[Erste_Schritte_in_fhem|Erste Schritte in FHEM]] und [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung mit FHEM] Pflicht, auch wenn sie nicht speziell Z-Wave behandeln, so werden doch wesentliche Punkte für ein Verständnis von FHEM vermittelt.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend und auf den [[:Kategorie:Z-Wave Components|Wiki-Seiten der Einzelgeräte]] werden immer wieder Auszüge aus der [[Konfiguration]] dargestellt. Diese dienen zur Erläuterung und Veranschaulichung. Die Bearbeitung der Konfiguration sollte -zur Verhinderung von Fehlern- nach Möglichkeit immer über das &amp;quot;[[Konfiguration#Befehl-Eingabefeld|Befehl-Eingabefeld]]&amp;quot; und die &amp;quot;[[Konfiguration#Objektdetails|Objektdetails]]&amp;quot; erfolgen.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Die Bedienungsanleitungen (Handbücher) sind zwingende Voraussetzung zur korrekten Einbindung und Konfiguration von Z-Wave-Geräten in FHEM. Sie müssen daher vorliegen. Die Handbücher und technischen Informationen vieler Z-Wave-Geräte sind -trotz verschiedener Hersteller- zentral unter http://www.zwave.de/handbuecher/ in Deutsch abrufbar. Der Aufbau aller dort veröffentlichten Handbücher ist gleichartig, so dass man einen schnellen Einstieg in die Produkte und deren technischen Eigenschaften von verschiedenen Herstellern findet. Manche Hersteller (z.B. Fibaro) bieten zusätzlich auf Ihren Internetseiten noch separate, eigene Handbücher an. Bei ZWave-Plus-zertifizierten Geräten sind detaillierte Handbücher zudem unter http://products.z-wavealliance.org auf der gerätespezifischen Seite zu finden. Diese enthalten teilweise mehr Informationen als die den Produkten beigelegten Handbücher (z.B. AEOTEC).&lt;br /&gt;
&lt;br /&gt;
== Definition des Gateways / Controllers ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Tester für ZWave@culfw gesucht!&#039;&#039;&#039;&lt;br /&gt;
ZWave-Controllerfunktionen werden derzeit in die Firmware [http://www.culfw.de culfw] für den [[CUL]] implementiert. Detailinformationen zur Entwicklung finden sich im {{Link2Forum|Topic=44905}}. Eine kurze Zusammenfassung zum Stand 04/2016: {{Link2Forum|Topic=52364|Message=441957}} }}&lt;br /&gt;
=== Autocreate des Gateways ===&lt;br /&gt;
FHEM kann mit einem Funkgateway Z-Wave-Funk empfangen und senden. Z-Wave-Gateways (Controller) existieren von verschiedenen Herstellern. &lt;br /&gt;
&lt;br /&gt;
Folgende Gateways wurden unter anderem bereits erfolgreich mit FHEM eingesetzt:&lt;br /&gt;
* AEON Labs Z-Stick S2 (SDK 5.x; [https://aeotec.freshdesk.com/support/solutions/articles/6000091809-z-stick-s2-v3-08-firmware-update Firmwareupdate auf 3.08 aus 2016])&lt;br /&gt;
* Aeotec Z-Stick Gen5 (Z-Wave Plus; SDK 6.5; [https://aeotec.freshdesk.com/support/solutions/articles/6000108806-z-stick-gen5-backup-software Backup-Software)] ({{Link2Forum|Topic=47000}})&lt;br /&gt;
* Goodway WD6001 (SDK 5.03 {{Link2Forum|Topic=40594|Message=332235}})&lt;br /&gt;
* Vision Z-Wave USB Stick ZU 1401 EU (SDK 6.0x)&lt;br /&gt;
* Vision Z-Wave USB Stick ZU 1401-5 EU (Z-Wave Plus; SDK 6.5x)&lt;br /&gt;
* Z-Wave.Me Z-StickC ({{Link2Forum|Topic=29930|Message=226530}})&lt;br /&gt;
* Z-Wave.Me USB Stick ZME_UZB1 (SDK 6.5x;  Z-Wave Plus; [http://razberry.z-wave.me/z-way-server/ Firmwareupdate und Backup über z-way])&lt;br /&gt;
* Z-Wave.Me Razberry in Verbindung mit Raspberry Pi (1. Generation: Z-Wave, 2. Generation: Gen5-Razberry mit Z-Wave Plus[http://forum.z-wave.me/viewtopic.php?f=3419&amp;amp;t=21327#p55404]) &lt;br /&gt;
** Die seriellen Schnittstelle /dev/ttyAMA0 muss am Raspberry Pi freigeschaltet werden, damit das Razberry-Modul funktionsfähig ist: {{Link2Forum|Topic=11716|Message=190402}})&lt;br /&gt;
** Beim Raspberry Pi 3 muss der GPIO-Port auf den Hardware-UART0 umgestellt werden: [[Raspberry Pi 3: GPIO-Port Module und Bluetooth]]&lt;br /&gt;
&lt;br /&gt;
Folgende Gateways sind &#039;&#039;&#039;nicht&#039;&#039;&#039; mit FHEM einsetzbar:&lt;br /&gt;
* Merten Funk-USB-Datenschnittstelle CONNECT&lt;br /&gt;
&lt;br /&gt;
Sollte das eigene Gateway hier nicht aufgeführt sein, ist aufgrund der Standardisierung dennoch die Chance für eine erfolgreiche Einbindung des Gateways in FHEM vorhanden. Bitte dies hier oder im Forum entsprechend vermerken.&lt;br /&gt;
&lt;br /&gt;
Das Z-Wave-Gateway wird unter Linux nach Anschluss an den FHEM-Rechner beim nächsten FHEM-Start oder ohne FHEM-Neustart durch Aufruf des Befehls &amp;lt;code&amp;gt;usb scan&amp;lt;/code&amp;gt; zumeist automatisch erkannt und grundlegend durch entsprechende Einträge in der Konfiguration definiert. Ein manuelles Anlegen des ZWDongle-Moduls oder Eingriffe in die Konfiguration sind unter Linux normalerweise nicht notwendig und auch nicht ratsam. Unter Windows ist ein manuelles Anlegen der Definition des ZWave-Gateways wegen fehlender Unterstützung des Befehls &amp;lt;code&amp;gt;usb scan&amp;lt;/code&amp;gt; erforderlich. Das FHEM-Gateway-Device ist nach der Definition in FHEM im Raum &amp;quot;Everything&amp;quot; zu finden.&lt;br /&gt;
&lt;br /&gt;
Beispiele der automatisch erzeugten define-Zeile in der Konfiguration:&lt;br /&gt;
&lt;br /&gt;
Aeon Labs Z-Stick an der Fritzbox: &lt;br /&gt;
 define ZWDongle_1 ZWDongle /dev/ttyUSB0@115200&lt;br /&gt;
&lt;br /&gt;
Vision Z-Wave USB Stick ZU 1401 EU am Raspberry Pi:&lt;br /&gt;
 define ZWDongle_1 ZWDongle /dev/ttyACM0@115200&lt;br /&gt;
&lt;br /&gt;
Insbesondere wenn am FHEM-Server unter Linux mehrere USB-Gateways eingesetzt, empfiehlt es sich zur Erhöhung der Betriebsstabilität das Z-Wave-Gateway über [[Trick_der_Woche#CUL_.26_CO_.C3.BCber_Serial_ID-einbinden|Serial-by-Id]] oder [[LinuxDeviceNaming|uDev-Regeln]] anzusprechen.&lt;br /&gt;
&lt;br /&gt;
=== homeId und nodeList des Gateways ===&lt;br /&gt;
Zur manuellen Definition von Z-Wave Aktoren und Sensoren ist die &amp;lt;code&amp;gt;homeId&amp;lt;/code&amp;gt; notwendig. Bei der hier bevorzugten Definition der Geräte durch autocreate ist die Kenntnis der &amp;lt;code&amp;gt;homeId&amp;lt;/code&amp;gt; nicht zwingend. Jedoch sollte durch Abfrage der &amp;lt;code&amp;gt;homeId&amp;lt;/code&amp;gt; direkt nach Einbindung des Zwave-Gateways dessen Funktionsfähigkeit getestet werden.&lt;br /&gt;
&lt;br /&gt;
Die &amp;lt;code&amp;gt;homeId&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;CtrlNodeId&amp;lt;/code&amp;gt; des Gateways wird mit folgendem Befehl ausgelesen (ZWDongle_1 ist im folgenden durch den eigenen Gatewaynamen zu ersetzen):&lt;br /&gt;
 get ZWDongle_1 homeId&lt;br /&gt;
ergibt beispielsweise:&lt;br /&gt;
 ZWDongle_1 homeId =&amp;gt; HomeId:e345c456 CtrlNodeId:01 &lt;br /&gt;
&lt;br /&gt;
Die aktuelle Liste der Z-Wave Nodes, die bereits am Gateway registriert/inkludiert sind, wird mit dem folgendem Befehl ausgelesen:&lt;br /&gt;
 get ZWDongle_1 nodeList&lt;br /&gt;
ergibt beispielsweise:&lt;br /&gt;
 ZWDongle_1 nodeList =&amp;gt; ZWDongle_1 UNKNOWN_2&lt;br /&gt;
&lt;br /&gt;
== Definition von Geräten / Slaves ==&lt;br /&gt;
=== Hinzufügen eines neuen Z-Wave Geräts / Inklusion ===&lt;br /&gt;
Zur Verfolgung von Inklusionsablauf und Meldungen des Controllers während der Inklusion sollte der [[Event monitor]] in einem 2. Browserfenster vor Aktivierung des Inklusionsmodus geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
Das Z-Wave Gateway wird in den Standard-Modus zur Inklusion (zum Aufnehmen) neuer Geräte gesetzt:&lt;br /&gt;
 set ZWDongle_1 addNode on&lt;br /&gt;
Bei der Standard-Inklusion muss direkter Funkkontakt zwischen Gateway und zu inkludierendem Z-Wave Gerät bestehen.&lt;br /&gt;
&lt;br /&gt;
Sofern Z-Wave Gateway und Z-Wave Geräte Explorer Frames unterstützen, sollte statt des obigen Befehls besser der Network-Wide-Modus für die Inklusion genutzt werden:&lt;br /&gt;
 set ZWDongle_1 addNode onNw&lt;br /&gt;
Bei der Network-Wide-Inklusion muss kein direkter Funkkontakt zwischen Gateway und zu inkludierendem Z-Wave Gerät bestehen. Es reicht, wenn das zu inkludierende Gerät über andere bereits inkludierte, netzgespeiste Geräte mit Explorer Frames-Unterstützung erreicht werden kann. Die Network-Wide-Inklusion ist zu bevorzugen, da die Z-Wave-Geräte regelmäßig an Ihren örtlichen Endpositionen inkludiert werden können. Dadurch werden bei der Inklusion direkt die korrekten Routen gespeichert. &lt;br /&gt;
&lt;br /&gt;
Nachdem das Gateway in den Inklusionmodus geschaltet wurde, muss das Gerät in den Inklusionsmodus (Aufnahmemodus) versetzt werden. Wie dies zu erfolgen hat, ist im Handbuch des Geräte nachzulesen. Typisch sind ein- oder dreimaliges Drücken einer Taste am Gerät oder beim Anlegen der Versorgungsspannung. Durch die Inklusion werden Home-ID und Node-ID im Gerät gespeichert. Zudem teilt das Gerät über ein spezielle Funknachricht (NIF=Node Information Frame) dem Controller seinen Gerätetyp und seine Geräteeigenschaften mit. Hierbei werden dem Controller auch die vom Gerät unterstützten Command Classes mitgeteilt. Aus diesen Informationen erzeugt FHEM automatisch durch autocreate das FHEM-Geräte-Device nach dem Namensschema &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;ZWave_&amp;lt;Geräteklasse laut NIF des Gerätes&amp;gt;_&amp;lt;NodeID&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; (an eigene Wünsche anpassbar mit [http://fhem.de/commandref.html#rename rename]). Die vom Geräte unterstützen Command Classes, die die in FHEM verfügbaren Befehle bestimmen, werden automatisch im Attribut &amp;lt;code&amp;gt;classes&amp;lt;/code&amp;gt; des FHEM-Geräte-Device gespeichert. Das Gerät ist damit grundlegend in FHEM definiert und im Raum &amp;quot;ZWave&amp;quot; zu finden. &lt;br /&gt;
&lt;br /&gt;
Nach der Inklusion schaltet FHEM den Inklusionsmodus des Z-Wave Gateway automatisch durch Absetzen des Befehls &amp;lt;code&amp;gt;set ZWDongle_1 addNode off&amp;lt;/code&amp;gt; aus und zeigt eine Dialogbox mit dem Ergebnis der Inklusion:&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;created ZWave_&amp;lt;Geräteklasse laut NIF des Gerätes&amp;gt;_&amp;lt;NodeID&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; = Inklusion war erfolgreich und es wurde das bezeichnete FHEM-Device durch autocreate angelegt.&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;addNode failed&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; = Inklusion ist fehlgeschlagen&lt;br /&gt;
 &lt;br /&gt;
Eine erfolgreiche Inklusion ist zudem am Event &amp;quot;ZW_ADD_NODE_TO_NETWORK protocolDone&amp;quot; im Event monitor und natürlich der Anlage des entsprechenden FHEM-Devices durch autocreate zu erkennen.  Das Scheitern einer Inklusion führt typischerweise zur Ausgabe des Events &amp;quot;ZW_ADD_NODE_TO_NETWORK failed&amp;quot;. Häufigste Ursache sind Controllerprobleme, die sich oftmals durch kurzes Ein- und Ausstecken des Controllers, Neustart des Systems oder Ein- und Ausschalten des FHEM-Server-Computers beheben lassen.&lt;br /&gt;
&lt;br /&gt;
HINWEISE:&amp;lt;br /&amp;gt;&lt;br /&gt;
* Die Network-Wide-Inklusion kann nach derzeitiger Kenntnis auch bei Gateways und Geräten ohne Explorer Frames Unterstützung genutzt werden, da bei diesen Geräten grundsätzlich automatisch auf die Standard-Inklusion umgestellt wird.&lt;br /&gt;
* Bei der Standard-Inklusion ist unter Umständen nur ein geringer Abstand zwischen Gateway und Gerät möglich. Sollte die Inklusion daher nicht durchführbar sein, wenn Gateway und Gerät an ihren örtlichen Endpositionen sind (bevorzugte Variante), dann ist der Abstand zwischen diesen versuchsweise zu verringern. Anschließend bei örtlicher Veränderung die Routen mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; neigborUpdate&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set TYPE=ZWave:FILTER=ZWaveSubDevice=no neighborUpdate&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; neu ermitteln lassen. Unter Umständen kann der Abstand nur schrittweise erhöht werden. Dann ist bei jeder Abstandsänderung eine Neuermittlung der Routen notwendig.&lt;br /&gt;
* Der NIF enthält bei manchen Geräten fälschlicherweise nicht alle unterstützten Command Classes. FHEM identifiziert während der Inklusion das Gerät und ergänzt die fehlenden Command Classes aufgrund manuell gepflegter, gerätespezifischer [[#Welche_Funktion_haben_die_XML-Config-Dateien_in_Fhem.3F|XML-Config-Dateien]]. Weiterhin fehlende Command Classes können im Attribut &amp;lt;code&amp;gt;classes&amp;lt;/code&amp;gt; manuell entsprechend ergänzt werden. Informationen liefern die unter [[#Links|Links]] aufgeführten Datenbanken. Häufig fehlt die Pflicht-Class BASIC.&lt;br /&gt;
* Bei der hier beschriebenen Inklusion findet die Kommunikation zwischen Controller und Gerät anschließend dauerhaft unverschlüsselt statt. Manche Geräte bieten mit der Command Class SECURITY eine AES-verschlüsselte Kommunikation an. Da die Verschlüsselung zu einer höheren Funklast und Latenzen führt, sollte eine verschlüsselte Kommunikation nur mit Bedacht eingesetzt werden (bspw. bei Schlössern). Als Sonderfall ist das Vorgehen zur secure-Inklusion in der [[#Wie_kann_eine_verschl.C3.BCsselte_Kommunikation_unter_Nutzung_der_Command_Class_SECURITY_eingerichtet_werden.3F|FAQ]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
Nächster Schritt ist die [[#Assoziation|Assoziation]] des Gerätes mit dem Gateway.&lt;br /&gt;
&lt;br /&gt;
=== Assoziation ===&lt;br /&gt;
{{Randnotiz|RNText=Bitte unbedingt die Besonderheiten bei [[#batteriebetriebene_Ger.C3.A4te|batteriebetriebenen Geräten]] beachten!}}&lt;br /&gt;
Z-Wave-Geräte können über Assoziationen direkt mit anderen Z-Wave-Geräten kommunizieren. Dies können zum einen Meldungen über den Status und Zustand der Geräte, als auch direkte Befehle sein. Zum Beispiel kann damit ein Bewegungsmelder eine entdeckte Bewegung an den Controller senden und/oder bei entdeckter Bewegung direkt eine Lampe ein- oder ausschalten.&lt;br /&gt;
&lt;br /&gt;
Die Assoziation zwischen zwei Geräten wird durch Aufnahme des zu steuernden Gerätes in eine oder mehrere Assoziationsgruppe(n) des steuernden Gerätes angelegt. Durch die Wahl der Assoziationsgruppe wird festgelegt, bei welchen Ereignissen welche Nachricht an das assoziierte Gerät verschickt wird. Angaben zu den Ereignissen und versandten Nachrichten an die Geräte in einer bestimmten Assoziationsgruppe stehen in der Bedienungsanleitung des jeweiligen Gerätes.&lt;br /&gt;
&lt;br /&gt;
Damit FHEM Statusmeldungen von Sensoren/Aktoren anzeigen und auch darauf reagieren kann, &#039;&#039;&#039;muss&#039;&#039;&#039; der Controller (ZWDongle_1, &amp;lt;code&amp;gt;CtrlNodeId&amp;lt;/code&amp;gt; = typischerweise 1) immer in der/den passenden Assoziationsgruppe(n) des jeweiligen Gerätes &amp;lt;code&amp;gt;&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt; aufgenommen werden:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;name&amp;gt; associationAdd &amp;lt;associationGroup&amp;gt; &amp;lt;CtrlNodeId&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Typischerweise ist die Assoziationsgruppe 1 der Geräte für die Statusmeldungen an den Controller vorgesehen (Ausnahme: [[#Fibaro|Fibaro-Geräte ohne ZWave Plus - Zertifizierung]]). Daher nimmt FHEM die Assoziation von Controller mit der Assoziationsgruppe 1 des Gerätes bei der Inklusion immer automatisch vor. Zudem identifiziert FHEM während der Inklusion das Gerät und setzt weitere Assoziationen mit dem Controller für von 1 abweichende Assoziationsgruppen aufgrund manuell gepflegter, gerätespezifischer [[#Welche_Funktion_haben_die_XML-Config-Dateien_in_Fhem.3F|XML-Config-Dateien]]. Ist keine XML-Config-Datei für das Gerät vorhanden, sind Assoziationen des Controllers mit von 1 abweichenden Assoziationsgruppen oder weiteren Assoziationsgruppen mit dem zuvor genannten Befehl grundsätzlich manuell anzulegen. &lt;br /&gt;
&lt;br /&gt;
Die richtige Anlage der Assoziation(en) des Controllers mit dem Gerät immer prüfen, da dies eine Hauptfehlerquelle bei Funktionsproblemen mit FHEM ist.&lt;br /&gt;
&lt;br /&gt;
Abruf der assoziierten Geräte in einer bestimmten Assoziationsgruppe &amp;lt;associationGroup&amp;gt;:&lt;br /&gt;
 get &amp;lt;name&amp;gt; association &amp;lt;associationGroup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abruf der assozierten Geräte für alle Assoziationsgruppen eines Gerätes:&lt;br /&gt;
 get &amp;lt;name&amp;gt; associationAll&lt;br /&gt;
&lt;br /&gt;
Nahezu alle in Europa erhältlichen aktuellen Geräte unterstützen die Rückmeldung des Status via Association. Ausnahmen gibt es in Nordamerika, wo aufgrund von Patentansprüchen einige Hersteller auf die Statusrückmeldungen verzichten. Diese Geräte unterstützen in der Regel die Command Class ASSOCIATION nicht.&lt;br /&gt;
&lt;br /&gt;
Nächster Schritt ist die [[#Konfiguration|Konfiguration]] des Gerätes.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
{{Randnotiz|RNText=Bitte unbedingt die Besonderheiten bei [[#batteriebetriebene_Ger.C3.A4te|batteriebetriebenen Geräten]] beachten!}}&lt;br /&gt;
Die Standard-Konfiguration eines Gerätes entspricht oftmals nicht den eigenen Wünschen und Anforderungen (Einheiten usw.). Mit den Befehlen der Class CONFIGURATION lässt sich die Konfiguration anpassen. Die zur Konfiguration eines Gerätes notwendigen Angaben zu den Parameternummern, -größen und -werten sind im jeweiligen Geräte-Handbuch bzw. entsprechenden Datenbanken (bspw. [http://www.pepper1.net/zwavedb/ pepper1-Zwave-Datenbank] oder [http://products.zwavealliance.com/ products.zwavealliance.com]) enthalten. &lt;br /&gt;
&lt;br /&gt;
Die Konfiguration beispielsweise bei Parametergröße 1 lässt sich mit diesem Befehl anpassen:&lt;br /&gt;
 set &amp;lt;name&amp;gt; configByte &amp;lt;Parameternummer&amp;gt; &amp;lt;Parameterwert&amp;gt;&lt;br /&gt;
Für weitere Parametergrößen gibt es die Befehle &amp;lt;code&amp;gt;configWord&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;configLong&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die im Gerät hinterlegten Konfiguration kann pro Parameternummer mit folgendem Befehl abgerufen werden:&lt;br /&gt;
 get &amp;lt;name&amp;gt; config &amp;lt;Parameternummer&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zudem bietet FHEM basierend auf den manuell gepflegten XML-Config-Dateien die Möglichkeit, die speziellen Parameternummern des Gerätes mit ihren Parametergrößen und -werte als eigenständige config-Befehle mit Hilfsinformationen einzubinden. Ein manuelles Suchen im Geräte-Handbuch und Nutzung der configByte-, configWord- und configLong-Befehle ist dadurch in vielen Fällen unnötig. Für diese Funktion muss das Gerät von FHEM einmalig durch folgenden Befehl, der bei der Inklusion automatisch ausgeführt wird, identifiziert werden:   &lt;br /&gt;
 get &amp;lt;name&amp;gt; model&lt;br /&gt;
Die Readings &amp;lt;code&amp;gt;model&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;modelID&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;modelConfig&amp;lt;/code&amp;gt; werden dadurch erzeugt. In &amp;lt;code&amp;gt;model&amp;lt;/code&amp;gt; sollte der Klartextname des Gerätes stehen. Zudem sind dann -soweit eine XML-Config Datei für das Gerät existiert- die speziellen set/get-Kommandos configXYZ für das Geräte im Auswahldialog der Detailansicht mit Hilfsinformationen verfügbar:&lt;br /&gt;
[[Datei:Z-Wave_confighelp.PNG|900px|thumb|center|config-Befehl mit Hilfstext]]&lt;br /&gt;
&lt;br /&gt;
Bei vorhandener XML-Config-Datei kann die komplette Konfiguration eines Gerätes abgerufen werden:&lt;br /&gt;
 get &amp;lt;name&amp;gt; configAll&lt;br /&gt;
&lt;br /&gt;
Außerdem wird durch den &amp;lt;code&amp;gt;get &amp;lt;name&amp;gt; model&amp;lt;/code&amp;gt; -Befehl geprüft, ob das Gerät in der pepper1-Zwave-Datenbank enthalten ist. Im Erfolgsfall wird ein Link &amp;quot;Details in pepper1.net&amp;quot; unten in der Detailansicht des FHEM-Geräte-Devices zum entsprechenden Geräteeintrag angelegt und ein Bild des Gerätes in die Detailansicht eingebunden.&lt;br /&gt;
&lt;br /&gt;
Der Aufruf von &amp;lt;code&amp;gt;get &amp;lt;name&amp;gt; model&amp;lt;/code&amp;gt; ist auch für die Nutzung der Class MANUFACTURER_PROPRIETARY zwingende Einsatzvoraussetzung.&lt;br /&gt;
&lt;br /&gt;
=== Entfernen eines Z-Wave-Geräts / Exklusion ===&lt;br /&gt;
Durch die Exklusion wird die Home-ID und Node-ID aus dem Gerät und das Gerät selbst aus der Node-List des Controllers gelöscht. Erst nach einer Exklusion kann das Gerät in ein anderes Z-Wave-Netz aufgenommen werden.&lt;br /&gt;
&lt;br /&gt;
Zuerst wird der Z-Wave Gateway in den Standard-Modus zur Exklusion (Ausschluss) von Geräten gesetzt:&lt;br /&gt;
 set ZWDongle_1 removeNode on&lt;br /&gt;
&lt;br /&gt;
Sofern Z-Wave Gateway und Z-Wave Geräte Explorer Frames unterstützen, sollte statt dem obigen Befehl besser der Network-Wide-Modus für die Exklusion genutzt werden (siehe auch Erläuterungen zu Standard- versus Network-Wide-Inklusion unter [[#Hinzufügen eines neuen Z-Wave Geräts / Inklusion|Inklusion]]):&lt;br /&gt;
 set ZWDongle_1 removeNode onNw&lt;br /&gt;
&lt;br /&gt;
Danach muss das Gerät in den Exklusionsmodus (Ausschlussmodus) versetzt werden. Wie dies zu erfolgen hat, ist im Handbuch des Geräte nachzulesen. &lt;br /&gt;
&lt;br /&gt;
Abschließend wird der Exklusionsmodus am Z-Wave Gateway wieder ausgeschaltet:&lt;br /&gt;
 set ZWDongle_1 removeNode off&lt;br /&gt;
&lt;br /&gt;
Das FHEM-Device muss nach der Exklusion manuell durch &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt; gelöscht werden.&lt;br /&gt;
&lt;br /&gt;
Die durch die Exklusion frei gewordene NodeID wird nicht bei der nächsten Inklusion wiederverwendet, sondern es wird die höchste noch nicht verwendete NodeID genutzt.&lt;br /&gt;
&lt;br /&gt;
=== Erneutes Hinzufügen eines bereits registrierten Z-Wave Geräts ===&lt;br /&gt;
Die an einem Z-Wave-Gateway bereits registrierten/inkludierten Geräte sind im Gateway selbst abgespeichert und können durch FHEM jederzeit wieder abgerufen werden. Dies kann man in folgenden Fällen sinnvoll nutzen:&lt;br /&gt;
* Inklusion mit einem batteriegespeisten ZWave-Gateway (bspw. Aeon Labs Z-Stick) ohne FHEM-Server-Anschluss während der Inklusion&lt;br /&gt;
* Umstieg eines ZWave-Netzwerkes von Fremdsoftware auf FHEM  &lt;br /&gt;
* Vollständiger oder teilweiser Verlust der FHEM-Konfiguration&lt;br /&gt;
&lt;br /&gt;
Eine Node-Liste aller inkludierten Geräte des Gateways wird abgerufen durch:&lt;br /&gt;
 get ZWDongle_1 nodeList&lt;br /&gt;
Es wird eine Liste aller im Gateway inkludierten Gerät inklusive Gateway selbst zurückgeliefert. Sofern ein Gerät bereits als FHEM-Device angelegt wurde, wird der FHEM-Device-Name in der nodeList angezeigt. Dies ist für das Gateway selbst immer der Fall. Im obigen Beispiel ist der Eintrag &amp;quot;ZWDongle_1&amp;quot;. Alle noch nicht in FHEM angelegten Geräte, werden als &amp;quot;UNKNOWN_x&amp;quot; ausgegeben, wobei x die ID des betreffenden Gerätes ist.&lt;br /&gt;
&lt;br /&gt;
Mit dem folgenden Befehl wird beispielsweise das bereits im Gateway inkludierte Gerät mit der ID 2 (in der nodeList angezeigt als &amp;quot;UNKNOWN_2&amp;quot;) in FHEM durch autocreate definiert:&lt;br /&gt;
 set ZWDongle_1 createNode 2&lt;br /&gt;
&lt;br /&gt;
Batteriebetriebene Geräte müssen bei Absetzen des &amp;lt;code&amp;gt;createNode&amp;lt;/code&amp;gt;-Befehls wach sein, damit der Befehl verarbeitet werden kann. Dies erreicht man, indem man das Gerät auf &amp;quot;permanent wach&amp;quot; stellt. Falls das Gerät diese Funktion nicht anbietet, muss man es manuell aufwecken und max. 2 Sekunden später den &amp;lt;code&amp;gt;createNode&amp;lt;/code&amp;gt;-Befehl absetzen. Alternativ kann das batteriebetriebene Gerät durch Versand des NIF vom Gerät aus automatisch in FHEM erzeugt werden: Hierzu am Gerät die Taste zum Versand des NIF drücken und &amp;lt;code&amp;gt;autocreate&amp;lt;/code&amp;gt; legt das FHEM-Device an; der Aufruf von &amp;lt;code&amp;gt;createNode&amp;lt;/code&amp;gt; entfällt dann.&lt;br /&gt;
&lt;br /&gt;
== Geräte-Besonderheiten ==&lt;br /&gt;
=== batteriebetriebene Geräte ===&lt;br /&gt;
Batteriebetriebenen Geräten können hinsichtlich ihrer Empfangsbereitschaft unterschieden werden in&lt;br /&gt;
&lt;br /&gt;
* Wakeup-Geräte&lt;br /&gt;
* FLIRS-Geräte&lt;br /&gt;
&lt;br /&gt;
==== Wakeup-Geräte ====&lt;br /&gt;
Wakeup-Geräte sind momentan die häufigste Art von batteriebetriebenen Z-Wave Geräten. Sie sind erkennbar an der Unterstützung der Command Class WAKE_UP.&lt;br /&gt;
Zur Verlängerung der Batterielaufzeit legen sich batteriebetriebene Wakeup-Geräte „schlafen“ und wachen (Wakeup) nur in konfigurierbaren Intervallen auf, um Befehle zu verarbeiten. Das Aufwachen signalisieren die Geräte durch den Versand einer Nachricht &amp;quot;wakeup notification&amp;quot;. Daraufhin senden FHEM und andere Geräte ihre bis dahin gesammelten Befehle, die dann verarbeitet bzw. beantwortet werden. Anschließend gehen die batteriebetriebenen Geräte wieder in den Schlafmodus.&lt;br /&gt;
&lt;br /&gt;
FHEM teilt bei set/get-Befehlen an batteriebetriebene Geräte über einen Hinweis der Form&lt;br /&gt;
:&amp;lt;code&amp;gt;Scheduled for sending after WAKEUP&amp;lt;/code&amp;gt;&lt;br /&gt;
mit, dass der Befehl im Send-Stack abgespeichert und bei der nächsten &amp;quot;wakeup notification&amp;quot; an das Gerät versendet wird. Ein Versand der Befehle im Send-Stack findet grundsätzlich ausschließlich nach Erhalt der &amp;quot;wakeup notification&amp;quot;-Nachricht statt, selbst wenn das Gerät zwischendurch andere Telegramme (bspw. Bewegungsmeldung, Temperatur) an den Controller verschickt. Nur nach Versand der &amp;quot;wakeup notification&amp;quot; ist das batteriebetriebene Gerät grundsätzlich in der Lage (&amp;quot;wach genug&amp;quot;), Telegramme korrekt zu empfangen und zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Das Wakeup-Interval und der Empfänger der &amp;quot;wakeup notification&amp;quot; wird wie folgt konfiguriert:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; wakeupInterval &amp;lt;time&amp;gt; &amp;lt;NodeId&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;time&amp;gt;&amp;lt;/nowiki&amp;gt; ist die Zeit in Sekunden zwischen den Intervallen und &amp;lt;nodeID&amp;gt; der gewünschte Empfänger der &amp;quot;wakeup notification&amp;quot;; in der Regel ist dies &#039;&#039;&#039;immer&#039;&#039;&#039; der Controller &amp;lt;CtrlNodeId&amp;gt;. Viele Geräte kommen im Auslieferungszustand mit der NodeID 255. Die &amp;quot;wakeup notification&amp;quot; wird dann als Broadcast ohne Nutzung von Routing an alle erreichbaren Geräte gesendet. Hier sollte die Konfiguration auf die NodeID des Controllers geändert werden, da dadurch die &amp;quot;wakeup notification&amp;quot; geroutet wird und größere Entfernungen zwischen Gerät und Controller möglich sind. Zudem ist dies robuster und spart zusätzlich noch Batterielaufzeit. Darum setzt FHEM bei der Inklusion von WakeUp-Geräten &#039;&#039;&#039;automatisch&#039;&#039;&#039; den Befehl &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; wakeupInterval 86400 &amp;lt;ControllerNodeId&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; ab. Bei abweichenden eigenen Vorstellungen ist dies gegebenenfalls anzupassen. Bei Geräten mit V2 der Command Class WAKE_UP kann das vom Hersteller vorgesehene Standard-wakeupInterval mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;get &amp;lt;name&amp;gt; wakeupIntervalCapabilities&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; vom Gerät abgerufen werden. Die Einstellungen von wakeupInterval nach Inklusion und nach jeder Änderung immer mit der Abfrage &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;get &amp;lt;name&amp;gt; wakeupInterval&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; überprüfen.&lt;br /&gt;
&lt;br /&gt;
Ein Aufwachen und Versand der &amp;quot;wakeup notification&amp;quot; von batteriebetriebenen Geräten kann für die [[#Assoziation|Assoziation]] und [[#Konfiguration|Konfiguration]] manuell erzwungen werden. Hierzu bringt man das Gerät normalerweise in den Inklusionsmodus oder findet in der Bedienungsanleitung gegebenenfalls andere Informationen. Bitte beachten, dass dann je nach Gerät nur eine geringe Entfernung von Gateway und Gerät vorhanden sein darf (direkte Erreichbarkeit). Alternativ kann für die Dauer der Assoziation und Konfiguration das Wakeup-Interval verkürzt werden (beispielsweise auf 60 Sekunden), wodurch das Routing genutzt werden kann und größere Entfernungen zwischen Gateway und Gerät überbrückt werden können. Anschließend das Wakeup-Interval wieder auf eine batterieschonenende Dauer einzustellen.&lt;br /&gt;
&lt;br /&gt;
Einzelne batteriebetriebene Gerät lassen sich für längere Zeit auf &amp;quot;wach&amp;quot; bzw. permanent &amp;quot;wach&amp;quot; stellen. Dann aus dem Attribut &amp;lt;code&amp;gt;classes&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;WAKE_UP&amp;lt;/code&amp;gt; entfernen, damit Befehle in diesem Gerätemodus von FHEM direkt verschickt werden. Nach Ausschalten des &amp;quot;wach&amp;quot;-Modus &amp;lt;code&amp;gt;WAKE_UP&amp;lt;/code&amp;gt; wieder im Attribut &amp;lt;code&amp;gt;classes&amp;lt;/code&amp;gt; aufnehmen.&lt;br /&gt;
&lt;br /&gt;
Bei Konfigurationsänderungen an batteriebetriebenen Geräten mit &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; config...&amp;lt;/code&amp;gt; sollte die korrekte Verarbeitung der Befehle immer mit dem entsprechenden &amp;lt;code&amp;gt;get &amp;lt;name&amp;gt; config...&amp;lt;/code&amp;gt; oder -falls vorhanden- mit &amp;lt;code&amp;gt;get &amp;lt;name&amp;gt; configAll&amp;lt;/code&amp;gt; überprüft werden, um eventuelle Funk-Telegrammverluste sofort festzustellen.&lt;br /&gt;
&lt;br /&gt;
==== FLIRS-Geräte ====&lt;br /&gt;
Ein batteriebetriebene FLIRS (frequently listening routing slave) Gerät wacht in sehr kurzen Zeitabständen (250ms oder 1000ms) auf und prüft, ob ein Funksignal vorliegt. Liegt kein Funksignal vor geht das Gerät wieder in Tiefschlaf. Zum Aufwecken eines FLIRS-Gerätes ist ein dauerhaftes Funksignal -der Wakeup-Beam-, notwendig, das etwas länger als die Aufweckzeitabstände sein muss. Näher beschrieben unter anderem [http://library.ademconet.com/MWT/fs2/VAM/Introductory-Guide-to-Z-Wave-Technology.PDF hier]. &lt;br /&gt;
&lt;br /&gt;
FLIRS-Geräte haben nicht die Command Class WAKE_UP und arbeiten deshalb nicht mit &amp;quot;wakeup notification&amp;quot;. Aus Sicht des FHEM-Nutzers sind die bekannten FLIRS-Geräte (Sirenen von Vision und Popp) nicht anders zu bedienen/einzurichten als netzgespeiste Geräte. Wakeup-Beam und andere Besonderheiten werden unsichtbar für den Nutzer automatisch abgewickelt.&lt;br /&gt;
&lt;br /&gt;
=== Aeon Labs / Aeotec ===&lt;br /&gt;
==== Multi Sensor 5 ====&lt;br /&gt;
* aktuellste Firmware installieren&lt;br /&gt;
* Attribut &amp;lt;code&amp;gt;classes&amp;lt;/code&amp;gt; um &amp;lt;code&amp;gt;BASIC&amp;lt;/code&amp;gt; ergänzen (ab [[version|Modulversion]] 8824/25.6.2015 wird das automatisch bei der Inklusion durchgeführt)&lt;br /&gt;
* bei USB-Anschluss aus Attribut &amp;lt;code&amp;gt;classes&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;WAKE_UP&amp;lt;/code&amp;gt; entfernen&lt;br /&gt;
* Parameter 101 auf 225 (oder 224 bei USB-Anschluss) setzen mit &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; configGroup1Reports 225&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; configLong 101 225&amp;lt;/code&amp;gt;, um Batteriezustand (nicht bei 224), Temperatur, Feuchte und Helligkeit regelmäßig zu erhalten. Das Sende-Intervall wird duch &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; configGroup1Interval &amp;lt;time/s&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; festgelegt (Standard 720 Sek).&lt;br /&gt;
* [http://www.pepper1.net/zwavedb/device/407 Paramterübersicht pepper-Datenbank]&lt;br /&gt;
siehe {{Link2Forum|Topic=34505|Message=268913}}&lt;br /&gt;
&lt;br /&gt;
==== Multisensor 6 ====&lt;br /&gt;
siehe {{Link2Forum|Topic=40393}}&lt;br /&gt;
* arbeitet bei USB-Anschluß als Router&lt;br /&gt;
* bei USB-Anschluss aus Attribut &amp;lt;code&amp;gt;classes&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;WAKE_UP&amp;lt;/code&amp;gt; entfernen&lt;br /&gt;
* die &amp;lt;code&amp;gt;configGroupxInterval&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;configxxxReportingThreshold&amp;lt;/code&amp;gt; Einstellungen wirken nur bei USB-Anschluss, im reinen Batteriebetrieb werden die Sensordaten nur bei einem &amp;lt;code&amp;gt;wakeup&amp;lt;/code&amp;gt; übertragen&lt;br /&gt;
&lt;br /&gt;
==== Aeotec LED Bulb ZW098-C55 ====&lt;br /&gt;
siehe {{Link2Forum|Topic=40504}}&lt;br /&gt;
&lt;br /&gt;
=== Cyrus ===&lt;br /&gt;
==== Cyrus Zwischenstecker ====&lt;br /&gt;
Der Zwischenstecker speichert den aktuellen Stromverbrauch in einem Reading gemeinsam mit dem zuvor gemessenen Wert und dem zeitlichen Abstand zwischen beiden Messungen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
12.61 W previous: 12.78 delta_time: 21 s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den aktuellen Stromverbrauch einem [[Dummy]] zuzuweisen, kann man den String per [[Notify]] zerschneiden und den Wert übernehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Dummy-Objekt zum Speichern des aktuellen Stromverbrauches:&lt;br /&gt;
define Licht_Watt dummy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Auslesen des Readings &amp;quot;power&amp;quot; aus dem Cyrus-Zwischenstecker (hier nur &amp;quot;Zwischenstecker&amp;quot; genannt) und speichern im Dummy Licht_Watt&lt;br /&gt;
define Licht_Watt_Set notify Zwischenstecker:power:.* {&lt;br /&gt;
  my $power = ReadingsVal(&amp;quot;Zwischenstecker&amp;quot;, &amp;quot;power&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
  my @values = split(&#039; &#039;, $power);&lt;br /&gt;
  fhem(&amp;quot;set Licht_Watt @values[0];&amp;quot;);}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Danfoss ===&lt;br /&gt;
==== DAN_LC-13 Heizungsthermostat LC-13 (014G0013) ====&lt;br /&gt;
Das Danfoss Heizungsthermostat LC-13 muss derzeit zur korrekten Funktion mit FHEM regelmäßig mit folgendem &amp;lt;code&amp;gt;at&amp;lt;/code&amp;gt; abgefragt werden ({{Link2Forum|Topic=32145|Message=260795}}):&lt;br /&gt;
 define Atdanfoss at +*00:30 get &amp;lt;name&amp;gt; battery&lt;br /&gt;
Auf dem Markt sind mehrere Varianten des Thermostates LC-13 erhältlich. Darum beim Kauf unbedingt auf die genaue Bezeichnung LC-13 (014G0013) achten ({{Link2Forum|Topic=38041|Message=303146}}). &lt;br /&gt;
&lt;br /&gt;
=== devolo ===&lt;br /&gt;
==== MT02648 Tür-/Fenster Kontakt 3in1 ====&lt;br /&gt;
siehe {{Link2Forum|Topic=41337}}&lt;br /&gt;
&lt;br /&gt;
=== DüWI ===&lt;br /&gt;
Geräte von DÜWI liefern bei örtlicher Betätigung kein automatisches Funk-Signal über die Statusänderung. Das liese sich nur durch eine regelmäßige Statusabfrage durch FHEM (beispielsweise &amp;lt;code&amp;gt;define Status_Abfrage at +*00:03:00 get &amp;lt;name&amp;gt; swmStatus&amp;lt;/code&amp;gt;) beheben.&lt;br /&gt;
Einige Produkte von [http://zwave.me Z-Wave.Me] basieren auf DÜWI-Geräten. Diese Z-Wave.Me Produkte haben jedoch eine erweiterte Firmware, welche die genannte und weitere Firmware-Schwächen der Original-Produkte von DÜWI behebt.&lt;br /&gt;
&lt;br /&gt;
=== Everspring ===&lt;br /&gt;
==== AN145 Sockelmodul E27 ====&lt;br /&gt;
Statusabfrage ohne permanente Abfrage: {{Link2Forum|Topic=48864|Message=405545|Beitrag}}&lt;br /&gt;
&lt;br /&gt;
=== Fibaro ===&lt;br /&gt;
Association Group für Übermittlung von Statusinformationen an den Controller:&lt;br /&gt;
* ZWave-Geräte: häufig Association Group 3&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;name&amp;gt; associationAdd 3 &amp;lt;CtrlNodeId&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* ZWave Plus-Geräte: Association Group 1 (&amp;quot;lifeline&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== FGS-222 Relais Unterputzeinsatz ====&lt;br /&gt;
Bei der Inklusion werden von FHEM 3 Devices angelegt:&lt;br /&gt;
* Hauptdevice (Steuerung und automatischer Status für Kanal 1 und kanalübergreifende Funktionen)&lt;br /&gt;
* Device für Endpoint 1 (Steuerung Kanal 1)&lt;br /&gt;
* Device für Endpoint 2 (Steuerung und automatischer Status von Kanal 2)&lt;br /&gt;
Die Firmware des FGS-222 übermittelt den Status für Kanal 1 automatisch immer ausschließlich an das Hauptdevice. Die Steuerung von Kanal 1 kann hingegen sowohl über das Hauptdevice als auch über das Device für Endpoint 1 erfolgen. Das Device für Endpoint 1 ist somit nicht zwingend erforderlich und kann grundsätzlich gelöscht werden.&lt;br /&gt;
&lt;br /&gt;
Details: {{Link2Forum|Topic=50176}}&lt;br /&gt;
&lt;br /&gt;
Hinweis zum Reset: {{Link2Forum|Topic=55190|Message=469393}}&lt;br /&gt;
&lt;br /&gt;
==== FGK-101 Tür/Fensterkontakt ====&lt;br /&gt;
* Besonderheiten bei Anschluss eines Temperatursensors: {{Link2Forum|Topic=38012}}&lt;br /&gt;
&lt;br /&gt;
=== GE ===&lt;br /&gt;
==== GE (Model t.b.d) ====&lt;br /&gt;
Dieser Schalter unterstützt keine Statusrückmeldungen.&lt;br /&gt;
&lt;br /&gt;
=== Merten ===&lt;br /&gt;
Laut {{Link2Forum|Topic=38133}} müssen bei einigen Merten-Geräten, die mit Fremdsoftware inkludiert wurden, gegebenenfalls die Geräte wieder exkludiert und dann erneut mit FHEM inkludiert werden, damit Assoziationen mit FHEM gesetzt werden können.&lt;br /&gt;
&lt;br /&gt;
=== Philio ===&lt;br /&gt;
==== PHI_PAN04 Relais Unterputzeinsatz 2 Schalter a 1.5kW mit Messfunktion ====&lt;br /&gt;
siehe {{Link2Forum|Topic=28046}}&lt;br /&gt;
&lt;br /&gt;
=== Popp ===&lt;br /&gt;
==== POPE004001 Z-Wave Rauchmelder mit Innensirene ====&lt;br /&gt;
siehe {{Link2Forum|Topic=39856}}&lt;br /&gt;
==== POPE005107 Z-Wave Außensirene ====&lt;br /&gt;
siehe {{Link2Forum|Topic=42736}}&amp;lt;br&amp;gt;&lt;br /&gt;
Alte Firmwareversionen haben einen Bug bei der Übermittlung von negativen Temperaturen. Eine Lösungsvariante über ein &amp;lt;code&amp;gt;userReadings&amp;lt;/code&amp;gt; findet sich auch im verlinkten Thema. &lt;br /&gt;
==== POPE009006 Z-Wave Wall Plug Switch ====&lt;br /&gt;
siehe {{Link2Forum|Topic=40771}}&lt;br /&gt;
==== POPE009402 10Year Smoke Detector ====&lt;br /&gt;
Die erste Firmwareversion hat eine fehlerhafte modelID. Der Rauchmelder wird dadurch fälschlich als [[Z-Wave#POPE005107_Z-Wave_Au.C3.9Fensirene|Popp Aussensirene]] in FHEM angezeigt. Laut Popp ist eine Firmwareupdate in Arbeit (Stand 07/16).&lt;br /&gt;
&lt;br /&gt;
=== Z-Wave.Me ===&lt;br /&gt;
==== ZME_RC2 Fernbedienung ====&lt;br /&gt;
siehe {{Link2Forum|Topic=35513}}&amp;lt;BR&amp;gt;&lt;br /&gt;
Das Forenthema enthält eine detaillierte Beschreibung der Nutzung der Class MULTI_CHANNEL_ASSOCIATION.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
* Grundlageninformation &amp;quot;Z-Wave-Haupt-Anleitung&amp;quot;: [http://manuals.zwaveeurope.com/Generic_Z_de.pdf Wie errichte und betreibe ich ein Z-Wave basiertes Funknetz]&lt;br /&gt;
* [http://www.zwave.de/buch-z-wave-grundlagen/ Buch] &amp;quot;Z-Wave: Die Funktechnologie für das Smart Home&amp;quot; von Dr. Christian Paetz (Paetz &amp;quot;is the primary European representative for the Z-Wave Alliance&amp;quot; [http://z-wavealliance.org/global-contacts/])&lt;br /&gt;
* herstellerübergreifende Datenbank mit Bedienungsanleitungen zu Z-Wave-Geräten: http://www.zwave.de/handbuecher/ oder http://manuals.zwaveeurope.com&lt;br /&gt;
* herstellerübergreifende Datenbank mit technischen Informationen zu Z-Wave-Geräten (Z-Wave Device Library): http://www.pepper1.net/zwavedb/&lt;br /&gt;
* Z-Wave-Produktdatenbank mit Angabe zur Zertifizierung (Z-Wave oder [http://z-wavealliance.org/z-wave_plus_certification Z-Wave Plus]): http://products.z-wavealliance.org&lt;br /&gt;
* informative Webseiten zu Z-Wave:&lt;br /&gt;
** [http://www.z-wavealliance.org/ http://www.z-wavealliance.org/], englisch&lt;br /&gt;
** [http://www.zwaveeurope.com/ http://www.zwaveeurope.com/], englisch&lt;br /&gt;
** [http://www.zwave.de/ http://www.zwave.de/], deutsch&lt;br /&gt;
** [http://library.ademconet.com/MWT/fs2/VAM/Introductory-Guide-to-Z-Wave-Technology.PDF Introductory Guide to Z-Wave-Technology von Honeywell], englisch&lt;br /&gt;
=== Informationsquellen zur Einbindung von Command Classes ===&lt;br /&gt;
Offizielle und ausführliche Informationen von Sigma Designs (veröffentlicht am 31.08.2016):&lt;br /&gt;
* [http://z-wave.sigmadesigns.com/design-z-wave/z-wave-public-specification/ Z-Wave Public Specification]&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen (seit Veröffentlichung der Z-Wave Spezifikationen am 31.08.2016 geringe Relevanz)&lt;br /&gt;
* [https://github.com/yepher/RaZBerry Infos zu Command Classes (ausführlich; insbesondere im Verzeichnis &amp;quot;docs&amp;quot;), RaZBerry und Z-Wave allgemein], englisch&lt;br /&gt;
* [http://220.135.186.178/zwave/example/ Übersicht von Command Classes und deren Rückgabewerten mit Unterscheidung der Class-Versionen], englisch&lt;br /&gt;
* Code von http://www.openzwave.org (https://github.com/OpenZWave/open-zwave) und http://www.openhab.org (Z-Wave binding: https://github.com/cdjackson/openhab)&lt;br /&gt;
* eine Java-API-Beschreibung mit Hinweisen zu Unterschieden von Class-Versionen: http://dz.prosyst.com/pdoc/mBS_SH_SDK_8.1/modules/zwave/api/driver/index.html&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
=== Welche Infos sollten Anfragen im ZWave-Forum enthalten? ===&lt;br /&gt;
* Anfragen bitte nur zur aktuellsten FHEM-Version: Befehl &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; ergibt Ausgabe &amp;quot;nothing to do...&amp;quot;&lt;br /&gt;
* detaillierte Beschreibung des Problems&lt;br /&gt;
* beteiligte Komponenten (genaue Bezeichnung und evtl. Link auf Hersteller-Dokumentation)&lt;br /&gt;
* list des jeweiligen FHEM-Devices (&amp;lt;code&amp;gt;list &amp;lt;device&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
::Bitte vor Aufruf des list-Befehls -wenn vorhanden/möglich- folgende Befehle ausführen:&lt;br /&gt;
::*&amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; associationAll&amp;lt;/code&amp;gt; &lt;br /&gt;
::*&amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; configAll&amp;lt;/code&amp;gt;&lt;br /&gt;
::*&amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; versionClassAll&amp;lt;/code&amp;gt;&lt;br /&gt;
::*&amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; wakeupInterval&amp;lt;/code&amp;gt; (nur bei batteriebetriebenen Geräten)&lt;br /&gt;
* passender Ausschnitt aus dem Logfile (siehe Link im FHEM-Menü links) generiert mit den gesetzten Attributen&lt;br /&gt;
::*&amp;lt;code&amp;gt;attr &amp;lt;ZWDongle&amp;gt; verbose 5&amp;lt;/code&amp;gt; und&lt;br /&gt;
::*&amp;lt;code&amp;gt;attr global mseclog 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Welche Schritte sind für die Einbindung von ZWave-Geräten in Fhem mindestens durchzuführen? ===&lt;br /&gt;
Voraussetzung: ZWave-Gateway ist erfolgreich eingebunden!&lt;br /&gt;
# [[#Hinzufügen eines neuen Z-Wave Geräts / Inklusion|Inklusion]] des Gerätes&lt;br /&gt;
# [[#Assoziation|Assoziation]] der Assoziationsgruppe(n) des Gerätes mit dem Gateway&lt;br /&gt;
# [[#Konfiguration|Konfiguration]] des Gerätes&lt;br /&gt;
&lt;br /&gt;
=== Warum bleibt der Status (STATE) des neu inkludierten Gerätes dauerhaft auf &amp;quot;associationAdd &amp;lt;associationGroup&amp;gt; &amp;lt;CtrlNodeId&amp;gt;&amp;quot; stehen? ===&lt;br /&gt;
FHEM setzt das Reading &amp;quot;state&amp;quot;, das den STATE bestimmt, nicht bei allen ZWave-Devices mit vordefinierten Standardwerten. Daher bleibt der bei der Inklusion automatisch abgesetzte &amp;quot;associationAdd&amp;quot;-Befehl unter Umständen im STATE stehen, bis der Anwender den STATE über die Vergabe des Attributes &amp;lt;code&amp;gt;[http://fhem.de/commandref#stateFormat stateFormat]&amp;lt;/code&amp;gt; manuell an seine Bedürfnisse angepasst hat.&lt;br /&gt;
(weitergehende Info zum state/STATE/stateFormat: [[DevelopmentState]])&lt;br /&gt;
&lt;br /&gt;
=== Wie können bei mehrkanaligen Aktoren die zusätzlichen Kanäle (&amp;gt;1) angesprochen werden? ===&lt;br /&gt;
* Bei der [[#Hinzufügen eines neuen Z-Wave Geräts / Inklusion|Inklusion]] des Gerätes wird das Hauptdevice mit dem Namen &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;ZWave_&amp;lt;Geräteklasse laut NIF des Gerätes&amp;gt;_&amp;lt;NodeID&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; und die Devices für alle Kanäle (Endpoints) nach dem Namensschema &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;ZWave_&amp;lt;Geräteklasse laut NIF des Gerätes&amp;gt;_&amp;lt;NodeID&amp;gt;.&amp;lt;EndpointNr&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; automatisch angelegt. Jedes dieser FHEM-Devices spricht regelmäßig einen bestimmten Kanal des Gerätes an; einige Geräte sprechen mit dem Hauptdevice jedoch das gesamte Gerät mit allen Kanälen an (Bedienungsanleitung beachten).&lt;br /&gt;
* Manuell werden Devices für zusätzliche Kanäle mit Hilfe der Befehle &amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; mcEndpoints&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; mcCapability &amp;lt;chid&amp;gt;&amp;lt;/code&amp;gt; aus der Class MULTI_CHANNEL ermittelt bzw. einzeln über autocreate angelegt (Details und Beispiel siehe [http://fhem.de/commandref.html#ZWaveget commandref]). Mit dem Befehl &amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; mcCreateAll&amp;lt;/code&amp;gt; werden automatisch alle Kanäle des Gerätes durch autocreate als eigene Devices in FHEM angelegt.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann man die SDK-Version eines Gerätes herausfinden? ===&lt;br /&gt;
Mit FHEM alleine kann eine [[#Grobermittlung|Grobermittlung]] der SDK-Version vorgenommen werden, die aber für einige Zwecke bereits ausreichend ist. Soll eine [[#Detailermittlung|Detailermittlung]] der genauen SDK-Version erfolgen, dann müssen die mit FHEM ermittelten Werte anhand externer Quellen übersetzt werden.&lt;br /&gt;
==== Grobermittlung ====&lt;br /&gt;
Der Befehl &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;get &amp;lt;ZWDongle&amp;gt; nodeInfo &amp;lt;dezimale nodeId&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; liefert das Reading &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;nodeInfo_&amp;lt;dezimale nodeId&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; zurück.&lt;br /&gt;
Die Angabe im Reading hinter &amp;lt;code&amp;gt;ProtocolVers:&amp;lt;/code&amp;gt; lässt grobe Rückschlüsse zu. Mögliche (bekannte) Werte:&lt;br /&gt;
* &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; -&amp;gt; bspw. keine Explorer Frames, keine SUC-Unterstützung (veraltet, keine bekannten Geräte mehr im Handel)&lt;br /&gt;
* &amp;lt;code&amp;gt;SDK5.0x+4.2x&amp;lt;/code&amp;gt; -&amp;gt; bspw. keine Explorer Frames, teilweise SUC-Unterstützung&lt;br /&gt;
* &amp;lt;code&amp;gt;SDK4.5x+6.0x&amp;lt;/code&amp;gt; -&amp;gt; bspw. Explorer Frames- und SUC-Unterstützung (Reading-Wert wird auch bei SDK 6.5x = Z-Wave Plus angezeigt)&lt;br /&gt;
==== Detailermittlung ====&lt;br /&gt;
Durch den Befehl &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;get &amp;lt;name&amp;gt; version&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; kann man die ZWave-Protokoll-Version von Geräten und Controller abfragen. Mit Unterstützung von Übersetzungstabellen&lt;br /&gt;
* http://wiki.micasaverde.com/index.php/ZWave_Protocol_Version&lt;br /&gt;
* Suche nach sdkids.xml in einer Suchmaschine&lt;br /&gt;
kann aus der Protokoll-Version das genutzte SDK festgestellt werden.&lt;br /&gt;
&lt;br /&gt;
Beispielsweis entspricht das Reading eines Gerätes &amp;quot;Lib 6 &#039;&#039;&#039;Prot 2.64&#039;&#039;&#039; App 1.6&amp;quot; dem SDK 5.02 Patch 2 oder eines Controller &amp;quot;Z-Wave &#039;&#039;&#039;3.41&#039;&#039;&#039; STATIC_CONTROLLER&amp;quot; dem SDK 6.02.00.&lt;br /&gt;
 &lt;br /&gt;
HINWEIS: Bei der Vergabe der Protokoll-Version und zugehörigem SDK gibt es keine erkennbare Logik: Eine höhere Protokoll-Version steht nicht notwendig für eine höheres SDK.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann eine verschlüsselte Kommunikation unter Nutzung der Command Class SECURITY eingerichtet werden? ===&lt;br /&gt;
Die verschlüsselte Kommunikation zwischen Controller und Endgerät setzt eine secure-Inklusion voraus. Bereits mit der Inklusion wird entschieden, ob die Kommunikation von Controller und Endgerät dauerhaft verschlüsselt oder unverschlüsselt erfolgt. Ist ein Gerät bereits normal inkludiert und entscheidet man sich nachträglich für eine verschlüsselte Kommunikation, so ist das nur möglich, indem das Gerät exkludiert und dann wieder secure inkludiert wird.&lt;br /&gt;
&lt;br /&gt;
Ob die Verschlüsselung bei einem Gerät mit Unterstützung der Command Class SECURITY genutzt werden soll, sollte genau überlegt werden. Die Verschlüsselung führt zu einem deutlich größeren Funkverkehr zur Ausführung eines Befehls und teilweise auch zu spürbaren Latenzen.&lt;br /&gt;
&lt;br /&gt;
Vorarbeiten:&lt;br /&gt;
* Das Perl-Modul Crypt-Rijndael muss installiert sein.&lt;br /&gt;
* Das Attribut &amp;lt;code&amp;gt;networkKey&amp;lt;/code&amp;gt; muss mit einem 32-Zeichen langen Hexzahl beim ZWDongle angelegt werden. Dieser Schlüssel sollte nicht veröffentlicht werden und auch zusätzlich separat (bspw. auf Papier) festgehalten werden. Bei Verlust des Attributes und Schlüssels ist eine Kommunikation nur nach erneuter Inklusion möglich.&lt;br /&gt;
&lt;br /&gt;
Ablauf der secure-Inklusion:&lt;br /&gt;
* Controller in den Modus zur secure-Inklusion schalten:&lt;br /&gt;
: &amp;lt;code&amp;gt;set &amp;lt;ZWDongle&amp;gt; addNode onSec&amp;lt;/code&amp;gt; für die Standard-secure-Inklusion&lt;br /&gt;
: oder alternativ&lt;br /&gt;
: &amp;lt;code&amp;gt;set &amp;lt;ZWDongle&amp;gt; addNode onNwSec&amp;lt;/code&amp;gt; für die Nework-Wide-secure-Inklusion&lt;br /&gt;
* Gerät gemäß Handbuch in den Modus zur secure-Inklusion bringen (teilweise ist jeweils für secure- und normale Inklusion ein anderes Vorgehen notwendig!)&lt;br /&gt;
* Das Gerät sollte jetzt automatisch erkannt und das FHEM-Device durch &amp;lt;code&amp;gt;autocreate&amp;lt;/code&amp;gt; angelegt werden. Die secure-inkludierten Geräte haben ein zusätzliches Attribut &amp;lt;code&amp;gt;secure_classes&amp;lt;/code&amp;gt; in dem die Command Classes deren Kommunikation verschlüsselt abläuft aufgelistet sind. Nicht in diesem Attribut, aber in &amp;lt;code&amp;gt;classes&amp;lt;/code&amp;gt; aufgeführte Command Classes wickeln die Kommunikation weiterhin unverschlüsslt ab.&lt;br /&gt;
* Inklusionsmodus des Controllers ausschalten:&lt;br /&gt;
: &amp;lt;code&amp;gt;set &amp;lt;ZWdongle&amp;gt; addnode off&amp;lt;/code&amp;gt;&lt;br /&gt;
* Das Vorgehen in FHEM unterscheidet sich von nun an nicht von normal (unverschlüsselt) inkludierten Geräten. Die Verschlüsselung läuft für den Anwender transparent ab. Darum anschließend [[#Assoziation|Assoziation]] und [[#Konfiguration|Konfiguration]] vornehmen.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann man ohne Exklusion Nodes des Controllers löschen? ===&lt;br /&gt;
HINWEIS: Geräte sollten grundsätzlich immer über eine Exklusion aus der Nodelist des Controllers gelöscht werden. Das nachfolgend geschilderte Vorgehen ist nur in Sonderfällen (bspw. Gerätedefekt, gebraucht gekauftes Gateway) anzuwenden.&lt;br /&gt;
&lt;br /&gt;
Nicht mehr zu erreichende/reagierende Nodes (Geräte) können manuell mit dem Befehl &amp;lt;code&amp;gt;removeFailedNode&amp;lt;/code&amp;gt; gelöscht werden. Dazu muss sich der betroffene Node auf der FailedNodeList des Controllers befinden. Auf die FailedNodeList kommen netzbetriebene Geräte automatisch, wenn sie vom Controller nicht mehr per Funk erreicht werden. Batteriebetriebene Geräte müssen manuell auf die FailedNodelist gesetzt werden, da der Controller nicht feststellen kann, ob sie nur langfristig &amp;quot;schlafen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;lt;code&amp;gt;removeFailedNode&amp;lt;/code&amp;gt; löscht nur Nodes auf der FailedNodeList, die erst vor Kurzem nicht erreicht werden konnten. Darum muss sowohl das manuelle Verschieben von batteriebetriebenen als auch das Nicht-Erreichen der netzbetriebenen Geräte erst Kurz vor Aufruf des &amp;lt;code&amp;gt;removeFailedNode&amp;lt;/code&amp;gt;-Befehls erfolgt sein. &lt;br /&gt;
&lt;br /&gt;
Vorgehensweise für den Node &amp;lt;NodeId&amp;gt;:&lt;br /&gt;
# An den betroffenen Node eine Telegramm mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;ZWDongle&amp;gt; sendNIF &amp;lt;NodeId&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; verschicken, um ihn auf FailedNodeList zu verschieben bzw. Zeitstempel zu aktualisieren.&lt;br /&gt;
# Abfragen, ob der Node auf der FailedNodeList steht: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;get &amp;lt;ZWDongle&amp;gt; isFailedNode &amp;lt;NodeId&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. Wenn der Rückgabewert der Abfrage &amp;quot;yes&amp;quot; ist, steht der Node korrekt auf der FailedNodeList und kann mit &amp;lt;code&amp;gt;removeFailedNode&amp;lt;/code&amp;gt; gelöscht werden.&lt;br /&gt;
# Befehl zum Löschen des Nodes absetzen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;ZWDongle&amp;gt; removeFailedNode &amp;lt;NodeId&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. Der Befehl testet vor dem Löschen noch einmal, dass der Node nicht erreicht werden kann und entfernt erst dann den Node.&lt;br /&gt;
# Prüfen, der Ergebnisse des &amp;lt;code&amp;gt;removeFailedNode&amp;lt;/code&amp;gt;-Befehls im Log oder [[Event monitor]]. Die verschiedenen Ergebnisse werden durch die in der commandref dokumentierten Events signalisiert. Tritt das Ergebnis &amp;quot;failedNodeRemoveProcessBusy&amp;quot; mehrfach hintereinander auf, muss das ZWDongle kurz stromlos gemacht werden.&lt;br /&gt;
# Prüfen, ob der Node nicht mehr auf der Nodelist des Controllers ist: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;get &amp;lt;ZWDongle&amp;gt; nodeList&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
siehe auch {{Link2Forum|Topic=32823|Message=292626}}&lt;br /&gt;
&lt;br /&gt;
=== Wie ist der einfachste Weg ein (defektes) Gerät durch ein gleiches Ersatzgerät auszutauschen? ===&lt;br /&gt;
Tauscht man ein defektes Gerät durch ein gleiches Ersatzgerät und inkludiert das Ersatzgerät per &amp;lt;code&amp;gt;addNode&amp;lt;/code&amp;gt;, so erhält das Ersatzgerät eine neue NodeId. Soll das Ersatzgerät die gleiche NodeId wie das alte Gerät erhalten, so muss statt &amp;lt;code&amp;gt;addNode&amp;lt;/code&amp;gt; der Befehl &amp;lt;code&amp;gt;replaceFailedNode&amp;lt;/code&amp;gt; zur Inklusion des Ersatzgerätes (=gleiches Modell) verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Vorgehensweise für den Node &amp;lt;NodeId&amp;gt;:&lt;br /&gt;
# sofern das alte Gerät noch ansprechbar ist, die Konfiguration und Assoziationen abfragen, damit man die Werte im Ersatzgerät einfach wieder setzen kann:&lt;br /&gt;
## &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;get &amp;lt;device&amp;gt; configAll&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;get &amp;lt;device&amp;gt; associationAll&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# defektes Gerät aus- und neues einbauen&lt;br /&gt;
# Befehl &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;ZWDongle&amp;gt; sendNIF &amp;lt;NodeId&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; absetzen, damit das Dongle die NodeId auf die FailedNodeList setzt.&lt;br /&gt;
# Abfragen, ob der Node auf der FailedNodeList steht: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;get &amp;lt;ZWDongle&amp;gt; isFailedNode &amp;lt;NodeId&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. Wenn der Rückgabewert der Abfrage &amp;quot;yes&amp;quot; ist, steht der Node korrekt auf der FailedNodeList und das Ersatzgerät kann mit &amp;lt;code&amp;gt;replaceFailedNode&amp;lt;/code&amp;gt; inkludiert werden.&lt;br /&gt;
# &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;zwdongle&amp;gt; replaceFailedNode &amp;lt;NodeId&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; für die NodeId des defekten Gerätes aufrufen und das Ersatzgerät in den Inklusionsmodus bringen&lt;br /&gt;
# Korrekte Inklusion prüfen und beim alten Aktor ausgelesene Werte beim neuen Aktor wieder setzen.&lt;br /&gt;
&lt;br /&gt;
=== Bei einer Inklusion wird eine durch Exklusion/removeFailedNode frei gewordenen NodeId nicht mehr vergeben. Ist das korrekt? ===&lt;br /&gt;
Ja, das ist richtig.&lt;br /&gt;
&lt;br /&gt;
Bei der Inklusion über addNode vergibt der Controller die höchste bisher noch nie verwendete NodeID. Durch Exklusion oder removeFailedNode frei gewordene NodeIDs werden hierbei nicht erneut vergeben. Nur bei einem Controller-Reset, der mit einem unwiederbringlichen Verlust sämtlicher Informationen des ZWave-Netzes und Neuvergabe der HomeID verbunden ist, beginnt die Zählung wieder von vorne.&lt;br /&gt;
&lt;br /&gt;
=== Welche Funktion haben die XML-Config-Dateien in Fhem? ===&lt;br /&gt;
In den XML-Config-Dateien sind Informationen zu einzelnen ZWave-Geräten enthalten, die der Erleichterung der Gerätenutzung und -einbindung in FHEM dienen. Dies sind unter anderem Erläuterungen zu den Parameternummer/-werten, Assoziationsgruppen und Besonderheiten eines Gerätes. Ob eine zum Zwave-Gerät passende XML-Config Datei existiert, wird im Rahmen der Inklusion oder durch manuellen Aufruf des Befehls &amp;lt;code&amp;gt;get &amp;lt;name&amp;gt; model&amp;lt;/code&amp;gt; ermittelt. Wird eine passende XML-Config-Datei gefunden, wird sie automatisch in FHEM eingebunden. Das Reading &amp;lt;code&amp;gt;modelConfig&amp;lt;/code&amp;gt; enthält dann den zugehörigen XML-Config-Dateinamen. Stehen keine XML-Config-Informationen bereit, enthält das Reading &amp;lt;code&amp;gt;modelConfig&amp;lt;/code&amp;gt; den Wert &amp;quot;unknown&amp;quot;. Die Funktionsfähigkeit von FHEM mit ZWave-Geräten ist auch bei fehlender XML-Config-Datei gegeben. Es gibt dadurch keine funktionalen Einschränkungen in FHEM; es entfallen &amp;quot;nur&amp;quot; Erleichterungen und es sind unter Umständen mehr manuelle Schritte bei der Gerätenutzung/-einbindung notwendig.&lt;br /&gt;
&lt;br /&gt;
Erleichterungen bei vorhandener XML-Config für ein ZWave-Gerät:&lt;br /&gt;
* Bei der Inklusion:&lt;br /&gt;
** Assoziationen mit dem Controller bei von Gruppe 1 abweichenender Assoziationsgruppe werden automatisch gesetzt&lt;br /&gt;
** vom NIF nicht gemeldete, aber vom Gerät unterstützte Classes, werden im Attribut &amp;lt;code&amp;gt;classes&amp;lt;/code&amp;gt; ergänzt&lt;br /&gt;
* Bei der Konfiguration:&lt;br /&gt;
** die Parameternummern stehen als configXY-Befehle zur Verfügung und werden mit Hilfetexten -auch zu den Parmaeterwerten- in der Detailansicht des FHEM-Device erläutert.&lt;br /&gt;
&lt;br /&gt;
HINWEIS: Bitte auch bei vorhandener XML-Config-Datei nach der Inklusion und bei der Konfiguration die Assoziationen und Parameter prüfen. Von den eigenen Vorstellungen abweichende Vorgaben oder gar Fehler in der Config-Datei können nie ausgeschlossen werden. Fehler bitte im Forum ({{Link2Forum|Area=ZWave}}) melden.&lt;br /&gt;
&lt;br /&gt;
=== Wie können fehlende XML-Config-Informationen für mein ZWave-Gerät in Fhem eingebunden werden? ===&lt;br /&gt;
Die XML-Config-Informationen von FHEM sind in folgenden Dateien im Ordner fhem/FHEM/lib gespeichert:&lt;br /&gt;
* openzwave_manufacturer_specific.xml&lt;br /&gt;
* openzwave_deviceconfig.xml.gz&lt;br /&gt;
* fhem_zwave_deviceconfig.xml.gz&lt;br /&gt;
Die in den Dateien enthaltenen Informationen beruhen in großen Teilen auf Daten von openzwave und übernehmen daher das openzwave-Datenformat, das unter https://github.com/OpenZWave/open-zwave/wiki/Adding-Devices näher beschrieben wird. &lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;quot;openzwave_manufacturer_specific.xml&amp;quot; enthält die eindeutige Kennung des ZWave-Gerätes, die in FHEM nach Aufruf des Befehls &amp;lt;code&amp;gt;get &amp;lt;name&amp;gt; model&amp;lt;/code&amp;gt; im Reading &amp;lt;code&amp;gt;modelId&amp;lt;/code&amp;gt; des FHEM-ZWave-Devices steht. Weiterhin wird der Klartextname dieses Gerätes, der im Reading &amp;lt;code&amp;gt;model&amp;lt;/code&amp;gt; angezeigt werden soll, festgelegt. Zudem wird der Dateiname der eigentlichen XML-Config-Datei für das ZWave-Gerät angegeben, der später informativ im Reading &amp;lt;code&amp;gt;modelConfig&amp;lt;/code&amp;gt; steht.&lt;br /&gt;
&lt;br /&gt;
Die Dateien &amp;quot;openzwave_deviceconfig.xml.gz&amp;quot; und &amp;quot;fhem_zwave_deviceconfig.xml.gz&amp;quot; enthalten in komprimierter Form die eigentlichen XML-Config-Dateien für die ZWave-Geräte. FHEM durchsucht beide Dateien nach der passenden XML-Config-Datei. Ist in beiden Dateien eine XML-Config für ein Gerät vorhanden, so werden die XML-Daten aus der &amp;quot;fhem_zwave_deviceconfig.xml.gz&amp;quot; bevorzugt. Aufbau und Struktur einer einzelnen XML-Config-Datei ist der oben verlinkten Seite bei openzwave zu entnehmen. &lt;br /&gt;
&lt;br /&gt;
Prüfschritte und Vorgehensweise:&lt;br /&gt;
* Gerät ist auf https://github.com/OpenZWave/open-zwave/tree/master/config oder https://github.com/jeedom/plugin-openzwave/tree/master/ressources/openzwave/config in manufacturer_specific.xml und dem herstellerspezifischen Unterordner bereits vorhanden, aber steht in FHEM nicht zur Verfügung: Hinweis mit Link im Forum ({{Link2Forum|Area=ZWave}}), dass die XML-Config-Dateien in FHEM aktualisiert werden sollen.&lt;br /&gt;
* Andernfalls: Entsprechend https://github.com/OpenZWave/open-zwave/wiki/Adding-Devices die XML-Config-Datei für das Gerät erstellen und unkomprimiert zusammen mit der zu ergänzenden Info für die Datei &amp;quot;openzwave_manufacturer_specific.xml&amp;quot; im Forum ({{Link2Forum|Area=ZWave}}) zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
=== Wie führt man eine Komplett-Sicherung der ZWave-Installation durch? ===&lt;br /&gt;
Zu einer Komplett-Sicherung der ZWave-Konfiguration gehören:&lt;br /&gt;
&lt;br /&gt;
1. [[Backup]] der FHEM-Installation &lt;br /&gt;
::&#039;&#039;&#039;und&#039;&#039;&#039;&lt;br /&gt;
2. Backup des NVRAM des Controllers&lt;br /&gt;
&lt;br /&gt;
Es genügt nicht nur die FHEM-Installation/Konfiguration zu sichern, da der Controller im NVRAM Daten über HomeID, NodeIDs usw. speichert, die in der FHEM-Installation nicht enthalten sind und auch nicht durch FHEM rekonstruierbar sind.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
zu 2.) Backup des NVRAM des Controllers&lt;br /&gt;
&lt;br /&gt;
Einige Controllerhersteller bieten eine eigenständige Software zum Backup/Restore an (siehe Hinweise zu den Controllern unter [[#Autocreate_des_Gateways]]).&lt;br /&gt;
&lt;br /&gt;
FHEM kann mit den ZWDongle-Befehlen &amp;lt;code&amp;gt;backupCreate&amp;lt;/code&amp;gt; das NVRAM der Controller sichern und mit &amp;lt;code&amp;gt;backupRestore&amp;lt;/code&amp;gt; zurückschreiben. Da das Speicherlayout des NVRAM unter anderem von Controller-Hersteller, SDK und Firmwareversion abhängig sein kann, sollte man die Sicherung und Wiederherstellung des eigenen Controllers (auf eigenes Risiko) testen und sinnvollerweise einen gleichen Ersatzcontroller wie den Controller des Produktivsystem besitzen. Erfolgreiche Sicherung/Wiederherstellung wurde im Forum von den ZWavePlus-Controllern UZB1 (256k), Razberry (256k), Vision ZU 1401-5 EU (128k)und AEOTEC Z-Stick Gen5 (256k) berichtet.&lt;br /&gt;
(Weitergehende Infos -neben der commandref- im Forum: {{Link2Forum|Topic=52364}}, {{Link2Forum|Topic=52914}}, {{Link2Forum|Topic=53023}})&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich zur Fortentwicklung der ZWave-Module beitragen? ===&lt;br /&gt;
* Erfolgreichen Einsatz von neuen/bisher nicht gemeldeten ZWave-Geräten im Forum mitteilen&lt;br /&gt;
* Codeschnipsel und Ideen im Forum posten&lt;br /&gt;
* Fehler und Probleme im Forum melden&lt;br /&gt;
* [[How_to_write_a_patch|Patches]] für 00_ZWDongle.pm und 10_ZWave.pm erstellen&lt;br /&gt;
* Wiki: Ergänzungen und Korrekturen vornehmen; neue Geräte ins Wiki aufnehmen; Codeschnipsel und Beispiele einpflegen&lt;br /&gt;
&lt;br /&gt;
=== Wie wird ein fehlendes Kernelmodul (Fritzbox) eingebunden? ===&lt;br /&gt;
Auf der Fritzbox (und evtl. auch anderen Systemen) muss sichergestellt werden, dass das Kernelmodul für das Gateway geladen wird. Ansonsten scheitert die Einbindung des Gateways in FHEM.&lt;br /&gt;
&lt;br /&gt;
Für den Aeon Labs Z-Stick muss beispielsweise auf der Fritzbox das Kernelmodul &amp;lt;code&amp;gt;cp2101.ko&amp;lt;/code&amp;gt; geladen werden.&lt;br /&gt;
Diese Datei ist bei einer [[FHEM und FritzBox 7390]] Installation über das Image von [http://www.fhem.de fhem.de] bereits enthalten.&lt;br /&gt;
Um den Aeon Labs Z-Stick zu verwenden, muss dieses Kernelmodul vor oder beim Starten des FHEM-Servers geladen sein. Dies erreicht man durch einen Eintrag in der Datei &amp;lt;code&amp;gt;startfhem&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Die entsprechende Zeile kann direkt unterhalb der modprobe Anweisungen eingefügt werden.&lt;br /&gt;
 insmod $home/lib/cp2101.ko&lt;br /&gt;
&lt;br /&gt;
Nach einem FHEM-Neustart sollte das Gateway (der USB Stick) nun erkannt werden.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Z-Wave Components]]&lt;/div&gt;</summary>
		<author><name>LordVoodoo</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Anwesenheitserkennung&amp;diff=18257</id>
		<title>Anwesenheitserkennung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Anwesenheitserkennung&amp;diff=18257"/>
		<updated>2017-01-03T09:57:19Z</updated>

		<summary type="html">&lt;p&gt;LordVoodoo: /* Beispiele für die Nutzung der Anwesenheitserkennung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Viele Benutzer führen bereits eine eigene &#039;&#039;&#039;Anwesenheitserkennung&#039;&#039;&#039; durch. Diese basiert in den meisten Fällen auf Ping Checks oder bei [[AVM Fritz!Box|FritzBoxen]] auf dem Befehl &#039;&#039;ctlmgr_ctl&#039;&#039;. Diese Lösungen können aber je nach Aufbau und Funktion FHEM massiv beeinträchtigen. Aufgrund des Aufbaus vom FHEM kann dieses dadurch für mehrere Sekunden zum völligen Stillstand gebracht werden.&lt;br /&gt;
&lt;br /&gt;
In FHEM gibt es mittlerweile mehrere Module, die eine zuverlässige Anwesenheitserkennung bieten, ohne dabei FHEM bei der Ausführung zu beeinträchtigen.&lt;br /&gt;
&lt;br /&gt;
Eine erweiterte Funktion der Anwesenheitserkennung ist die Standortverfolgung, die sich nicht nur auf ein oder sehr wenige mit (eigenem) WLAN versorgte Gebiete beschränkt.&lt;br /&gt;
&lt;br /&gt;
== Vorüberlegungen ==&lt;br /&gt;
Generell gibt es mehrere Ansätze um Anwesenheitserkennung mit Handys/Smartphones durchzuführen.&lt;br /&gt;
&lt;br /&gt;
* via PING Checks im gesamten WLAN&lt;br /&gt;
* Aktivitätsprüfung auf einer FritzBox&lt;br /&gt;
* Bluetooth Checks in der gesamten Wohnung&lt;br /&gt;
* eigene Perl-Funktion&lt;br /&gt;
* aktive Benachrichtigung des Smartphones, ausgelöst z.B. über Geo-Lokation/Geofence&lt;br /&gt;
&lt;br /&gt;
Dabei gilt bei der Auswahl der Art darauf zu achten wie sich das jeweilige Device verhält. Aufgrund der Vielfältigkeit kann man hier keine allgemeine Vorgehensweise empfehlen. Als einfacher Start (zumindest für Nicht-Apfel Telefone) eignet sich die Ping-Überprüfung und die FritzBox-Abfrage sehr gut.&lt;br /&gt;
&lt;br /&gt;
=== Randbedingungen ===&lt;br /&gt;
Es gibt Geräte, die ihr WLAN/Bluetooth auch im Standby ständig aktiv haben und auf Anfragen antworten können (fast alle Android-Geräte). Gerade bei Tests über WLAN kann sich das aber signifikant auf die Akku Leistung auswirken.&lt;br /&gt;
&lt;br /&gt;
Andere Geräte wiederum schalten WLAN im Standby Betrieb aus, um Akkukapazität zu sparen. Bluetooth hingegen bleibt weiterhin aktiviert und kann auf Anfragen reagieren. (iPhone)&lt;br /&gt;
&lt;br /&gt;
Wenn man bei einem iPhone die Funktion &amp;quot;über WLAN synchronisieren&amp;quot; aktiviert hat, so ist dies auch im Standby jederzeit pingbar, wenn der Recher auf dem iTunes zum synchroniseren läuft auch an ist. Ansonsten ist bei iPhone Geräten nur die Aktivitätsprüfung mit einer FritzBox oder das überwachen der DHCP Lease auf einer Airport Basestation wirklich zuverlässig.&lt;br /&gt;
&lt;br /&gt;
Auch wenn Bluetooth aktiviert ist, so bleiben einige Mobiltelefone erst dann empfangsbereit, wenn sie bereits zu irgend einem Bluetoothgerät gekoppelt wurden. Sind diese Geräte noch nie gekoppelt worden, deaktivieren diese ihren Bluetooth Empfänger beim verlassen des Bluetooth-Menüs im Gerät (iPhone).&lt;br /&gt;
&lt;br /&gt;
Hier gilt es vor allem auszuprobieren, wie stark der Akku durch eine Anwesenheitserkennung belastet wird. Entscheidend ist hier, in welchem Abstand man eine Anwesenheitserkennung durchführt. Viele Abfragen wirken sich stärker auf den Akku aus als wenige. Wenige Abfragen bieten aber keine zuverlässige und zeitnahe Erkennung.&lt;br /&gt;
&lt;br /&gt;
Als Alternative, unabhängig vom WLAN und der Erkennung, ob ein Gerät dort eingebucht ist oder nicht, bzw. unabhängig von Bluetooth kann zumindest bei einem iPhone die seit iOS 7 nochmals stark verbesserte Geo-Lokation (Geofencing) genutzt werden. Die iPhone Apps [http://geofency.com/ Geofency] oder [http://geofancy.com/ Geofancy] werden über das FHEM-Modul GEOFANCY angebunden und übertragen ihren Status immer dann, wenn ein definierter Standort betreten oder verlassen wird. Gekoppelt mit entsprechenden Notify und/oder Watchdog Kommandos ist so ebenfalls eine sehr zuverlässige Anwesenheitserkennung möglich (und das nicht nur für das eigene Zuhause).&lt;br /&gt;
&lt;br /&gt;
== Das PRESENCE Modul ==&lt;br /&gt;
Das [[PRESENCE]] Modul bietet für die Anwesenheitserkennung mehrere Varianten an. Diese sind aktuell folgende:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;lan-ping&#039;&#039;&#039; - Das Überwachen via PING Checks, die durch den FHEM Server versandt werden.&lt;br /&gt;
* &#039;&#039;&#039;fritzbox&#039;&#039;&#039; - Das Überwachen von Geräten auf einer FritzBox via ctlmgr_ctl (Nur auf einer FritzBox möglich)&lt;br /&gt;
* &#039;&#039;&#039;local-bluetooth&#039;&#039;&#039; - Das Überwachen via Bluetooth Checks, die vom FHEM Server direkt durchgeführt werden (angeschlossener Bluetooth-Stick und die Software bluez voraussgesetzt)&lt;br /&gt;
* &#039;&#039;&#039;lan-bluetooth&#039;&#039;&#039; - Das Überwachen von Bluetoothgeräte, über Netzwerk. Auf einer oder mehreren Maschinen im Netzwerk (z.B. [[:Kategorie:Raspberry Pi|Raspberry Pi]]) läuft ein Presence-Daemon, der nach Bluetooth-Geräten sucht. Um mehrere Presence-Daemon mit FHEM zu verbinden, gibt es den Collector-Daemon, der sich zu allen Presence-Damons im Netzwerk verbindet und das Ergebnis von allen zusammenfasst.&lt;br /&gt;
* &#039;&#039;&#039;function&#039;&#039;&#039; - Das Überwachen mithilfe einer selbst geschrieben Perl-Funktion, die den Anwesenheitsstatus zurückgibt (0 oder 1)&lt;br /&gt;
* &#039;&#039;&#039;shell-script&#039;&#039;&#039; - Das Überwachen mithilfe eines selbst geschriebenen Shell-Programms/Skript, das eine 0 oder 1 ausgibt, um den Anwesenheitsstatus mitzuteilen.&lt;br /&gt;
&lt;br /&gt;
=== Ping-Überwachung von Geräten im WLAN/LAN ===&lt;br /&gt;
{{Randnotiz|RNText=Um diese Methode auf einer FritzBox nutzen zu können, muss FHEM mit root-Rechten laufen. Dies ist standardmäßig nicht der Fall. Bitte dazu den Wiki Artikel [[FritzBox: fhem unter root starten]] beachten.}}&lt;br /&gt;
Um ein Gerät via Ping zu überwachen, muss folgende Definition durchgeführt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Handy PRESENCE lan-ping 192.168.0.30&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dadurch wird die IP-Addresse 192.168.0.30 alle 30&amp;amp;nbsp;Sekunden geprüft, ob sie erreichbar ist. Wenn sie erreichbar ist, ist der Status &amp;quot;present&amp;quot; (anwesend), ansonsten &amp;quot;absent&amp;quot; (abwesend).&lt;br /&gt;
&lt;br /&gt;
Der Timeout kann verändert werden, indem ein Wert (in Sekunden) an das Define anhängt wird:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Handy PRESENCE lan-ping 192.168.0.30 &#039;&#039;&#039;60&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun würde das Handy alle 60 Sekunden geprüft werden.&lt;br /&gt;
&lt;br /&gt;
Nur wenn bei einem iPhone/iPad die Funktion &amp;quot;über WLAN synchronisieren&amp;quot; aktiviert ist, ist es auch im Standby zuverlässig pingbar. Standardmäßig deaktivieren Apple-Geräte ihr WLAN im Standby-Betrieb um die Akkulaufzeit zu verlängern.&lt;br /&gt;
&lt;br /&gt;
Sollte die Fehlermeldung &lt;br /&gt;
:&amp;lt;code&amp;gt; PRESENCE (Handy) - ping command returned with output: ping: icmp open socket: Operation not permitted &amp;lt;/code&amp;gt; &lt;br /&gt;
im Log auftauchen und lan-ping dadurch nicht funktionieren, liegt ein Berechtigungsproblem vor. Kein Grund den User fhem zu root zu machen!&lt;br /&gt;
So sollten die Berechtigungen aussehen&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo ls -la /bin/ping&amp;lt;/code&amp;gt;&lt;br /&gt;
unter Jessie&lt;br /&gt;
:&amp;lt;code&amp;gt;-rwxr-xr-x 1 root root 38844 Feb 12  2014 /bin/ping&amp;lt;/code&amp;gt;&lt;br /&gt;
unter Wheezy&lt;br /&gt;
:&amp;lt;code&amp;gt;-rwsr-xr-x 1 root root 33220 Mär 30  2012 /bin/ping&amp;lt;/code&amp;gt;&lt;br /&gt;
Sollte es trotzdem unter Jessie nicht funktionieren kann man auch dort die Berechtigung analog wheezy setzen:&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo chmod u+s /bin/ping&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FritzBox: direktes Abfragen der Aktivität via ctlmgr_ctl ===&lt;br /&gt;
{{Randnotiz|RNText=Um diese Methode auf einer FritzBox nutzen zu können, muss FHEM mit root-Rechten laufen. Dies ist standardmäßig nicht der Fall. Bitte dazu den Wiki Artikel [[FritzBox: fhem unter root starten]] beachten.}}&lt;br /&gt;
Eine sehr häufige und auch zuverlässige Methode ist auf einer FritzBox die Abfrage mittels ctlmgr_ctl Befehl. Über diesen lassen sich alle Geräte abfragen ob sie aktiv sind. Ist ein Gerät aktiv, so gilt es als anwesend.&lt;br /&gt;
&lt;br /&gt;
Dieser Modus kann allerdings nur in FHEM Installationen direkt auf einer FritzBox verwendet werden. Des weiteren muss FHEM unter dem User root laufen. Um ein Gerät zu überwachen, wird lediglich der Gerätename benötigt, so wie er unter dem Menüpunkt &amp;quot;Heimnetz&amp;quot; auftaucht. &lt;br /&gt;
&lt;br /&gt;
Die erforderliche Definition:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Handy PRESENCE fritzbox iPhone-4S&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth-Überwachung von Geräten durch den FHEM Server ===&lt;br /&gt;
[[Datei:Bluetooth-Adresse-iPhone.png|thumb|Bluetooth-Adresse eines iPhones]]&lt;br /&gt;
Jenach Aufstellungsort des FHEM Servers kann es sinnvoll sein, eine Bluetooth-Überwachung direkt durch den FHEM Server durchzuführen. Hierbei gilt allerdings zu beachten, dass Bluetooth nicht für große Reichweiten gedacht ist und in den meisten Fällen keine Wände überwinden kann. Das heisst, dass in den meisten Fällen damit nur ein Raum überwacht werden kann.&lt;br /&gt;
&lt;br /&gt;
Je nach Einsatzzweck kann das auch so gewollt sein. Bluetooth USB Sticks, die bereits Bluetooth 4.0 unterstützen, können höhere Reichweiten über Zimmerwände hinaus erreichen. Vorausgesetzt, das Mobilgerät unterstützt Bluetooth 4.0.&lt;br /&gt;
&lt;br /&gt;
Um eine Überwachung per Bluetooth durchführen zu können, benötigt man die Bluetooth-Adresse eines Gerätes. Diese ähnelt vom Aufbau einer MAC-Adresse. Generell wird die Adresse in den Telefon-Informationen bei Smartphones angezeigt.&lt;br /&gt;
&lt;br /&gt;
Um eine Anwesenheitserkennung via Bluetooth durchzuführen, wird folgende Definition in der [[Konfiguration]] benötigt:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Handy PRESENCE local-bluetooth XX:XX:XX:XX:XX:XX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth-Überwachung von Geräten durch verteilte Agenten in der Wohnung (presencd/collectord) ===&lt;br /&gt;
[[Datei:Raspberry-Pi-mit-WLAN-und-Bluetooth-Stick.jpg|thumb|left|Raspberry Pi mit Bluetooth- und WLAN-USB-Stick]]&lt;br /&gt;
Um eine zuverlässige und flächendeckende Bluetooth-Anwesenheitserkennung durchzuführen, ist es unerlässlich, mehrere Bluetooth-Empfänger zu verwenden, die auf mehrere oder alle Räume verteilt sind.&lt;br /&gt;
&lt;br /&gt;
Hierfür bietet sich zum Beispiel ein [[Raspberry Pi]] mit einem Mini-Bluetooth-USB-Stick und evtl. einem WLAN-USB-Stick an. Jeder Raum wird mit solch einem Raspberry ausgestattet und ist im WLAN Netz verfügbar.&lt;br /&gt;
&lt;br /&gt;
Dieses Netz aus Raspberrys wird mit dem presenced (Download-Link ist in der [http://fhem.de/commandref_DE.html#PRESENCE Commandref] zum Modul enthalten) ausgestattet. Es stehen bereits entsprechende Pakete für den Raspberry zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Beide Programme (presenced/collectord) sind Perl-Skripte, die als Daemon im Hintergrund laufen und auf Anfragen via Netzwerk warten. Es wird lediglich eine vollständige Perl-Grundinstallation mit Standardmodulen benötigt. Nach Installation der *.deb Pakete sollten diese noch angewiesen werden, automatisch beim Rechner-Neustart gestartet zu werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo update-rc.d presenced defaults&lt;br /&gt;
sudo update-rc.d collectord defaults&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Benutzung von presenced ist in der [http://fhem.de/commandref_DE.html#PRESENCE Commandref] Beschreibung zum PRESENCE Modul enthalten.&lt;br /&gt;
&lt;br /&gt;
==== Jeden Raum einzeln ansprechen (presenced) ====&lt;br /&gt;
Nun kann zuallererst jeder Raum einzeln angesprochen werden. Dabei ist zu beachten, dass pro Definition in der Konfiguration nur ein Gerät in einem Raum spezifisch überwacht werden kann.&lt;br /&gt;
&lt;br /&gt;
Eine Definition sieht dabei folgendermaßen aus:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Handy_Wohnzimmer PRESENCE lan-bluetooth XX:XX:XX:XX:XX:XX 192.168.0.10:5111&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit wird nun das Gerät nur im Wohnzimmer (Raspberry mit IP 192.168.0.10) überwacht.&lt;br /&gt;
&lt;br /&gt;
==== Alle Räume gemeinsam ansprechen (collectord) ====&lt;br /&gt;
Um jedoch alle Räume gemeinsam zu verwenden, gibt es den Collector-Daemon. Dieser kennt alle presenced-Installationen im Netzwerk und führt eine koordinierte Suche nach den gewünschten Geräten durch. Sobald ein Gerät in einem Raum erkannt wurde, meldet der collectord den Status einschließlich der Angabe des Raumes, in dem das Gerät erkannt wurde.&lt;br /&gt;
&lt;br /&gt;
Um alle Räume zu kennen, müssen diese mit einem Config-File dem collectord mitgeteilt werden. Dieses sieht folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Schlafzimmer]           # Name des Raumes (wird in FHEM als Reading angezeigt)&lt;br /&gt;
address=192.168.179.31   # IP-Adresse oder Hostname des presenced&lt;br /&gt;
port=5111                # TCP Port, der verwendet werden soll (standardmäßig Port 5111)&lt;br /&gt;
presence_timeout=120     # Prüfinterval, das verwendet werden soll, wenn ein Gerät anwesend ist&lt;br /&gt;
absence_timeout=20       # Prüfinterval, das verwendet werden soll, wenn ein Gerät abwesend ist&lt;br /&gt;
&lt;br /&gt;
[Wohnzimmer]&lt;br /&gt;
address=192.168.179.34&lt;br /&gt;
port=5111&lt;br /&gt;
presence_timeout=180&lt;br /&gt;
absence_timeout=20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Standardmäßig ist dieses Config-File unter /etc/collectord.conf zu finden. Mit dieser Konfiguration kann der Collectord gestartet werden. Es empfiehlt sich diesen mit auf dem FHEM Server zu betreiben. Die erforderliche Definition in der Fhem-Konfiguration:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Handy PRESENCE lan-bluetooth XX:XX:XX:XX:XX:XX 127.0.0.1:5222&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sobald das Handy irgendwo in der Wohnung erkannt wurde, meldet der Collectord dies sofort an FHEM und teilt den Raum mit.&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Benutzung von collectord findet man in der [http://fhem.de/commandref.html#PRESENCE Commandref zum PRESENCE Modul].&lt;br /&gt;
&lt;br /&gt;
=== Überwachung von Geräten mit Perl-Code ===&lt;br /&gt;
Es ist möglich zum Überwachen von Geräten eine eigene Perl-Funktion zu verwenden die dann vom PRESENCE Modul im Hintergrund aufgerufen wird.&lt;br /&gt;
&lt;br /&gt;
 define &amp;lt;name&amp;gt; PRESENCE function {...} [ &amp;lt;check-interval&amp;gt; [ &amp;lt;present-check-interval&amp;gt; ] ]&lt;br /&gt;
&lt;br /&gt;
Sobald die Funktion den Rückgabewert 1 hat, ist das Gerät anwesend, bei 0 abwesend.&lt;br /&gt;
&lt;br /&gt;
==== Beispiel DHCP Überwachung auf Airport Basestation ====&lt;br /&gt;
Die hier vorgestellte Überwachung der DHCP Lease auf Airport Basestations per SNMP ist absolut robust gegenüber dem Ruhezustand von iOS und setzt keine weitere Konfiguration auf dem iPhone voraus. Das Abmelden beim Verlassen des Empfangsbereiches der Basestation geschieht mit etwa 5-10 Minuten Verzögerung und ist somit auch vor kurzzeitigen Empfangsproblemen sicher. Das nebenstehende Bild (???) verdeutlicht noch mal die Unterschiede zwischen einer IP-Basierten Ping-Überwachung und der Überwachung auf Ebene der Basestation oder FritzBox.&lt;br /&gt;
&lt;br /&gt;
Bevor der folgende Code verwendet werden kann ist das Perl Modul Net:SNMP zu installieren (z.&amp;amp;nbsp;B. mit: &amp;lt;code&amp;gt;cpan install use Net::SNMP&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Zuerst ist folgender Code in 99_myUtils.pl einzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use Net::SNMP;&lt;br /&gt;
sub&lt;br /&gt;
snmpCheck($$)&lt;br /&gt;
{&lt;br /&gt;
  my ($airport,$client)= @_;&lt;br /&gt;
&lt;br /&gt;
  my $community = &amp;quot;public&amp;quot;;&lt;br /&gt;
  my $host = $airport;&lt;br /&gt;
  my $oid = &amp;quot;.1.3.6.1.2.1.3.1.1.2&amp;quot;;&lt;br /&gt;
  #my $oid = &amp;quot;.1.3.6.1.2.1.3.1.1.2.25.1.10.0.1&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  my ( $session, $error ) = Net::SNMP-&amp;gt;session(&lt;br /&gt;
    -hostname =&amp;gt; $host,&lt;br /&gt;
    -community =&amp;gt; $community,&lt;br /&gt;
    -port =&amp;gt; 161,&lt;br /&gt;
    -version =&amp;gt; 1&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  if( !defined($session) ) {&lt;br /&gt;
    return 0;&lt;br /&gt;
    return &amp;quot;Can&#039;t connect to host $host.&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  my @snmpoids = ();&lt;br /&gt;
&lt;br /&gt;
  my $response = $session-&amp;gt;get_next_request($oid);&lt;br /&gt;
  my @nextid = keys %$response;&lt;br /&gt;
  while ( @nextid &amp;amp;&amp;amp; $nextid[0] &amp;amp;&amp;amp; $nextid[0] =~ m/^$oid/ ) {&lt;br /&gt;
    push( @snmpoids, $nextid[0] );&lt;br /&gt;
&lt;br /&gt;
    $response = $session-&amp;gt;get_next_request( $nextid[0] );&lt;br /&gt;
    @nextid = keys %$response;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if( !defined($response = $session-&amp;gt;get_request( @snmpoids ) ) ) {&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  foreach my $value (values %$response) {&lt;br /&gt;
    return 1 if( $value eq $client )&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach lässt sich das Mobilgerät so überwachen:&lt;br /&gt;
:&amp;lt;code&amp;gt;define iPhone PRESENCE function {snmpCheck(&amp;quot;10.0.1.1&amp;quot;,&amp;quot;0x44d77429f35c&amp;quot;)} 30 30&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wobei 10.0.1.1 durch die IP-Adresse der Basestation und 0x44d77429f35c durch die MAC Adresse des Geräts als HEX-Zahl ersetzt werden muss.&lt;br /&gt;
&lt;br /&gt;
== Das GEOFANCY Modul ==&lt;br /&gt;
Das Modul ermöglicht über einen sogenannten Webhook Mechanismus (umgangssprachlich oft auch als &amp;quot;Push&amp;quot; benannt) das aktive Melden des aktuellen Standortes. Die iPhone Apps  [http://geofency.com/ Geofency] und [http://geofancy.com/ Geofancy] können dann aktiv und quasi in dem Moment, wo man den Wohnbereich betritt oder verlässt, benachrichtigen. Android Nutzern können [https://play.google.com/store/apps/details?id=de.egi.geofence.geozone&amp;amp;hl=de EgiGeoZone Geofence] nutzen. Das geht nochmals um einiges schneller, als die Erkennung im WLAN, bei der die Anwesenheit nur in (engen) Zyklen aktiv geprüft werden muss. Gleichzeitig werden Ressourcen in FHEM geschont. Die aktuelle Implementierung im iPhone 5S mit dediziert für das Tracking zuständigem Chip ist so gut, dass der Akku ebenfalls sehr geschont wird.&lt;br /&gt;
&lt;br /&gt;
=== Modul in FHEM einrichten ===&lt;br /&gt;
Das Modul ist mit einer einfachen Definition sofort betriebsbereit:&lt;br /&gt;
:&amp;lt;code&amp;gt;define geofancy GEOFANCY geo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit nimmt FHEM unter &amp;lt;nowiki&amp;gt;http://192.168.178.1:8083/fhem/geo&amp;lt;/nowiki&amp;gt; entsprechende Meldungen des iPhones entgegen. Damit das nicht nur über das lokale WLAN funktioniert, bedarf es allerdings noch einiger zusätzlicher Maßnahmen. FHEM muss vom Internet erreichbar gemacht werden, dabei sollte unbedingt an die Absicherung des Zugriffs gedacht werden.&lt;br /&gt;
&lt;br /&gt;
Zunächst einmal habe ich bei mir eine eigene FHEMWEB Instanz dafür angelegt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define WEBhook FHEMWEB 8088 global&lt;br /&gt;
attr WEBhook column Alarms: Apartment: Living: Bedroom: Kitchen: Sonos: Residents: Weather: Bathroom: Logs: Statistics: DashboardRoom: System: hidden: all:&lt;br /&gt;
attr WEBhook hiddenroom input,detail,save,Unsorted,Everything,CUL_HM,FS20,Commandref,style,Edit files,Select style,Logfile,Floorplans,Remote doc,FileLogs,Apartment,Bathroom,Bedroom,Kitchen,Living,Residents,System,Weather,Event monitor,NEW&lt;br /&gt;
attr WEBhook room hidden&lt;br /&gt;
attr WEBhook webname webhook&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist unter der URL &amp;lt;nowiki&amp;gt;http://192.168.178.1:8088/webhook/geo&amp;lt;/nowiki&amp;gt; das GEOFANCY Modul erreichbar. Ich verstecke in dieser Ansicht noch alle Räume, die ich so habe. Wer die Raumnamen allerdings kennt, kann sie trotzdem aufrufen. Die Anzeige in den Räumen kann man mit dem Attribut column und entsprechend leeren Definitionen verstecken. Nun muss man explizit den Devicenamen kennen, um noch etwas über die Konfiguration in Erfahrung bringen zu können.&lt;br /&gt;
Auch wenn das Security-by-Obscurity ist - ich fühle mich wohler damit.&lt;br /&gt;
&lt;br /&gt;
=== Webhook weiter absichern ===&lt;br /&gt;
Mit Hilfe eines [http://fhem.de/commandref.html#allowed allowed]-Devices lässt sich die FHEMWEB Instanz noch weiter absichern indem nur die tatsächlich benötigten Kommandos erlaubt werden (in diesem Fall keine) und damit alle anderen nicht erlaubten (attr,define,get,set,...) automatisch nicht mehr zur Verfügung stehen: &lt;br /&gt;
 &amp;lt;pre&amp;gt;&lt;br /&gt;
define allowedWEBhook allowed&lt;br /&gt;
attr allowedWEBhook allowedCommands ,&lt;br /&gt;
attr allowedWEBhook allowedDevices ,&lt;br /&gt;
attr allowedWEBhook validFor WEBhook&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Außerdem ist dringend zu empfehlen, den Zugriff über TLS/SSL und HTTP Basic-Authentication weiter abzusichern. Läuft FHEM auf einem Raspberry&amp;amp;nbsp;Pi, dann empfehle ich dazu die Konfiguration eines ReverseProxy (vorzugsweise HAproxy, Pound oder Varnish, notfalls auch Nginx oder Apache); damit ist man am flexibelsten und kann auch alle FHEMWEB Instanzen direkt über einen einzigen Port (meist 443, der HTTPS Standard Port) zusammenfassen. Ich möchte hier allerdings beschreiben, wie weit man mit FHEM Bordmitteln kommt und nehme das Beispiel einer Installation auf einer Fritzbox.&lt;br /&gt;
&lt;br /&gt;
Wie TLS aktiviert wird, steht in der Commandref für [[FHEMWEB]]. Um die Kommandos auf der Fritzbox ausführen zu können, muss zuerst Telnet aktiviert werden (bitte Google benutzen). Anschließend wechselt man auf der Fritzbox ins Verzeichnis /var/media/ftp/fhem und kann dann den Hinweisen aus der [http://fhem.de/commandref.html#FHEMWEB Commandref] unter dem Punkt HTTPS folgen. Letztlich fehlt noch das entsprechende Attribut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr WEBhook HTTPS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als nächstes aktivieren wir Benutzername+Passwort für den Zugriff. Die commandref für allowed gibt auch hier unter dem Punkt basicAuth entsprechende Hinweise. Wir fügen hier einfach mal einen Benutzer &amp;quot;webhook&amp;quot; mit dem Passwort &amp;quot;Geofancy&amp;quot; hinzu, das sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr allowedWEBhook basicAuth { &amp;quot;$user:$password&amp;quot; eq &amp;quot;webhook:Geofancy&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Infos zur Absicherung gibt auch [[FritzBox Webzugriff absichern]].&lt;br /&gt;
&lt;br /&gt;
Um zu testen, ob unsere Absicherung erfolgreich war, kann man die URL &amp;lt;nowiki&amp;gt;https://192.168.178.1:8088/webhook/geo&amp;lt;/nowiki&amp;gt; aufrufen (wichtig ist, dass man jetzt https und nicht mehr http eingibt; ansonsten bekommt man keine Antwort). Eine Zertifikatswarnung kann getrost ignoriert werden, verschlüsselt wird trotzdem. Es sollte auch eine Passwort Abfrage kommen und die Eingabe der entsprechenden Daten sollte dann zu einer entsprechenden Meldung vom GEOFANCY Modul führen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NOK No data received, see API information on http://wiki.geofancy.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ist ok, schließlich sind wir keine App, sondern der Mensch, der nur mal eben prüfen will :-)&lt;br /&gt;
&lt;br /&gt;
=== Zugriff vom Internet ermöglichen ===&lt;br /&gt;
Das ist je nach Fritzbox und Software Version unterschiedlich. Grundsätzlich gilt: Eine Weiterleitung des ports 8088 vom Internet auf das laufende FHEM auf Port 8088 intern ist von AVM so nicht vorgesehen.&lt;br /&gt;
Bei mir führte folgendes zum Erfolg:&lt;br /&gt;
&lt;br /&gt;
* Einloggen per Telnet auf der Fritzbox (ich habe FritzOS 6 installiert)&lt;br /&gt;
* Konfiguration editieren mittels &amp;quot;nvi /var/flash/ar7.cfg&amp;quot;&lt;br /&gt;
* Suchen nach richtiger Zeile durch Eingabe von &amp;quot;/internet_forwardrules&amp;quot; und Enter&lt;br /&gt;
* Hinzufügen einer weiteren Zeile (Vorsicht, die bestehende Zeile endet mit ; und das muss in , umgeändert werden, so dass das ; schließlich am Ende der Zeile steht.&lt;br /&gt;
&lt;br /&gt;
So sieht es bei mir vorher aus:&lt;br /&gt;
:&amp;lt;code&amp;gt;internet_forwardrules = &amp;quot;tcp 0.0.0.0:488 0.0.0.0:488 0&amp;quot;;&amp;lt;/code&amp;gt;&lt;br /&gt;
Hinterher:&lt;br /&gt;
:&amp;lt;code&amp;gt;internet_forwardrules = &amp;quot;tcp 0.0.0.0:488 0.0.0.0:488 0&amp;quot;, &amp;quot;tcp 0.0.0.0:8088 0.0.0.0:8088 0&amp;quot;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach mittels &amp;quot;:x&amp;quot; abspeichern und sofort per &amp;quot;reboot&amp;quot; die Box neu starten, um diese Änderungen zu aktivieren. Das ist wichtig; ansonsten zeigt die Erfahrung, dass die Änderung nicht dauerhaft erhalten bleibt und die gerade gemachten Änderungen verloren gehen.&lt;br /&gt;
&lt;br /&gt;
Wer die Einstellungen zu &amp;quot;internet_forwardrules&amp;quot; bei sich nicht finden kann, hat womöglich eine andere Version als ich oder ein leicht anderes Gerät und bemüht am besten Google, was er tun kann, um das Gleiche zu erreichen. Möglicherweise tauchen die Einträge auch erst auf, wenn man mal über das Webinterface ein Forwarding eingerichtet hatte.&lt;br /&gt;
&lt;br /&gt;
Hat man einen DynDNS Dienst oder myFritz auf der Fritzbox aktiviert, so kann man jetzt auch von draußen auf den Webhook zugreifen. Das kann man prüfen, indem man das iPhone aus dem WLAN ausbucht und einmal die externe Adresse eingibt, also z.B. https://meindyndns.org:8088/webhook/geo.&lt;br /&gt;
&lt;br /&gt;
=== Weitere Alternativen für den Zugriff aus dem Internet ===&lt;br /&gt;
Als Alternative zum Port Forwarding kann man sich auch per VPN in das lokale Netzwerk einwählen. iOS bietet dazu auch eine automatische Aktivierung des VPN (VPN on Demand), wie z.B. [http://forum.loxone.com/dede/netzwerk-firewall-and-security/8121-vpn-demand-ios-8-1-1-fritz-box-kleine-how.html hier] beschrieben wird.&lt;br /&gt;
&lt;br /&gt;
Auch eine Alternative ist, das Portforwarding nicht direkt an FHEM einzurichten, sondern an einem im Netzwerk laufenden Reverse-Proxy, der dann seinerseits die Anfragen an FHEM weiterleitet. Dies kann z.B. Apache, Nginx oder am besten HAproxy sein.&lt;br /&gt;
Letzterer ist dabei sehr flexibel, allerdings nicht unbedingt einfach zu konfigurieren. Ein paar Inspirationen diesbezüglich gibt es z.B. [https://github.com/Hoanoho/HSE/tree/develop/lib/cfg/any/stat/etc/haproxy hier] und [https://github.com/Hoanoho/HSE/tree/develop/lib/cfg/any/dyn/etc/haproxy hier]. Wer pfSense nutzt, findet [http://loredo.me/post/116633549315/geeking-out-with-haproxy-on-pfsense-the-ultimate diesen Artikel] womöglich auch interessant. Er zeigt auch, dass mit HAproxy noch weit mehr möglich ist.&lt;br /&gt;
Der Reverse-Proxy sollte dabei auch unbedingt der TLS Termination Point sein (TLS Offloading). Nicht nur spart man sich dann die Aktivierung von TLS in FHEM, sondern man hat auch mehr Einfluss darauf, wie TLS arbeitet (z.B. Deaktivierung von SSLv3, forcieren von TLSv1.2, nur als sicher eingestufte Cipher Suite... siehe auch Infos auf der [https://wiki.mozilla.org/Security/Server_Side_TLS Mozilla Website]).&lt;br /&gt;
&lt;br /&gt;
=== Einrichten in der Geof[e|a]ncy.app ===&lt;br /&gt;
Hat das alles soweit geklappt, können endlich in der Geofency.app bzw. Geofancy.app am iPhone die gewünschten Bereiche definiert werden. Am Besten zuvor in den Global Settings die folgenden Einstellungen hinterlegen:&lt;br /&gt;
&lt;br /&gt;
* URL: https://meindyndns.org:8088/webhook/geo&lt;br /&gt;
* POST (oder GET, ist egal - das FHEM Modul kann beides)&lt;br /&gt;
* HTTP Basic Authentication: EIN (entsprechend Username und Password eintragen)&lt;br /&gt;
&lt;br /&gt;
Anfänglich ist es empfehlenswert noch &amp;quot;Notification on success&amp;quot; und &amp;quot;Notification on Failure&amp;quot; einzuschalten. Ersteres kann man ausmachen wenn man weiß, dass es soweit funktioniert. Über &amp;quot;Send Test-Request&amp;quot; kann man einmal einen Test schicken und erhält das Ergebnis entsprechend dargestellt. Es sollte sowas kommen wie&lt;br /&gt;
:&amp;lt;code&amp;gt;POST Success: test OK&amp;lt;/code&amp;gt;. In Geofancy.app gibt es keine Rückmeldung über den Erfolg des Testrequests. In FHEM sollten sich durch den Testrequest jedoch die Readings sofort aktualisieren (Ggf. ist ein Reload der FHEMWEB-Seite nötig da zusätzliche Tabellenzeilen nicht via Longpoll ergänzt werden). &lt;br /&gt;
&lt;br /&gt;
Funktioniert das soweit, kann man eine neue Lokation als sein Zuhause anlegen. Es empfiehlt sich einen ID-Namen zu setzen; dieser ist dann in FHEM als Name für die Lokation sichtbar. Für die eigene Wohnung empfiehlt sich hier &amp;quot;home&amp;quot; (da dies auch direkt vom RESIDENTS Modul so verwendet werden kann). Man kann auch Trigger für andere Standorte anlegen. FHEM weiß dann sogar, wenn ihr im Büro seid und könnte sich dabei auch unterschiedlich verhalten, als wenn ihr &amp;quot;auf Achse&amp;quot; seid. Bei letzterem ist der Status im GEOFANCY Modul &amp;quot;underway&amp;quot;, was so viel heißt wie &amp;quot;unbekannter Aufenthaltsort&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Zumindest für Geofancy.app liefert ein Testrequest wohl zufällige Locations zurück. Die eigenen Location-IDs werden also nicht übergeben, selbst wenn man sich in einem Geofence befindet. Um zu testen muss man sich wohl oder übel selbst bewegen ;-).&lt;br /&gt;
&lt;br /&gt;
=== GEOFANCY Modul individualisieren ===&lt;br /&gt;
Die im GEOFANCY Modul dargestellten Readings sind nun in etwa so, wenn ihr euch bewegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Readings:&lt;br /&gt;
     2014-01-18 14:37:42   lastDevice      -&lt;br /&gt;
     2014-01-18 14:37:42   lastDeviceUUID      51F23894-AAAA-BBBB-CCCC-0123456789AB&lt;br /&gt;
     2014-01-18 14:37:42   state           dev:51F23894-AAAA-BBBB-CCCC-0123456789AB trig:test id:home lat:48.9999 long:11.9999&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer genauer hinschaut sieht: Mein iPhone heißt wohl 51F23894-AAAA-BBBB-CCCC-0123456789AB.&lt;br /&gt;
Damit nun die Readings für mein iPhone richtig angelegt werden, muss ein Device Alias gesetzt werden. Sinnvoll erscheint mir der Vorname des Besitzers:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr geofancy devAlias 51F23894-AAAA-BBBB-CCCC-0123456789AB:Julian&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Alias-Namen können mit Leerzeichen einfach angehängt werden.&lt;br /&gt;
Jetzt werden weitere Readings angelegt, sobald GEOFANCY entsprechende Daten vom Mobilgerät empfängt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Readings:&lt;br /&gt;
     2014-01-18 14:37:42   Julian          arrived home&lt;br /&gt;
     2014-01-18 14:37:42   currLocLat_Julian 48.9999&lt;br /&gt;
     2014-01-18 14:37:42   currLocLong_Julian 11.9999&lt;br /&gt;
     2014-01-18 14:37:42   currLocTime_Julian 2014-01-18 14:37:42&lt;br /&gt;
     2014-01-18 14:37:42   currLoc_Julian  home&lt;br /&gt;
     2014-01-17 19:18:23   lastArr         Julian home&lt;br /&gt;
     2014-01-17 18:41:46   lastDep         Julian Office&lt;br /&gt;
     2014-01-18 14:37:42   lastDevice      Julian&lt;br /&gt;
     2014-01-18 14:37:42   lastDeviceUUID      51F23894-AAAA-BBBB-CCCC-0123456789AB&lt;br /&gt;
     2014-01-17 18:41:46   lastLocArr_Julian 2014-01-17 08:58:37&lt;br /&gt;
     2014-01-17 18:41:46   lastLocDep_Julian 2014-01-17 18:41:46&lt;br /&gt;
     2014-01-17 18:41:46   lastLocLat_Julian 48.1111&lt;br /&gt;
     2014-01-17 18:41:46   lastLocLong_Julian 11.1111&lt;br /&gt;
     2014-01-17 18:41:46   lastLoc_Julian  Office&lt;br /&gt;
     2014-01-18 14:37:42   state           dev:Julian trig:test id:home lat:48.9999 long:11.9999&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Möchte man nun etwas bestimmtes tun, wenn man nach Hause kommt oder das Heim verlässt, kann man am Besten ein entsprechendes Notify auf das Reading currLoc_Name setzen. Ich aktualisiere lediglich zwei Dummies, durch die dann alle weiteren Notifies ausgelöst werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define n_Julian.Presence notify geofancy:currLoc_Julian:.home set Julian.homestatus:FILTER=STATE!=home home&lt;br /&gt;
attr n_Julian.Presence room Residents&lt;br /&gt;
define n_Julian.absence notify geofancy:currLoc_Julian:.underway {\&lt;br /&gt;
if (Value(&amp;quot;Julian.homestatus&amp;quot;) ne &amp;quot;gone&amp;quot;) {\&lt;br /&gt;
  fhem(&amp;quot;set Julian.homestatus:FILTER=STATE!=absent absent&amp;quot;);;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
define n_Julian.whereabout notify geofancy:currLoc_Julian:.* set Julian.whereabout:FILTER=STATE!=$EVTPART1 $EVTPART1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer es noch einfacher möchte (bzw. auch noch mehr Features) schaut sich einmal die neue Modulfamilie aus RESIDENTS[http://fhem.de/commandref_DE.html#RESIDENTS], ROOMMATE[http://fhem.de/commandref_DE.html#ROOMMATE] und GUEST[http://fhem.de/commandref_DE.html#GUEST] an. Diese sind direkt auf GEOFANCY abgestimmt. Dabei kann das devAlias Attribut entfallen und man hinterlegt die UUID stattdessen direkt im ROOMMATE oder GUEST Device (Attribut r*_geofenceUUIDs). Das erspart es für jeden Bewohner und jedes Device zig unterschiedliche Devices der Typen Notify, DOIF oder Watchdog anlegen und pflegen zu müssen.&lt;br /&gt;
&lt;br /&gt;
Wer mehr Kontrolle möchte kann natürlich bei notify, DOIF und Co. bleiben: &amp;lt;code&amp;gt;define n_rr_Julian.location notify geofancy:currLoc_Julian:.* set rr_Julian:FILTER=location!=$EVTPART1 location $EVTPART1&amp;lt;/code&amp;gt;. Wobei &amp;quot;Julian&amp;quot; dabei als devAlias in GEOFANCY eingtragen wurde, rr_Julian der Name des ROOMMATE aus RESIDENTS ist. Außerdem wurden die Location-IDs in der Geofency.app bzw. Geofancy.app so gewählt, dass diese direkt einem ROOMMATE-Status entsprechen (also z.B. home, wayhome...).&lt;br /&gt;
&lt;br /&gt;
== Beispiele für die Nutzung der Anwesenheitserkennung ==&lt;br /&gt;
Hier sollen Beispiele für den Nutzen von Anwesenheitserkennung aufgezeigt werden.&lt;br /&gt;
&lt;br /&gt;
=== Abschalten aller Verbraucher (Licht, Musikanlage) beim Verlassen der Wohnung ===&lt;br /&gt;
Typisches Szenario: Man geht ausser Haus, aber hat vergessen im Bad das Licht aus zu machen. Allerdings geht man heutzutage fast garnicht mehr ohne Handy aus dem Haus.&lt;br /&gt;
&lt;br /&gt;
Nun soll FHEM in der gesamten Wohnung das Licht, sowie sonstige Verbraucher ausschalten, wenn ich länger als 15 Minuten ausser Haus bin. Dazu benötigt man zuerst eine structure, die alle Verbraucher und sonstigen Devices, die das betrifft, zusammenfasst.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Gesamte_Wohnung structure Gesamtes_Licht Licht_Wohnzimmer Licht_Kueche LED_Kueche Licht_Bad Licht_Schlafzimmer AV_Receiver TV_Steckdose&lt;br /&gt;
attr Gesamte_Wohnung room Wohnung&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun kann man mittels eines watchdogs eine Überwachung für sein Handy anlegen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Überwachen der gesamten Wohnung mittels collectord sowie presenced in jedem Raum&lt;br /&gt;
define Handy PRESENCE lan-bluetooth XX:XX:XX:XX:XX:XX 127.0.0.1:5222&lt;br /&gt;
attr Handy event-on-change-reading state  # Ein Event soll nur bei der Änderung des Anwesenheitsstatus (Reading: status) erfolgen. Wichtig für den watchdog!!!&lt;br /&gt;
&lt;br /&gt;
# Nach 15 Minuten Abwesenheit (Handy im Status &amp;quot;absent&amp;quot;) soll die gesamte Wohnung ausgeschaltet werden.&lt;br /&gt;
define watchdog_Anwesenheit watchdog Handy:absent 00:15 Handy:present set Gesamte_Wohnung off ; trigger watchdog_Anwesenheit .&lt;br /&gt;
attr watchdog_Anwesenheit regexp1WontReactivate 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Benachrichtigung bei Batteriewechsel ===&lt;br /&gt;
Mit Hilfe des PRESENCE-Moduls kann man auch bei batteriebetriebenen Geräten eine Meldung ausgeben, sobald ein Batteriewechsel ansteht. Hier im Beispiel wird der Eve-Room-Sensor von Elgato eingebunden und anschließend mit einer DOIF-Nachricht ausgestattet.&lt;br /&gt;
Die Bluetooth-Adresse des Sensors kann mittels eines BLE-Scanners ermittelt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# PRESENCE-Modul für Elgato Eve Room Sensor mit Aktualisierung aller 6 Minuten&lt;br /&gt;
define Eve_Room_BLE lan-bluetooth &amp;lt;Bluetooth-Adresse&amp;gt; 127.0.0.1:5333 360&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend wird eine DOIF-Regel definiert, die eine Nachricht an die installiere [[FHEM_APP|FHEM App]] absendet:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Eve_Room_BLE_Battery_Msg DOIF ([Eve_Room_BLE] eq &amp;quot;absent&amp;quot;) (set Msg_iPhone message &#039;Batteriewechsel beim Eve Room Sensor im Wohnzimmer.&#039;)&lt;br /&gt;
attr Eve_Room_BLE_Battery_Msg wait 600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Aktualisierung des PRESENCE-Eintrages sollte nicht größer sein als das WAIT-Attribut der DOIF-Regel. Ansonsten könnte eine kurze Systemstörung zum Fehlalarm führen.&lt;br /&gt;
&lt;br /&gt;
== Anwesenheitserkennung Bluetooth PebbleBee mit PRESENCE Modul ==&lt;br /&gt;
Im Forum gibt es einen {{Link2Forum|Topic=28753|LinkText=langen Beitrag}} über die Einrichtung eines BT-Tag an einem RaspberryPI mit FHEM. Dabei werden Skripte wie blescan.pl und lepresenced genannt.&lt;br /&gt;
Da mittlerweile viele neue Informationen zusammen gekommen sind wurde der Wiki Eintrag erstellt.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird die Konfiguration für &#039;&#039;&#039;LE Deviced (z.B. Gtags,Pebbles etc.)&#039;&#039;&#039; und &#039;&#039;&#039;NICHT LE Device (z.B. IPhone)&#039;&#039;&#039; beschreiben.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wo finde ich denn lepresenced?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
lepresenced kann über Github heruntergeladen werden (Link weiter unten)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Was ist der Vorteil gegenüber blescan.pl?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=Beide hier beschriebenen Wege (presenced/lepresenced) können parallel auf dem selben BT-Dongle laufen, da sich die Ports unterscheiden!}}&lt;br /&gt;
blescan.pl hat u. a. das Problem, dass dank der wundervollen Bluetooth-Implementierung unter Linux ab und zu der Scan fehlschlägt und das Interface resettet werden muss. Das tut blescan.pl auch mit aller Gewalt. Dazu kommt, dass bei längeren Scanzeiten und vielen Tags sich die Prozesse anstauen, weil immer nur auf einen Tag &amp;quot;gewartet&amp;quot; wird. Außerdem wurden mit der Einführung von lepresenced sämtliche Supportverträge gekündigt lepresenced läuft dauerhaft und merkt sich bei allen sendenden Tags den Zeitstempel des letzten Empfangs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Getestete Hardware/Software===&lt;br /&gt;
* &#039;&#039;&#039;Raspbian System&#039;&#039;&#039; - wheezy, Jessie&lt;br /&gt;
* &#039;&#039;&#039;BT-Dongle&#039;&#039;&#039; - CSL NET BT USB2.0 Stick, Bluetooth V4.0, Nano &amp;lt;br /&amp;gt;&#039;&#039;&#039;Achtung&#039;&#039;&#039;: Es muss ein BT V4.0 oder höher verwendet werden. Nur dieser unterstützt &#039;&#039;LowEnergy&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;BT-TAG&#039;&#039;&#039; - Gtag von Gigaset, TrackR, UDOO Neo, PebbleBee, iTag von Unitec, X4-LIFE Multifunkti BL-Anhänger, iTag Wireless Anti, Trackr bravo&lt;br /&gt;
&lt;br /&gt;
===  BT Dongel am PI installieren ===&lt;br /&gt;
&lt;br /&gt;
Um den BT Dongle &#039;&#039;(hier: CSL NET BT USB2.0)&#039;&#039; am PI verwenden zu können, müssen die notwendigen Pakete über die Paketverwaltung von debain nachinstalliert werden.&lt;br /&gt;
Wer bereits ein BT-Dongle installiert hat, kann diesen Schritt überspringen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install bluetooth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nach erfolgreicher Installation der Pakete sollte der RaspberryPI neu gestartet werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem erfolgten Reboot bitte das Log des Raspberry auf folgende Einträge prüfen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Feb 12 19:52:55 fhem kernel: [    4.773600] Bluetooth: Core ver 2.20&lt;br /&gt;
Feb 12 19:52:55 fhem kernel: [    4.773748] NET: Registered protocol family 31&lt;br /&gt;
Feb 12 19:52:55 fhem kernel: [    4.773765] Bluetooth: HCI device and connection manager initialized&lt;br /&gt;
Feb 12 19:52:55 fhem kernel: [    4.773797] Bluetooth: HCI socket layer initialized&lt;br /&gt;
Feb 12 19:52:55 fhem kernel: [    4.773821] Bluetooth: L2CAP socket layer initialized&lt;br /&gt;
Feb 12 19:52:55 fhem kernel: [    4.773890] Bluetooth: SCO socket layer initialized&lt;br /&gt;
Feb 12 19:52:55 fhem kernel: [    4.797531] usbcore: registered new interface driver btusb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sobald der BT-Dongle erkannt wurde &#039;&#039;leuchtet&#039;&#039; (wenn vorhanden) auch die &#039;&#039;blaue/gelbe&#039;&#039; LED am Dongle auf.&lt;br /&gt;
&lt;br /&gt;
=== BT-Tags aktivieren ===&lt;br /&gt;
Jetzt kann der BT-Tag aktiviert werden. Bei einigen Tags muss dafür die &#039;&#039;&#039;Batteriesicherung&#039;&#039;&#039; gezogen werden.&lt;br /&gt;
&lt;br /&gt;
Einen Tag wird mit folgendem Befehl auf der Konsole gesucht:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo hcitool lescan&lt;br /&gt;
&lt;br /&gt;
Ausgabe z.B.:&lt;br /&gt;
LE Scan ...&lt;br /&gt;
7C:2F:80:A1:XA:XD (unknown)&lt;br /&gt;
7C:2F:80:A1:XA:XD Gigaset G-tag&lt;br /&gt;
7C:2F:80:A1:X4:X1 (unknown)&amp;lt;/source&amp;gt;&lt;br /&gt;
Eine Übersicht über die möglichen Befehle von hcitool gibt es mit der Eingabe von:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo hcitool&lt;br /&gt;
&lt;br /&gt;
Ausgabe z.B.:&lt;br /&gt;
hcitool - HCI Tool ver 5.23&lt;br /&gt;
Usage:&lt;br /&gt;
        hcitool [options] &amp;lt;command&amp;gt; [command parameters]&lt;br /&gt;
Options:&lt;br /&gt;
        --help  Display help&lt;br /&gt;
        -i dev  HCI device&lt;br /&gt;
Commands:&lt;br /&gt;
        dev     Display local devices&lt;br /&gt;
        inq     Inquire remote devices&lt;br /&gt;
        scan    Scan for remote devices&lt;br /&gt;
        name    Get name from remote device&lt;br /&gt;
        info    Get information from remote device&lt;br /&gt;
        spinq   Start periodic inquiry&lt;br /&gt;
        epinq   Exit periodic inquiry&lt;br /&gt;
        cmd     Submit arbitrary HCI commands&lt;br /&gt;
        con     Display active connections&lt;br /&gt;
        cc      Create connection to remote device&lt;br /&gt;
        dc      Disconnect from remote device&lt;br /&gt;
        sr      Switch master/slave role&lt;br /&gt;
        cpt     Change connection packet type&lt;br /&gt;
        rssi    Display connection RSSI&lt;br /&gt;
        lq      Display link quality&lt;br /&gt;
        tpl     Display transmit power level&lt;br /&gt;
        afh     Display AFH channel map&lt;br /&gt;
        lp      Set/display link policy settings&lt;br /&gt;
        lst     Set/display link supervision timeout&lt;br /&gt;
        auth    Request authentication&lt;br /&gt;
        enc     Set connection encryption&lt;br /&gt;
        key     Change connection link key&lt;br /&gt;
        clkoff  Read clock offset&lt;br /&gt;
        clock   Read local or remote clock&lt;br /&gt;
        lescan  Start LE scan&lt;br /&gt;
        lewladd Add device to LE White List&lt;br /&gt;
        lewlrm  Remove device from LE White List&lt;br /&gt;
        lewlsz  Read size of LE White List&lt;br /&gt;
        lewlclr Clear LE White list&lt;br /&gt;
        lecc    Create a LE Connection&lt;br /&gt;
        ledc    Disconnect a LE Connection&lt;br /&gt;
        lecup   LE Connection Update &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls beim SCAN kein Tag gefunden wird, sollte das BT Interface neu gestartet werden. Dazu ist kein Reboot des PI notwendig.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo hciconfig hci0 down&lt;br /&gt;
sudo hciconfig hci0 up&lt;br /&gt;
sudo hcitool dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Anleitung für ein  LE Device (z.B. Gtags,Pebbles etc.) ===&lt;br /&gt;
&lt;br /&gt;
Herunterladen des Skripts lepresenced.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://github.com/mhop/fhem-mirror/blob/master/fhem/contrib/PRESENCE/lepresenced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur &amp;quot;Installation&amp;quot; des Skripts folgendermaßen vorgehen:&lt;br /&gt;
Unter /fhem manuell den Ordner „script“ anlegen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir script&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Datei lepresenced reinkopieren und ausführbar machen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chmod +x /opt/fhem/script/lepresenced&lt;br /&gt;
sudo chgrp -cR dialout lepresenced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Skript erstmalig starten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ./lepresenced --loglevel LOG_EMERG -d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kommt beim Starten des Skript eine Fehlermeldung, müssen die Abhängigkeiten aufgelöst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Can&#039;t locate Net/Server/Daemonize.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 / usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl .) at /opt/fhem/lepresenced line 17.&lt;br /&gt;
BEGIN failed--compilation aborted at /opt/fhem/lepresenced line 17.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Um die Abhängigkeiten aufzulösen muss folgendes nachinstalliert werden und anschließend ein Reboot durchgeführt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libnet-server-*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach dem letzten Schritt sind alle Bedingungen für eine abschließende Konfiguration der BT-Tags in FHEM abgeschlossen worden.&lt;br /&gt;
Jetzt kann der Tag dem FHEM-Server bekannt gemacht werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   --   Name       Modul    Modus         MAC vom Gtag  IP vom PI Port    Abfragezeit in Sekunden&lt;br /&gt;
define MeinGtAG PRESENCE lan-bluetooth xx:xx:xx:xx:xx:xx 127.0.0.1:5333    120&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den absent und present Mode kann man einfach testen, in dem man den Gtag mit Alufolie einwickelt.&lt;br /&gt;
&lt;br /&gt;
=== Anleitung für ein NICHT LE Device (z.B. IPhone) ===&lt;br /&gt;
Die Installation kann (wie in der commanref beschrieben) über Debian Pakete erfolgen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.deb package for Debian (noarch): presenced-1.3.deb http://svn.code.sf.net/p/fhem/code/trunk/fhem/contrib/PRESENCE/deb/presenced-1.3.deb&lt;br /&gt;
&lt;br /&gt;
.deb package for Raspberry Pi (raspbian): presenced-rpi-1.3.deb http://svn.code.sf.net/p/fhem/code/trunk/fhem/contrib/PRESENCE/deb/presenced-rpi-1.3.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo dpkg -i presenced-rpi-1.3.de&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Installation perl script file (Auszug commanref)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
direct perl script file: presenced http://svn.code.sf.net/p/fhem/code/trunk/fhem/contrib/PRESENCE/presenced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Nach dem letzten Schritt sind alle Bedingungen für eine abschließende Konfiguration der BT-Tags in FHEM abgeschlossen worden.&lt;br /&gt;
Jetzt kann der Tag dem FHEM-Server bekannt gemacht werden.&lt;br /&gt;
{{Randnotiz|RNText=Wenn man mit collectord arbeitet muß man die Erkennung bei allen Devices auf port 5222 setzen.&lt;br /&gt;
  lan-bluetooth xx:xx:80:xx:xx:AC 127.0.0.1:5222 20 120}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    --   Name       Modul    Modus         MAC vom Gtag  IP vom PI Port    Abfragezeit in Sekunden&lt;br /&gt;
define MeinGtAG PRESENCE lan-bluetooth xx:xx:xx:xx:xx:xx 127.0.0.1:5333    120&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Automatischer Start ===&lt;br /&gt;
&lt;br /&gt;
Damit das leprecend Skript beim Systemstart mitgestartet wird, sollte eine Crontab Eintrag gesetzt werden. Alternativ die rc.local anpassen.&lt;br /&gt;
Ersteres würde so aussehen:&lt;br /&gt;
&lt;br /&gt;
Ein sh-Skript mit dem Inhalt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo start-stop-daemon -d /opt/fhem/script -S -x /opt/fhem/script/lepresenced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
unter dem Verzeichnis /home/pi ablegen, welches sich init_start.sh nennt.&lt;br /&gt;
&lt;br /&gt;
Das Skript dann unter: sudo crontab -e einhängen mit folgender Folge:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@reboot        /home/pi/init_start.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zweiteres so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo nano /etc/rc.local&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Datei rc.local, freie Stelle suchen, vor &amp;quot;exit 0&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Start lepresenced&lt;br /&gt;
/opt/fhem/script/lepresenced --loglevel LOG_EMERG -d&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Batterieüberwachung (aktuell nur G-Tags) ===&lt;br /&gt;
&lt;br /&gt;
Leider überträgt der G-Tag nach der Einrichtung als Device in FHEM kein Reading mit seinem aktuellen Batteriestatus.&lt;br /&gt;
Dem wurde mit Hilfe des Forum Abhilfe geschaffen.&lt;br /&gt;
Im Folgenden wird erläutert wie die Batterieüberwachung eingerichtet werden kann.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Voraussetzung:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
bc - Basiscalculator [https://packages.debian.org/de/sid/bc Bc-Paket]&lt;br /&gt;
&amp;lt;pre&amp;gt; sudo apt-get install bc &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anlegen eines Shellskript auf dem Raspberry System. &lt;br /&gt;
Die Parameter &amp;lt;&amp;lt;MAC-Adresse&amp;gt;&amp;gt; und &amp;lt;&amp;lt;TagName&amp;gt;&amp;gt; müssen durch die Werte des auszulesenden G-Tags ersetzt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
stringZ=$(sudo gatttool -b 5C:2B:80:C1:14:41 --char-read --handle=0x001b)&lt;br /&gt;
stringZ=${stringZ:33:2}&lt;br /&gt;
stringZ=$(echo &amp;quot;$stringZ&amp;quot; | tr a-f A-F)&lt;br /&gt;
decimal=$(echo &amp;quot;ibase=16; $stringZ&amp;quot; | bc)&lt;br /&gt;
perl /opt/fhem/fhem.pl 7072 &amp;quot;setreading MeinGtag Batterie $decimal&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dem Device in FHEM (hier MeinGtag) ein userReading mit dem Namen &#039;&#039;&#039;Batterie&#039;&#039;&#039; hinzufügen.&lt;br /&gt;
Das Shellskript mit folgendem Befehl starten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./GtagBatterie.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Wichtig ist hierbei,&#039;&#039;&#039; dass Skript mit &amp;quot;./&amp;quot; und nicht mit &amp;quot;sh&amp;quot; aufzurufen. Beim Aufruf mit &amp;quot;sh GtagBatterie.sh&amp;quot; produziert es einen Fehler&lt;br /&gt;
&amp;lt;pre&amp;gt;GtagBatterie.sh: 3: GtagBatterie.sh: Bad substitution &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Reading wird auf den ausgelesenen Wert der Batterie gesetzt. &lt;br /&gt;
&lt;br /&gt;
Hinweis: Es sollte für jeden G-Tag ein eigenes Skript abgelegt werden. Das Skript kann per crontab oder fhem Kommando (system) regelmäßig aufgerufen werden.&lt;br /&gt;
&lt;br /&gt;
=== Batterieüberwachung (alle Devices vom Typ &amp;quot;MODE=lan-bluetooth&amp;quot;) ===&lt;br /&gt;
&lt;br /&gt;
Es gibt eine weitere Möglichkeit um den Batteriestatus von LE Devices abzurufen und in FHEM als Reading darzustellen.&lt;br /&gt;
Dabei wird der Batteriezustand für alle LE Devices, die bereits in FHEM konfiguriert sind und per lepresenced überwacht werden, automatisch in einem shell-Script ermittelt.&lt;br /&gt;
Näheres dazu im Forumartikel [https://forum.fhem.de/index.php/topic,56960.0.html [Erweiterung]: Anwesenheitserkennung/Batterieüberwachung].&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* Automatische Ermittlung aller in FHEM konfigurierten LE Devices&lt;br /&gt;
* Möglichkeit, diese Devices alternativ manuell im Script einzutragen&lt;br /&gt;
* Es werden nur Devices abgefragt, die im Status &amp;quot;present&amp;quot; sind, also mit ziemlicher Sicherheit auch verfügbar sind&lt;br /&gt;
* Ein eventuell auf dem FHEM telnet-Port gesetztes Passwort kann im Script hinterlegt werden&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Voraussetzung:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Funktionierendes lepresenced&#039;&#039;&#039; - siehe [[Anwesenheitserkennung#Anleitung_f.C3.BCr_ein_LE_Device_.28z.B._Gtags.2CPebbles_etc..29|Anleitung für ein LE Device (z.B. Gtags,Pebbles etc.)]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;socat&#039;&#039;&#039; - TCP port forwarder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install socat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gatttool&#039;&#039;&#039; - Bestandteil von bluez &lt;br /&gt;
&lt;br /&gt;
gatttool ist auf den meisten Distributionen im bluez-Paket, allerdings nicht bei Opensuse. Dort muss man das Sourcepaket von bluez installieren und selbst kompilieren.&lt;br /&gt;
gatttool sollte dann nach /usr/bin oder /usr/local/bin kopiert werden,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zu den notwendigen Erweiterungen werden für die Ausführung von gatttool &#039;&#039;&#039;Root-Rechte benötigt&#039;&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
Das Script selbst gibt es hier: [https://raw.githubusercontent.com/micky0867/lebattery/master/lebattery lebattery]&lt;br /&gt;
&lt;br /&gt;
Am Besten unter /opt/fhem/script/lebattery speichern und ausführbar machen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo su -&lt;br /&gt;
mkdir /opt/fhem/script&lt;br /&gt;
cd /opt/fhem/script&lt;br /&gt;
wget https://raw.githubusercontent.com/micky0867/lebattery/master/lebattery&lt;br /&gt;
chmod 755 lebattery&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nach Bedarf können im Script noch die folgenden 3 Parameter angepasst werden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# If allowed_telnetPort is protected by a password, add the password here&lt;br /&gt;
TELNETPASSWORD=&amp;quot;&amp;quot;&lt;br /&gt;
# Attribute for batterylevel in FHEM&lt;br /&gt;
ATTRIBUT=&amp;quot;batterylevel&amp;quot;&lt;br /&gt;
# Use this, if you dont want the script to determine the tags on its own&lt;br /&gt;
LETAGS=&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Skript wird dann unter root folgendermaßen gestartet:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/opt/fhem/script/lebattery -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ausgabe des Skripts, wenn es mit dem Verbose Parameter -v gestartet wird.&lt;br /&gt;
&lt;br /&gt;
Beide Devices sind vom Typ NUT mini, das Device mit dem FHEM-Namen &#039;&#039;&#039;nut_Micky&#039;&#039;&#039; ist im Status &#039;&#039;&#039;absent&#039;&#039;&#039;. Das zweite Device ist im Status &#039;&#039;&#039;present&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Determining address for nut_Micky ...&lt;br /&gt;
nut_Micky is in state absent, no further action required&lt;br /&gt;
&lt;br /&gt;
Determining address for nut_Test ...&lt;br /&gt;
Fetching batterylevel for nut_Test (F3:44:04:81:54:89) ...&lt;br /&gt;
Setting batterylevel for nut_Test to 100%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mein crontab-Eintrag (User root) sieht so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3 3  * * * /opt/fhem/script/lebattery -v &amp;gt;/opt/fhem/script/lebattery.log 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Damit wird jeden Morgen um 3 Minuten nach 3 Uhr der Zustand der Batterien aller Devices ermittelt und in FHEM abgespeichert.&amp;lt;br&amp;gt; &lt;br /&gt;
Bevor man das mit crontab macht, sollte man allerdings zunächst sicher stellen, dass es auch ohne crontab funktioniert....&lt;br /&gt;
&lt;br /&gt;
Bei Problemen kann man auch erstmal schauen, ob das mit dem gattool überhaupt funktioniert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gatttool -t random -b &amp;lt;MAC-Adresse&amp;gt; --char-read --uuid 0x2a19&lt;br /&gt;
&lt;br /&gt;
handle: 0x0017 	 value: 64&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In diesem Fall hat die Batterie noch 100% (hex 64).&lt;br /&gt;
&lt;br /&gt;
=== Problemlösungen ===&lt;br /&gt;
Falls es Probleme beim Starten des Skripts gibt bzw. man das Skript ohne Reboot des Systems neustarten möchte, kann man dies per kill Befehl erledigen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps -ef | grep lepresenced&lt;br /&gt;
sudo kill &amp;lt;pid&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Debuglevel lepresenced setzen:&lt;br /&gt;
{{Randnotiz|RNText=Um Debug-Meldungen zu bekommen (Vorsicht bei SD-Karten-Systemen wie dem RPi) - Hierbei werden die Schreibzyklen auf die SD-Karte erhöht.}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lepresenced --loglevel LOG_DEBUG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nur das wichtigste Loggen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lepresenced --loglevel LOG_WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Keinerlei LOG-Einträge&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lepresenced --loglevel LOG_EMERG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ansprechpartner ====&lt;br /&gt;
# {{Link2FU|5068|PatrikR}} (Patrick) für lepresenced &lt;br /&gt;
# [[Benutzer Diskussion:Devender|Devender]] ({{Link2FU|20043|Dirk}}) für Wiki und Doku&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Glossary]]&lt;/div&gt;</summary>
		<author><name>LordVoodoo</name></author>
	</entry>
</feed>