<?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=Benni</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=Benni"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Benni"/>
	<updated>2026-04-30T00:19:19Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Conbee/deCONZ_im_Proxmox_LXC-Container_(Tutorial)&amp;diff=37134</id>
		<title>Conbee/deCONZ im Proxmox LXC-Container (Tutorial)</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Conbee/deCONZ_im_Proxmox_LXC-Container_(Tutorial)&amp;diff=37134"/>
		<updated>2022-01-20T20:44:45Z</updated>

		<summary type="html">&lt;p&gt;Benni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Conbee/deCONZ im Proxmox LXC-Container (Tutorial)&lt;br /&gt;
&lt;br /&gt;
In diesem Tutorial wird gezeigt, wie sich ein Conbee ZigBee-Gatewas an einen unprivilegierten LXC-Container in einer Proxmox-VE einrichten und vewenden lässt.&lt;br /&gt;
&lt;br /&gt;
Optional wird im Rahmen des Tutorials die Sicherung und Wiederherstellung der deCONZ-Konfiguration am Beispiel eines Umzugs von einem Raspberry PI auf den LXC-Container gezeigt.&lt;br /&gt;
&lt;br /&gt;
Weiterhin wird in diesem Tutorial der deCONZ-Dienst im LXC-Container im Kontext eines dediziert für diesen Dienst angelegten User (&amp;quot;deconz&amp;quot;) ohne besondere Berechtigungen eingerichtet. Auch dieser Teil ist optional.&lt;br /&gt;
&lt;br /&gt;
== Verwendete Hard-/Software ==&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:darkgrey;&amp;quot;&amp;gt;(Stand: 18.01.2021)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Conbee (1+2) an unprivilegiertem Proxmox LXC-Container&lt;br /&gt;
&lt;br /&gt;
Proxmox-Version: 7.1.8&lt;br /&gt;
&lt;br /&gt;
deCONZ-Vesion: 2.13.04&lt;br /&gt;
&lt;br /&gt;
== Bezeichnungen und Darstellung ==&lt;br /&gt;
Im Tutorial werden zur Kennzeichnung der einzelnen Rechnersysteme, auf denen die jeweiligen Arbeiten durchgeführt werden folgende Rechnerbezeichnungen verwendet:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;RasPi&amp;quot; - Der Rechner mit der ursprünglich aktiven deCONZ-Installation (war ein Raspberry Pi)&lt;br /&gt;
* &amp;quot;LXC&amp;quot;   - Der LXC-Container auf den die Neuinstallation von deCONZ kommt&lt;br /&gt;
* &amp;quot;Node&amp;quot;  - Der Proxmox Node (Hardware) auf dem der LXC-Container betrieben wird und an dem letztendlich der Conbee angesteckt wird.&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird immer angegeben auf welchem Rechner mit welchem User gearbeitet wird unter Angebe von &amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;user@host&amp;lt;/span&amp;gt;. Wenn also bspw. auf dem neuen Container (LXC) mit dem User &amp;quot;myadmin&amp;quot; gearbeitet werden soll, dann steht zu beginn des entsprechenden Abschitts &amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;myadmin@LXC&amp;lt;/span&amp;gt;. Das heißt, immer wenn im folgenden Text eine solche Angabe kommt ist der User und/oder der Host entsprechend zu wechseln.&lt;br /&gt;
&lt;br /&gt;
Im wesentlichen werden alle Aktionen ausschließlich auf der Kommmandozeile der jeweiligen Systeme durchgeführt, es sei denn es ist explizit anders angegeben.&lt;br /&gt;
&lt;br /&gt;
In der Regel wird für die Anmeldung an den einzelnen Rechnern ssh verwendet. Bei der Anmeldung als root am Proxmox-Node wird das Shell-Fenster, das über die Proxmox-Verwaltung geöffnet werden kann gearbeitet. Genauso wird für die root-Anmeldung am LXC das Console-Fenster des Containers in der Proxmox-Verwaltung verwendet. In beiden Fällen ist eine Remote-Anmeldung von root per ssh ohne weitere Konfiguration nämlich nicht möglich. Das ist gut und soll auch so bleiben!&lt;br /&gt;
Generell spricht natürlich nichts dagegen auch bei der Arbeit mit anderen Usern auf dem LXC das Console-Fenster der Proxmox-Verwaltung zu nutzen.&lt;br /&gt;
&lt;br /&gt;
Der RasPi, also das &amp;quot;Altsystem&amp;quot; ist eine Quasi-Standard-Installation mit Raspian, von daher gibt es dort auch den Standard-User &amp;quot;pi&amp;quot; mit dem dort gearbeitet wird.&lt;br /&gt;
&lt;br /&gt;
Alle im Folgenden dargestellten Ausgaben von Befehlen werden &amp;lt;span style=&amp;quot;font-family=monospace;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;weiß auf schwarz&amp;lt;/span&amp;gt; dargestellt und sind grundsätzlich beispielhaft zu verstehen. &lt;br /&gt;
Eventuell darin enthaltene Bezeichnungen und IDs können auf einem anderen System anders lauten. Es ist jeweils erklärt, welche Information in der Ausgabe wichtig ist. Dort dann also bitte die individuellen Informationen der eigenen Systeme für die weitere Verarbeitung notieren.&lt;br /&gt;
&lt;br /&gt;
== Anlegen des LXC-Container in der Proxmox PVE  ==&lt;br /&gt;
&lt;br /&gt;
Die Erstellung des Containers selbst in der Proxmox-VE ist nicht Teil dieses Tutorials.&lt;br /&gt;
&lt;br /&gt;
Benötigt wird ein unprivilegierter LXC-Container mit kleiner Ausstattung (1024 RAM / 2GB Disk) und aktiviertem nesting.&lt;br /&gt;
Als Betriebssystem wird Debian 10 (Buster) aus dem entsprechenden Proxmox-Image vorgeschlagen. &lt;br /&gt;
Debian 10 deshalb, da die deconz-Unterstützung derzeit offiziell nur bis zu dieser Version angegeben wird. Grundsätzlich sollte das aber auch unter Debian 11 (Bullseye) so funktionieren.&lt;br /&gt;
&lt;br /&gt;
== Einrichten des Systems auf dem LXC-Container  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;root@LXC &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folgende Pakete, die nicht mit dem Proxmox-Debian-Image kommen werden im weiteren Verlauf benötigt und müssen installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install sudo lsb-release gpg usbutils&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf dem Container werden 2 User eingerichtet, einen für die Administration (myadmin / uid=1000) und einen für den Betrieb von deconz (deconz / uid=1001).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
adduser deconz&lt;br /&gt;
adduser myadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der myadmin-User bekommt per sudo allumfassende Berechtiung ohne Passwort auf alles. Dazu muss die sudoers-Datei mit folgendem Befehl zur Bearbeitung geöffnet: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
visudo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
folgende Zeile muss in die Datei eintragen werden&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
myadmin ALL=(ALL:ALL) NOPASSWD: ALL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ab jetzt kann für die weitere Einrichtung auf dem LXC-Container der User myadmin verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation von deCONZ im LXC-Container  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;myadmin@LXC &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
deCONZ wird nach Anleitung bei dresden-elektronik mittels apt installiert (s.a.: https://phoscon.de/en/conbee/install#ubuntu)&lt;br /&gt;
&lt;br /&gt;
Wichtig! Wenn deCONZ so installiert wird, ist anschließend der deconz-Dienst noch nicht aktiviert und läuft folglich auch noch nicht. Das wird im späteren Verlauf nachgeholt.&lt;br /&gt;
&lt;br /&gt;
Der deconz-User soll laut der deCONZ-Installationsanleitung (s.w.u.) der Gruppe dialout hinzugefügt werden.&lt;br /&gt;
Für den Betrieb auf dem LXC-Container sollte das aber egal sein. Die Rechte auf das USB-Device werden im späteren Verlauf außerhalb der Containers auf dem Proxmox-Node zugewiesen. &lt;br /&gt;
&lt;br /&gt;
Nichts desto trotz:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo gpasswd -a deconz dialout&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sicherung der bestehenden deCONZ-Konfiguration (Optional)  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;pi@RasPi &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Übertragung der deCONZ-Konfiguration wird vom Altsystem die Datei &amp;quot;zll.db&amp;quot; gesichert. In diesem Datenbank-File sind alle relevanten Informationen für deCONZ enthalten, inkl. Geräte, Gruppen, etc.&lt;br /&gt;
&lt;br /&gt;
Die Datei befindet sich in einem Ordner Home-Verzeichnis des Users, unter dem der deCONZ-Dienst auf dem RasPi läuft. Das ist im Normalfall ebenfalls der User &amp;quot;pi&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Prüfen kann man das wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ps aux|grep deCONZ&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ausgabe ist dann sowas in der Art&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;&lt;br /&gt;
root          87  0.0  0.2   3872  2940 ?        Ss   17:03   0:00 /bin/bash /usr/bin/deCONZ-update2.sh&lt;br /&gt;
pi            88  0.0  4.6 402472 48436 ?        Ssl  17:03   0:13 /usr/bin/deCONZ -platform minimal --http-port=80&lt;br /&gt;
pi          2860  0.0  0.0   3088   880 pts/3    S+   17:54   0:00 grep deCONZ&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interessant ist hier die mittlere Zeile, das ist der deCONZ-Dienst und wie man ganz vorne in der Zeile sieht, läuft er unter dem User &amp;quot;pi&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Die Datei befindet sich also im Ordner&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
~/.local/share/dresden-elektronik/deCONZ&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie gesagt wird von dort eigentlich nur die Datei zll.db benötigt. Es kann aber nichts schaden, sich eine Sicherung des kompletten Ordners &amp;quot;dresden-elektronik&amp;quot; zu machen.&lt;br /&gt;
&lt;br /&gt;
Das alte System wird im weiteren Verlauf nicht mehr benötigt, dort kann also der deconz-Dienst beendet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl stop deconz&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weiterhin kann man auch gleich noch die zugehörigen deCONZ-Update- und -WiFi-Dienste beenden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl stop deconz-update&lt;br /&gt;
sudo systemctl stop deconz-wifi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am besten deaktiviert man im Anschluss die Dienste generell, damit sie bei einem Neustart RasPi nicht automatisch wieder aktiv werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl deacitvate deconz&lt;br /&gt;
sudo systemctl deacitvate deconz-update&lt;br /&gt;
sudo systemctl deacitvate deconz-wifi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Durchreichen des Conbee-Stick an den LXC-Container ==&lt;br /&gt;
&lt;br /&gt;
Damit der LXC-Container den Conbee-Stick, der physikalisch am Proxmox-Nodet angeschlossen ist, überhaupt verwenden kann, muss zum einen der Container auf die zugehörigen Device-Dateien des Nodes zugreifen dürfen und zum anderen müssen sie auf dem Container auch erst verfügbar gemacht werden.&lt;br /&gt;
Das ist derzeit leider nicht mit der Pxoxmox-VE Verwaltung im Web-UI machbar, sondern muss durch manuelle Anpassung der Container-Konfigurationsdatei erfolgen.&lt;br /&gt;
&lt;br /&gt;
=== Benötigte USB-Informationen ermitteln  ===&lt;br /&gt;
&lt;br /&gt;
Die im folgenden ermittelten Informationen werden benötigt, um das USB-Gerät an den LXC-Container durchreichen zu können und diesem Zugriff darauf zu gewähren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;root@Node &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bevor nun der Conbee am Proxmox-Node angeschlossen wird, lässt man sich am besten einmal die aktuell vorhandenen USB-Geräte anzeigen, das erleichtert im nächsten Schritt die Identifikation der verwendeten USB-Systemgeräte.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;&lt;br /&gt;
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub&lt;br /&gt;
Bus 001 Device 003: ID 8087:0a2a Intel Corp. Bluetooth wireless interface&lt;br /&gt;
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /dev/ttyUSB*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;&lt;br /&gt;
crw-rw---- 1 root dialout 188, 1 Jan 17 13:49 /dev/ttyUSB1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt wird der Conbee am Proxmox-Node eingesteckt und die beiden gerad ausgeführten Befehle nochmals wiederholt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;&lt;br /&gt;
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub&lt;br /&gt;
Bus 001 Device 003: ID 8087:0a2a Intel Corp. Bluetooth wireless interface&lt;br /&gt;
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;br /&gt;
Bus 001 Device 007: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die letzte Zeile ist neu hinzugekommen, also muss das der Conbee sein!&lt;br /&gt;
&lt;br /&gt;
Folgende Informationen aus dieser Zeile werden für die weitere Konfiguration benötigt:&lt;br /&gt;
&lt;br /&gt;
* Die BUS-Geräte-Informationen, Sprich die USB-Bus-Nummer (im Beispiel die 001) und die Device-Nummer auf dem Bus (im Beispiel die 007)&lt;br /&gt;
* Vendor- und die Product-ID des Gerätes. Das steckt im Beispiel in dieser Zahlenkombination 0403:6015. Der Teil vor dem Doppelpunkt ist die Vendor-ID ist (0403) und der Teil nach dem Doppelpunkt ist die Product-ID (6015)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /dev/ttyUSB*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;&lt;br /&gt;
crw-rw---- 1 root dialout 188, 1 Jan 17 13:49 /dev/ttyUSB1&lt;br /&gt;
crw-rw---- 1 root dialout 188, 0 Jan 18 19:15 /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ttyUSB0 ist gegenüber dem vorherigen Aufruf hinzugekommen, dann gehört das Device zum Conbee. Auch der Datei-Zeitstempel passt zum Zeitpunkt des Anschließens am Node&lt;br /&gt;
&lt;br /&gt;
Die relevante Information ,die aus dieser Ausgabe benötigt wird ist die 188. Das ist die (Major-)Nummer des Treibers, der für das Gerät zuständig ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun werden die zuvor notierten Bus- und Device-Nummer benötigt. Damit listet man sich das entsprechende USB-Bus-Device auf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -l /dev/bus/usb/001/007&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;&lt;br /&gt;
crw-rw-r-- 1 root root 189, 6 Jan 18 17:11 /dev/bus/usb/001/007&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die relevante Information dieser Ausgabe ist auch hier die Treibernummer  (189). &lt;br /&gt;
&lt;br /&gt;
=== Anpassung der Container-Konfiguration  ===&lt;br /&gt;
&lt;br /&gt;
Für die Anpassung der Container-Konfiguration muss direkt die Container-Konfigurationsatei editiert werden. Dazu wird die Container-ID des LXC benötigt, die man am einfachsten aus der Proxmox-Verwaltung liest.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;root@Node &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdatei des LXC-Containers befindet sich unter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/pve/local/lxc/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und ist nach folgendem Schema benannt: &amp;lt;CONTAINER-ID&amp;gt;.conf das &amp;lt;CONTAINER-ID&amp;gt; ist natürlich mit der zuvor ermittelten Container-ID zu ersetzen&lt;br /&gt;
&lt;br /&gt;
Die Datei mit der entsprechenden Container-ID wird nun editiert&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nano &amp;lt;CONTAINER-ID&amp;gt;.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am Ende der Datei werden entsprechend der zuvor gesammelten Informationen folgende Zeilen am Ende eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lxc.cgroup.devices.allow: c 189:* rwm&lt;br /&gt;
lxc.mount.entry: /dev/bus/usb/001/007 dev/bus/usb/001/007 none bind,optional,create=file&lt;br /&gt;
lxc.cgroup.devices.allow: c 188:* rwm&lt;br /&gt;
lxc.mount.entry: /dev/ttyUSB0 dev/ttyUSB0 none bind,optional,create=file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Erinnerung: Die genannten Werte sind nur Beispielhaft und müssen durch die zuvor, individuell ermittelten Werte aus 5. ersetzt werden!&lt;br /&gt;
&lt;br /&gt;
* In die 1. Zeile kommt die 189 (die aus der Ausgabe von ls -l /dev/bus/usb/001/007 kommt). Damit wird dem Container der Zugriff auf USB-Bus-Devices gestattet.&lt;br /&gt;
* In der 2. Zeile kommt 2 mal der Bus-Device-Pfad, genau so, wie er auch beim ls verwendet wurde. Damit wird das Bus-Device des Node im Container genau unter dem selben Pfad gemountet.&lt;br /&gt;
* In der 3. Zeile wird dem Container der Zugriff auf USB-Serial-Devices eingerichtet. (die 188 kommt aus dem ls -l /dev/ttyUSB*)&lt;br /&gt;
* In der 4. Zeile wird das USB-Serial-Device ttyUSB0 unter demselben Pfad im LXC-Container gemountet.&lt;br /&gt;
&lt;br /&gt;
Bei den beiden Mount-Angaben ist der erste Teil immer die Quelle, also der Pfad auf dem Node und der zweite Teil das Ziel, also der Pfad im LXC-Container. Die Devices können bei Bedarf und Wunsch also auch unter anderen Bezeichnungen im LXC-Container verfügbar gemacht werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;myadmin@LXC &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der Änderungen muss der LXC-Container (!) einmal neu gestartet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo reboot now&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;myadmin@LXC &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Überprüfen, ob die Änderunge erfolgreich für im LXC-Container übernommen und angewendet wurden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -l /dev/bus/usb/001/007&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;&lt;br /&gt;
crw-rw-r-- 1 nobody nogroup 189, 6 Jan 18 16:11 /dev/bus/usb/001/007&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ist die erwartete Ausgabe!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -l /dev/ttyUSB*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;&lt;br /&gt;
crw-rw---- 1 nobody nogroup 188, 0 Jan 18 19:49 /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch das ist die erwartete Ausgabe.&lt;br /&gt;
&lt;br /&gt;
=== Anpassung der Berechtigungen auf dem Node ===&lt;br /&gt;
&lt;br /&gt;
Die letzte Ausgabe ist von zusätzlichem Interesse, denn Dort kann man sehen, dass nur der Eigentümer und die Gruppe Zugriff auf das Gerät haben, alle anderen (other) aber nicht. Leider sind als Eigentümer der User &amp;quot;nobody&amp;quot; und die Gruppe &amp;quot;nogroup&amp;quot; angegeben. Das liegt daran, Die User/Gruppen und Berechtigungen vom Host-System nicht ohne Weiteres an einen (unprivilegierten) Container weitergegeben werden können. Es gibt zwar die Möglichkeit dies durch ein entsprechendes Mapping der uid und gid in der Konfigurationsdatei des Containers zu erreichen.&lt;br /&gt;
Einfacher ist es aber, auf dem Node auch &amp;quot;allen anderen&amp;quot; (other) den Zugriff auf das Device zu erlauben. Temporär erreicht man das durch ganz normale Rechteanpassung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;root@node &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod o+rw /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ob die Änderungen wirksam sind, sieht man mittels&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -l /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;&lt;br /&gt;
crw-rw-rw- 1 root dialout 188, 0 Jan 18 19:15 /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Genau so soll es sein! Das Device darf nun von jedem gelesen und beschrieben werden. &lt;br /&gt;
&lt;br /&gt;
Die Rechte müssten auch direkt auf dem Container entsprechend erweitert worden sein. Auch das kann man überprüfen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;myadmin@LXC &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -l /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;&lt;br /&gt;
crw-rw-rw- 1 nobody nogroup 188, 0 Jan 18 19:49 /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man sieht, auch im Container kann nun jeder lesend und schreibend auf das Gerät zugegriffen werden. Genau so wird das auch benötigt.&lt;br /&gt;
&lt;br /&gt;
Wie schon erwähnt ist die gerade durchgeführte Rechteanpassung nur temporär. Sprich wird der Pxoxmox-Node neu gestartet, sind die Schreib-/Leserechte für other auf das Device wieder verloren. Damit diese Rechtezuweisung auf dem Proxmox-Node auch über einen Systemneustart erhalten bleibt, genauer gesagt dann wieder automatisch eingerichtet wird, wird nun eine entsprechende udev-Regel auf dem Proxmox-Node eingerichtet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;root@Node &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es wird die Datei mit dem Editor angelegt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nano /etc/udev/rules.d/50-lxcusb.rules&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folgende Zeile wird dort eingetragen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;0403&amp;quot;, ATTRS{idProduct}==&amp;quot;6015&amp;quot;, GROUP=&amp;quot;users&amp;quot;, MODE=&amp;quot;0666&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind natürlich wieder die oben ermittelten individuellen Werte für Vendor- und Product-ID einzutragen.&lt;br /&gt;
Durch diese Regel werden die Rechte für das, durch Product- und Vendor-ID identifizierte Device beim Systemstart auf den in MODE eingestellten wert (0666 -&amp;gt; rw-rw-rw) festgelegt.&lt;br /&gt;
&lt;br /&gt;
Damit ist die USB-Geräteeinrichtung abgeschlossen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Wenn der Stick irgendwann umgesteckt wird, teilweise auch nur, wenn er aus und wieder neu eingesteckt wird, ändert sich u.U. die Device-Nummer (007) ggf. auch die Bus-Nummer (001). In diesem Fall muss die LXC-Container-Konfigurationsdatei entsprechend angepasst werden.}}&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Wenn der LXC-Container auf einen anderen Proxmox-Node migriert wird, muss natürlich der Conbee am neuen angesteckt angesteckt werden und entsprechend durchgereicht werden.}}&lt;br /&gt;
&lt;br /&gt;
== Einrichtung und Konfigurieren des deCONZ-Dienstes ==&lt;br /&gt;
&lt;br /&gt;
Jetzt erst wird der Dienst im LXC-Container aktiviert&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;myadmin@LXC &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl enable deconz&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bevor der Dienst nun gestartet wird, wird zunächst das Services-File an die gewünschten gegebenheiten angepasst (optional!)&lt;br /&gt;
Zum einen wird der User angepasst, unter dem der deconz-Service laufen soll und zum anderen wird dem deconz dienst beim Aufruf mitgeteilt, wo er den Conbee findet (/dev/ttyUSB0)&lt;br /&gt;
&lt;br /&gt;
Bei der Aktivierung des Dienstes wurde der Dateipfad, bzw. der erzeugte Symlink auf die Service-Datei ausgegeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;&lt;br /&gt;
/etc/systemd/system/multi-user.target.wants/deconz.service -&amp;gt; /lib/systemd/system/deconz.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es ist jetzt egal, ob über den symlink oder die Datei direkt editiert wird. Editiert werden muss allerdings mit root-Rechten (sudo)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo nano /etc/systemd/system/multi-user.target.wants/deconz.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung sollte die Datei so aussehen&lt;br /&gt;
&lt;br /&gt;
Die Service-Datei sieht bei mir nach Änderung so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=deCONZ: ZigBee gateway -- REST API&lt;br /&gt;
Wants=deconz-init.service deconz-update.service&lt;br /&gt;
StartLimitIntervalSec=0&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
User=deconz&lt;br /&gt;
ExecStart=/usr/bin/deCONZ -platform minimal --http-port=80 --dev=/dev/ttyUSB0&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RestartSec=30&lt;br /&gt;
AmbientCapabilities=CAP_NET_BIND_SERVICE CAP_KILL CAP_SYS_BOOT CAP_SYS_TIME&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die genannten Änderungen finden sich in den ersten beiden Zeilen im Abschnitt [Service] Beim User stand ursprünglich die uid des Users drin, es funktioniert allerdings auch mit dem Usernamen. Falls nicht, dann gegen die gewünschte uid austauschen.&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der Datei muss systemctl dazu aufgefordert werden, die Änderungen zu übernehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann der Dienst endlich gestartet werden&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl start deconz&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Überprüfen kann man das am einfachsten indem man sich den entsprechenden Prozess aus der Prozessliste filtert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ps aux|grep deCONZ&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;&lt;br /&gt;
root          87  0.0  0.2   3872  2940 ?        Ss   17:03   0:01 /bin/bash /usr/bin/deCONZ-update2.sh&lt;br /&gt;
deconz        88  0.0  4.6 402472 48436 ?        Ssl  17:03   0:55 /usr/bin/deCONZ -platform minimal --http-port=80 --dev=/dev/ttyUSB0&lt;br /&gt;
myadmin    10727  0.0  0.0   3088   816 pts/3    S+   20:36   0:00 grep deCONZ&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man sieht in der Ausgabe, der Dienst läuft unter dem gewünschten User &amp;quot;deconz&amp;quot; und auch das ttyUSB0 wurde beim Start korrekt übergeben.&lt;br /&gt;
&lt;br /&gt;
Damit ist die grundsätzliche Einrichtung von deCONZ auf dem LXC-Container mit durchgereichtem Conbee abgeschlossen.&lt;br /&gt;
&lt;br /&gt;
== Wiederherstellen der vorherigen deCONZ-Konfiguration (Optional)  ==&lt;br /&gt;
&lt;br /&gt;
Wenn die deCONZ-Konfiguration samt Conbee von einem bestehenden System in den Container &amp;quot;umziehen&amp;quot; soll muss nun noch lediglich die in Punkt 5. gesicherte Datei &amp;quot;zll.db&amp;quot; in das deCONZ-Verzeichnis unter dem User deCONZ kopiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt; myadmin@LXC &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu muss der Dienst zunächst gestoppt werden&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl stop deconz&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann die Datei aus der vorherigen Sicherung vom Altsystem übertragen werden&lt;br /&gt;
Ziel ist in diesem Beispiel dann im Home-Verzeichnis des Users deconz:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/home/deconz/.local/share/dresden-elektronik/deCONZ&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt muss der Dienst nur wieder gestartet werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl start deconz&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man sich wie gewohnt, mit dem Browser an der Phoscon-App auf dem LXC-Container anmelden. Dort sollte dann das &amp;quot;alte&amp;quot; Gateway zur Auswahl stehen und nach Anmeldung am Gateway sollten auch alle Gruppen, Lichter, Schalter, .... vorhanden und bedienbar sein. &lt;br /&gt;
&lt;br /&gt;
== Anpassungen in FHEM (Optional)  ==&lt;br /&gt;
&lt;br /&gt;
Wenn der Conbee bisher in FHEM als HUE-IO verwendet wurde muss im entsprechenden FHEM-Device (Bspw.: &amp;quot;deCONZ&amp;quot;) im DEF die IP-Adresse des LXC-Containers eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
== Anmerkungen  ==&lt;br /&gt;
&lt;br /&gt;
* Die Einrichtung zum Durchreichen von USB-Serial-Devices an unprivilegierte LXC-Container ist grundsätzlich auch für andere USB-Devices anwendbar. Auf gleiche Art und Weise lässt sich bspw. ein Volkszähler USB-Lesekopf am Proxmox-Node anschließen und an einen LXC-Container durchreichen.&lt;br /&gt;
&lt;br /&gt;
* Die Sicherung und Wiederherstellung der deCONZ-Konfiguration lässt sich so natürlich auch bei einem System-Upgrade oder einer geplanten System-Neuinstallation anwenden.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:ZigBee]]&lt;/div&gt;</summary>
		<author><name>Benni</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Hue&amp;diff=37133</id>
		<title>Hue</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Hue&amp;diff=37133"/>
		<updated>2022-01-20T19:27:36Z</updated>

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

		<summary type="html">&lt;p&gt;Benni: Die Seite wurde neu angelegt: „Conbee/deCONZ im Proxmox LXC-Container (Tutorial)  In diesem Tutorial wird gezeigt, wie sich ein Conbee ZigBee-Gatewas an einen unprivilegierten LXC-Container…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Conbee/deCONZ im Proxmox LXC-Container (Tutorial)&lt;br /&gt;
&lt;br /&gt;
In diesem Tutorial wird gezeigt, wie sich ein Conbee ZigBee-Gatewas an einen unprivilegierten LXC-Container in einer Proxmox-VE einrichten und vewenden lässt.&lt;br /&gt;
&lt;br /&gt;
Optional wird im Rahmen des Tutorials die Sicherung und Wiederherstellung der deCONZ-Konfiguration am Beispiel eines Umzugs von einem Raspberry PI auf den LXC-Container gezeigt.&lt;br /&gt;
&lt;br /&gt;
Weiterhins wird in diesem Tutorial der deCONZ-Dienst im LXC-Container im Kontext eines dediziert für diesen Dienst angelegten User (&amp;quot;deconz&amp;quot;) ohne besondere Berechtigungen eingerichtet. Auch dieser Teil ist optional.&lt;br /&gt;
&lt;br /&gt;
== Verwendete Hard-/Software ==&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:darkgrey;&amp;quot;&amp;gt;(Stand: 18.01.2021)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Conbee (1+2) an unprivilegiertem Proxmox LXC-Container&lt;br /&gt;
&lt;br /&gt;
Proxmox-Version: 7.1.8&lt;br /&gt;
&lt;br /&gt;
deCONZ-Vesion: 2.13.04&lt;br /&gt;
&lt;br /&gt;
== Bezeichnungen und Darstellung ==&lt;br /&gt;
Im Tutorial werden zur Kennzeichnung der einzelnen Rechnersysteme, auf denen die jeweiligen Arbeiten durchgeführt werden folgende Rechnerbezeichnungen verwendet:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;RasPi&amp;quot; - Der Rechner mit der ursprünglich aktiven deCONZ-Installation (war ein Raspberry Pi)&lt;br /&gt;
* &amp;quot;LXC&amp;quot;   - Der LXC-Container auf den die Neuinstallation von deCONZ kommt&lt;br /&gt;
* &amp;quot;Node&amp;quot;  - Der Proxmox Node (Hardware) auf dem der LXC-Container betrieben wird und an dem letztendlich der Conbee angesteckt wird.&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird immer angegeben auf welchem Rechner mit welchem User gearbeitet wird unter Angebe von &amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;user@host&amp;lt;/span&amp;gt;. Wenn also bspw. auf dem neuen Container (LXC) mit dem User &amp;quot;myadmin&amp;quot; gearbeitet werden soll, dann steht zu beginn des entsprechenden Abschitts &amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;myadmin@LXC&amp;lt;/span&amp;gt;. Das heißt, immer wenn im folgenden Text eine solche Angabe kommt ist der User und/oder der Host entsprechend zu wechseln.&lt;br /&gt;
&lt;br /&gt;
Im wesentlichen werden alle Aktionen ausschließlich auf der Kommmandozeile der jeweiligen Systeme durchgeführt, es sei denn es ist explizit anders angegeben.&lt;br /&gt;
&lt;br /&gt;
In der Regel wird für die Anmeldung an den einzelnen Rechnern ssh verwendet. Bei der Anmeldung als root am Proxmox-Node wird das Shell-Fenster, das über die Proxmox-Verwaltung geöffnet werden kann gearbeitet. Genauso wird für die root-Anmeldung am LXC das Console-Fenster des Containers in der Proxmox-Verwaltung verwendet. In beiden Fällen ist eine Remote-Anmeldung von root per ssh ohne weitere Konfiguration nämlich nicht möglich. Das ist gut und soll auch so bleiben!&lt;br /&gt;
Generell spricht natürlich nichts dagegen auch bei der Arbeit mit anderen Usern auf dem LXC das Console-Fenster der Proxmox-Verwaltung zu nutzen.&lt;br /&gt;
&lt;br /&gt;
Der RasPi, also das &amp;quot;Altsystem&amp;quot; ist eine Quasi-Standard-Installation mit Raspian, von daher gibt es dort auch den Standard-User &amp;quot;pi&amp;quot; mit dem dort gearbeitet wird.&lt;br /&gt;
&lt;br /&gt;
Alle im Folgenden dargestellten Ausgaben von Befehlen werden &amp;lt;span style=&amp;quot;font-family=monospace;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;weiß auf schwarz&amp;lt;/span&amp;gt; dargestellt und sind grundsätzlich beispielhaft zu verstehen. &lt;br /&gt;
Eventuell darin enthaltene Bezeichnungen und IDs können auf einem anderen System anders lauten. Es ist jeweils erklärt, welche Information in der Ausgabe wichtig ist. Dort dann also bitte die individuellen Informationen der eigenen Systeme für die weitere Verarbeitung notieren.&lt;br /&gt;
&lt;br /&gt;
== Anlegen des LXC-Container in der Proxmox PVE  ==&lt;br /&gt;
&lt;br /&gt;
Die Erstellung des Containers selbst in der Proxmox-VE ist nicht Teil dieses Tutorials.&lt;br /&gt;
&lt;br /&gt;
Benötigt wird ein unprivilegierter LXC-Container mit kleiner Ausstattung (1024 RAM / 2GB Disk) und aktiviertem nesting.&lt;br /&gt;
Als Betriebssystem wird Debian 10 (Buster) aus dem entsprechenden Proxmox-Image vorgeschlagen. &lt;br /&gt;
Debian 10 deshalb, da die deconz-Unterstützung derzeit offiziell nur bis zu dieser Version angegben wird. Grundsätzlich sollte das aber auch unter Debian 11 (Bullseye) so funktionieren.&lt;br /&gt;
&lt;br /&gt;
== Einrichten des Systems auf dem LXC-Container  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;root@LXC &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folgende Pakete, die nicht mit dem Proxmox-Debian-Image kommen werden im weiteren Verlauf benötigt und müssen installiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install sudo lsb-release gpg usbutils&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf dem Container werden 2 User eingerichtet, einen für die Administration (myadmin / uid=1000) und einen für den Betrieb von deconz (deconz / uid=1001).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
adduser deconz&lt;br /&gt;
adduser myadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der myadmin-User bekommt per sudo allumfassende Berechtiung ohne Passwort auf alles. Dazu muss die sudoers-Datei mit folgendem Befehl zur Bearbeitung geöffnet: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
visudo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
folgende Zeile muss in die Datei eintragen werden&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
myadmin ALL=(ALL:ALL) NOPASSWD: ALL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ab jetzt kann für die weitere Einrichtung auf dem LXC-Container der User myadmin verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation von deCONZ im LXC-Container  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;myadmin@LXC &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
deCONZ wird nach Anleitung bei dresden-elektronik mittels apt installiert (s.a.: https://phoscon.de/en/conbee/install#ubuntu)&lt;br /&gt;
&lt;br /&gt;
Wichtig! Wenn deCONZ so installiert wird, ist anschließend der deconz-Dienst noch nicht aktiviert und läuft folglich auch noch nicht. Das wird im späteren Verlauf nachgeholt.&lt;br /&gt;
&lt;br /&gt;
Der deconz-User soll laut der deCONZ-Installationsanleitung (s.w.u.) der Gruppe dialout hinzugefügt werden.&lt;br /&gt;
Für den Betrieb auf dem LXC-Container sollte das aber egal sein. Die Rechte auf das USB-Device werden im späteren Verlauf außerhalb der Containers auf dem Proxmox-Node zugewiesen. &lt;br /&gt;
&lt;br /&gt;
Nichts desto trotz:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo gpasswd -a deconz dialout&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sicherung der bestehenden deCONZ-Kofiguration (Optional)  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;pi@RasPi &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Übertragung der deCONZ-Konfiguration wird vom Altsystem die Datei &amp;quot;zll.db&amp;quot; gesichert. In diesem Datenbank-File sind alle relevanten Informationen für deCONZ enthalten, inkl. Geräte, Gruppen, etc.&lt;br /&gt;
&lt;br /&gt;
Die Datei befindet sich in einem Ordner Home-Verzeichnis des Users, unter dem der deCONZ-Dienst auf dem RasPi läuft. Das ist im Normalfall ebenfalls der User &amp;quot;pi&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Prüfen kann man das wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ps aux|grep deCONZ&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ausgabe ist dann sowas in der Art&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;&lt;br /&gt;
root          87  0.0  0.2   3872  2940 ?        Ss   17:03   0:00 /bin/bash /usr/bin/deCONZ-update2.sh&lt;br /&gt;
pi            88  0.0  4.6 402472 48436 ?        Ssl  17:03   0:13 /usr/bin/deCONZ -platform minimal --http-port=80&lt;br /&gt;
pi          2860  0.0  0.0   3088   880 pts/3    S+   17:54   0:00 grep deCONZ&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interessant ist hier die mittlere Zeile, das ist der deCONZ-Dienst und wie man ganz vorne in der Zeile sieht, läuft er unter dem User &amp;quot;pi&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Die Datei befindet sich also im Ordner&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
~/.local/share/dresden-elektronik/deCONZ&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie gesagt wird von dort eigentlich nur die Datei zll.db benötigt. Es kann aber nichts schaden, sich eine Sicherung des kompletten Ordners &amp;quot;dresden-elektronik&amp;quot; zu machen.&lt;br /&gt;
&lt;br /&gt;
Das alte System wird im weiteren Verlauf nicht mehr benötigt, dort kann also der deconz-Dienst beendet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl stop deconz&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weiterhin kann man auch gleich noch die zugehörigen deCONZ-Update- und -WiFi-Dienste beenden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl stop deconz-update&lt;br /&gt;
sudo systemctl stop deconz-wifi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am besten deaktiviert man im Anschluss die Dienste generell, damit sie bei einem Neustart RasPi nicht automatisch wieder aktiv werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl deacitvate deconz&lt;br /&gt;
sudo systemctl deacitvate deconz-update&lt;br /&gt;
sudo systemctl deacitvate deconz-wifi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Durchreichen des Conbee-Stick an den LXC-Container ==&lt;br /&gt;
&lt;br /&gt;
Damit der LXC-Container den Conbee-Stick, der physikalisch am Proxmox-Nodet angeschlossen ist, überhaupt verwenden kann, muss zum einen der Container auf die zugehörigen Device-Dateien des Nodes zugreifen dürfen und zum anderen müssen sie auf dem Container auch erst verfügbar gemacht werden.&lt;br /&gt;
Das ist derzeit leider nicht mit der Pxoxmox-VE Verwaltung im Web-UI machbar, sondern muss durch manuelle Anpassung der Container-Konfigurationsdatei erfolgen.&lt;br /&gt;
&lt;br /&gt;
=== Benötigte USB-Informationen zum ermitteln  ===&lt;br /&gt;
&lt;br /&gt;
Die im folgenden ermittelten Informationen werden benötigt, um das USB-Gerät an den LXC-Container durchreichen zu können und diesem Zugriff darauf zu gewähren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;root@Node &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bevor nun der Conbee am Proxmox-Node angeschlossen wird, lässt man sich am besten einmal die aktuell vorhandenen USB-Geräte anzeigen, das erleichtert im nächsten Schritt die Identifikation der verwendeten USB-Systemgeräte.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;&lt;br /&gt;
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub&lt;br /&gt;
Bus 001 Device 003: ID 8087:0a2a Intel Corp. Bluetooth wireless interface&lt;br /&gt;
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /dev/ttyUSB*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;&lt;br /&gt;
crw-rw---- 1 root dialout 188, 1 Jan 17 13:49 /dev/ttyUSB1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt wird der Conbee am Proxmox-Node eingesteckt und die beiden gerad ausgeführten Befehle nochmals wiederholt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;&lt;br /&gt;
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub&lt;br /&gt;
Bus 001 Device 003: ID 8087:0a2a Intel Corp. Bluetooth wireless interface&lt;br /&gt;
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;br /&gt;
Bus 001 Device 007: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die letzte Zeile ist neu hinzugekommen, also muss das der Conbee sein!&lt;br /&gt;
&lt;br /&gt;
Folgende Informationen aus dieser Zeile werden für die weitere Konfiguration benötigt:&lt;br /&gt;
&lt;br /&gt;
* Die BUS-Geräte-Informationen, Sprich die USB-Bus-Nummer (im Beispiel die 001) und die Device-Nummer auf dem Bus (im Beispiel die 007)&lt;br /&gt;
* Vendor- und die Product-ID des Gerätes. Das steckt im Beispiel in dieser Zahlenkombination 0403:6015. Der Teil vor dem Doppelpunkt ist die Vendor-ID ist (0403) und der Teil nach dem Doppelpunkt ist die Product-ID (6015)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /dev/ttyUSB*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;&lt;br /&gt;
crw-rw---- 1 root dialout 188, 1 Jan 17 13:49 /dev/ttyUSB1&lt;br /&gt;
crw-rw---- 1 root dialout 188, 0 Jan 18 19:15 /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ttyUSB0 ist gegenüber dem vorherigen Aufruf hinzugekommen, dann gehört das Device zum Conbee. Auch der Datei-Zeitstempel passt zum Zeitpunkt des Anschließens am Node&lt;br /&gt;
&lt;br /&gt;
Die relevante Information ,die aus dieser Ausgabe benötigt wird ist die 188. Das ist die (Major-)Nummer des Treibers, der für das Gerät zuständig ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun werden die zuvor notierten Bus- und Device-Nummer benötigt. Damit listet man sich das entsprechende USB-Bus-Device auf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -l /dev/bus/usb/001/007&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;&lt;br /&gt;
crw-rw-r-- 1 root root 189, 6 Jan 18 17:11 /dev/bus/usb/001/007&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die relevante Information dieser Ausgabe ist auch hier die Treibernummer  (189). &lt;br /&gt;
&lt;br /&gt;
=== Anpassung der Container-Konfiguration  ===&lt;br /&gt;
&lt;br /&gt;
Für die Anpassung der Container-Konfigurtion muss direkt die Container-Konfig-Datei editiert werden. Dazu wird die Container-ID des LXC benötigt, die man am einfachsten aus der Proxmox-Verwaltung liest.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;root@Node &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfig-Datei des LXC-Containers befindet sich unter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/pve/local/lxc/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und ist nach folgendem Schema benannt: &amp;lt;CONTAINER-ID&amp;gt;.conf das &amp;lt;CONTAINER-ID&amp;gt; ist natürlich mit der zuvor ermittelten Container-ID zu ersetzen&lt;br /&gt;
&lt;br /&gt;
Die Datei mit der entsprechenden Container-ID wird nun editiert&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nano &amp;lt;CONTAINER-ID&amp;gt;.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am Ende der Datei werden entsprechend der zuvor gesammelten Informationen folgende Zeilen am Ende eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lxc.cgroup.devices.allow: c 189:* rwm&lt;br /&gt;
lxc.mount.entry: /dev/bus/usb/001/007 dev/bus/usb/001/007 none bind,optional,create=file&lt;br /&gt;
lxc.cgroup.devices.allow: c 188:* rwm&lt;br /&gt;
lxc.mount.entry: /dev/ttyUSB0 dev/ttyUSB0 none bind,optional,create=file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Erinnerung: Die genannten Werte sind nur Beispielhaft und müssen durch die zuvor, individuell ermittelten Werte aus 5. ersetzt werden!&lt;br /&gt;
&lt;br /&gt;
* In die 1. Zeile kommt die 189 (die aus der Ausgabe von ls -l /dev/bus/usb/001/007 kommt). Damit wird dem Container der Zugriff auf USB-Bus-Devices gestattet.&lt;br /&gt;
* In der 2. Zeile kommt 2 mal der Bus-Device-Pfad, genau so, wie er auch beim ls verwendet wurde. Damit wird das Bus-Device des Node im Container genau unter dem selben Pfad gemountet.&lt;br /&gt;
* In der 3. Zeile wird dem Container der Zugriff auf USB-Serial-Devices eingerichtet. (die 188 kommt aus dem ls -l /dev/ttyUSB*)&lt;br /&gt;
* In der 4. Zeile wird das USB-Serial-Device ttyUSB0 unter demselben Pfad im LXC-Container gemountet.&lt;br /&gt;
&lt;br /&gt;
  Bei den beiden Mount-Angaben ist der erste Teil immer die Quelle, also der Pfad auf dem Node und der zweite Teil das Ziel, also der Pfad im LXC-Container. Die Devices können bei Bedarf und Wunsch also auch unter anderen Bezeichnungen im LXC-Container verfügbar gemacht werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;myadmin@LXC &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der Änderungen muss der LXC-Container (!) einmal neu gestartet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo reboot now&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;myadmin@LXC &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Überprüfen, ob die Änderunge erfolgreich für im LXC-Container übernommen und angewendet wurden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -l /dev/bus/usb/001/007&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;&lt;br /&gt;
crw-rw-r-- 1 nobody nogroup 189, 6 Jan 18 16:11 /dev/bus/usb/001/007&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ist die erwartete Ausgabe!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -l /dev/ttyUSB*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;&lt;br /&gt;
crw-rw---- 1 nobody nogroup 188, 0 Jan 18 19:49 /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch das ist die erwartete Ausgabe.&lt;br /&gt;
&lt;br /&gt;
=== Anpassung der Berechtigungen auf dem Node ===&lt;br /&gt;
&lt;br /&gt;
Die letzte Ausgabe ist von zusätzlichem Interesse, denn Dort kann man sehen, dass nur der Eigentümer und die Gruppe Zugriff auf das Gerät haben, alle anderen (other) aber nicht. Leider sind als Eigentümer der User &amp;quot;nobody&amp;quot; und die Gruppe &amp;quot;nogroup&amp;quot; angegeben. Das liegt daran, Die User/Gruppen und Berechtigungen vom Host-System nicht ohne Weiteres an einen (unprivilegierten) Container weitergegeben werden können. Es gibt zwar die Möglichkeit dies durch ein entsprechendes Mapping der uid und gid in der Konfig-Datei des Containers zu erreichen.&lt;br /&gt;
Einfacher ist es aber, auf dem Node auch &amp;quot;allen anderen&amp;quot; (other) den Zugriff auf das Device zu erlauben. Temporär erreicht man das durch ganz normale Rechteanpassung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;root@node &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod o+rw /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ob die Änderungen wirksam sind, sieht man mittels&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -l /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;&lt;br /&gt;
crw-rw-rw- 1 root dialout 188, 0 Jan 18 19:15 /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Genau so soll es sein! Das Device darf nun von jedem gelesen und beschrieben werden. &lt;br /&gt;
&lt;br /&gt;
Die Rechte müssten auch direkt auf dem Container entsprechend erweitert worden sein. Auch das kann man überprüfuen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;myadmin@LXC &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -l /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;&lt;br /&gt;
crw-rw-rw- 1 nobody nogroup 188, 0 Jan 18 19:49 /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man sieht, auch im Container kann nun jeder lesend und schreibend auf das Gerät zugegriffen werden. Genau so wird das auch benötigt.&lt;br /&gt;
&lt;br /&gt;
Wie schon erwähnt ist die gerade durchgeführte Rechteanpassung nur temporär. Sprich wird der Pxoxmox-Node neu gestartet, sind die Schreib-/Leserechte für other auf das Device wieder verloren. Damit diese Rechtezuweisung auf dem Proxmox-Node auch über einen Systemneustart erhalten bleibt, genauer gesagt dann wieder automatisch eingerichtet wird, wird nun eine entsprechende udev-Regel auf dem Proxmox-Node eingerichtet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;root@Node &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es wird die Datei mit dem Edior angelegt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nano /etc/udev/rules.d/50-lxcusb.rules&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folgende Zeile wird dort eingetragen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;0403&amp;quot;, ATTRS{idProduct}==&amp;quot;6015&amp;quot;, GROUP=&amp;quot;users&amp;quot;, MODE=&amp;quot;0666&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind natürlich wieder die oben ermittelten individuellen Werte für Vendor- und Product-ID einzutragen.&lt;br /&gt;
Durch diese Regel werden die Rechte für das, durch Product- und Vendor-ID identifizierte Device beim Systemstart auf den in MODE eingestellten wert (0666 -&amp;gt; rw-rw-rw) festgelegt.&lt;br /&gt;
&lt;br /&gt;
Damit ist die USB-Geräteeinrichtung abgeschlossen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Wenn der Stick irgendwann umgesteckt wird, teilweise auch nur, wenn er aus und wieder neu eingesteckt wird, ändert sich u.U. die Device-Nummer (007) ggf. auch die Bus-Nummer (001). In diesem Fall muss die LXC-Container-Konfigurationsdatei entsprechend angepasst werden.}}&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Wenn der LXC-Container auf einen anderen Proxmox-Node migriert wird, muss natürlich der Conbee am neuen angesteckt angesteckt werden und entsprechend durchgereicht werden.}}&lt;br /&gt;
&lt;br /&gt;
== Einrichtung und Konfigurieren des deCONZ-Dienstes ==&lt;br /&gt;
&lt;br /&gt;
Jetzt erst wird der Dienst im LXC-Container aktiviert&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt;myadmin@LXC &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl enable deconz&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bevor der Dienst nun gestartet wird, wird zunächst das Services-File an die gewünschten gegebenheiten angepasst (optional!)&lt;br /&gt;
Zum einen wird der User angepasst, unter dem der deconz-Service laufen soll und zum anderen wird dem deconz dienst beim Aufruf mitgeteilt, wo er den Conbee findet (/dev/ttyUSB0)&lt;br /&gt;
&lt;br /&gt;
Bei der Aktivierung des Dienstes wurde der Dateipfad, bzw. der erzeugte Symlink auf die Service-Datei ausgegeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;&lt;br /&gt;
/etc/systemd/system/multi-user.target.wants/deconz.service -&amp;gt; /lib/systemd/system/deconz.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es ist jetzt egal, ob über den symlink oder die Datei direkt editiert wird. Editiert werden muss allerdings mit root-Rechten (sudo)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo nano /etc/systemd/system/multi-user.target.wants/deconz.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung sollte die Datei so aussehen&lt;br /&gt;
&lt;br /&gt;
Die Service-Datei sieht bei mir nach Änderung so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=deCONZ: ZigBee gateway -- REST API&lt;br /&gt;
Wants=deconz-init.service deconz-update.service&lt;br /&gt;
StartLimitIntervalSec=0&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
User=deconz&lt;br /&gt;
ExecStart=/usr/bin/deCONZ -platform minimal --http-port=80 --dev=/dev/ttyUSB0&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RestartSec=30&lt;br /&gt;
AmbientCapabilities=CAP_NET_BIND_SERVICE CAP_KILL CAP_SYS_BOOT CAP_SYS_TIME&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die genannten Änderungen finden sich in den ersten beiden Zeilen in der Seciton [Service] Beim User stand ursprünglich die uid des Users drin, es sollte aber auch mit dem Usernamen funktionieren. Falls nicht, dann gegen die gewünschte uid austauschen.&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der Datei muss systemctl dazu aufgefordert werden, die Änderungen zu übernehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann der Dienst endlich gestartet werden&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl start deconz&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Überprüfen kann man das am einfachsten indem man sich den entsprechenden Prozess aus der Prozessliste filtert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ps aux|grep deCONZ&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:#c0c0c0;background-color:black;&amp;quot;&amp;gt;&lt;br /&gt;
root          87  0.0  0.2   3872  2940 ?        Ss   17:03   0:01 /bin/bash /usr/bin/deCONZ-update2.sh&lt;br /&gt;
deconz        88  0.0  4.6 402472 48436 ?        Ssl  17:03   0:55 /usr/bin/deCONZ -platform minimal --http-port=80 --dev=/dev/ttyUSB0&lt;br /&gt;
myadmin    10727  0.0  0.0   3088   816 pts/3    S+   20:36   0:00 grep deCONZ&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man sieht in der Ausgabe, der Dienst läuft unter dem gewünschten User &amp;quot;deconz&amp;quot; und auch das ttyUSB0 wurde beim Start korrekt übergeben.&lt;br /&gt;
&lt;br /&gt;
Damit ist die grundsätzliche Einrichtung von deCONZ auf dem LXC-Container mit durchgereichtem Conbee abgeschlossen.&lt;br /&gt;
&lt;br /&gt;
== Wiederherstellen der vorherigen deCONZ-Konfiguration (Optional)  ==&lt;br /&gt;
&lt;br /&gt;
Wenn die deCONZ-Konfiguration samt Conbee von einem bestehenden System in den Container &amp;quot;umziehen&amp;quot; soll muss nun noch lediglich die in Punkt 5. gesicherte Datei &amp;quot;zll.db&amp;quot; in das deCONZ-Verzeichnis unter dem User deCONZ kopiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:monospace;font-weight:bold;color:black;background-color:yellow&amp;quot;&amp;gt; myadmin@LXC &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu muss der Dienst zunächst gestoppt werden&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl stop deconz&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann die Datei aus der vorherigen Sicherung vom Altsystem übertragen werden&lt;br /&gt;
Ziel ist in diesem Beispiel dann im Home-Verzeichnis des Users deconz:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/home/deconz/.local/share/dresden-elektronik/deCONZ&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt muss der Dienst nur wieder gestartet werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl start deconz&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man sich wie gewohnt, mit dem Browser an der Phoscon-App auf dem LXC-Container anmelden. Dort sollte dann das &amp;quot;alte&amp;quot; Gatewas zur Auswahl stehen und nach Anmeldung am Gateway sollten auch alle Gruppen, Lichter, Schalter, .... vorhanden und bedienbar sein. &lt;br /&gt;
&lt;br /&gt;
== Anpassungen in FHEM (Optional)  ==&lt;br /&gt;
&lt;br /&gt;
Wenn der Conbee bisher in FHEM als HUE-IO verwendet wurde muss im entsprechenden FHEM-Device (Bspw.: &amp;quot;deCONZ&amp;quot;) im DEF die IP-Adresse des LXC-Containers eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
== Anmerkungen  ==&lt;br /&gt;
&lt;br /&gt;
* Die Einrichtung zum Durchreichen von USB-Serial-Devices an unprivilegierte LXC-Container ist grundsätzlich auch für andere USB-Devices anwendbar. Auf gleiche Art und Weise lässt sich bspw. ein Volkszähler USB-Lesekopf am Proxmox-Node anschließen und an einen LXC-Container durchreichen.&lt;br /&gt;
&lt;br /&gt;
* Die Sicherung und Wiederherstellung der deCONZ-Konfiguration lässt sich so natürlich auch bei einem System-Upgrade oder einer geplanten System-Neuinstallation anwenden.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:ZigBee]]&lt;/div&gt;</summary>
		<author><name>Benni</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-MOD-RPI-PCB_HomeMatic_Funkmodul_f%C3%BCr_Raspberry_Pi&amp;diff=36187</id>
		<title>HM-MOD-RPI-PCB HomeMatic Funkmodul für Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-MOD-RPI-PCB_HomeMatic_Funkmodul_f%C3%BCr_Raspberry_Pi&amp;diff=36187"/>
		<updated>2021-11-08T09:04:11Z</updated>

		<summary type="html">&lt;p&gt;Benni: /* Bekannte Probleme */  Problem aus https://forum.fhem.de/index.php/topic,123948.msg1185048.html#msg1185048&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-MOD-RPI-PCB.jpg&lt;br /&gt;
|Bildbeschreibung=HomeMatic Funkmodul für Raspberry Pi &lt;br /&gt;
|HWProtocol=HomeMatic&lt;br /&gt;
|HWType=Gateway&lt;br /&gt;
|HWCategory=HomeMatic&lt;br /&gt;
|HWComm=868,3/869,525 MHz&lt;br /&gt;
|HWChannels=n/a&lt;br /&gt;
|HWVoltage=1,8–3,6 V&amp;amp;nbsp;DC&lt;br /&gt;
|HWPowerConsumption=50 mA max.&lt;br /&gt;
|HWPoweredBy=RasPi&lt;br /&gt;
|HWSize=19x41x14mm&lt;br /&gt;
|HWDeviceFHEM=[[HMUARTLGW]]&lt;br /&gt;
|HWManufacturer=ELV / eQ-3 &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das [[HM-MOD-RPI-PCB HomeMatic Funkmodul für Raspberry Pi]] ist eine Platine, die auf die GPIO-Schnittstelle des [[Raspberry Pi]] aufgesteckt werden und damit als [[Interface]] zu [[HomeMatic]] Geräten dienen kann. &lt;br /&gt;
&lt;br /&gt;
== Aufbau, Einsatz und grundsätzliche Funktionsweise ==&lt;br /&gt;
Das Modul besteht aus zwei Teilplatinen, die von eQ-3 über den Internetshop von ELV (als Bausatz ab etwa 20€, fertig montiert ab etwa 30€) verkauft werden. &lt;br /&gt;
&lt;br /&gt;
Das eigentliche Funkmodul wird mit HM-MOD-RPI-UART bezeichnet (und trägt den Aufdruck UART, im obigen Bild hinten teilweise verdeckt und mit der umrandeten 7 versehen), sie hat fünf einpolige Buchsen mit dem Rastermaß 2mm. Die Zusatzplatine zum Anschluss an die GPIO wird mit TRX1 bezeichnet (im obigen Bild vorn sichtbar mit dem Aufdruck HM-MOD-RPI-PCB), sie hat zwei sechspolige Buchsen mit dem Rastermaß 2,54mm.  Die Zusatzplatine enthält im Wesentlichen Stützkondensatoren und erlaubt einen direkten Anschluss an die GPIO eines Raspberry Pi.&lt;br /&gt;
* Der vorgesehene Einsatz als Aufsteckmodul auf den GPIO Port des Raspberry erfordert eine Modell abhängige Konfiguration. Diese wird im Setupbereich des Wiki Artikel zum [[Raspberry_Pi]] beschrieben.&lt;br /&gt;
  &lt;br /&gt;
{{Randnotiz|RNText=Neben der hier beschriebenen Option das HM-MOD-RPI-PCB zu verwenden, besteht auch die Möglichkeit, damit auf demselben Raspberry eine virtuelle CCU zu betreiben, welche dann mit [[HMCCU]] eingebunden werden kann. Hierfür stehen mehrere Virtualisierungsvarianten zur Verfügung; eine kurze Darstellung, wie das mittels YAHM funktioniert, ist in diesem {{Link2Forum|Topic=79670|Message=718289|Forenbeitrag}} zu finden.}}Mit dieser Platine in Verbindung mit dem FHEM-Modul [[HMUARTLGW]] ist nur der Betrieb von BidCoS-Geräten möglich. Zur Einbindung von Geräten, die HM-IP verwenden, ist derzeit (Stand Juni 2018) noch zwingend eine (ggf. virtualisierte) CCU2 oder neuer erforderlich.&lt;br /&gt;
&lt;br /&gt;
Das Funkmodul stellt auf dem 868MHz-Frequenzband eine Verbindung zu Homematic-Geräten her. Das Modul wird über die serielle Schnittstelle an ein Gerät gekoppelt, dass diese serielle Schnittstelle auswerten und die Information dann weiterverarbeiten kann. Hier kommen beispielsweise in Frage: Raspberry Pi, WeMos mini, ESP8266-Module, USB-serielle Adapter. Bereits das UART-Funkmodul erlaubt eine serielle Anbindung (die entsprechenden Schnittstellen Tx und Rx sind vorhanden, sie basieren auf 3,3V), es kann aber auch die  zusätzliche TRX1-Platine seriell verbunden werden. Des weiteren gibt es im Forum einen {{Link2Forum|Topic=56606|Thread}}, in dem PeMue eine eigene Platinenversion (Schaltplan, Stückliste und vieles mehr) vorstellt.&lt;br /&gt;
&lt;br /&gt;
=== Platine 1 -PCB-Modul ===&lt;br /&gt;
[[Datei:Hm-uart trx1.png|thumb|right|200px|Verkabelung beim HM-MOD-PCB]]&lt;br /&gt;
Am einfachsten ist es sicherlich, das kombinierte PCB-Modul (also beide Platinen UART und TRX1 durch eine Pfostenleiste miteinander verlötet) direkt auf die GPIO des Raspberry Pi aufzustecken. Das Bild rechts zeigt die entsprechende Verkabelung. Dabei ist zu beachten, dass sich nicht zwei Module die GPIO teilen können. Steckt schon ein Modul im Raspberry Pi, muss der Anschluss per USB, in einem zweiten Raspberry Pi oder per WLAN gewählt werden.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== Platine 2 -UART-Modul ===&lt;br /&gt;
[[Datei:Verkabelung-HM-MOD-uart.png|thumb|right|200px|Verkabelung beim HM-MOD-UART]]&lt;br /&gt;
Will man das TRX1-Modul nicht verwenden, so kann man auch das UART-Modul direkt mit Rx/Tx des Raspberry Pi verbinden. Das Bild rechts zeigt die entsprechende Verkabelung. Hier sollten allerdings Stützkondensatoren an die Stromversorgung des UART angebracht werden, da Spannungsschwankungen sonst zu schwer interpretierbaren Fehlern führen können. Die Anschlüsse sind dem nachstehenden Bild zu entnehmen, allerdings ist hier nicht die UART-Platine, sondern das TRX1-Gegenstück zu sehen!&lt;br /&gt;
&lt;br /&gt;
Sowohl serielle Schnittstelle des Raspberry Pi als auch das UART-Modul arbeiten mit 3,3V arbeitet, so dass man keine Spannungsteiler benötigt. Mehr Informationen zu den GPIOs findet man unter diesem [http://www.netzmafia.de/skripten/hardware/RasPi/RasPi_GPIO.html Link].&lt;br /&gt;
&lt;br /&gt;
=== Zusammenbau und Verwendung ===&lt;br /&gt;
Man sollte die Antenne aus dem Gehäuse schauen lassen oder gar eine externe Antenne anbringen. Idealerweise sollte das Ende der Drahtantenne mit einem Klecks Heißkleber oder ähnlichem isoliert werden; eine Berührung vor allem mit dem Innenleben des Raspberry Pi muss vermieden werden!&lt;br /&gt;
&lt;br /&gt;
Beide Platinen können zusammengebaut oder auch nur das UART Modul getrennt verwendet werden. &lt;br /&gt;
[[Datei:HM-MOD-UART-Unten.jpg|thumb|left|200px|Montage des Moduls HM-MOD-UART unten]]&lt;br /&gt;
[[Datei:HM-MOD-UART-Oben.jpg|thumb|right|200px|Montage des Moduls HM-MOD-UART oben]]&lt;br /&gt;
Die originale Montage in der Anleitung von eq3 sieht den Zusammenbau PCB Modul unten und UART Modul oben vor (Bild rechts). Damit schließen die kleineren Pi-Gehäuse nicht richtig: das Gesamtmodul klemmt am Deckel.&lt;br /&gt;
&lt;br /&gt;
Man kann ohne weiteres das UART-Modul unter dem PCB-Modul montieren (Bild links), damit wird die Gesamthöhe geringer und es passt problemlos in jedes Gehäuse. Bitte vorher die genaue Situation prüfen: Es kann sein, dass damit Kühlkörper oder ähnliches seitens der Pi-Platine stören.&lt;br /&gt;
&lt;br /&gt;
Man kann auch das PCB Modul kürzen und das UART Modul mit kurzen Drähten in einer Ebene verbinden (kein Bild).&lt;br /&gt;
&lt;br /&gt;
Bitte auf die richtige Lage (Bilder) beim Zusammenbau und auf Lötzinnbrücken achten. Da die Anschlüsse durchkontaktiert sind, bewirkt eine falsche Positionierung des UART-Moduls im schlimmsten Fall einen Kurzschluss. Man erkennt auf beiden Bildern, dass beim UART-Modul die Pinleiste einmal auf der einen und ein andermal auf der anderen Seite des Moduls angelötet werden muss! &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Verwendung ==&lt;br /&gt;
Das Modul muss, um verwendet zu werden, mit einer Hardware verbunden werden. Hier kommen mehrere Möglichkeiten in Betracht, die jeweils vor und Nachteile aufweisen. Sie werden jetzt nacheinander präsentiert.  &lt;br /&gt;
&lt;br /&gt;
=== Anbindung an die GPIO im Raspberry ===&lt;br /&gt;
==== Installation ====&lt;br /&gt;
Man kann das  HM-MOD-RPI-PCB Modul direkt in die GPIOs eines Raspberry stecken. Das hat den Vorteil, dass das Gerät (mehr oder weniger) sofort betriebsbereit ist, aber den Nachteil, dass am RPi vorher mehrere Installationen zu erfolgen haben. &lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;&amp;lt;big&amp;gt;notwendige Konfiguration der Schnittstelle&amp;lt;/big&amp;gt;&#039;&#039;&#039; ist hier beschrieben: [[Raspberry_Pi#Verwendung_UART_f.C3.BCr_Zusatzmodule|Verwendung UART für Zusatzmodule]].&lt;br /&gt;
* Der Einsatz in FHEM für CUL_HM erfolgt mit dem Modul [[HMUARTLGW]]&lt;br /&gt;
* Die automatische Erkennung der USB Geräte muss deaktiviert werden: &lt;br /&gt;
::&amp;lt;code&amp;gt;attr initialUsbCheck disable 1&amp;lt;/code&amp;gt;&lt;br /&gt;
: Nach dem Setzen des Attributes muss die Änderung gespeichert werden (siehe [[save]])!&lt;br /&gt;
&lt;br /&gt;
=== Anbindung über das Netzwerk===&lt;br /&gt;
Wenn das  HM-MOD-RPI-PCB Modul an einen RPi angeschlossen ist, kann man dieses Modul danach auch im Netzwerk verfügbar machen. Dieser Pi kann beliebige Aufgaben erledigen, nur das HM-MOD-RPI-PCB Modul selbst darf nicht lokal verwendet werden. Somit kann man bei einem Umzug des FHEM Servers das HM-MOD-RPI-PCB Modul einfach weiterhin nutzen oder einen vorhandene RaspberryPi zum &amp;quot;HMLAN&amp;quot; umbauen. Sollte man aber ausschließlich Zugriff auf das HM-MOD-RPI-PCB Modul im Netzwerk benötigen, empfiehlt sich auch aus Kostengründen (Stromverbrauch) eine andere Lösung.&lt;br /&gt;
&lt;br /&gt;
Achtung! Auch über das Netzwerk darf immer &#039;&#039;&#039;nur eine Instanz auf das freigegebene Modul zugreifen&#039;&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration der Schnittstelle ist in jedem Fall gleich: [[Raspberry Pi#Verwendung UART für Zusatzmodule|Verwendung UART für Zusatzmodule]]. &lt;br /&gt;
&lt;br /&gt;
Die [[HM-MOD-RPI-PCB HomeMatic Funkmodul für Raspberry Pi#Definition in FHEM 2|Definition in FHEM]] erfolgt dann mit dem Parameter &amp;lt;code&amp;gt;uart:// .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Variante mit ser2net =====&lt;br /&gt;
Diese Installation auf dem Pi mit dem  HM-MOD-RPI-PCB Modul bitte im Kontext &amp;lt;code&amp;gt;sudo su&amp;lt;/code&amp;gt; ausführen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install ser2net&lt;br /&gt;
echo &amp;quot;4000:raw:0:/dev/ttyAMA0:115200 NONE 1STOPBIT 8DATABITS HANGUP_WHEN_DONE&amp;quot; &amp;gt;&amp;gt; /etc/ser2net.conf&lt;br /&gt;
# Den Dienst neu starten&lt;br /&gt;
systemctl restart ser2net&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Variante mit socat =====&lt;br /&gt;
Installation auf dem Pi wo das Modul steckt bitte so installieren. &lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install socat&lt;br /&gt;
&lt;br /&gt;
Zum Test kann man socat in der Kommandozeile starten&lt;br /&gt;
&lt;br /&gt;
 sudo socat TCP4-LISTEN:2000,fork,reuseaddr /dev/ttyAMA0,raw,echo=0,b115200&lt;br /&gt;
&lt;br /&gt;
Für den dauerhaften Betrieb muss der Start von socat automatisch erfolgen. &lt;br /&gt;
Auf einen Debian Jessie mit systemd legt man z.B. einen Dienst durch folgende Datei an:&lt;br /&gt;
/etc/systemd/system/hmlangw.service&lt;br /&gt;
&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target&lt;br /&gt;
 Type=forking&lt;br /&gt;
   &lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/bin/socat TCP4-LISTEN:2000,fork,reuseaddr /dev/ttyAMA0,raw,echo=0,b115200&lt;br /&gt;
 User=root&lt;br /&gt;
 Restart=always&lt;br /&gt;
 RestartSec=10&lt;br /&gt;
&lt;br /&gt;
Dann kann mit &lt;br /&gt;
&lt;br /&gt;
 sudo systemctl enable hmlangw&lt;br /&gt;
&lt;br /&gt;
der Service zum Autostart konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
=== Anbindung mit USB-Adapter ===&lt;br /&gt;
{{Randnotiz|RNTyp=r|RNText=Bitte beachten: Es sind immer wieder Exemplare mit [[CP2102]] im Umlauf, die mehr als 3.3V Spannung liefern! Vor dem Verbinden mit dem HM-Modul sollte daher geprüft werden, ob der interne Spannungswandler ordnungsgemäß funktioniert und wirklich nur 3.3V liefert. Bei den blauen Micro-Modulen kann man den Fehler nach dieser Anleitung beheben: [https://www.silabs.com/community/interface/forum.topic.html/cp2102_3_3v_outputi-EaVr Beitrag von PBudmark vom 08.07.2017].}}&lt;br /&gt;
[[Datei:PL2102 Modul.png|200px|thumb|right|Mod zur Herstellung der korrekten Spannung]]&lt;br /&gt;
Das UART-Modul kann ebenfalls mit einem USB-Adapter an ein USB-fähiges Gerät angeschlossen werden. Allerdings ist hier wieder auf den Spannnungspegel zu achten, unbedingt einen USB-Adapter mit 3,3 Volt Pegel nehmen! Der Vorteil ist hier, dass hohe Geschwindigkeiten möglich sind und nicht wie bei WLAN Latenzen auftreten, aber es muss eben ein USB-Anschluss verfügbar sein.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich bewährt haben sich z.B. Modelle mit einem [[CP2102]], der auch ausreichend Stromreserven zum Betrieb des Moduls bietet. Dabei ist die serielle Schnittstelle wie üblich zu kreuzen, also&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Verschaltung&#039;&#039;&#039;&lt;br /&gt;
  3.3V &amp;lt;-&amp;gt; 3.3V&lt;br /&gt;
  GND  &amp;lt;-&amp;gt; GND&lt;br /&gt;
  Rx   &amp;lt;-&amp;gt; Tx&lt;br /&gt;
  Tx   &amp;lt;-&amp;gt; Rx&lt;br /&gt;
&lt;br /&gt;
=== Anbindung mit ESP8266 ===&lt;br /&gt;
Hier ist der Vorteil, dass vor Ort nur WLAN verfügbar sein muss. Nachteilig kann sich auswirken, dass WLAN hohe Latenzen aufweisen kann und daher manchmal der Eindruck entsteht, das Modul sei gerade abwesend. &lt;br /&gt;
&lt;br /&gt;
Zum Anschluss kann ein beliebiger ESP8266 verwendet werden. Mit einigen Versionen (Beispiele im Forum: {{Link2Forum|Topic=102141|Message=956606|LinkText=ESP07}} sowie {{Link2Forum|Topic=102141|LinkText=Wemos mini pro}}) ist eine Anbindung anscheinend nicht oder nur schwer möglich - wobei dies auch an nicht funktionsfähigen Clonen liegen kann oder beim Wemos daran, dass dort die USB-Schnittstelle mit Tx/Rx nicht kalkulierbare Störungen auslöst. Beim ESP8266 gibt es zwei verschiedene Firmware-Möglichkeiten: ESPLink oder ESPEasy. &lt;br /&gt;
&lt;br /&gt;
[https://github.com/jeelabs/esp-link ESPLink] ist eine sehr stabile und nicht mehr aktiv weiterentwickelte Firmware, die die serielle Schnittstelle direkt mit WLAN verbindet und ohne größere Schwierigkeiten eingerichtet werden kann und funktioniert. Sie nutzt die serielle Schnittstelle des ESP. Allerdings erlaubt ESPLink nicht die Nutzung anderer GPIOs, so können beispielsweise keine anderen Sensoren mit angeschlossen bzw. ausgelesen werden. Verwendet man ESP-Link, so muss neben der WLAN Konfiguration nur das Pin Assignment konfiguriert werden. Alle Pins auf disabled stellen.&lt;br /&gt;
&lt;br /&gt;
[https://www.letscontrolit.com/wiki/index.php/ESPEasy ESPEasy] (neue Version: ESPMega) wird beständig weiterentwickelt und gestattet es, weitere Sensoren anzuschließen und deren Werte auszulesen. Insbesondere kann man mit ESPEasy auch zwei weitere Pins nutzen, um eine serielle Schnittstelle zu simulieren (so genannter &#039;&#039;serieller Server&#039;&#039;). Man spricht auch von einer &#039;&#039;swapped&#039;&#039; Schnittstelle. Die {{Link2Forum|Topic=62651|LinkText=Platine von amunra}} nutzt eine solche Schnittstelle. &lt;br /&gt;
Allerdings gibt es mit einigen ESP8266-Geräten Schwierigkeiten, diese serielle Schnittstelle zu nutzen. So ist etwa ein serieller Server mit neueren ESP-Versionen anscheinend nicht lauffähig (siehe dazu {{Link2Forum|Topic=75422|LinkText=diesen Thread}}). Es gibt eine ältere Firmware-Version von PeMue, die  unmittelbar funktionsfähig scheint, siehe dazu {{Link2Forum|Topic=86592|LinkText=diesen Forenthread}}. &lt;br /&gt;
&lt;br /&gt;
[[Datei:Esp-pin Konfiguration HMUART.png|200px|mini|esp-link Pin-Konfiguration beim swapped Server]]&lt;br /&gt;
Bei der seriellen Schnittstelle (da die ESP auf 3,3V laufen, sind keine Spannungsteiler erforderlich) findet man die Verschaltung unten. Bei der &#039;&#039;swapped&#039;&#039; Schnittstelle wird auf die digitalen Pins D7/D8 zurückgegriffen (siehe auch unten). Die letztere Verschaltung erfordert eine entsprechende Implementierung der Schnittstelle in der Firmware selbst, die beispielsweise bei ESPEasy unter Umständen nicht gegeben ist oder selbst kompiliert werden muss.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Verschaltung bei einem WeMos D1 mini&#039;&#039;&#039;&lt;br /&gt;
  (UART) &amp;lt;-&amp;gt; (Wemos swapped) &amp;lt;-&amp;gt; (Wemos seriell)&lt;br /&gt;
   3.3V  &amp;lt;-&amp;gt; 3.3V            &amp;lt;-&amp;gt; 3.3V&lt;br /&gt;
   GND   &amp;lt;-&amp;gt; GND             &amp;lt;-&amp;gt; GND&lt;br /&gt;
   Rx    &amp;lt;-&amp;gt; D8              &amp;lt;-&amp;gt; Tx (D10 oder Tx)&lt;br /&gt;
   Tx    &amp;lt;-&amp;gt; D7              &amp;lt;-&amp;gt; Rx (D9 oder Rx)&lt;br /&gt;
   &lt;br /&gt;
Es gibt eine ausführliche Erläuterung für die Software unter [https://forum.fhem.de/index.php?action=dlattach;topic=56606.0;attach=68630], siehe auch [https://www.esp8266.com/viewtopic.php?f=32&amp;amp;t=18669 diese Grafik der Pins des Wemos]&lt;br /&gt;
&lt;br /&gt;
Im Forum gibt es mehr Informationen zu diesen Adaptern, zum Beispiel {{Link2Forum|Topic=62651|LinkText=&amp;quot;(amunra)-Platine für HM-MOD-UART-RPI...&amp;quot;}} oder {{Link2Forum|Topic=79559|LinkText=&amp;quot;3. Sammelbestellung - Homematic WLAN Gateway&amp;quot;}}.&lt;br /&gt;
&lt;br /&gt;
[[Datei:HM-CFG-WLAN-k.jpeg|thumb|left|200px|Anschluß an Wemos]]&lt;br /&gt;
Auf dem linken Foto ist der Anschluss des gesamten Moduls (Rastermaß 2,54mm statt 2mm!) an den Wemos zur Wifi-Einbindung abgebildet.&lt;br /&gt;
&lt;br /&gt;
=== Betrieb mit einem LAN-TTL-Wandler ===&lt;br /&gt;
[[Datei:Hm-uart und usr-tcp232-T2.png|thumb|right|400px|Anschluß an die gängige Variante USR-TCP232-T2]]Auf gängigen Marktplätzen sind für etwas weniger als 10 Euro Module erhältlich, die einen seriellen Anschluss im LAN bereitstellen können. Näher Hinweise sind in den Artikeln [[Serial TTL to Ethernet Module]] sowie [[1W-IF-ETH]] zu finden.&lt;br /&gt;
&lt;br /&gt;
Die Module melden sich per DHCP&amp;lt;ref&amp;gt;jedenfalls neuere firmware-Versionen&amp;lt;/ref&amp;gt; im Netzwerk an, die Konfiguration erfolgt je nach Variante über ein Web-Interface, ein Windows-Tool oder eine Management-Software.&lt;br /&gt;
&lt;br /&gt;
=== Betrieb mit MapleCUx ===&lt;br /&gt;
Auch die seriellen Schnittstellen, die ein MapleCUL oder [[MapleCUN]] bereitstellen, können zum Anschluß des Moduls verwendet werden. Der MapleCUN stellt beide seriellen Schnittstellen je unter einem eigenen Port ins Netz.&lt;br /&gt;
&lt;br /&gt;
== Definition in FHEM ==&lt;br /&gt;
Die Funktion in FHEM hängt ab von der verwendeten Hardware. Die eigentliche Funktion wird mit dem Modul [[HMUARTLGW]] hergestellt. Alle dortigen Hinweise zur Konfiguration sind zu beachten! Man sollte sich auch mit den Grundlagen der [[HomeMatic|Homematic]] Kommunikation vertraut machen.&lt;br /&gt;
&lt;br /&gt;
Je nach physischem Anschluss erfolgt eine Anbindung in FHEM in unterschiedlicher Weise. Folgende Beispiele sind &#039;&#039;&#039;abweichend&#039;&#039;&#039; von der &#039;&#039;&#039;&amp;lt;big&amp;gt;[[HMUARTLGW#Define|Standardkonfiguration]]!&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Wurde ein USB-Adapter auf dem FHEM-Gerät selbst verwendet, definiert man das Gerät in FHEM wie folgt.&lt;br /&gt;
  define USB_HmUART HMUARTLGW /dev/ttyUSBx&lt;br /&gt;
Wurde dagegen das Gerät über WLAN oder LAN durch das UART-Modul angebunden, erfolgt die Einbindung in FHEM durch&lt;br /&gt;
  define WLAN_HmUART HMUARTLGW uart://&amp;lt;IP-Adresse&amp;gt;:&amp;lt;Portnummer&amp;gt;&lt;br /&gt;
Portnummern:&lt;br /&gt;
*ser2net 4000 (bzw. entsprechend gewählter Einstellung)&lt;br /&gt;
*socat 2000 (bzw. entsprechend gewählter Einstellung)&lt;br /&gt;
*esp-link 23 &lt;br /&gt;
*MapleCUN 2324 bzw. 2325 &lt;br /&gt;
*USR-TCP232-T2 entspr. Konfiguration.&lt;br /&gt;
&lt;br /&gt;
=== Logbeispiel ===&lt;br /&gt;
Typischerweise meldet sich das Modul beim Start so:&lt;br /&gt;
   2016.10.06 17:11:16 3: Opening myHmUART device /dev/ttyAMA0&lt;br /&gt;
   2016.10.06 17:11:16 3: Setting myHmUART serial parameters to 115200,8,N,1&lt;br /&gt;
   2016.10.06 17:11:16 3: myHmUART device opened&lt;br /&gt;
   2016.10.06 17:11:17 3: HMUARTLGW myHmUART currently running Co_CPU_BL&lt;br /&gt;
   2016.10.06 17:11:17 3: HMUARTLGW myHmUART currently running Co_CPU_App&lt;br /&gt;
&lt;br /&gt;
=== Verwendung AES in FHEM===&lt;br /&gt;
Das Modul beherrscht AES.&lt;br /&gt;
Für weitere Informationen gibt es einen separaten Wiki Eintrag [[AES Encryption]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Firmware Update des UART-Moduls mit FHEM ===&lt;br /&gt;
Die Module werden mit einer Firmware 1.2.1 ausgeliefert. Dies Firmware ist nicht für einen stabilen Betrieb geeignet, die Firmware 1.4.1 ist die minimal lauffähige Version.&lt;br /&gt;
&lt;br /&gt;
Bitte den Befehl zum download inklusive der Anführungszeichen in die FHEM Kommandozeile eingeben!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Firmware herunterladen&#039;&#039;&#039;&lt;br /&gt;
* Version 1.4.1&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&amp;quot;wget -qO ./FHEM/firmware/coprocessor_update.eq3 https://raw.githubusercontent.com/eq-3/occu/28045df83480122f90ab92f7c6e625f9bf3b61aa/firmware/HM-MOD-UART/coprocessor_update.eq3&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Alternativ die aktuellste (für den Betrieb mit dem Modul HMUARTLGW &#039;&#039;&#039;NICHT&#039;&#039;&#039; empfohlen)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&amp;quot;wget -qO ./FHEM/firmware/coprocessor_update.eq3 https://raw.githubusercontent.com/eq-3/occu/HEAD/firmware/HM-MOD-UART/coprocessor_update.eq3&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
(Firmware neuer als 1.4.1 dient nur bei CCU-Klonen mit Mischbetrieb BidCOs, klassisch HomeMatic und HomeMatic IP, siehe {{Link2Forum|Topic=70752|LinkText=diesen Forenthread}}).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Flashen der neuen Firmware&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Erstmal überzeugen das die Firmware da ist: Z.B. mit dem Befehl in der FHEM Kommandozeile, die Ausgabe erfolgt in der Weboberfläche!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;{qx(ls -lha ./FHEM/firmware)}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wenn alles ok - Befehl zum flashen ausführen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;set myHmUART updateCoPro /opt/fhem/FHEM/firmware/coprocessor_update.eq3&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Firmware Update des UART-Moduls ohne FHEM ===&lt;br /&gt;
Sollte das Update über FHEM nicht funktionieren oder FHEM nicht verfügbar sein, kann die Firmware auch wie folgt eingespielt werden (Quelle: [http://heinz-otto.blogspot.com/2016/07/raspberry-pi-homematic-modul.html Ottos Technik Blog])&lt;br /&gt;
&lt;br /&gt;
  sudo su&lt;br /&gt;
  apt-get update &amp;amp;&amp;amp; apt-get -y install libusb-1.0-0-dev build-essential git&lt;br /&gt;
  systemctl stop fhem&lt;br /&gt;
  git clone git://git.zerfleddert.de/hmcfgusb&lt;br /&gt;
  cd hmcfgusb/&lt;br /&gt;
  make&lt;br /&gt;
  # Firmware runterladen&lt;br /&gt;
  wget https://raw.githubusercontent.com/eq-3/occu/ee68faf77e42ed5e3641790b43a710a3301cea7e/firmware/HM-MOD-UART/coprocessor_update.eq3&lt;br /&gt;
  # eigentliches flashen:&lt;br /&gt;
  ./flash-hmmoduart -U /dev/ttyAMA0 coprocessor_update.eq3&lt;br /&gt;
&lt;br /&gt;
=== Bekannte Probleme ===&lt;br /&gt;
* Sollten beim Flashen der Firmware hartnäckige Probleme auftreten (kein Erfolg aber auch gar keine Fehlermeldungen) ist das Modul vom Strom zu trennen, ein Neustart des Pi reicht nicht!&lt;br /&gt;
* Ein {{Link2Forum|Topic=41203|Message=340320|LinkText=Beitrag}} aus dem genannten Forenthread: &#039;&#039;Das Ding ist anscheinend wirklich einfach das Funkmodul aus der CCU2 (wird zumindest in der eQ-3 SW als CCU2 angesprochen) und spricht ein für FHEM vollkommen neues Protokoll.&#039;&#039;&lt;br /&gt;
* Beim Raspberry 4 gibt es eine Einstellung zur Temperaturkontrolle, die muss deaktiviert werden. Siehe diesen {{Link2Forum|Topic=123223|Message=1178032|LinkText=Beitrag im Forum}}.&lt;br /&gt;
* Bei Verwendung mit einem USR TCP232-T2 Wandler kann es in der Default-Einstellung des Wandlers dazu kommen, dass obsolete Kommunikation gepuffert und nach einem Wiederverbinden unnötig an FHEM gesendet wird (s. [https://forum.fhem.de/index.php/topic,123948.msg1185048.html#msg1185048 Foren-Thread]) Im FHEM-Log gibt es in diesem Fall die Meldung &amp;quot;HMUART failed to enter App!&amp;quot;   Abhilfe schafft das Aktivieren der Option &amp;quot;Buffer Data before connected&amp;quot; unter &amp;quot;Expand Function&amp;quot; im WebUI des TCP-232&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=41203|LinkText=Forenthread}} mit Nachfrage zur Unterstützung dieses Geräts in FHEM&lt;br /&gt;
* {{Link2Forum|Topic=54511|LinkText=Modul für HomeMatic UART-Modul (RPi) und HomeMatic LAN Gateway}}&lt;br /&gt;
* [http://www.elv.de/homematic-funkmodul-fuer-raspberry-pi-bausatz.html Produktseite] bei ELV&lt;br /&gt;
* {{DocLink|elv|/Assets/Produkte/10/1040/104029/Downloads/104029_lan_gateway_um.pdf Bedienungsanleitung}}&lt;br /&gt;
* {{Link2Forum|Topic=56606|LinkText=Forenthread}} Hardware Thread mit vielen Varianten der Anbindung. In Post #26 gibt es die Detailbeschreibung in der angehängten PDF.&lt;br /&gt;
:&amp;lt;hr /&amp;gt;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;br /&gt;
[[Kategorie:Raspberry Pi]]&lt;br /&gt;
[[Kategorie:868MHz]]&lt;/div&gt;</summary>
		<author><name>Benni</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FRITZBOX&amp;diff=27944</id>
		<title>FRITZBOX</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FRITZBOX&amp;diff=27944"/>
		<updated>2018-09-29T04:42:16Z</updated>

		<summary type="html">&lt;p&gt;Benni: https://forum.fhem.de/index.php/topic,91548.msg840625.html#msg840625&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung einer Fritz!Box über FHEM &lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=FRITZ!Box&lt;br /&gt;
|ModTechName=72_FRITZBOX.pm&lt;br /&gt;
|ModOwner=tupol/Topos ({{Link2FU|5432|Forum}} / [[Benutzer Diskussion:Topos|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[FRITZBOX]] ermöglicht die Steuerung einer [[AVM Fritz!Box]] und von AVM FRITZ!WLAN Repeatern durch FHEM . An Fritzboxen können sowohl Geräte abgefragt werden, auf denen FHEM selbst läuft (lokaler Modus), als auch entfernte (externe) Geräte.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
=== Remote-Zugang ===&lt;br /&gt;
Für den Remote-Zugang müssen die Module JSON:XS, LWP und SOAP::Lite installiert sein; auf einem [[Raspberry Pi]] oder unter Ubuntu z.&amp;amp;nbsp;B. mit dem Befehl&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teilweise ist derzeit zusätzlich die Installation der telnet Libraries erforderlich, auch wenn der Telnet-Zugang nicht genutzt werden soll. Siehe dazu den nachfolgenden Abschnitt.&lt;br /&gt;
&lt;br /&gt;
=== Telnet ===&lt;br /&gt;
Das Modul basierte ursprünglich auf dem Zugriff auf die Fritzbox per Telnet. Ab FRITZ!OS 6.2x baut AVM den abgekündigten Telnet-Zugang sowie die webcm-Schnittstelle sukzessive zurück bzw. hat dies, je nach Firmware, schon ganz abgestellt (siehe {{Link2Forum|Topic=38586|LinkText=dieses Forenthema}}). Der zukunftssichere Zugriff auf die Fritzbox sollte also per TR-064 erfolgen. Der Vollständigkeit halber und für ältere Firmwareversionen: &lt;br /&gt;
&lt;br /&gt;
# Wer den Zugang per Telnet (noch) nutzen (kann und) möchte, muss dies zuerst freischalten. Üblicherweise durch Eingabe von #96*7* an einem direkt an der entsprechenden FritzBox angeschlosssenen Telefon&lt;br /&gt;
# Auf dem System, auf dem FHEM  läuft ([[Systemübersicht#Server|Server]]) muss Telnet installiert sein; auf einem [[Raspberry Pi]] und unter Ubuntu z.&amp;amp;nbsp;B. mit dem Befehl&lt;br /&gt;
::&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Erste Schritte ===&lt;br /&gt;
Zur Erstinstallation reicht ein einfaches &amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;, dieses Modul funktioniert lokal (FHEM auf Fritzbox) sowie per Fernzugriff (FHEM auf einem anderen Server im Netz, siehe nächsten Schritt).&lt;br /&gt;
&lt;br /&gt;
==== TR-064: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====&lt;br /&gt;
Für den Fernzugriff über TR-064 auf eine oder mehrere Fritzboxen und/oder einen FRITZ!WLAN Repeater sind die folgenden Schritte nötig (für jedes Gerät):&lt;br /&gt;
&lt;br /&gt;
Fritzbox definieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn die Fritzbox nicht unter &amp;lt;nowiki&amp;gt;http://fritz.box&amp;lt;/nowiki&amp;gt; erreichbar ist, IP im define setzen:&lt;br /&gt;
:&amp;lt;code&amp;gt;define FritzBox FRITZBOX 192.168.168.168&amp;lt;/code&amp;gt;&lt;br /&gt;
192.168.168.168 dabei natürlich durch die passende IP ersetzen... Alternativ kann statt der IP auch der Hostname eingegeben werden.&lt;br /&gt;
&lt;br /&gt;
Wenn (&#039;&#039;&#039;und nur wenn&#039;&#039;&#039;) das Login auf der Benutzeroberfläche der FritzBox mit User und Passwort (und nicht nur per Passwort) geschieht, den User konfigurieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox boxUser &#039;&#039;Benutzername&#039;&#039; &amp;lt;/code&amp;gt;&lt;br /&gt;
In der Fritzbox muss dann auch &amp;quot;Anmeldung mit FRITZ!Box-Benutzernamen und Kennwort&amp;quot; ausgewählt sein.&lt;br /&gt;
&lt;br /&gt;
Passwort konfigurieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;set FritzBox password &#039;&#039;Passwort&#039;&#039;&amp;lt;/code&amp;gt;  - legt das zugehörige Passwort fest (nur einmal --&amp;gt; gehört nicht in die cfg-Datei) &lt;br /&gt;
&lt;br /&gt;
Manuelle TR-064 Kommandos erlauben (Das Auslesen der Readings per TR-064 funktioniert auch ohne dieses Attribut.):&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox allowTR064Command 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Telnet: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====&lt;br /&gt;
[[Datei:Screenshot_FritzBox_TelnetUser.png|mini|300px|rechts|Anlegen des Attributs telnetUser]]&lt;br /&gt;
Bei Fernzugriff über Telnet sind weitere Schritte nötig:&lt;br /&gt;
# Telnet auf der Fritzbox freischalten (Tastenkombination #96*7* am angeschlossenen Telefon (auch FritzFon)&lt;br /&gt;
# TelnetUser definieren (wie im Screenshot gezeigt)&lt;br /&gt;
# Passwort zum Benutzer auf der Fritzbox definieren&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_FritzBox_Passwort.png|mini|300px|rechts|Passwort definieren]]&lt;br /&gt;
&lt;br /&gt;
(bitte die Buttons {{Taste|set}} und {{Taste|attr}} bei der Definition der jeweiligen Einträge nicht vergessen)&lt;br /&gt;
&lt;br /&gt;
Wer stattdessen lieber das [[Konfiguration|Befehl-Eingabefeld]] verwendet:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox telnetUser &#039;&#039;Benutzername&#039;&#039; &amp;lt;/code&amp;gt; - legt den Benutzer fest&lt;br /&gt;
:&amp;lt;code&amp;gt;set FritzBox password &#039;&#039;Passwort&#039;&#039; &amp;lt;/code&amp;gt; - legt das zugehörige Passwort fest&lt;br /&gt;
&lt;br /&gt;
Wer keinen User konfiguriert hat, kann das Feld &amp;quot;telnetUser&amp;quot; leer lassen.&lt;br /&gt;
&lt;br /&gt;
Wer sicher gehen möchte, dass auch tatsächlich Telnet und nicht andere Zugriffe benutzt werden, sollte außerdem noch setzen:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox forceTelnetConnection 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== mögliche Fehlermeldungen ===&lt;br /&gt;
Sollte schon bei &amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt; die Fehlermeldung kommen, dass dieses Modul nicht existiert, dann bitte prüfen, ob FHEM  auf dem aktuellen Stand ist und ggf. [[Update|aktualisieren]].&lt;br /&gt;
&lt;br /&gt;
Kommt jetzt bei der erneuten Definition die Fehlermeldung &amp;lt;code&amp;gt;Error: Perl modul Net::Telnet is missing on this system&amp;lt;/code&amp;gt; bitte wie oben schon erwähnt den Befehl &lt;br /&gt;
:&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt; &lt;br /&gt;
direkt per Telnet/SSH auf dem FHEM-Server ausführen und neu starten.&lt;br /&gt;
Sollte alles geklappt haben, seht ihr nun eure Fritzbox und könnt diverse Einstellungen manuell vornehmen und/oder automatisch vornehmen lassen.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
Siehe  {{Link2CmdRef|Lang=de|Anker=FRITZBOXdefine}}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
Siehe {{Link2CmdRef|Lang=de|Anker=FRITZBOXattr}}&lt;br /&gt;
&lt;br /&gt;
=== TR-064 ===&lt;br /&gt;
Die offizielle Programmier-Schnittstelle der Fritz!Box läuft über das Protokoll TR-064.&lt;br /&gt;
&lt;br /&gt;
mit dem Attribute&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; allowTR064Command 1&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
kann man den Befehl&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064Command &amp;lt;service&amp;gt; &amp;lt;control&amp;gt; &amp;lt;action&amp;gt; [[parameterName1 parameterValue1] ...]&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
freischalten und damit auf diese Schnittstelle zugreifen.&lt;br /&gt;
&lt;br /&gt;
AVM hat die Schnittstellenbeschreibung unter [http://avm.de/service/schnittstellen/] veröffentlicht. Diese wird jedoch nur sehr sporadisch gepflegt.&amp;lt;br&amp;gt;&lt;br /&gt;
Ein besserer Einstiegspunkt befindet sich auf der Box unter http://fritz.box:49000/tr64desc.xml.&amp;lt;br&amp;gt;&lt;br /&gt;
Die möglichen TR-064-Aktionen kann man auch über den Befehl &amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064ServiceList&amp;lt;/code&amp;gt; auslesen.&lt;br /&gt;
&lt;br /&gt;
Folgende Service und Controls existieren (für den get-Befehl &#039;&#039;tr064Command&#039;&#039; werden nur die fett formatierten Wörter benötigt)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!serviceType!!controlURL!!XML!!Dokument bei AVM&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;DeviceInfo:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;deviceinfo&#039;&#039;&#039;||[http://fritz.box:49000/deviceinfoSCPD.xml deviceinfoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceinfoSCPD.pdf deviceinfoSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;DeviceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;deviceconfig&#039;&#039;&#039;||[http://fritz.box:49000/deviceconfigSCPD.xml deviceconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceconfigSCPD.pdf deviceconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Layer3Forwarding:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;layer3forwarding&#039;&#039;&#039;||[http://fritz.box:49000//layer3forwardingSCPD.xml layer3forwardingSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/layer3forwardingSCPD.pdf layer3forwardingSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANConfigSecurity:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanconfigsecurity&#039;&#039;&#039;||[http://fritz.box:49000//lanconfigsecuritySCPD.xml lanconfigsecuritySCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanconfigsecuritySCPD.pdf lanconfigsecuritySCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ManagementServer:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;mgmsrv&#039;&#039;&#039;||[http://fritz.box:49000//mgmsrvSCPD.xml mgmsrvSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/mgmsrvSCPD.pdf mgmsrvSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Time:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;time&#039;&#039;&#039;||[http://fritz.box:49000//timeSCPD.xml timeSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/timeSCPD.pdf timeSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;UserInterface:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;userif&#039;&#039;&#039;||[http://fritz.box:49000//userifSCPD.xml userifSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/userifSCPD.pdf userifSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_VoIP:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_voip&#039;&#039;&#039;||[http://fritz.box:49000//x_voipSCPD.xml x_voipSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voipSCPD.pdf x_voipSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_Storage:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_storage&#039;&#039;&#039;||[http://fritz.box:49000//x_storageSCPD.xml x_storageSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_storageSCPD.pdf x_storageSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_OnTel:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_contact&#039;&#039;&#039;||[http://fritz.box:49000//x_contactSCPD.xml x_contactSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_contactSCPD.pdf x_contactSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_WebDAVClient:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_webdav&#039;&#039;&#039;||[http://fritz.box:49000//x_webdavSCPD.xml x_webdavSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_webdavSCPD.pdf x_webdavSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_UPnP:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_upnp&#039;&#039;&#039;||[http://fritz.box:49000//x_upnpSCPD.xml x_upnpSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_upnp.pdf x_upnp.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_RemoteAccess:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_remote&#039;&#039;&#039;||[http://fritz.box:49000/x_remoteSCPD.xml x_remoteSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_remoteSCPD.pdf x_remoteSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_MyFritz:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_myfritz&#039;&#039;&#039;||[http://fritz.box:49000/x_myfritzSCPD.xml x_myfritzSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_myfritzSCPD.pdf x_myfritzSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_TAM:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_tam&#039;&#039;&#039;||[http://fritz.box:49000/x_tamSCPD.xml x_tamSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_tam.pdf x_tam.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_AppSetup:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_appsetup&#039;&#039;&#039;||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_appsetupSCPD.pdf x_appsetupSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_Homeauto:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_homeauto&#039;&#039;&#039;||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_homeautoSCPD.pdf x_homeautoSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:2&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig2&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:3&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig3&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Hosts:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;hosts&#039;&#039;&#039;||[http://fritz.box:49000/hostsSCPD.xml hostsSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/hostsSCPD.pdf hostsSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANEthernetInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanethernetifcfg&#039;&#039;&#039;||[http://fritz.box:49000/lanifconfigSCPD.xml lanifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanifconfigSCPD.pdf lanifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANHostConfigManagement:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanhostconfigmgm&#039;&#039;&#039;||[http://fritz.box:49000/lanhostconfigmgmSCPD.xml lanhostconfigmgmSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanhostconfigmgmSCPD.pdf lanhostconfigmgmSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANCommonInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wancommonifconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wancommonifconfigSCPD.xml wancommonifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wancommonifconfigSCPD.pdf wancommonifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANDSLInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wandslifconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wandslifconfigSCPD.xml wandslifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandslifconfigSCPD.pdf wandslifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANDSLLinkConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wandsllinkconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wandsllinkconfigSCPD.xml wandsllinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandsllinkconfigSCPD.pdf wandsllinkconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANEthernetLinkConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanethlinkconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wanethlinkconfigSCPD.xml wanethlinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanethlinkconfigSCPD.pdf wanethlinkconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANPPPConnection:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanpppconn1&#039;&#039;&#039;||[http://fritz.box:49000/wanpppconnSCPD.xml wanpppconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanpppconnSCPD.pdf wanpppconnSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANIPConnection:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanipconnection1&#039;&#039;&#039;||[http://fritz.box:49000/wanipconnSCPD.xml wanipconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanipconnSCPD.pdf wanipconnSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Status-Symbol ===&lt;br /&gt;
&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; devStateIcon .*on.*off:WLAN_on_gWLAN_off .*on.*on.*:WLAN_on_gWLAN_on WLAN..off.*:WLAN_off&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis www/images/default müssen die passenden Dateien &amp;quot;WLAN_on_gWLAN_off.png&amp;quot;, &amp;quot;WLAN_on_gWLAN_on.png&amp;quot; und &amp;quot;WLAN_off.png&amp;quot; liegen. Wenn die PNGs fehlen, können sie {{Link2Forum|Topic=29725|Message=318113|LinkText=hier}} heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
[[Datei:Screenshot_FritzBox1.png|mini|300px|rechts|FRITZBOX Gerät auf der FHEM  Oberfläche]]&lt;br /&gt;
Sollte alles geklappt haben, seht ihr nun unter &amp;quot;Unsortiert&amp;quot; den im nebenstehenden Screenshot gezeigten Eintrag für das &amp;quot;Gerät&amp;quot; (hier mit dem Icon &amp;quot;it_router&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== TR-064 Beispiele ===&lt;br /&gt;
*Box Reboot: &amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064Command DeviceConfig:1 deviceconfig Reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
*Internet Reconnect: &amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064Command WANIPConnection:1 wanipconnection1 ForceTermination&amp;lt;/code&amp;gt;&lt;br /&gt;
*Daten eines Smart-Home-Gerätes auslesen: &amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064Command X_AVM-DE_Homeauto:1 x_homeauto GetGenericDeviceInfos NewIndex 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Klingel- und Sprachausgabe per TR-064 ===&lt;br /&gt;
Das geht derzeit nicht, da entsprechende Kommandos per TR-064 nicht verfügbar sind. Da Telnet sukzessive abgestellt wird, sollten sich Interessenten per Feature-Request an AVM wenden, wie {{Link2Forum|Topic=38586|LinkText=hier}} beschrieben.&lt;br /&gt;
&lt;br /&gt;
Eine Alternative um Telefone klingeln zu lassen, ist die Nutzung des [[SIP-Client]]s.&lt;br /&gt;
&lt;br /&gt;
=== Anwesenheitserkennung per regelmäßiger Abfrage über das PRESENCE Modul ===&lt;br /&gt;
Fritzboxen und die FRITZ!WLAN Repeater speichern den Status angemeldeter Geräte. Dieser Status lässt sich mittels des FRITZBOX Moduls über Readings abfragen, die das Format mac_AA_AA_AA_AA_AA_AA haben und die MAC-Adressen der jeweils angemeldeten Geräte (AA:AA:AA:AA:AA:AA) enthalten. Das Reading existiert, wenn das Gerät angemeldet ist. Wenn das Gerät abgemeldet ist, existiert es nicht mehr. Es gibt auch noch den Zwischenstatus &amp;quot;inactive&amp;quot;, der anscheinend gesetzt wird, bevor das Reading gelöscht wird.&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe des [[PRESENCE]] Moduls (vgl. [[Anwesenheitserkennung]]) kann man auf diese Weise den Anwesenheitsstatus abfragen. Anregungen dazu gibt es im zugehörigen {{Link2Forum|Topic=39433|LinkText=Forenthread}} zur Anwesenheitserkennung und in [http://heinz-otto.blogspot.de/2015/07/die-zeiten-andern-sich.html diesem  Blogpost]. Auf dieser Basis könnte eine einfache Implementierung zum Beispiel so aussehen:&lt;br /&gt;
&lt;br /&gt;
Funktion in [[99_myUtils anlegen|99_myUtils]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;perl&#039;&amp;gt;sub checkFritzMACpresent($$) {&lt;br /&gt;
  # Benötigt: Name der zu testenden Fritzbox ($Device),&lt;br /&gt;
  #           zu suchende MAC ($MAC), &lt;br /&gt;
  # Rückgabe: 1 = Gerät gefunden&lt;br /&gt;
  #           0 = Gerät nicht gefunden&lt;br /&gt;
  my ($Device, $MAC) = @_;&lt;br /&gt;
  my $Status = 0;&lt;br /&gt;
  $MAC =~ tr/:/_/;&lt;br /&gt;
  $MAC = &amp;quot;mac_&amp;quot;.uc($MAC);&lt;br /&gt;
  my $StatusFritz = ReadingsVal($Device, $MAC, &amp;quot;weg&amp;quot;);&lt;br /&gt;
  if ($StatusFritz eq &amp;quot;weg&amp;quot;) {&lt;br /&gt;
    Log 1, (&amp;quot;checkFritzMACpresent ($Device): $MAC nicht gefunden, abwesend.&amp;quot;);&lt;br /&gt;
    $Status = 0;&lt;br /&gt;
  } elsif ($StatusFritz eq &amp;quot;inactive&amp;quot;) {&lt;br /&gt;
    Log 1, (&amp;quot;checkFritzMACpresent ($Device): $MAC ist &amp;gt;inactive&amp;lt;, also abwesend.&amp;quot;);&lt;br /&gt;
    $Status = 0;&lt;br /&gt;
  } else {&lt;br /&gt;
    # Reading existiert, Rückgabewert ist nicht &amp;quot;inactive&amp;quot;, also ist das Gerät per WLAN angemeldet.&lt;br /&gt;
    Log 4, (&amp;quot;checkFritzMACpresent ($Device): $MAC gefunden, Gerät heißt &amp;gt;$StatusFritz&amp;lt;.&amp;quot;);&lt;br /&gt;
    $Status = 1;&lt;br /&gt;
  }&lt;br /&gt;
  return $Status&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nutzung dieser Funktion mit dem PRESENCE Modul definieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;Name&amp;gt; PRESENCE function {checkFritzMACpresent(&amp;quot;Fritzbox&amp;quot;,&amp;quot;AA:BB:CC:DD:EE:FF&amp;quot;)}  60 60&amp;lt;/code&amp;gt;&lt;br /&gt;
wobei&lt;br /&gt;
*&amp;lt;Name&amp;gt; ein beliebig zu wählender Name für die PRESENCE-Funktion ist,&lt;br /&gt;
*Fritzbox der Name ist, mit dem ihr die abzufragende Fritzbox als FRITZBOX definiert habt,&lt;br /&gt;
*AA:BB:CC:DD:EE:FF die MAC-Adresse des gesuchten Geräts ist.&lt;br /&gt;
* &amp;quot;60 60&amp;quot; sagt, dass der Anwesenheitsstatus im 60-Sekunden-Takt abgefragt wird. Das macht natürlich nur Sinn, wenn ihr mit &amp;lt;code&amp;gt;attr Fritzbox INTERVAL 60&amp;lt;/code&amp;gt; den Abfrageinterval bei der Fritzbox auch entsprechend hochgesetzt habt. Der Standard ist 300.&lt;br /&gt;
* &amp;quot;Log 1&amp;quot; führt immer zum Loggen. Das ist zum Einrichten praktisch, ohne dass man gleich für das ganze Modul oder ganz FHEM &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; verbose 5&amp;lt;/code&amp;gt; setzen muss. Wenn es läuft, können die &amp;quot;Log 1&amp;quot;-Zeilen gelöscht, auskommentiert (# an den Zeilenanfang) oder in &amp;quot;Log 5&amp;quot; geändert werden.&lt;br /&gt;
&lt;br /&gt;
=== Anwesenheitserkennung über mehrere Fritzboxen oder AVM Repeater und Fritzbox ===&lt;br /&gt;
Existiert ein AVM Repeater im Netzwerk, kann der als eigenständiges Gerät mit FRITZBOX definiert werden. WLAN Geräte an der Fritzbox werden in der Instanz der Fritzbox gelistet und WLAN Geräte am Repeater in der Repeater Instanz. Um trotzdem die Anwesenheit im Netzwerk einfach zu erkennen, muss die Subroutine in 99_myUtils.pm abgewandelt werden.&lt;br /&gt;
&lt;br /&gt;
Existiert eine zweite Fritzbox im Accesspointmodus, werden die WLAN Geräte im Netzwerk alle in der Hauptfritzbox an einem LAN Anschluss gelistet. D.h. man sieht an der Hauptfritzbox nicht, dass sie im WLAN sind. Eine zweite Instanz mit dem FRITZBOX Modul muss wegen der Anwesenheitserkennung nicht gemacht werden. Die folgende Routine kann aber universell eingesetzt werden, unabhängig von der Anzahl der FRITZBOX Instanzen. Wer mitloggen will, kann das analog zur obigen Routine einbauen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;perl&#039;&amp;gt;sub checkAllFritzMACpresent($) {&lt;br /&gt;
  # Benötigt: nur die zu suchende MAC ($MAC), &lt;br /&gt;
  # Es werden alle Instanzen vom Type FRITZBOX abgefragt&lt;br /&gt;
  #&lt;br /&gt;
  # Rückgabe: 1 = Gerät gefunden&lt;br /&gt;
  #           0 = Gerät nicht gefunden&lt;br /&gt;
  my ($MAC) = @_;&lt;br /&gt;
  # Wird in keiner Instanz die MAC Adresse gefunden bleibt der Status 0&lt;br /&gt;
  my $Status = 0;&lt;br /&gt;
  $MAC =~ tr/:/_/;&lt;br /&gt;
  $MAC = &amp;quot;mac_&amp;quot;.uc($MAC);&lt;br /&gt;
  my @FBS = devspec2array(&amp;quot;TYPE=FRITZBOX&amp;quot;);&lt;br /&gt;
    foreach( @FBS ) {&lt;br /&gt;
		my $StatusFritz = ReadingsVal($_, $MAC, &amp;quot;weg&amp;quot;);&lt;br /&gt;
		if ($StatusFritz eq &amp;quot;weg&amp;quot;) {&lt;br /&gt;
		} elsif ($StatusFritz eq &amp;quot;inactive&amp;quot;) {&lt;br /&gt;
		} else {&lt;br /&gt;
		  # Reading existiert, Rückgabewert ist nicht &amp;quot;inactive&amp;quot;, also ist das Gerät am Netzwerk angemeldet.&lt;br /&gt;
		  $Status = 1;&lt;br /&gt;
		}&lt;br /&gt;
    }&lt;br /&gt;
  return $Status&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da hiermit nach allen Instanzen mit dem TYPE=FRITZBOX durchsucht wird, braucht der Name der Fritzbox nicht angegeben werden.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;Name&amp;gt; PRESENCE function {checkAllFritzMACpresent(&amp;quot;AA:BB:CC:DD:EE:FF&amp;quot;)}  60 60&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Abfrage auf einen bestimmten Status kann einfach erweitert werden, ist aber immer vom Entwicklunsgstand der Fritzbox Firmware und des FRITZBOX Moduls abhängig. Eventuell erreicht man bessere Reaktionszeiten auf Abwesenheit  durch diesen Zusatz:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;perl&#039;&amp;gt;my $StatusFritz = ReadingsVal($_, $MAC, &amp;quot;weg&amp;quot;);&lt;br /&gt;
		if ($StatusFritz eq &amp;quot;weg&amp;quot;) {&lt;br /&gt;
		} elsif ($StatusFritz eq &amp;quot;inactive&amp;quot;) {&lt;br /&gt;
		} elsif ($StatusFritz =~ /(.*)s, 0/) { &lt;br /&gt;
                # Dieser Zweig testet auf &amp;quot;&amp;lt;geraetename&amp;gt; (WLAN, 0 / 0 Mbit/s, 0)&amp;quot;&lt;br /&gt;
		} else {&lt;br /&gt;
		  $Status = 1;&lt;br /&gt;
		}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Hinweise zu komplexeren Abfragen mehrere Boxen auf einmal etc. findet ihr auch im diesem {{Link2Forum|Topic=39433|LinkText=Forenthread}}.&lt;br /&gt;
&lt;br /&gt;
=== Anwesenheitserkennung per Notify ===&lt;br /&gt;
Der von Fritzboxen und Fritz!WLAN Repeatern gespeicherte Status zum Status angemeldeter Geräte lässt sich (statt per PRESENCE, s.o.) auch per [[notify]] anfragen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;define &amp;lt;Name&amp;gt; notify Fritzbox:mac_AA_BB_CC_DD_EE_FF:.* {&lt;br /&gt;
  if (ReadingsVal(&amp;quot;Fritzbox&amp;quot;, &amp;quot;mac_AA_BB_CC_DD_EE_FF&amp;quot;, &amp;quot;inactive&amp;quot;) eq &amp;quot;inactive&amp;quot;) &lt;br /&gt;
  {&lt;br /&gt;
    fhem(&amp;quot;set anwesend_smartphone absent&amp;quot;);&lt;br /&gt;
  } &lt;br /&gt;
  else &lt;br /&gt;
  {&lt;br /&gt;
    fhem(&amp;quot;set anwesend_smartphone present&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweise:&lt;br /&gt;
* &amp;lt;code&amp;gt;fhem(&amp;quot;set anwesend_smartphone absent&amp;quot;);&amp;lt;/code&amp;gt; ist nur ein Beispiel, das einen Dummy auf den Status &amp;quot;absent&amp;quot; bzw. &amp;quot;present&amp;quot; setzt. Man kann hier natürlich auch gleich entsprechende Aktionen durchführen. Wer das Beispiel übernehmen möchte, sollte den Dummy vorher definieren (&amp;lt;code&amp;gt;define anwesend_smartphone dummy&amp;lt;/code&amp;gt;).&lt;br /&gt;
* mac_AA_BB_CC_DD_EE_FF ist die MAC-Adresse des gesuchten Geräts.&lt;br /&gt;
* &amp;quot;Fritzbox&amp;quot; ist der Name, unter dem die Fritzbox als FRITZBOX-Modul definiert wurde.&lt;br /&gt;
* Das Notify funktioniert, weil Geräte, wenn sie sich abgemeldet haben, erst den Status &amp;quot;inactive&amp;quot; erhalten. Ist das Gerät ganz abgemeldet, verschwindet das mac_.*-Reading. Dabei löst das Notify nicht mehr aus. Da das mac-.*-Reading aber vorher auf &amp;quot;inactive&amp;quot; stand, wurde die Abwesend-Aktion schon ausgeführt.&lt;br /&gt;
* Damit der Notify nicht andauernd losgeht, sollte man mittels &amp;lt;code&amp;gt;attr Fritzbox [[event-on-change-reading]] mac_AA_BB_CC_DD_EE_FF&amp;lt;/code&amp;gt; Events nur auslösen, wenn sich der Status des Gerätes ändert. Will man mehrere Geräte abfragen, sollte man &amp;lt;code&amp;gt;attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF,mac_GG_HH_II_JJ_KK_LL&amp;lt;/code&amp;gt; setzen, damit bei der Änderung jedes Readings ein Event ausgelöst wird.&lt;br /&gt;
&lt;br /&gt;
=== Vergleich Anwesenheitserkennung PRESENCE/Notify ===&lt;br /&gt;
Die Anwesenheitserkennung per regelmäßiger PRESENCE-Abfrage hat den Vorteil, dass sie im Turnus der regelmäßigen Abfragen immer einen aktuellen Status produziert. Sie hat dafür den Nachteil, dass die PRESENCE-Funktionen regelmäßig abgearbeitet werden müssen, auch wenn sich gar nichts ändert. Außerdem aktualisiert sich der Status nicht sofort, sondern erst bei der nächsten regelmäßigen Abfrage. Durch häufiges Abfragen kann dieser Nachteil verringert werden (bei entsprechend höherer Systemlast).&lt;br /&gt;
&lt;br /&gt;
Die Anwesenheitserkennung per Notify hat den Vorteil, dass ein sich ändernder Status sofort abgebildet wird. Ändert sich kein Status, werden keine Routinen ausgeführt, was die Systemlast gering hält. Der Nachteil ist, dass - z.B. nach einem Systemstart - die entsprechende Aktion erst bei einer Änderung des Status ausgeführt wird. D.h. ist das zu testende Gerät anwesend, wird dann FHEM beendet, das Gerät entfernt und FHEM wieder gestartet, ist der Status in FHEM immer noch &amp;quot;anwesend&amp;quot;. Da das Reading für das Gerät nicht existiert, wird darauf auch erst wieder ein Notify ausgeführt, wenn sich der Status des Geräts wieder ändert, d.h. es wieder ankommt. Bis dahin ist der Status im System falsch. &lt;br /&gt;
Der Nachteil des Notify kann verringert werden, wenn man statt &amp;lt;code&amp;gt;attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF&amp;lt;/code&amp;gt; ein &amp;lt;code&amp;gt;attr Fritzbox [[event-on-update-reading]] mac_AA_BB_CC_DD_EE_FF&amp;lt;/code&amp;gt; setzt. Das erhöht allerdings die Systemlast und funktioniert auch nur für den Status &amp;quot;anwesend&amp;quot;. Bei &amp;quot;abwesend&amp;quot; ist kein Reading vorhanden, so dass auch event-on-update-reading nicht ausgeführt wird.&lt;br /&gt;
Eine weitere Möglichkeit, den Nachteil der Notify-Methode auszugleichen, ist, die Statusabfrage beim Systemstart einmal manuell auszuführen, durch ein notify auf &amp;quot;GLOBAL:initialized&amp;quot;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
global:INITIALIZED {&lt;br /&gt;
  Reset_Variables;&lt;br /&gt;
  if (ReadingsVal(&amp;quot;Fritzbox&amp;quot;, &amp;quot;mac_AA_BB_CC_DD_EE_FF&amp;quot;, &amp;quot;inactive&amp;quot;) eq &amp;quot;inactive&amp;quot;) {&lt;br /&gt;
    fhem(&amp;quot;set anwesend_smartphone absent&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    fhem(&amp;quot;set anwesend_smartphone present&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das hilft allerdings nur beim Systemstart. Nicht, wenn FHEM aufgrund irgendwelcher Hänger eine Aktualisierung des Status verpasst hat.&lt;br /&gt;
&lt;br /&gt;
=== userReadings per &#039;&#039;get tr064Command&#039;&#039; oder &#039;&#039;get luaQuery&#039;&#039; ===&lt;br /&gt;
Um dem Gerätewert &amp;lt;userReadingName&amp;gt; den Wert von &amp;lt;VariabelName&amp;gt; aus der Rückgabe des get-Befehls &#039;&#039;tr064Command&#039;&#039; oder &#039;&#039;luaQuery&#039;&#039; zuzuordnen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr &amp;lt;device&amp;gt; userReadings &amp;lt;userReadingName&amp;gt; {my $resp=fhem(&amp;quot;get &amp;lt;device&amp;gt; tr064Command &amp;lt;service&amp;gt; &amp;lt;control&amp;gt; &amp;lt;action&amp;gt; [[&amp;lt;argName1&amp;gt; &amp;lt;argValue1&amp;gt;] ...]&amp;quot;,1);;$resp =~/\&#039;&amp;lt;VariabelName&amp;gt;\&#039; =&amp;gt; &#039;(.*)&#039;/;;return $1;;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Beispielsweise&lt;br /&gt;
&amp;lt;pre&amp;gt;attr Fritzbox userReadings urMobilteil_1 {my $resp=fhem(&amp;quot;get Fritzbox tr064Command X_AVM-DE_OnTel:1 x_contact GetDECTHandsetInfo NewDectID 1&amp;quot;,1);;$resp =~/&#039;NewHandsetName&#039; =&amp;gt; &#039;(.*)&#039;/;;return $1;;},&lt;br /&gt;
        urDownstreamDSLRate {my $resp=fhem(&amp;quot;get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo&amp;quot;,1);;$resp =~/&#039;NewDownstreamCurrRate&#039; =&amp;gt; &#039;(.*)&#039;/;;return $1;;},&lt;br /&gt;
        urUpstreamDSLRate {my $resp=fhem(&amp;quot;get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo&amp;quot;,1);;$resp =~/&#039;NewUpstreamCurrRate&#039; =&amp;gt; &#039;(.*)&#039;/;;return $1;;}&amp;lt;/pre&amp;gt;&lt;br /&gt;
oder bei einzelnen Werte über &#039;&#039;get luaQuery&#039;&#039;&amp;lt;pre&amp;gt;attr Fritzbox userReadings sip1_connect {my $resp=fhem(&amp;quot;get Fritzbox luaQuery sip:settings/sip1/connect&amp;quot;,1);;$resp =~/([0-9])$/;;return $1;;}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Klingelton-Einstellung und Abspielen von Sprachnachrichten bei Fritz!OS-Versionen &amp;gt;6.24 ===&lt;br /&gt;
Wenn die Fritzbox weder die Telnet- noch die webcmd-Schnittstelle hat, kann der Klingelton der Fritz!Fons nicht mehr verstellt und auch keine Sprachnachricht über ein Fritz!Fon ausgegeben werden.&lt;br /&gt;
&lt;br /&gt;
Es gibt eine Behelfslösung über das Attribut &#039;&#039;useGuiHack&#039;&#039;. Dadurch wird eine Eingabe in die WebGUI der Fritzbox simuliert. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ACHTUNG&#039;&#039;&#039;: Vor allem nach einem Update der FritzBox kann es durch dieses Attribut zu ungewolltem Verstellen von Werten in der Fritzbox kommen.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung der ring-Parameter &amp;quot;play:&amp;quot; und &amp;quot;say:&amp;quot; wird die abzuspielende URL in die M3U-Datei, die unter dem Internal &#039;&#039;M3U_LOCAL&#039;&#039; steht, eingetragen.&amp;lt;br&amp;gt; &lt;br /&gt;
Standardmäßig wird versucht, diese Datei im image-Verzeichnis von FHEM abzulegen. Diese kann dann vom Fritz!Fon über [[FHEMWEB]] abgespielt werden (IP-Freigaben beachten). Direkt nach dem ersten Anlegen der m3u-Datei kennt [[FHEMWEB]] diese noch nicht, daher bitte entweder &#039;&#039;set &amp;lt;webdevice&amp;gt; rereadicons&#039;&#039; ausführen oder FHEM neu starten.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aufgrund der Beschränkungen von [[FHEMWEB]] oder auch bei Authentifizierungsanforderungen ist es empfehlenswert, die Datei über das Attribute &#039;&#039;m3uFileLocal&#039;&#039; selber vorzugeben. Am besten auf einem Webserver, der auf dem FHEM-Server läuft und dessen Seiten-Verzeichnis durch FHEM beschreibbar ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;attr Fritzbox m3uFileLocal /var/www/mp3/Fritzbox.m3u&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In dem Radioeintrag &#039;&#039;FHEM&#039;&#039; muss dann &#039;&#039;&#039;auf der FritzBox&#039;&#039;&#039;, die &#039;&#039;&#039;Web&#039;&#039;&#039;-Adresse der entsprechenden Datei eingetragen werden. Dieser Sender sollte zu Testzwecken dann auch einmal am Fritz!Fon von Hand gestartet werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Modul versucht, beim Start die einzutragende Radio-URL im image-Verzeichnis selber zu ermitteln (IP-Freigabe beachten). Gelingt dies, so steht diese im Internal &#039;&#039;M3U_URL&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Ring auf mehreren Telefonen gleichzeitig ===&lt;br /&gt;
&lt;br /&gt;
Damit mehrere Telefone per ring gleichzeitig Klingel, muss in der Fritzbox eine Rufgruppe definiert werden.&lt;br /&gt;
Sollte eine Türsprechanlage schon in Benutzung sein, kann die eventuell hierfür bereits eingerichtete Gruppe verwendet werden.&lt;br /&gt;
Das anlegen der Gruppe erfolgt wie in folgender AVM Anleitung erledigt werden. [http://http://avm.de/service/fritzbox/fritzbox-7390/wissensdatenbank/publication/show/1148_Interne-Rufgruppe-in-FRITZ-Box-einrichten-Gruppenruf/ AVM Interne Rufgruppe anlegen]&lt;br /&gt;
&lt;br /&gt;
Es muss eine Kurzwahl bei der Gruppe zwingend hinterlegt sein.&lt;br /&gt;
Danach kann mit folgendem Beispiel Code gearbeitet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set FritzBox ring 791 15 show:Türklingel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Name des Devices, Rufgruppen Nummer, Länge und gezeigter Text auf das gewünschte anpassen.&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme / Fehlersuche ==&lt;br /&gt;
=== Fehler nach Firmware Update===&lt;br /&gt;
Nach einem Firmwareupdate der Fritzbox am besten auch FHEM neu starten.&lt;br /&gt;
&lt;br /&gt;
=== Modul bleibt im Status &amp;quot;Check APIs&amp;quot; hängen===&lt;br /&gt;
Im Log steht die Meldung: &amp;quot;Error: Timeout when reading Fritz!Box data.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Mögliche Ursache: Nutzung des FHEM-Befehls [[FHEM_Command_Beispiele#rereadcfg|rereadcfg]]. Dieser verträgt sich nicht mit dem Modul &amp;quot;blocking.pm&amp;quot;, das für parallel laufende FHEM-Prozesse genutzt wird.&lt;br /&gt;
&lt;br /&gt;
Abhilfe schafft ein Neustart &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; oder das Einfügen eines zusätzlichen, lokalen Telnet-Ports z.B. durch &amp;lt;code&amp;gt;define tPortLocal telnet 7073&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nachtschaltung Doppel-WLAN ===&lt;br /&gt;
Beim Abschalten des WLAN über das Modul wird (über TR064) zuerst das 2.4 GHz und dann das 5 GHz WLAN ausgeschaltet. Bei der gleichzeitigen Nutzung der WLAN-Nachtschaltung (Anschalten über das Fritz!OS) wird dann jedoch nur noch das 5 GHz WLAN wieder angeschaltet. Die Box interpretiert den TR064-Befehl anscheinend als ein komplettes Abwählen des 2.4 GHz WLAN.&lt;br /&gt;
&lt;br /&gt;
Abhilfe schafft hier nur ein notify auf das 5 GHz WLAN mit einem nachträglichem Anschalten des 2.4 GHz WLAN.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann das Ausschalten des WLANs nicht direkt über TR064-Kommandos, sondern über einen indirekten Weg erfolgen: über TR064 ein set call abzusetzen und hier den Tastencode zum Ausschalten des WLANs einzugeben, bei einer FritzBox 7490 wäre dies z. B. #96*0*. &lt;br /&gt;
Schaltet man über diese Methode das WLAN aus, kann es über die Nachtschaltung wieder automatisch auf beiden Frequenzen angeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
=== Kabelboxen ===&lt;br /&gt;
Bei Fritz!Boxen für den Kabelanschluss (z.B. Kabel Deutschland) scheint neben Telnet auch die TR064-API nicht zu funktionieren. Vermutlich wurde die API von AVM auf Betreiberwunsch deaktiviert, da man sonst Dinge ändern kann, die das gesamte Kabelnetz stören können.&lt;br /&gt;
&lt;br /&gt;
Zumindest für Unitymedia und einer FRITZ!Box 6490 Cable (lgi) mit FRITZ!OS:06.50 funktioniert TR064. &lt;br /&gt;
&lt;br /&gt;
Eine Rufumleitung bei Abwesenheit (Modul PRESENCE) funktioniert mit einer vorher eingerichten Telefonnummer wie folgt: &lt;br /&gt;
&amp;lt;code&amp;gt;define Rufumleitung DOIF ([Anwesenheit.dum:state] eq &amp;quot;off&amp;quot;) (set FritzBox6490 diversity 1 on) DOELSEIF ([Anwesenheit.dum:state] eq &amp;quot;on&amp;quot;) (set FritzBox6490 diversity 1 off)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wenn&#039;s nicht klingelt ===&lt;br /&gt;
Das Klingeln erfolgt über die Wählhilfe. Eventuell muss über die Weboberfläche der Fritz!Box ein anderer Port eingestellt werden. Der aktuelle steht in &amp;quot;box_stdDialPort&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== TR064-Transport-Error: 500 Can&#039;t connect to ...:49443 (certificate verify failed) ===&lt;br /&gt;
Eventuell hilft es, die Perl Module Net::HTTPS, Net::SSL und IO::Socket::SSL zu aktualisieren.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Error: Old SID not valid anymore.&amp;quot; nach Erlauben von IPv6 auf der Fritzbox ===&lt;br /&gt;
Ohne hier den genauen Grund zu kennen - es hilft die Angabe der IPv4-Adresse: also statt &amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt; dann &amp;lt;code&amp;gt;define FritzBox FRITZBOX &amp;lt;IP&amp;gt;&amp;lt;/code&amp;gt; (z.B. &amp;lt;code&amp;gt;define FritzBox FRITZBOX 192.168.10.1&amp;lt;/code&amp;gt;), so dass das Modul nicht über IPv6 geht.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Didn&#039;t get a session ID&amp;quot; ===&lt;br /&gt;
Bei gleichzeitiger Nutzung anderer Modul für die Fritzbox (z.B. {{Link2CmdRef|Anker=FBAHAHTTP|Lang=en|Label=FBAHAHTTP}}) muss der Zugang über Benutzername und Password erfolgen.&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;DEVICE&amp;gt; boxUser &amp;lt;USER&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Da das FRITZBOX-Modul eine inoffizielle Schnittstelle benutzt, muss dann auch der normale Zugang zur Box auf &amp;quot;Benutzername und Password&amp;quot; eingestellt sein.&amp;lt;bR&amp;gt;&lt;br /&gt;
In der Firmware 6.92 wird der Zugang über die Menüs &amp;quot;System&amp;quot;-&amp;gt;&amp;quot;Fritz!Box-Benutzer&amp;quot;-&amp;gt;&amp;quot;Anmeldung im Heimnetz&amp;quot; eingestellt.&lt;br /&gt;
&lt;br /&gt;
Oft wird aber auch ein falsches oder gar kein Passwort gesetzt.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;set &amp;lt;DEVICE&amp;gt; password &amp;lt;PASSWORD&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===  TR064-Error 401:invalid action ===&lt;br /&gt;
Eventuell ist auf der Fritzbox ein Benutzer gesetzt und im Modul nicht korrekt angegeben bzw. mit falschen Rechten versehen (attribut boxUser).&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=29725|LinkText=Forenthread}} zu diesem Modul&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FritzBox]] &lt;br /&gt;
&amp;lt;!-- (Modulkategorie wird automatisch gesetzt) --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benni</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SolarEdge_Wechselrichter&amp;diff=27782</id>
		<title>SolarEdge Wechselrichter</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SolarEdge_Wechselrichter&amp;diff=27782"/>
		<updated>2018-09-03T14:21:57Z</updated>

		<summary type="html">&lt;p&gt;Benni: /* SunSpec (SolarEdge) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=platzHalter.png&lt;br /&gt;
|Bildbeschreibung=SolarEdge SE10k&lt;br /&gt;
|HWProtocol=Modubus TCP &lt;br /&gt;
|HWType=Wechselrichter&lt;br /&gt;
|HWCategory=Energieverbrauchsmessung&lt;br /&gt;
|HWComm=Ethernet TCP&lt;br /&gt;
|HWChannels=1 (bidiektional)&lt;br /&gt;
|HWVoltage=750V DC; 230V 3xAC&lt;br /&gt;
|HWPowerConsumption=Eigenverbrauch 2% (geschätzt)&lt;br /&gt;
|HWPoweredBy=230V~ 3xAC&lt;br /&gt;
|HWSize=317x512x214 (mm)&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#ModbusAttr ModbusAttr]&lt;br /&gt;
|HWManufacturer=[https://www.solaredge.com/de Solaredge]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== SE10k von Solaredge in FHEM einbinden==&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt die Einbindung eines Solaredgewechselrichters SE10k in ein FHEM System über eine Ethernetverbindung mit Hilfe des Moduls ModbusAttr.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vorbedingungen ===&lt;br /&gt;
&lt;br /&gt;
FHEM läuft und hat genügend Platz für Modifikationen und Logfiles (ca. 100 MByte / Jahr).&lt;br /&gt;
&lt;br /&gt;
=== Am Wechselrichter ===&lt;br /&gt;
&lt;br /&gt;
Im zugehörigen Menu ist bereits der Port 502 eingestellt. Trotzdem muss dieser noch einmal aktiviert werden, da sonst Modbus TCP nicht aktiv wird.&lt;br /&gt;
Hilfe da zu bietet die Installationsanleitung [1].  &amp;lt;br&amp;gt;&lt;br /&gt;
Es ist möglich, dass es auch nur 10 Minuten aktiv bleibt wenn er nicht angesprochen wird.&lt;br /&gt;
&lt;br /&gt;
== ModbusAttr Device in FHEM ==&lt;br /&gt;
&lt;br /&gt;
in FHEM wird ein ModbusAttr angelegt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; define SolarEdge ModbusAttr 1 30 192.168.178.36 TCP &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
danach alle Attribute aus dem unten stehenden list nach dem Verfahren:&lt;br /&gt;
&amp;lt;code&amp;gt; attr SolarEdge dev-h-defPoll 1 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mehr Daten sind im Sunspec Protokoll [2] zu finden&lt;br /&gt;
&lt;br /&gt;
=== List von Device Solaredge in FHEM ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Internals:&lt;br /&gt;
   BUSY       0&lt;br /&gt;
   DEF        1 30 192.168.178.36 TCP&lt;br /&gt;
   DEST       192.168.178.36:502&lt;br /&gt;
   DeviceName 192.168.178.36:502&lt;br /&gt;
   FD         91&lt;br /&gt;
   INTERVAL   600&lt;br /&gt;
   IODev      KeSolarEdge&lt;br /&gt;
   LASTOPEN   1523044866.65275&lt;br /&gt;
   MODBUSID   1&lt;br /&gt;
   ModuleVersion 3.7.3 - 22.12.2017&lt;br /&gt;
   NAME       KeSolarEdge&lt;br /&gt;
   NOTIFYDEV  global&lt;br /&gt;
   NR         354&lt;br /&gt;
   NTFY_ORDER 50-KeSolarEdge&lt;br /&gt;
   PARTIAL    &lt;br /&gt;
   PROTOCOL   TCP&lt;br /&gt;
   REQUESTHEX 00270000000601039c940001&lt;br /&gt;
   STATE      0 W; 1718 kWh&lt;br /&gt;
   TRIGGERTIME 1523048587.13296&lt;br /&gt;
   TRIGGERTIME_FMT 2018-04-06 23:03:07&lt;br /&gt;
   TYPE       ModbusAttr&lt;br /&gt;
   devioLoglevel 4&lt;br /&gt;
   nextOpenDelay 60&lt;br /&gt;
   QUEUE:&lt;br /&gt;
   READINGS:&lt;br /&gt;
     2018-04-06 22:53:07   AC-Energy       1717.665&lt;br /&gt;
     2018-04-06 22:53:07   AC-Energy-Scale 0&lt;br /&gt;
     2018-04-06 22:53:07   AC-Energy-Val   1717665&lt;br /&gt;
     2018-04-06 22:58:10   AC-Power        0&lt;br /&gt;
     2018-04-06 22:58:10   AC-Power-Scale  0&lt;br /&gt;
     2018-04-06 22:58:10   AC-Power-Val    0&lt;br /&gt;
     2018-04-06 22:53:07   DC-Current      0&lt;br /&gt;
     2018-04-06 22:53:07   DC-Current-Scale -32768&lt;br /&gt;
     2018-04-06 22:53:07   DC-Current-Val  65535&lt;br /&gt;
     2018-04-06 22:53:07   DC-Power        0&lt;br /&gt;
     2018-04-06 22:53:07   DC-Power-Scale  0&lt;br /&gt;
     2018-04-06 22:53:07   DC-Power-Val    0&lt;br /&gt;
     2018-04-06 22:53:07   DC-Voltage      0&lt;br /&gt;
     2018-04-06 22:53:07   DC-Voltage-Scale -1&lt;br /&gt;
     2018-04-06 22:53:07   DC-Voltage-Val  0&lt;br /&gt;
     2018-04-06 22:53:07   HeatSinkTemp    0&lt;br /&gt;
     2018-04-06 22:53:07   Status          2&lt;br /&gt;
     2018-04-06 22:53:07   Zustand         Nachtmodus&lt;br /&gt;
     2018-04-06 22:01:06   state           opened&lt;br /&gt;
   defptr:&lt;br /&gt;
     1:&lt;br /&gt;
   gotReadings:&lt;br /&gt;
     AC-Power-Scale 0&lt;br /&gt;
   helper:&lt;br /&gt;
     buffer     &lt;br /&gt;
     lid        1&lt;br /&gt;
     lrecv      1523048290.49688&lt;br /&gt;
     lsend      1523048290.48976&lt;br /&gt;
   lastRead:&lt;br /&gt;
     h40083     1523048290.48193&lt;br /&gt;
     h40084     1523048290.50143&lt;br /&gt;
     h40093     1523047987.08669&lt;br /&gt;
     h40095     1523047987.09043&lt;br /&gt;
     h40096     1523047987.09428&lt;br /&gt;
     h40097     1523047987.09784&lt;br /&gt;
     h40098     1523047987.10153&lt;br /&gt;
     h40099     1523047987.10505&lt;br /&gt;
     h40100     1523047987.10867&lt;br /&gt;
     h40101     1523047987.11226&lt;br /&gt;
     h40103     1523047987.1158&lt;br /&gt;
     h40107     1523047987.11994&lt;br /&gt;
Attributes:&lt;br /&gt;
   dev-h-combine 200&lt;br /&gt;
   dev-h-defPoll 1&lt;br /&gt;
   dev-h-defShowGet 1&lt;br /&gt;
   enableControlSet 1&lt;br /&gt;
   event-on-change-reading .*&lt;br /&gt;
   event-on-update-reading AC-Energy,AC-Energy-Scale,AC-Power-Scale,DC-Voltage-Scale,DC-Current-Scale,DC-Power-Scale,Status&lt;br /&gt;
   maxTimeoutsToReconnect 3&lt;br /&gt;
   obj-h40083-reading AC-Power-Val&lt;br /&gt;
   obj-h40084-reading AC-Power-Scale&lt;br /&gt;
   obj-h40084-unpack s&amp;gt;&lt;br /&gt;
   obj-h40093-len 2&lt;br /&gt;
   obj-h40093-reading AC-Energy-Val&lt;br /&gt;
   obj-h40093-unpack l&amp;gt;&lt;br /&gt;
   obj-h40095-reading AC-Energy-Scale&lt;br /&gt;
   obj-h40096-reading DC-Current-Val&lt;br /&gt;
   obj-h40097-reading DC-Current-Scale&lt;br /&gt;
   obj-h40097-unpack s&amp;gt;&lt;br /&gt;
   obj-h40098-reading DC-Voltage-Val&lt;br /&gt;
   obj-h40099-reading DC-Voltage-Scale&lt;br /&gt;
   obj-h40099-unpack s&amp;gt;&lt;br /&gt;
   obj-h40100-reading DC-Power-Val&lt;br /&gt;
   obj-h40101-reading DC-Power-Scale&lt;br /&gt;
   obj-h40101-unpack s&amp;gt;&lt;br /&gt;
   obj-h40103-reading HeatSinkTemp&lt;br /&gt;
   obj-h40103-unpack s&amp;gt;&lt;br /&gt;
   obj-h40107-reading Status&lt;br /&gt;
   room       Solar,SolarPV,SolarReport&lt;br /&gt;
   silentReconnect 1&lt;br /&gt;
   sortUpdate 1&lt;br /&gt;
   stateFormat {sprintf(&amp;quot;%.0f W; %.0f kWh&amp;quot;,ReadingsVal(&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;AC-Power&amp;quot;,0),ReadingsVal(&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;AC-Energy&amp;quot;,0))}&lt;br /&gt;
   userReadings AC-Energy:(AC-Energy-Scale.*) { &lt;br /&gt;
  my $scale = ReadingsVal (&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;AC-Energy-Scale&amp;quot;,0);&lt;br /&gt;
  return (ReadingsVal (&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;AC-Energy-Val&amp;quot;,0) * ( 10 ** $scale) / 1000);;},&lt;br /&gt;
  &lt;br /&gt;
AC-Power:(AC-Power-Scale.*) { &lt;br /&gt;
 my $scale = ReadingsVal (&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;AC-Power-Scale&amp;quot;,0);&lt;br /&gt;
 return (ReadingsVal (&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;AC-Power-Val&amp;quot;,0) * ( 10 ** $scale));;},&lt;br /&gt;
&lt;br /&gt;
DC-Power:(DC-Power-Scale.*) { &lt;br /&gt;
 my $scale = ReadingsVal (&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;DC-Power-Scale&amp;quot;,0);&lt;br /&gt;
 return (ReadingsVal (&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;DC-Power-Val&amp;quot;,0) * ( 10 ** $scale));;},&lt;br /&gt;
  &lt;br /&gt;
DC-Current:(DC-Current-Scale.*) {&lt;br /&gt;
 my $scale = ReadingsVal (&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;DC-Current-Scale&amp;quot;,0);&lt;br /&gt;
 return (ReadingsVal (&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;DC-Current-Val&amp;quot;,0) * ( 10 ** $scale));;},&lt;br /&gt;
  &lt;br /&gt;
DC-Voltage:(DC-Voltage-Scale.*) { &lt;br /&gt;
 my $scale = ReadingsVal (&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;DC-Voltage-Scale&amp;quot;,0);&lt;br /&gt;
 return (ReadingsVal (&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;DC-Voltage-Val&amp;quot;,0) * ( 10 ** $scale));;},&lt;br /&gt;
 &lt;br /&gt;
Zustand:(Status.*) {&lt;br /&gt;
   my $Zus = ReadingsVal(&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;Status&amp;quot;,0);&lt;br /&gt;
   my $rueck = ReadingsVal(&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;Zustand&amp;quot;,0);&lt;br /&gt;
   if (($Zus == 2) and (InternalVal(&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;INTERVAL&amp;quot;,&amp;quot;&amp;quot;) != 600)) {&lt;br /&gt;
     fhem(&amp;quot;set KeSolarEdge interval 600&amp;quot;);&lt;br /&gt;
	 $rueck = &amp;quot;Nachtmodus&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif  (InternalVal(&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;INTERVAL&amp;quot;,&amp;quot;&amp;quot;) != 60) {&lt;br /&gt;
     fhem(&amp;quot;set KeSolarEdge interval 60&amp;quot;);&lt;br /&gt;
	 $rueck = &amp;quot;Tagmodus&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   return ($rueck);;&lt;br /&gt;
 }&lt;br /&gt;
   webCmdLabel {sprintf(&amp;quot;AC-Energy %.3f&amp;quot;,ReadingsVal(&amp;quot;Solaredge&amp;quot;,&amp;quot;AC-Energy&amp;quot;,0));;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dummys anlegen ===&lt;br /&gt;
&lt;br /&gt;
Zur Verwendung der &amp;quot;at&amp;quot;s werden Dummys benötigt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define dum_pv_energyday_log dummy &lt;br /&gt;
define dum_pv_energyday_read dummy &lt;br /&gt;
define dum_pv_energymonth_log dummy &lt;br /&gt;
define dum_pv_energymonth_read dummy&lt;br /&gt;
define dum_pv_energytoday dummy&lt;br /&gt;
define dum_pv_energytomonth dummy&lt;br /&gt;
define dum_pv_energytoweek dummy&lt;br /&gt;
define dum_pv_energytoyear dummy&lt;br /&gt;
define dum_pv_energyweek_log dummy&lt;br /&gt;
define dum_pv_energyweek_read dummy&lt;br /&gt;
define dum_pv_energyyear_log dummy&lt;br /&gt;
define dum_pv_energyyear_read dummy&lt;br /&gt;
define dum_pvdcpower dummy&lt;br /&gt;
define dum_pvdcvolt dummy&lt;br /&gt;
define dum_pvenergy dummy&lt;br /&gt;
define dum_pvloss dummy&lt;br /&gt;
define dum_pvpower_log dummy &lt;br /&gt;
define dum_pvpower_read dummy &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== notify device in FHEM ===&lt;br /&gt;
&lt;br /&gt;
Auslesen der Daten, getriggert vom ModbusAttr:&lt;br /&gt;
&lt;br /&gt;
prg_solaredge&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
KeSolarEdge:DC-Power:.* {&lt;br /&gt;
  # 16.2.2018 Markus Loeben&lt;br /&gt;
  # liest Solaredge aus und füllt die Werte in dummys, damit sie weiter verwertet werden können&lt;br /&gt;
  my $ACE = ReadingsVal(&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;AC-Energy&amp;quot;,0);&lt;br /&gt;
  Log 5, &amp;quot;at_solaredge: ACE &amp;quot; . $ACE;&lt;br /&gt;
  my $day = Value(&amp;quot;dum_pv_energyday_read&amp;quot;);&lt;br /&gt;
  Log 5, &amp;quot;at_solaredge: day &amp;quot; . $day;&lt;br /&gt;
  my $week = Value(&amp;quot;dum_pv_energyweek_read&amp;quot;);&lt;br /&gt;
  Log 5, &amp;quot;at_solaredge: day &amp;quot; . $day;&lt;br /&gt;
  my $month = Value(&amp;quot;dum_pv_energymonth_read&amp;quot;);&lt;br /&gt;
  Log 5, &amp;quot;at_solaredge: month &amp;quot; . $month;&lt;br /&gt;
  my $year = Value(&amp;quot;dum_pv_energyyear_read&amp;quot;);&lt;br /&gt;
  Log 5, &amp;quot;at_solaredge: year &amp;quot; . $year;&lt;br /&gt;
  #.. die geleistete Energie größer 0 ist (was immer sein sollte, aber leider nicht immer ist) -&amp;gt; laufende Werte berechnen&lt;br /&gt;
  if ($ACE &amp;gt; 0) {&lt;br /&gt;
    fhem (&amp;quot;set dum_pv_energytoday &amp;quot; . sprintf (&amp;quot;%.2f&amp;quot;,($ACE - $day)));&lt;br /&gt;
    fhem (&amp;quot;set dum_pv_energytoweek &amp;quot; . sprintf (&amp;quot;%.2f&amp;quot;,($ACE - $week)));&lt;br /&gt;
    fhem (&amp;quot;set dum_pv_energytomonth &amp;quot; . sprintf (&amp;quot;%.2f&amp;quot;,($ACE - $month)));&lt;br /&gt;
    fhem (&amp;quot;set dum_pv_energytoyear &amp;quot; . sprintf (&amp;quot;%.2f&amp;quot;,($ACE - $year)));&lt;br /&gt;
  }&lt;br /&gt;
  #Log 1, &amp;quot;at_Solaredge: PV-Energy &amp;quot; . $ACE . &amp;quot;\n&amp;quot;;&lt;br /&gt;
  #Leistung auslesen&lt;br /&gt;
  my $ACP = ReadingsVal(&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;AC-Power&amp;quot;,0);&lt;br /&gt;
  my $DCP = ReadingsVal(&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;DC-Power&amp;quot;,0);&lt;br /&gt;
  if ($DCP &amp;gt; 0) {&lt;br /&gt;
  # Verlustleistung berechnen&lt;br /&gt;
    fhem (&amp;quot;set dum_pvloss &amp;quot; . sprintf(&amp;quot;%.1f&amp;quot;, ($DCP - $ACP)));&lt;br /&gt;
    my $MP = Value(&amp;quot;dum_pv_power_read&amp;quot;);&lt;br /&gt;
    #Falls die größer ist als alles bis: ablegen&lt;br /&gt;
    if ($DCP &amp;gt; $MP) {&lt;br /&gt;
      fhem (&amp;quot;set dum_pv_power_read &amp;quot; . $DCP);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== at device in FHEM ===&lt;br /&gt;
&lt;br /&gt;
Tägliches Auswerten für spätere SVGs:&lt;br /&gt;
&lt;br /&gt;
at_midnight&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*23:59 {&lt;br /&gt;
  # Abspeichern der täglichen, wöchentlichen und monatlichen Werte 16.3.18 Loeben;&lt;br /&gt;
  use Time::Local;&lt;br /&gt;
  my ($Psec,$Pmin,$Phour,$Pmday,$Pmonth,$Pyear,$Pwday,$Pyday,$Pisdst) = localtime(time()+61);&lt;br /&gt;
  #Werte einlesen&lt;br /&gt;
  my $ace = ReadingsVal(&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;AC-Energy&amp;quot;,-1);&lt;br /&gt;
  Log 5, &amp;quot;at_midnight AC-Energy&amp;quot; . &amp;quot; &amp;quot; . $ace;&lt;br /&gt;
  #Tag updaten&lt;br /&gt;
  # PV&lt;br /&gt;
  my $aceread = Value(&amp;quot;dum_pv_energyday_read&amp;quot;);&lt;br /&gt;
  Log 5, &amp;quot;at_midnight dum_pv_energyday_read &amp;quot; . $aceread;&lt;br /&gt;
  my $aceday = ($ace - $aceread);&lt;br /&gt;
  fhem (&amp;quot;set dum_pv_energyday_log &amp;quot; . sprintf(&amp;quot;%.1f&amp;quot;,($aceday)));&lt;br /&gt;
  fhem (&amp;quot;set dum_pv_energyday_read &amp;quot; . $ace);&lt;br /&gt;
  Log 5, &amp;quot;at_midnight dum_pv_energyday_read&amp;quot; . &amp;quot; &amp;quot; . $ace;&lt;br /&gt;
  my $MP = Value(&amp;quot;dum_pv_power_read&amp;quot;);&lt;br /&gt;
  fhem(&amp;quot;set dum_pv_power_log &amp;quot; . $MP);&lt;br /&gt;
  fhem(&amp;quot;set dum_pv_power_read 0&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  #Wochenwerte speichern;&lt;br /&gt;
  if ($Pwday == 1) {&lt;br /&gt;
    $aceread = Value(&amp;quot;dum_pv_energyweek_read&amp;quot;);&lt;br /&gt;
    $aceday = ($ace - $aceread);&lt;br /&gt;
    fhem (&amp;quot;set dum_pv_energyweek_log &amp;quot; . sprintf(&amp;quot;%.1f&amp;quot;,($ace - $aceread)));&lt;br /&gt;
    fhem (&amp;quot;set dum_pv_energyweek_read &amp;quot; . $ace);&lt;br /&gt;
  }  &lt;br /&gt;
  #Monatswerte speichern;&lt;br /&gt;
  if ($Pmday == 1) {&lt;br /&gt;
    $aceread = Value(&amp;quot;dum_pv_energymonth_read&amp;quot;);&lt;br /&gt;
    $aceday = ($ace - $aceread);&lt;br /&gt;
    fhem (&amp;quot;set dum_pv_energymonth_log &amp;quot; . sprintf(&amp;quot;%.1f&amp;quot;,($aceday)));&lt;br /&gt;
    fhem (&amp;quot;set dum_pv_energymonth_read &amp;quot; . $ace);&lt;br /&gt;
  }&lt;br /&gt;
  #Jahreswerte speichern;&lt;br /&gt;
  if ($Pyday == 1) {&lt;br /&gt;
    $aceread = Value(&amp;quot;dum_pv_energyyear_read&amp;quot;);&lt;br /&gt;
    $aceday = ($ace - $aceread);&lt;br /&gt;
    fhem (&amp;quot;set dum_pv_energyyear_log &amp;quot; . sprintf(&amp;quot;%.1f&amp;quot;,($aceday)));&lt;br /&gt;
    fhem (&amp;quot;set dum_pv_energyyear_read &amp;quot; . $ace);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Log ==&lt;br /&gt;
&lt;br /&gt;
Das ModbusDevice legt sich ein eigenes Log an. Um aber übersichtliche Grafiken zu bekommen werden die Daten des Dummy benötigt. Hier hilft ein Logfile&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; define FileLog_KePv Filelog %L/pv-%Y.log dum_pv*.* &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Grafiken ==&lt;br /&gt;
&lt;br /&gt;
{{Todo | Beschreibungen zu SVG hinterlegen }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SunSpec (SolarEdge) ==&lt;br /&gt;
&lt;br /&gt;
Hier nochmal eine andere Variante der Attribut-Definition für ModbusAttr. &lt;br /&gt;
Diese Variante ist wesentlich enger an die Sunspec-Implementierung aus der SolarEdge-Dokumentation angelehnt, als die Definitionen in o.g. Beispiel-List.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40000-len 4&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40000-reading C_SunSpec_ID&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40000-unpack (a4)&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40004-len 16&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40004-reading C_Manufacturer&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40004-unpack (a16)&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40020-len 16&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40020-reading C_Model&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40020-unpack (a16)&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40044-len 8&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40044-reading C_Version&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40044-unpack (a8)&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40052-len 16&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40052-reading C_SerialNumber&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40052-unpack (a16)&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40068-reading C_DeviceAddress&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40069-reading C_PhaseDesign&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40070-reading C_SunSpec_Length&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40071-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Current_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40071-reading I_AC_Current&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40072-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Current_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40072-reading I_AC_CurrentA&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40073-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Current_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40073-reading I_AC_CurrentB&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40074-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Current_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40074-reading I_AC_CurrentC&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40075-reading I_AC_Current_SF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40075-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40076-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Voltage_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40076-reading I_AC_VoltageAB&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40077-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Voltage_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40077-reading I_AC_VoltageBC&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40078-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Voltage_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40078-reading I_AC_VoltageCA&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40079-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Voltage_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40079-reading I_AC_VoltageAN&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40080-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Voltage_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40080-reading I_AC_VoltageBN&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40081-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Voltage_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40081-reading I_AC_VoltageCN&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40082-reading I_AC_Voltage_SF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40082-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40083-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Power_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40083-reading I_AC_Power&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40083-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40084-reading I_AC_Power_SF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40084-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40085-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Frequency_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40085-reading I_AC_Frequency&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40086-reading I_AC_Frequency_SF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40086-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40087-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_VA_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40087-reading I_AC_VA&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40087-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40088-reading I_AC_VA_SF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40088-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40089-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_VAR_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40089-reading I_AC_VAR&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40089-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40090-reading I_AC_VAR_SF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40090-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40091-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_PF_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40091-reading I_AC_PF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40091-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40092-reading I_AC_PF_SF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40092-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40093-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Energy_WH_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40093-len 2&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40093-reading I_AC_Energy_WH&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40093-unpack I&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40095-reading I_AC_Energy_WH_SF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40096-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_DC_Current_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40096-reading I_DC_Current&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40097-reading I_DC_Current_SF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40097-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40098-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_DC_Voltage_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40098-reading I_DC_Voltage&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40099-reading I_DC_Voltage_SF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40099-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40100-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_DC_Power_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40100-reading I_DC_Power&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40100-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40101-reading I_DC_Power_SF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40101-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40103-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_Temp_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40103-reading I_Temp_Sink&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40103-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40106-reading I_Temp_SF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40106-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40107-reading I_Status&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40108-reading I_Status_Vendor&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; userReadings uI_Status:I_Status.* {my $om=ReadingsNum($name,&#039;I_Status&#039;,-1);;($om==2?&#039;night&#039;:($om==4?&#039;day&#039;:&#039;off&#039;))},\&lt;br /&gt;
uC_PhaseDesign:C_PhaseDesign.* {my $pd=ReadingsVal($name,&#039;C_PhaseDesign&#039;,&#039;000&#039;);;($pd eq &#039;101&#039;?&#039;single&#039;:($pd eq &#039;102&#039;?&#039;split&#039;:($pd eq &#039;103&#039;?&#039;3-phase&#039;:&#039;unknown&#039;)))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DEVICE-NAME&amp;gt; ist dabei natürlich durch den realen Namen des eigenen ModbusAttr-Devices zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich sind hier auch zwei weiter userReadings definiert, die eine textliche Umsetzung für die Parameter C_PhaseDesign und I_Status vornehmen.&lt;br /&gt;
&lt;br /&gt;
Die Folgende Datei enthält die entsprechenden Anpassungen an die SolarEdge-Dokumentation, die diesen Attribut-Definitionen zugrunde liegen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:FHEM-Solaredge_SunSpec_ModbusAttr.pdf]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other Components]]&lt;br /&gt;
[[Kategorie:Energieerzeugungsmessung]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
# Solaredge: [https://www.solaredge.com/sites/default/files/se-inverter-installation-guide-de.pdf Installationsanleitung]&lt;br /&gt;
# Solaredge: [https://www.solaredge.com/sites/default/files/sunspec-implementation-technical-note-de.pdf Sunspec Protokoll]&lt;/div&gt;</summary>
		<author><name>Benni</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:FHEM-Solaredge_SunSpec_ModbusAttr.pdf&amp;diff=27781</id>
		<title>Datei:FHEM-Solaredge SunSpec ModbusAttr.pdf</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:FHEM-Solaredge_SunSpec_ModbusAttr.pdf&amp;diff=27781"/>
		<updated>2018-09-03T14:17:40Z</updated>

		<summary type="html">&lt;p&gt;Benni: Angepasste Registerbeschreibung zur SolarEdge SunSpec-Implementation.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Angepasste Registerbeschreibung zur SolarEdge SunSpec-Implementation.&lt;/div&gt;</summary>
		<author><name>Benni</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SolarEdge_Wechselrichter&amp;diff=27780</id>
		<title>SolarEdge Wechselrichter</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SolarEdge_Wechselrichter&amp;diff=27780"/>
		<updated>2018-09-03T14:12:51Z</updated>

		<summary type="html">&lt;p&gt;Benni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=platzHalter.png&lt;br /&gt;
|Bildbeschreibung=SolarEdge SE10k&lt;br /&gt;
|HWProtocol=Modubus TCP &lt;br /&gt;
|HWType=Wechselrichter&lt;br /&gt;
|HWCategory=Energieverbrauchsmessung&lt;br /&gt;
|HWComm=Ethernet TCP&lt;br /&gt;
|HWChannels=1 (bidiektional)&lt;br /&gt;
|HWVoltage=750V DC; 230V 3xAC&lt;br /&gt;
|HWPowerConsumption=Eigenverbrauch 2% (geschätzt)&lt;br /&gt;
|HWPoweredBy=230V~ 3xAC&lt;br /&gt;
|HWSize=317x512x214 (mm)&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#ModbusAttr ModbusAttr]&lt;br /&gt;
|HWManufacturer=[https://www.solaredge.com/de Solaredge]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== SE10k von Solaredge in FHEM einbinden==&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt die Einbindung eines Solaredgewechselrichters SE10k in ein FHEM System über eine Ethernetverbindung mit Hilfe des Moduls ModbusAttr.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vorbedingungen ===&lt;br /&gt;
&lt;br /&gt;
FHEM läuft und hat genügend Platz für Modifikationen und Logfiles (ca. 100 MByte / Jahr).&lt;br /&gt;
&lt;br /&gt;
=== Am Wechselrichter ===&lt;br /&gt;
&lt;br /&gt;
Im zugehörigen Menu ist bereits der Port 502 eingestellt. Trotzdem muss dieser noch einmal aktiviert werden, da sonst Modbus TCP nicht aktiv wird.&lt;br /&gt;
Hilfe da zu bietet die Installationsanleitung [1].  &amp;lt;br&amp;gt;&lt;br /&gt;
Es ist möglich, dass es auch nur 10 Minuten aktiv bleibt wenn er nicht angesprochen wird.&lt;br /&gt;
&lt;br /&gt;
== ModbusAttr Device in FHEM ==&lt;br /&gt;
&lt;br /&gt;
in FHEM wird ein ModbusAttr angelegt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; define SolarEdge ModbusAttr 1 30 192.168.178.36 TCP &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
danach alle Attribute aus dem unten stehenden list nach dem Verfahren:&lt;br /&gt;
&amp;lt;code&amp;gt; attr SolarEdge dev-h-defPoll 1 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mehr Daten sind im Sunspec Protokoll [2] zu finden&lt;br /&gt;
&lt;br /&gt;
=== List von Device Solaredge in FHEM ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Internals:&lt;br /&gt;
   BUSY       0&lt;br /&gt;
   DEF        1 30 192.168.178.36 TCP&lt;br /&gt;
   DEST       192.168.178.36:502&lt;br /&gt;
   DeviceName 192.168.178.36:502&lt;br /&gt;
   FD         91&lt;br /&gt;
   INTERVAL   600&lt;br /&gt;
   IODev      KeSolarEdge&lt;br /&gt;
   LASTOPEN   1523044866.65275&lt;br /&gt;
   MODBUSID   1&lt;br /&gt;
   ModuleVersion 3.7.3 - 22.12.2017&lt;br /&gt;
   NAME       KeSolarEdge&lt;br /&gt;
   NOTIFYDEV  global&lt;br /&gt;
   NR         354&lt;br /&gt;
   NTFY_ORDER 50-KeSolarEdge&lt;br /&gt;
   PARTIAL    &lt;br /&gt;
   PROTOCOL   TCP&lt;br /&gt;
   REQUESTHEX 00270000000601039c940001&lt;br /&gt;
   STATE      0 W; 1718 kWh&lt;br /&gt;
   TRIGGERTIME 1523048587.13296&lt;br /&gt;
   TRIGGERTIME_FMT 2018-04-06 23:03:07&lt;br /&gt;
   TYPE       ModbusAttr&lt;br /&gt;
   devioLoglevel 4&lt;br /&gt;
   nextOpenDelay 60&lt;br /&gt;
   QUEUE:&lt;br /&gt;
   READINGS:&lt;br /&gt;
     2018-04-06 22:53:07   AC-Energy       1717.665&lt;br /&gt;
     2018-04-06 22:53:07   AC-Energy-Scale 0&lt;br /&gt;
     2018-04-06 22:53:07   AC-Energy-Val   1717665&lt;br /&gt;
     2018-04-06 22:58:10   AC-Power        0&lt;br /&gt;
     2018-04-06 22:58:10   AC-Power-Scale  0&lt;br /&gt;
     2018-04-06 22:58:10   AC-Power-Val    0&lt;br /&gt;
     2018-04-06 22:53:07   DC-Current      0&lt;br /&gt;
     2018-04-06 22:53:07   DC-Current-Scale -32768&lt;br /&gt;
     2018-04-06 22:53:07   DC-Current-Val  65535&lt;br /&gt;
     2018-04-06 22:53:07   DC-Power        0&lt;br /&gt;
     2018-04-06 22:53:07   DC-Power-Scale  0&lt;br /&gt;
     2018-04-06 22:53:07   DC-Power-Val    0&lt;br /&gt;
     2018-04-06 22:53:07   DC-Voltage      0&lt;br /&gt;
     2018-04-06 22:53:07   DC-Voltage-Scale -1&lt;br /&gt;
     2018-04-06 22:53:07   DC-Voltage-Val  0&lt;br /&gt;
     2018-04-06 22:53:07   HeatSinkTemp    0&lt;br /&gt;
     2018-04-06 22:53:07   Status          2&lt;br /&gt;
     2018-04-06 22:53:07   Zustand         Nachtmodus&lt;br /&gt;
     2018-04-06 22:01:06   state           opened&lt;br /&gt;
   defptr:&lt;br /&gt;
     1:&lt;br /&gt;
   gotReadings:&lt;br /&gt;
     AC-Power-Scale 0&lt;br /&gt;
   helper:&lt;br /&gt;
     buffer     &lt;br /&gt;
     lid        1&lt;br /&gt;
     lrecv      1523048290.49688&lt;br /&gt;
     lsend      1523048290.48976&lt;br /&gt;
   lastRead:&lt;br /&gt;
     h40083     1523048290.48193&lt;br /&gt;
     h40084     1523048290.50143&lt;br /&gt;
     h40093     1523047987.08669&lt;br /&gt;
     h40095     1523047987.09043&lt;br /&gt;
     h40096     1523047987.09428&lt;br /&gt;
     h40097     1523047987.09784&lt;br /&gt;
     h40098     1523047987.10153&lt;br /&gt;
     h40099     1523047987.10505&lt;br /&gt;
     h40100     1523047987.10867&lt;br /&gt;
     h40101     1523047987.11226&lt;br /&gt;
     h40103     1523047987.1158&lt;br /&gt;
     h40107     1523047987.11994&lt;br /&gt;
Attributes:&lt;br /&gt;
   dev-h-combine 200&lt;br /&gt;
   dev-h-defPoll 1&lt;br /&gt;
   dev-h-defShowGet 1&lt;br /&gt;
   enableControlSet 1&lt;br /&gt;
   event-on-change-reading .*&lt;br /&gt;
   event-on-update-reading AC-Energy,AC-Energy-Scale,AC-Power-Scale,DC-Voltage-Scale,DC-Current-Scale,DC-Power-Scale,Status&lt;br /&gt;
   maxTimeoutsToReconnect 3&lt;br /&gt;
   obj-h40083-reading AC-Power-Val&lt;br /&gt;
   obj-h40084-reading AC-Power-Scale&lt;br /&gt;
   obj-h40084-unpack s&amp;gt;&lt;br /&gt;
   obj-h40093-len 2&lt;br /&gt;
   obj-h40093-reading AC-Energy-Val&lt;br /&gt;
   obj-h40093-unpack l&amp;gt;&lt;br /&gt;
   obj-h40095-reading AC-Energy-Scale&lt;br /&gt;
   obj-h40096-reading DC-Current-Val&lt;br /&gt;
   obj-h40097-reading DC-Current-Scale&lt;br /&gt;
   obj-h40097-unpack s&amp;gt;&lt;br /&gt;
   obj-h40098-reading DC-Voltage-Val&lt;br /&gt;
   obj-h40099-reading DC-Voltage-Scale&lt;br /&gt;
   obj-h40099-unpack s&amp;gt;&lt;br /&gt;
   obj-h40100-reading DC-Power-Val&lt;br /&gt;
   obj-h40101-reading DC-Power-Scale&lt;br /&gt;
   obj-h40101-unpack s&amp;gt;&lt;br /&gt;
   obj-h40103-reading HeatSinkTemp&lt;br /&gt;
   obj-h40103-unpack s&amp;gt;&lt;br /&gt;
   obj-h40107-reading Status&lt;br /&gt;
   room       Solar,SolarPV,SolarReport&lt;br /&gt;
   silentReconnect 1&lt;br /&gt;
   sortUpdate 1&lt;br /&gt;
   stateFormat {sprintf(&amp;quot;%.0f W; %.0f kWh&amp;quot;,ReadingsVal(&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;AC-Power&amp;quot;,0),ReadingsVal(&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;AC-Energy&amp;quot;,0))}&lt;br /&gt;
   userReadings AC-Energy:(AC-Energy-Scale.*) { &lt;br /&gt;
  my $scale = ReadingsVal (&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;AC-Energy-Scale&amp;quot;,0);&lt;br /&gt;
  return (ReadingsVal (&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;AC-Energy-Val&amp;quot;,0) * ( 10 ** $scale) / 1000);;},&lt;br /&gt;
  &lt;br /&gt;
AC-Power:(AC-Power-Scale.*) { &lt;br /&gt;
 my $scale = ReadingsVal (&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;AC-Power-Scale&amp;quot;,0);&lt;br /&gt;
 return (ReadingsVal (&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;AC-Power-Val&amp;quot;,0) * ( 10 ** $scale));;},&lt;br /&gt;
&lt;br /&gt;
DC-Power:(DC-Power-Scale.*) { &lt;br /&gt;
 my $scale = ReadingsVal (&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;DC-Power-Scale&amp;quot;,0);&lt;br /&gt;
 return (ReadingsVal (&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;DC-Power-Val&amp;quot;,0) * ( 10 ** $scale));;},&lt;br /&gt;
  &lt;br /&gt;
DC-Current:(DC-Current-Scale.*) {&lt;br /&gt;
 my $scale = ReadingsVal (&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;DC-Current-Scale&amp;quot;,0);&lt;br /&gt;
 return (ReadingsVal (&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;DC-Current-Val&amp;quot;,0) * ( 10 ** $scale));;},&lt;br /&gt;
  &lt;br /&gt;
DC-Voltage:(DC-Voltage-Scale.*) { &lt;br /&gt;
 my $scale = ReadingsVal (&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;DC-Voltage-Scale&amp;quot;,0);&lt;br /&gt;
 return (ReadingsVal (&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;DC-Voltage-Val&amp;quot;,0) * ( 10 ** $scale));;},&lt;br /&gt;
 &lt;br /&gt;
Zustand:(Status.*) {&lt;br /&gt;
   my $Zus = ReadingsVal(&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;Status&amp;quot;,0);&lt;br /&gt;
   my $rueck = ReadingsVal(&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;Zustand&amp;quot;,0);&lt;br /&gt;
   if (($Zus == 2) and (InternalVal(&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;INTERVAL&amp;quot;,&amp;quot;&amp;quot;) != 600)) {&lt;br /&gt;
     fhem(&amp;quot;set KeSolarEdge interval 600&amp;quot;);&lt;br /&gt;
	 $rueck = &amp;quot;Nachtmodus&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif  (InternalVal(&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;INTERVAL&amp;quot;,&amp;quot;&amp;quot;) != 60) {&lt;br /&gt;
     fhem(&amp;quot;set KeSolarEdge interval 60&amp;quot;);&lt;br /&gt;
	 $rueck = &amp;quot;Tagmodus&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   return ($rueck);;&lt;br /&gt;
 }&lt;br /&gt;
   webCmdLabel {sprintf(&amp;quot;AC-Energy %.3f&amp;quot;,ReadingsVal(&amp;quot;Solaredge&amp;quot;,&amp;quot;AC-Energy&amp;quot;,0));;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dummys anlegen ===&lt;br /&gt;
&lt;br /&gt;
Zur Verwendung der &amp;quot;at&amp;quot;s werden Dummys benötigt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define dum_pv_energyday_log dummy &lt;br /&gt;
define dum_pv_energyday_read dummy &lt;br /&gt;
define dum_pv_energymonth_log dummy &lt;br /&gt;
define dum_pv_energymonth_read dummy&lt;br /&gt;
define dum_pv_energytoday dummy&lt;br /&gt;
define dum_pv_energytomonth dummy&lt;br /&gt;
define dum_pv_energytoweek dummy&lt;br /&gt;
define dum_pv_energytoyear dummy&lt;br /&gt;
define dum_pv_energyweek_log dummy&lt;br /&gt;
define dum_pv_energyweek_read dummy&lt;br /&gt;
define dum_pv_energyyear_log dummy&lt;br /&gt;
define dum_pv_energyyear_read dummy&lt;br /&gt;
define dum_pvdcpower dummy&lt;br /&gt;
define dum_pvdcvolt dummy&lt;br /&gt;
define dum_pvenergy dummy&lt;br /&gt;
define dum_pvloss dummy&lt;br /&gt;
define dum_pvpower_log dummy &lt;br /&gt;
define dum_pvpower_read dummy &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== notify device in FHEM ===&lt;br /&gt;
&lt;br /&gt;
Auslesen der Daten, getriggert vom ModbusAttr:&lt;br /&gt;
&lt;br /&gt;
prg_solaredge&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
KeSolarEdge:DC-Power:.* {&lt;br /&gt;
  # 16.2.2018 Markus Loeben&lt;br /&gt;
  # liest Solaredge aus und füllt die Werte in dummys, damit sie weiter verwertet werden können&lt;br /&gt;
  my $ACE = ReadingsVal(&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;AC-Energy&amp;quot;,0);&lt;br /&gt;
  Log 5, &amp;quot;at_solaredge: ACE &amp;quot; . $ACE;&lt;br /&gt;
  my $day = Value(&amp;quot;dum_pv_energyday_read&amp;quot;);&lt;br /&gt;
  Log 5, &amp;quot;at_solaredge: day &amp;quot; . $day;&lt;br /&gt;
  my $week = Value(&amp;quot;dum_pv_energyweek_read&amp;quot;);&lt;br /&gt;
  Log 5, &amp;quot;at_solaredge: day &amp;quot; . $day;&lt;br /&gt;
  my $month = Value(&amp;quot;dum_pv_energymonth_read&amp;quot;);&lt;br /&gt;
  Log 5, &amp;quot;at_solaredge: month &amp;quot; . $month;&lt;br /&gt;
  my $year = Value(&amp;quot;dum_pv_energyyear_read&amp;quot;);&lt;br /&gt;
  Log 5, &amp;quot;at_solaredge: year &amp;quot; . $year;&lt;br /&gt;
  #.. die geleistete Energie größer 0 ist (was immer sein sollte, aber leider nicht immer ist) -&amp;gt; laufende Werte berechnen&lt;br /&gt;
  if ($ACE &amp;gt; 0) {&lt;br /&gt;
    fhem (&amp;quot;set dum_pv_energytoday &amp;quot; . sprintf (&amp;quot;%.2f&amp;quot;,($ACE - $day)));&lt;br /&gt;
    fhem (&amp;quot;set dum_pv_energytoweek &amp;quot; . sprintf (&amp;quot;%.2f&amp;quot;,($ACE - $week)));&lt;br /&gt;
    fhem (&amp;quot;set dum_pv_energytomonth &amp;quot; . sprintf (&amp;quot;%.2f&amp;quot;,($ACE - $month)));&lt;br /&gt;
    fhem (&amp;quot;set dum_pv_energytoyear &amp;quot; . sprintf (&amp;quot;%.2f&amp;quot;,($ACE - $year)));&lt;br /&gt;
  }&lt;br /&gt;
  #Log 1, &amp;quot;at_Solaredge: PV-Energy &amp;quot; . $ACE . &amp;quot;\n&amp;quot;;&lt;br /&gt;
  #Leistung auslesen&lt;br /&gt;
  my $ACP = ReadingsVal(&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;AC-Power&amp;quot;,0);&lt;br /&gt;
  my $DCP = ReadingsVal(&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;DC-Power&amp;quot;,0);&lt;br /&gt;
  if ($DCP &amp;gt; 0) {&lt;br /&gt;
  # Verlustleistung berechnen&lt;br /&gt;
    fhem (&amp;quot;set dum_pvloss &amp;quot; . sprintf(&amp;quot;%.1f&amp;quot;, ($DCP - $ACP)));&lt;br /&gt;
    my $MP = Value(&amp;quot;dum_pv_power_read&amp;quot;);&lt;br /&gt;
    #Falls die größer ist als alles bis: ablegen&lt;br /&gt;
    if ($DCP &amp;gt; $MP) {&lt;br /&gt;
      fhem (&amp;quot;set dum_pv_power_read &amp;quot; . $DCP);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== at device in FHEM ===&lt;br /&gt;
&lt;br /&gt;
Tägliches Auswerten für spätere SVGs:&lt;br /&gt;
&lt;br /&gt;
at_midnight&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*23:59 {&lt;br /&gt;
  # Abspeichern der täglichen, wöchentlichen und monatlichen Werte 16.3.18 Loeben;&lt;br /&gt;
  use Time::Local;&lt;br /&gt;
  my ($Psec,$Pmin,$Phour,$Pmday,$Pmonth,$Pyear,$Pwday,$Pyday,$Pisdst) = localtime(time()+61);&lt;br /&gt;
  #Werte einlesen&lt;br /&gt;
  my $ace = ReadingsVal(&amp;quot;KeSolarEdge&amp;quot;,&amp;quot;AC-Energy&amp;quot;,-1);&lt;br /&gt;
  Log 5, &amp;quot;at_midnight AC-Energy&amp;quot; . &amp;quot; &amp;quot; . $ace;&lt;br /&gt;
  #Tag updaten&lt;br /&gt;
  # PV&lt;br /&gt;
  my $aceread = Value(&amp;quot;dum_pv_energyday_read&amp;quot;);&lt;br /&gt;
  Log 5, &amp;quot;at_midnight dum_pv_energyday_read &amp;quot; . $aceread;&lt;br /&gt;
  my $aceday = ($ace - $aceread);&lt;br /&gt;
  fhem (&amp;quot;set dum_pv_energyday_log &amp;quot; . sprintf(&amp;quot;%.1f&amp;quot;,($aceday)));&lt;br /&gt;
  fhem (&amp;quot;set dum_pv_energyday_read &amp;quot; . $ace);&lt;br /&gt;
  Log 5, &amp;quot;at_midnight dum_pv_energyday_read&amp;quot; . &amp;quot; &amp;quot; . $ace;&lt;br /&gt;
  my $MP = Value(&amp;quot;dum_pv_power_read&amp;quot;);&lt;br /&gt;
  fhem(&amp;quot;set dum_pv_power_log &amp;quot; . $MP);&lt;br /&gt;
  fhem(&amp;quot;set dum_pv_power_read 0&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  #Wochenwerte speichern;&lt;br /&gt;
  if ($Pwday == 1) {&lt;br /&gt;
    $aceread = Value(&amp;quot;dum_pv_energyweek_read&amp;quot;);&lt;br /&gt;
    $aceday = ($ace - $aceread);&lt;br /&gt;
    fhem (&amp;quot;set dum_pv_energyweek_log &amp;quot; . sprintf(&amp;quot;%.1f&amp;quot;,($ace - $aceread)));&lt;br /&gt;
    fhem (&amp;quot;set dum_pv_energyweek_read &amp;quot; . $ace);&lt;br /&gt;
  }  &lt;br /&gt;
  #Monatswerte speichern;&lt;br /&gt;
  if ($Pmday == 1) {&lt;br /&gt;
    $aceread = Value(&amp;quot;dum_pv_energymonth_read&amp;quot;);&lt;br /&gt;
    $aceday = ($ace - $aceread);&lt;br /&gt;
    fhem (&amp;quot;set dum_pv_energymonth_log &amp;quot; . sprintf(&amp;quot;%.1f&amp;quot;,($aceday)));&lt;br /&gt;
    fhem (&amp;quot;set dum_pv_energymonth_read &amp;quot; . $ace);&lt;br /&gt;
  }&lt;br /&gt;
  #Jahreswerte speichern;&lt;br /&gt;
  if ($Pyday == 1) {&lt;br /&gt;
    $aceread = Value(&amp;quot;dum_pv_energyyear_read&amp;quot;);&lt;br /&gt;
    $aceday = ($ace - $aceread);&lt;br /&gt;
    fhem (&amp;quot;set dum_pv_energyyear_log &amp;quot; . sprintf(&amp;quot;%.1f&amp;quot;,($aceday)));&lt;br /&gt;
    fhem (&amp;quot;set dum_pv_energyyear_read &amp;quot; . $ace);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Log ==&lt;br /&gt;
&lt;br /&gt;
Das ModbusDevice legt sich ein eigenes Log an. Um aber übersichtliche Grafiken zu bekommen werden die Daten des Dummy benötigt. Hier hilft ein Logfile&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; define FileLog_KePv Filelog %L/pv-%Y.log dum_pv*.* &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Grafiken ==&lt;br /&gt;
&lt;br /&gt;
{{Todo | Beschreibungen zu SVG hinterlegen }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SunSpec (SolarEdge) ==&lt;br /&gt;
&lt;br /&gt;
Hier nochmal eine andere Variante der Attribut-Definition für ModbusAttr. &lt;br /&gt;
Diese Variante ist wesentlich enger an die Sunspec-Implementierung aus der SolarEdge-Dokumentation angelehnt, als die Definitionen in o.g. Beispiel-List.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40000-len 4&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40000-reading C_SunSpec_ID&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40000-unpack (a4)&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40004-len 16&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40004-reading C_Manufacturer&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40004-unpack (a16)&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40020-len 16&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40020-reading C_Model&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40020-unpack (a16)&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40044-len 8&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40044-reading C_Version&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40044-unpack (a8)&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40052-len 16&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40052-reading C_SerialNumber&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40052-unpack (a16)&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40068-reading C_DeviceAddress&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40069-reading C_PhaseDesign&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40070-reading C_SunSpec_Length&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40071-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Current_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40071-reading I_AC_Current&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40072-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Current_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40072-reading I_AC_CurrentA&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40073-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Current_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40073-reading I_AC_CurrentB&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40074-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Current_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40074-reading I_AC_CurrentC&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40075-reading I_AC_Current_SF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40075-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40076-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Voltage_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40076-reading I_AC_VoltageAB&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40077-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Voltage_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40077-reading I_AC_VoltageBC&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40078-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Voltage_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40078-reading I_AC_VoltageCA&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40079-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Voltage_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40079-reading I_AC_VoltageAN&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40080-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Voltage_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40080-reading I_AC_VoltageBN&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40081-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Voltage_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40081-reading I_AC_VoltageCN&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40082-reading I_AC_Voltage_SF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40082-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40083-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Power_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40083-reading I_AC_Power&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40083-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40084-reading I_AC_Power_SF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40084-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40085-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Frequency_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40085-reading I_AC_Frequency&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40086-reading I_AC_Frequency_SF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40086-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40087-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_VA_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40087-reading I_AC_VA&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40087-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40088-reading I_AC_VA_SF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40088-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40089-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_VAR_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40089-reading I_AC_VAR&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40089-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40090-reading I_AC_VAR_SF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40090-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40091-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_PF_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40091-reading I_AC_PF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40091-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40092-reading I_AC_PF_SF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40092-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40093-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_AC_Energy_WH_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40093-len 2&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40093-reading I_AC_Energy_WH&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40093-unpack I&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40095-reading I_AC_Energy_WH_SF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40096-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_DC_Current_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40096-reading I_DC_Current&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40097-reading I_DC_Current_SF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40097-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40098-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_DC_Voltage_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40098-reading I_DC_Voltage&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40099-reading I_DC_Voltage_SF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40099-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40100-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_DC_Power_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40100-reading I_DC_Power&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40100-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40101-reading I_DC_Power_SF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40101-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40103-expr $val * (10 ** ReadingsNum (&#039;&amp;lt;DEVICE-NAME&amp;gt;&#039; ,&#039;I_Temp_SF&#039;,0))&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40103-reading I_Temp_Sink&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40103-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40106-reading I_Temp_SF&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40106-unpack s&amp;gt;&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40107-reading I_Status&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; obj-h40108-reading I_Status_Vendor&lt;br /&gt;
attr &amp;lt;DEVICE-NAME&amp;gt; userReadings uI_Status:I_Status.* {my $om=ReadingsNum($name,&#039;I_Status&#039;,-1);;($om==2?&#039;night&#039;:($om==4?&#039;day&#039;:&#039;off&#039;))},\&lt;br /&gt;
uC_PhaseDesign:C_PhaseDesign.* {my $pd=ReadingsVal($name,&#039;C_PhaseDesign&#039;,&#039;000&#039;);;($pd eq &#039;101&#039;?&#039;single&#039;:($pd eq &#039;102&#039;?&#039;split&#039;:($pd eq &#039;103&#039;?&#039;3-phase&#039;:&#039;unknown&#039;)))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DEVICE-NAME&amp;gt; ist dabei natürlich durch den realen Namen des eigenen ModbusAttr-Devices zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich sind hier auch zwei weiter userReadings definiert, die eine textliche Umsetzung für die Parameter C_PhaseDesign und I_Status vornehmen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other Components]]&lt;br /&gt;
[[Kategorie:Energieerzeugungsmessung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
# Solaredge: [https://www.solaredge.com/sites/default/files/se-inverter-installation-guide-de.pdf Installationsanleitung]&lt;br /&gt;
# Solaredge: [https://www.solaredge.com/sites/default/files/sunspec-implementation-technical-note-de.pdf Sunspec Protokoll]&lt;/div&gt;</summary>
		<author><name>Benni</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Dewpoint&amp;diff=15319</id>
		<title>Dewpoint</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Dewpoint&amp;diff=15319"/>
		<updated>2016-05-09T10:34:28Z</updated>

		<summary type="html">&lt;p&gt;Benni: /* Alternativen zu diesem Modul */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:dewpoint}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Berechnung des Taupunkts&lt;br /&gt;
|ModType=h&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
|ModCmdRef=dewpoint&lt;br /&gt;
|ModTechName=98_dewpoint.pm&lt;br /&gt;
|ModOwner=Willi Herzig}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[dewpoint]] bietet Funktionen im Zusammenhang mit der Taupunktberechnung an. Die verfügbaren Funktionen, über einen Parameter bei der Definition gesteuert, sind &lt;br /&gt;
* dewpoint (Taupunkt)&lt;br /&gt;
* fan (erzeugt ein Event, das zur Lüftersteuerung verwendet werden kann)&lt;br /&gt;
* alarm (erzeugt einen &amp;quot;Schimmel-Alarm&amp;quot;, wenn eine Referenztemperatur unter den Taupunkt fällt)&lt;br /&gt;
{{todo|Seite muss noch vervollständigt werden --[[Benutzer:Ph1959de|Peter]] ([[Benutzer Diskussion:Ph1959de|Diskussion]]) 13:49, 14. Mär. 2016 (CET)}}&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Es muss ein Device geben, das die zur Berechnung erforderlichen Basisdaten &#039;&#039;Temperatur&#039;&#039; und &#039;&#039;Feuchte&#039;&#039; liefert. Die Namen der entsprechenden Readings können bei der Definition des &#039;&#039;dewpoint&#039;&#039; Device angegeben werden. &lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
Ein &#039;&#039;dewpoint&#039;&#039; Device (siehe auch commandref) wird definiert mit:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; dewpoint &amp;lt;type&amp;gt; ...&amp;lt;/code&amp;gt;&lt;br /&gt;
Mögliche Werte und Bedeutung von&lt;br /&gt;
;type&lt;br /&gt;
*dewpoint - aus &#039;&#039;temp_name&#039;&#039; und &#039;&#039;hum_name&#039;&#039; wird der Taupunkt berechnet und als Reading mit dem Namen &#039;&#039;new_name&#039;&#039; an die durch &#039;&#039;devicename-regex&#039;&#039; spezifizierten Devices hinzugefügt&lt;br /&gt;
*fan - &lt;br /&gt;
*alarm - &lt;br /&gt;
&lt;br /&gt;
Die vollständige Syntax für den Typ &#039;&#039;dewpoint&#039;&#039;:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; dewpoint &#039;&#039;&#039;dewpoint&#039;&#039;&#039; &amp;lt;devicename-regex&amp;gt; [&amp;lt;temp_name&amp;gt; &amp;lt;hum_name&amp;gt; &amp;lt;new_name&amp;gt;]&amp;lt;/code&amp;gt;&lt;br /&gt;
wobei die Platzhalter folgende Bedeutung haben:&lt;br /&gt;
;name&lt;br /&gt;
:der Name des definierten &#039;&#039;dewpoint&#039;&#039; Device&lt;br /&gt;
;devicename-regex&lt;br /&gt;
:Spezifikation des Geräts / der Geräte, von denen &#039;&#039;temp_name&#039;&#039; und &#039;&#039;hum_name&#039;&#039; gelesen und &#039;&#039;new_name&#039;&#039; geschrieben werden soll &lt;br /&gt;
;temp_name&lt;br /&gt;
:Name des Readings, das den Temperaturwert enthält; wenn dieser Parameter nicht angegeben ist, wird &#039;&#039;temperature&#039;&#039; angenommen&lt;br /&gt;
;hum_name&lt;br /&gt;
:Name des Readings, das den Feuchtewert enthält; wenn dieser Parameter nicht angegeben ist, wird &#039;&#039;humidity&#039;&#039; angenommen&lt;br /&gt;
;new_name&lt;br /&gt;
:Name des Readings, das den berechneten Taupunkt aufnehmen soll; wenn dieser Parameter nicht angegeben ist, wird &#039;&#039;dewpoint&#039;&#039; angenommen&lt;br /&gt;
&lt;br /&gt;
==== Statuszeile ====&lt;br /&gt;
Will man den Taupunkt nicht als einzelnes Reading &#039;&#039;dewpoint&#039;&#039;, sondern in Kurzform zusammen mit den anderen Werten in der Statuszeile anzeigen lassen, so muss man für &#039;&#039;temp_name&#039;&#039; und &#039;&#039;hum_name&#039;&#039; die Spezialwerte &#039;&#039;T&#039;&#039; und &#039;&#039;H&#039;&#039; angeben:&lt;br /&gt;
:&amp;lt;code&amp;gt;define dew_state dewpoint dewpoint .* T H D&amp;lt;/code&amp;gt;&lt;br /&gt;
Dies bewirkt, dass bei allen abgefragten Geräten die Werte &#039;&#039;T&#039;&#039; und &#039;&#039;H&#039;&#039; aus der Statuszeile ausgelesen werden und selbige dann wie folgt um den Taupunkt mit dem Buchstaben &#039;&#039;D&#039;&#039; erweitert wird:&lt;br /&gt;
&amp;lt;pre&amp;gt;T: 18.2 H: 55 D: 9.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
;absFeuchte&lt;br /&gt;
:Beim Setzen dieses Attributs wird zusätzlich die absolute Luftfeuchtigkeit (in Gramm Wasser pro Kubikmeter Luft) berechnet und als Reading mit dem Namen &#039;&#039;absFeuchte&#039;&#039; ausgegeben. Hat man das Dewpoint-Device vorher so definiert, dass es den Taupunkt an den Status anhängt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define dew_state dewpoint dewpoint .* T H D&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:dann braucht man nichts weiter zu tun, die absolute Feuchtigkeit wird ab sofort unter dem Buchstaben &#039;&#039;A&#039;&#039; an den Status angehängt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;T: 18.2 H: 55 D: 9.0 A: 8.5&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Für den Taupunkt konnte man mit dem Parameter &#039;&#039;new_name&#039;&#039; einen eigenen Namen für das erzeugten Reading festlegen. Für die absolute Luftfeuchte ist dieser Parameter nicht vorhanden, das Reading hat immer den Standardnamen &#039;&#039;absFeuchte&#039;&#039; bzw. &#039;&#039;A&#039;&#039; in der Statuszeile. &lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
&lt;br /&gt;
== Alternativen zu diesem Modul ==&lt;br /&gt;
&lt;br /&gt;
=== Berechnung direkt im userReading ===&lt;br /&gt;
&lt;br /&gt;
Um den Taupunkt einfach berechnen zu können, kann neben dem Modul &#039;&#039;dewpoint&#039;&#039; auch das Folgende userReading gesetzt werden (der Code dazu wurde direkt aus dem Modul entnommen und ist so über das Webinterface einzugeben).&lt;br /&gt;
&lt;br /&gt;
Das Userreading hat den Vorteil, nicht mit anderen Modulen in Konflikt zu geraten.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;attr &amp;lt;Device&amp;gt; userReadings dew:temperature.* { &lt;br /&gt;
 my $dp;&lt;br /&gt;
 my $temperature = ReadingsVal($name,&amp;quot;temperature&amp;quot;,0);&lt;br /&gt;
 my $humidity = ReadingsVal($name,&amp;quot;humidity&amp;quot;,0);&lt;br /&gt;
 my $A = 17.2694;&lt;br /&gt;
 my $B = ($temperature &amp;gt; 0) ? 237.3 : 265.5;&lt;br /&gt;
 my $es = 610.78 * exp( $A * $temperature / ($temperature + $B) );&lt;br /&gt;
 my $e = $humidity/ 100 * $es;&lt;br /&gt;
 if ($e == 0) { Log 1, &amp;quot;Error: dewpoint() e==0: temp=$temperature, hum=$humidity&amp;quot;;&lt;br /&gt;
  return 0;&lt;br /&gt;
 } &lt;br /&gt;
 my $e1 = $e / 610.78;&lt;br /&gt;
 my $f = log( $e1 ) / $A;&lt;br /&gt;
 my $f1 = 1 - $f;&lt;br /&gt;
 if ($f1 == 0) { &lt;br /&gt;
  Log 1, &amp;quot;Error: dewpoint() (1-f)==0: temp=$temperature, hum=$humidity&amp;quot;;&lt;br /&gt;
  return 0;&lt;br /&gt;
 }&lt;br /&gt;
 $dp = $B * $f / $f1 ;&lt;br /&gt;
 sprintf &amp;quot;%.2f&amp;quot;, $dp;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
(Das obige Beispiel wurde nach Umstellung auf &amp;quot;Source&amp;quot;-Formatierung noch nicht getestet. --[[Benutzer:Ph1959de|Peter]] ([[Benutzer Diskussion:Ph1959de|Diskussion]]) 13:49, 14. Mär. 2016 (CET))&lt;br /&gt;
&lt;br /&gt;
=== Variante über 99_myUtils ===&lt;br /&gt;
&lt;br /&gt;
Noch besser ist es, die im vorigen Abschnitt durchgeführte Berechnung nicht für jedes Device per userReading wieder neu einzugeben, sondern diese einmalig als Funktion in der 99_myUtils zu hinterlegen und diese dann im jeweiligen Device im userReading nur noch aufzurufen.&lt;br /&gt;
&lt;br /&gt;
Dazu ist in der 99_myUtils folgende sub anzulegen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub urDewpoint&lt;br /&gt;
{&lt;br /&gt;
	my ($dname,$tname,$hname) = @_;&lt;br /&gt;
&lt;br /&gt;
	#Prüfen, ob überhaupt ein Device(-name) als Parameter übergeben wurde&lt;br /&gt;
	if(!defined($dname)) {&lt;br /&gt;
		Log3 undef,1,&amp;quot;Error: urDewpoint - No device specified!&amp;quot;;&lt;br /&gt;
		return 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	#Prüfen, ob das angegebene Device überhaupt existiert&lt;br /&gt;
	if(!$defs{$dname}) {&lt;br /&gt;
		Log3 undef,1,&amp;quot;Error: urDewpoint - Device $dname is not defined!&amp;quot;;&lt;br /&gt;
		return 0;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	#Wenn keine Readingsnamen für die Temperatur oder Luftfeuchtigkeit &lt;br /&gt;
	#übergebenwurde wird per default temperature oder humidity verwendet&lt;br /&gt;
	$tname=&#039;temperature&#039; if(!defined($tname));&lt;br /&gt;
	$hname=&#039;humidity&#039; if(!defined($hname));&lt;br /&gt;
	&lt;br /&gt;
	my $dp;&lt;br /&gt;
	&lt;br /&gt;
	#Auslesen der Readingswerte für Temperatur und Luftfeuchtigkeit aus den&lt;br /&gt;
	#entsprechenden Readings des Devic&lt;br /&gt;
	my $temperature = ReadingsVal($dname,$tname,0);&lt;br /&gt;
	my $humidity = ReadingsVal($dname,$hname,0);&lt;br /&gt;
	&lt;br /&gt;
	#Magische Berechnung :)&lt;br /&gt;
	my $A = 17.2694;&lt;br /&gt;
	my $B = ($temperature &amp;gt; 0) ? 237.3 : 265.5;&lt;br /&gt;
	my $es = 610.78 * exp( $A * $temperature / ($temperature + $B) );&lt;br /&gt;
	my $e = $humidity/ 100 * $es;&lt;br /&gt;
	if ($e == 0) { &lt;br /&gt;
		Log3 undef,1, &amp;quot;Error: urDewpoint: $dname - e==0: temp=$temperature, hum=$humidity&amp;quot;;&lt;br /&gt;
		return &#039;ERR&#039;;&lt;br /&gt;
	} &lt;br /&gt;
	my $e1 = $e / 610.78;&lt;br /&gt;
	my $f = log( $e1 ) / $A;&lt;br /&gt;
	my $f1 = 1 - $f;&lt;br /&gt;
	if ($f1 == 0) { &lt;br /&gt;
		Log3 undef,1, &amp;quot;Error: urDewpoint: $dname - (1-f)==0: temp=$temperature, hum=$humidity&amp;quot;;&lt;br /&gt;
		return &#039;ERR&#039;;&lt;br /&gt;
	}&lt;br /&gt;
	$dp = $B * $f / $f1 ;&lt;br /&gt;
	&lt;br /&gt;
	#Rückgabe der Taupunkt-Temperatur&lt;br /&gt;
	return sprintf &amp;quot;%.2f&amp;quot;, $dp;	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend kann dann im jeweiligen Device ganz einfach ein userReading definiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;attr &amp;lt;Device&amp;gt; userReadings dew:temperature.* {urDewpoint($name)}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Readings-Namen für Temperatur und Luftfeuchtigkeit bei Device können bei bedarf auch abweichend angegeben werden. Bei den Homematic-Wandthermostaten heßt das Reading für die tatsächlich gemessene Temperatur measured-temp und nicht temperature, dann würde die definition des userReading wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;attr &amp;lt;Device&amp;gt; userReadings dew:measured-temp.* {urDewpoint($name,&#039;measured-temp&#039;)}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Forendiskussion um {{Link2Forum|Topic=8576|LinkText=Lüften oder nicht}}&lt;br /&gt;
* Forendiskussion um {{Link2Forum|Topic=23080|LinkText=Temperaturdifferenz}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Benni</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Benutzer:Benni&amp;diff=14241</id>
		<title>Benutzer:Benni</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Benutzer:Benni&amp;diff=14241"/>
		<updated>2016-02-18T13:10:53Z</updated>

		<summary type="html">&lt;p&gt;Benni: Die Seite wurde neu angelegt: „ [http://forum.fhem.de/index.php?action=profile;u=6166 Mein User-Profil im FHEM-Forum]“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[http://forum.fhem.de/index.php?action=profile;u=6166 Mein User-Profil im FHEM-Forum]&lt;/div&gt;</summary>
		<author><name>Benni</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHEM_Tablet_UI&amp;diff=14240</id>
		<title>FHEM Tablet UI</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FHEM_Tablet_UI&amp;diff=14240"/>
		<updated>2016-02-18T13:05:43Z</updated>

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