<?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=AlanBlack</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=AlanBlack"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/AlanBlack"/>
	<updated>2026-04-21T10:05:28Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=ODROID_XU4&amp;diff=38122</id>
		<title>ODROID XU4</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=ODROID_XU4&amp;diff=38122"/>
		<updated>2023-02-11T20:23:05Z</updated>

		<summary type="html">&lt;p&gt;AlanBlack: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Beim ODROID XU4 handelt es sich um einen Einplatinencomputer von [http://www.hardkernel.com/main/products/prdt_info.php Hardkernel] mit dem Exynos5422 Octa Core Prozessor bestehend aus 4x Cortex(TM) -A15 2Ghz und 4x Cortex(TM) -A7 1.4Ghz.&amp;lt;br /&amp;gt;&lt;br /&gt;
der XU4 ist der Nachfolger des XU3 und ist von der Systemebene kompatibel. Es sind aus diesem Grund viele System Images des XU4 mit der Endung XU3 versehen.&lt;br /&gt;
Zum Vergleich ist in der Tabelle [[Cubieboard 3|Cubieboard]] und [[Raspberry Pi|Raspberry Pi 4b]] aufgeführt. Die Tabelle soll nur einen Überblick darstellen und erhebt keinen Anspruch auf Vollständigkeit.&lt;br /&gt;
{| class=&amp;quot;wikitable zebra toptextcells&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Eigenschaft !! ODROID XU4 !! Cubieboard &#039;&#039;&#039;3&#039;&#039;&#039; || Raspberry Pi &#039;&#039;&#039;4&#039;&#039;&#039; Model B&lt;br /&gt;
|-&lt;br /&gt;
| SOC         || Exynos5422 || AllWinnerTech SOC A20 || Broadcom BCM2711&lt;br /&gt;
|-&lt;br /&gt;
| ARM Cortex  || 4x A15 + 4x A7 || A7               || A72&lt;br /&gt;
|-&lt;br /&gt;
| Takt        || 2Ghz + 1.4Ghz    || 0.9GHz           || 1.5GHz&lt;br /&gt;
|-&lt;br /&gt;
| RAM         || 2Gbyte DDR 3     || 1GB/2GB DDR3@480MHz || 4Gbyte&lt;br /&gt;
|-&lt;br /&gt;
|  Arbeits&amp;amp;shy;speicher || eMMC 5.0 Slot&amp;lt;br /&amp;gt;microSD Slot || NAND+MicroSD&amp;lt;br /&amp;gt;TSD+ MicroSD&amp;lt;br /&amp;gt;2x MicroSD || microSD&lt;br /&gt;
|-&lt;br /&gt;
| RTC        || Ja, Battery Buffered     || Ja, Battery Buffered || Nein&lt;br /&gt;
|-&lt;br /&gt;
| Peripherie || 2x USB 3.0 Host&amp;lt;br /&amp;gt;1x USB 2 Host&amp;lt;br /&amp;gt;Gigabit Ethernet&amp;lt;br /&amp;gt;HDMI 1.4a&amp;lt;br /&amp;gt;PWM für Lüfter&amp;lt;br /&amp;gt;30 PIN GPIO/IRQ/SPI/ADC&amp;lt;br /&amp;gt;12PIN GPIO/I2S/I2C&amp;lt;br /&amp;gt;UART für serial console || 4x USB 2 Host&amp;lt;br /&amp;gt;2 x USB HOST&amp;lt;br /&amp;gt;1 x OTG&amp;lt;br /&amp;gt;HDMI&amp;amp;VGA 1080P&amp;lt;br /&amp;gt;1 x Toslink (SPDIF Optical)&amp;lt;br /&amp;gt;1 x IR&amp;lt;br /&amp;gt;1 Headphone&amp;lt;br /&amp;gt;Wifi+BT wireless|| 2x USB 2 Host&amp;lt;br /&amp;gt;2x USB 3 Host&amp;lt;br /&amp;gt;Stereo Ausgang und HDMI&amp;lt;br /&amp;gt;Wifi+BT wireless&amp;lt;br /&amp;gt;40-pin extended GPIO&lt;br /&gt;
|-&lt;br /&gt;
| Power || 5V 4A&amp;lt;br /&amp;gt; Stecker innen 2.1mm und außen 5.5mm|| 5V 2.5A || 5V 2.5A micro USB&lt;br /&gt;
|-&lt;br /&gt;
| Preis ca. &amp;lt;small&amp;gt;(Stand Februar 2023)&amp;lt;/small&amp;gt; || ca 80€ || ca 140€ || 210€&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
Das XU4 Board gibt es in zwei Versionen. Einmal der XU4 mit PWM gesteuertem Lüfter auf einem Kühlkörper und dann die XU4Q Version ohne Lüfter aber dafür mit einem größeren Kühlkörper. Der Prozessor hat mehrere Profile zur Auswahl wie die einzelnen Kern Gruppen (A15 oder A7) Takten. Es kann dabei die maximale Taktfrequenz der BIG Cores (A15) eingestellt werden oder auch das Leistungsprofil der gesamten CPU (interactive, conservative, ondemand, powersave, performance).&lt;br /&gt;
Der Prozessor bewegt sich bei beiden Hardware Versionen mehr auf der warmen Seite. Temperaturen bis 80°C sind unter last keine Seltenheit aber auch kein Problem da der Prozessor bei 105°C automatisch heruntertaktet oder wenn nötig die BIG Cores offline schaltet.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vefügbare Betriebssysteme ==&lt;br /&gt;
Stand 12/2017&amp;lt;br /&amp;gt;&lt;br /&gt;
Im Odroid Forum oder direkt von der Hardkernel WIKI zu beziehen. &amp;lt;br /&amp;gt;&lt;br /&gt;
Zusätzlich gibt es noch ein monatlich erscheinendes Magazin mit Projekten und HowTo&#039;s&lt;br /&gt;
&lt;br /&gt;
=== Offizielle Images ===&lt;br /&gt;
Android 4.4.4&amp;lt;br /&amp;gt;&lt;br /&gt;
Ubuntu 16.04 (Kernel 3.10.y), Ubuntu 16.04.2 (LTS Kernel 4.9.y), Ubuntu 16.04.2 (LTS Kernel 4.14.y)&amp;lt;br /&amp;gt;&lt;br /&gt;
=== Third Party ===&lt;br /&gt;
Debian/Jessie, DietPi, Armbian Ubuntu/Debian&amp;lt;br /&amp;gt;&lt;br /&gt;
Arch Linux, Kali Linux&amp;lt;br /&amp;gt;&lt;br /&gt;
Android 7.1 Nougat, LineageOS-14.1, Android TV OS&amp;lt;br /&amp;gt;&lt;br /&gt;
OpenmediaVault, RecalBox, Lakka&amp;lt;br /&amp;gt;&lt;br /&gt;
GameStation Turbo mit XBMC&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Erste Inbetriebnahme ==&lt;br /&gt;
Als Betriebssystem eignet sich, wegen die Nähe zum RaspberryPi System, ein Debian Betriebssystem. Ein gut gepflegtes System das auch für Anfänger geeignet sein sollte (Viele Scrpits die per SSH alle konfiguartionen und installationen automatisieren) ist DietPi.&amp;lt;br /&amp;gt;&lt;br /&gt;
Momentan ist DietPi in der Version 6.15 und enthält den Stretch Kernel in der Version 4.14.66+.&lt;br /&gt;
In diesem Artikel wird die Installation auf SD Karte mit hilfe eines Windown PC beschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Download von DietPi und Vorbereitung der SD Karte ===&lt;br /&gt;
Von der [http://dietpi.com/ DietPi Homapage] kann nach Auswahl der XU4 das System heruntergeladen werden.&lt;br /&gt;
Nach dem Auspacken unter Windows wird das Image mit dem Win32Diskmanager (bei Hardkernel gibt es eine extra Version mit Verify Funktion) oder mit der Software Etcher auf die SD Karte geschrieben.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls direkt mit einem WIFI USB Stick gearbeitet werden soll kann das System vor dem ersten Boot darauf vorbereitet werden:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Die SD karte in den Kartenleser am PC stecken (Warnungen der nicht lesbaren Partition ignorieren)&lt;br /&gt;
Die lesbare Partition öffnen und darin die datei dietpi.txt öffnen&lt;br /&gt;
Darin (Kommentar Zeichen # vor den zeilen entfernen):&lt;br /&gt;
&lt;br /&gt;
Wifi_Enabled=1&lt;br /&gt;
Wifi_SSID=DeineSSID&lt;br /&gt;
Wifi_KEY=DeinWIFIKey&lt;br /&gt;
&lt;br /&gt;
Vor dem ersten Start den USB Wifi Adapter einstecken&lt;br /&gt;
SD karte in die XU4 stecken.&lt;br /&gt;
Stromversorgung einschalten.&lt;br /&gt;
Warten bis DietPi das Dateisystem vorbereitet hat, es kommt dabei auch zwei mal zu einem Reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Weiteres bearbeiten des Systems über SSH ===&lt;br /&gt;
DietPi kommt mit Dropbear SSH Server vorinstalliert. Man sollte sich nach der installation über Putty mit dem System verbinden können.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
username = root&lt;br /&gt;
password = dietpi&lt;br /&gt;
&lt;br /&gt;
Über den Befehl:&lt;br /&gt;
dietpi-config&lt;br /&gt;
Hat man auf umfangreiche Einstellungen zugriff.&lt;br /&gt;
z.B. &lt;br /&gt;
Zeitzone einstellen&lt;br /&gt;
Router Verbindungen einstellen DHCP/Static etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installation von FHEM ==&lt;br /&gt;
Die FHEM installation kann danach von der Bash aus gestartet werden.&lt;br /&gt;
Dazu über Putty Verbindung aufbauen und FHEM Installieren. Laut der FHEM for Debian Seite ist folgendes zu tun.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - http://debian.fhem.de/archive.key | apt-key ad&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zu der Datei /etc/apt/sources.list folgendes anfügen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
deb http://debian.fhem.de/nightly/ /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
danach&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install fhem&lt;br /&gt;
reboot now&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach sollte FHEM unter eurer XU4 IP erreichbar sein.&lt;br /&gt;
Als erstes in die FHEM Commandozeile folgendes eingeben&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
update all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Weitere Konfiguartion==&lt;br /&gt;
Zusätzlich zu der Grundinstallation lassen sich noch weitere Einstellungen vornhemen. Grundsätzlich sind alle Änderungen auch mit der Linux bash und spt-get etc. durchzuführen. Da DietPi aber viele scripte mitbringt die auch in allen Parameter an das System angepasst sind sollte zuerst die Installation oder Einrichtung darüber durchgeführt werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Alle Scripts von DietPi sind über folgenden Befehl zu erreichen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dietpi-launcher&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ich gehe hier nur auf einige Module direkt ein, die anderen können je nach Aufbau des Heimsystems auch noch nützlich sein.&lt;br /&gt;
===Backup===&lt;br /&gt;
Nach erfolgreicher Installation kann von dem komplette System (Linux inklusive aller User dateien) ein Backup angelegt werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Dazu per SSH verbinden und folgendes starten&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dietpi-backup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Danach kann dort der Speicherort, der Umfang (System oder System und User data) oder ob ein Backup bzw. ein Restore gemacht werden soll, ausgewählt werden.&lt;br /&gt;
Im Falle eines System crash, einfach DietPi neu installieren und über das Dietpi-backup ein restore durchführen.&lt;br /&gt;
Das Backup ist inkrementell und ändert bei erneutem durchführen nur die veränderten oder neuen Dateien ab.&amp;lt;br /&amp;gt;Möchten man ein komplett neues Backup anlegen so ist ein anderer Speicherort (Ordner) zu wählen. Beim Restore kann dann die Version (Ordner) ausgesucht werden. &lt;br /&gt;
&lt;br /&gt;
===RootFS auslagern===&lt;br /&gt;
Ein angeschlossene HDD/SSD oder auch ein USB Stick können dazu benutzt werden das RootFS darauf auszulagern. Die SD karte ist dann leider immer noch notwendig wird aber nur zum Bootvorgang benutzt&amp;lt;br /&amp;gt;&lt;br /&gt;
Zum Start der Umlagerung gibt man folgendes ein&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dietpi-drive_manager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Es wird dann eine Auflistung der mounted drives angezeigt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Von der SD Karte&lt;br /&gt;
/dev/mmcblklp1 ist das Boot Drive&lt;br /&gt;
/deb/mmcblklp2 ist die System Partition&lt;br /&gt;
&lt;br /&gt;
und&lt;br /&gt;
&lt;br /&gt;
/dev/sda/1 ist zum Beispiel dann eine angeschlossene HDD/SSD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dann wählt man das Drive aus auf den man das RootFS auslagern möchte&amp;lt;br /&amp;gt;&lt;br /&gt;
Es werden dann einige Details der Partition angezeigt, zusätzlich gibt es noch mal ein Auswahlmenü.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Unmount         : Allows you to physically remove the drive&lt;br /&gt;
Move User data  : Move your DietPi user data to this drive&lt;br /&gt;
Mount Method    : Change from UUID to dev/sd&lt;br /&gt;
Read only       : Disabled | Select to set read only&lt;br /&gt;
Format          : Wipe all data and format drive with ext4&lt;br /&gt;
Transfer RootFS : Transfer RootFS to this drive&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Um den Transer zu starten wird das letzte Menu ausgewählt und mit return gestartet. sollte das Drive noch zu formatieren sein kann dies ebenso im Drive Manager geschehen. Das Menu ist ja oben schon aufgeführt.&amp;lt;br /&amp;gt;&lt;br /&gt;
Alle Menüs sund Dialog geführt und geben einen Hinweiß wenn etwas nicht funktionieren sollte bzw. noch etwas zu ändern ist.&amp;lt;br /&amp;gt;&lt;br /&gt;
Nach dem Ende des Vorgangs und einem Reboot startet das System nun von der Platte.&amp;lt;br /&amp;gt; &lt;br /&gt;
Falls nötig kann jederzeit das System wieder auf die SD Karte umgelagert werden. Dazu im Drive manager Menü als zu bearbeitende Partition die SD System Partition auswählen. Ein Backup danach nicht vergessen.&lt;br /&gt;
&lt;br /&gt;
==Zusätzliche Perl Module==&lt;br /&gt;
Falls, je nach Nutzung von FHEM, noch zusätzliche FHEM Module installiert werden müssen konnte ich dies immer mit den Debian Paket Manager nach den Anleitungen aus dem FHEM Forum oder der WIKI für debian-jessie tun.&amp;lt;br /&amp;gt;&lt;br /&gt;
Zum Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
JSON&lt;br /&gt;
apt-get install libjson-perl&lt;br /&gt;
&lt;br /&gt;
AES&lt;br /&gt;
apt-get install libcrypt-cbc-perl&lt;br /&gt;
apt-get install libcrypt-rijndael-perl&lt;br /&gt;
apt-get install libssl-dev&lt;br /&gt;
apt-get install libcrypt-openssl-rsa-perl&lt;br /&gt;
apt-get install make&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-install libc6-dev&lt;br /&gt;
cpan Crypt/OpenSSL/AES.pm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Einige Module sind schon vorhanden andere müssen eben wie gezeigt nachinstalliert werden.&lt;br /&gt;
&lt;br /&gt;
==Fehlersuche==&lt;br /&gt;
Hier noch der eine oder andere Tip für die Fehlersuche am XU4&amp;lt;br /&amp;gt;&lt;br /&gt;
===Heartbeat===&lt;br /&gt;
Das Board hat eine rote und eine blaue LED. Die rote LED ist die Anzeige für die Stromversorgung. Diese Leuchtet sobald der Strom verfügbar ist. Auch wenn das Board nicht aktiv ist.&amp;lt;br /&amp;gt;&lt;br /&gt;
Die blaue LED Leuchtet dauerhaft während des Boot Vorgangs und fängt dann im Sekundentakt (Heartbeat) an zu zu blinken sobald der Kernel läuft.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
blink-blink -&amp;gt; 1 sec pause -&amp;gt; blink-blink usw.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Sollte die LED nicht blinken wurde der Bootvorgang nicht sauber durchgeführt un der Kernel nicht gestartet. &amp;lt;br /&amp;gt;&lt;br /&gt;
Dies kann verschiedene Ursachen haben.&amp;lt;br /&amp;gt;&lt;br /&gt;
Unter anderem&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Stromversorgung defekt&amp;lt;br /&amp;gt;&lt;br /&gt;
SD karte defekt&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Stromversorgung MUSS 5V und mindestens 4A haben, falls weniger Leistung zur Verfügung steht kommt es zu Boot Problemen.&amp;lt;br /&amp;gt;&lt;br /&gt;
Es kann aber auch ein Problem mit der SD karte existieren (System, Boot Partition, SD defekt). Abhilfe bringt meist ein flashen der SD Karte. Wenn ein Backup erstellt wurde ist dies natürlich kein Problem.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SD karte neu flashen&lt;br /&gt;
eventuell RootFS wieder auslagern&lt;br /&gt;
&lt;br /&gt;
FHEM neu Aufspielen&lt;br /&gt;
FHEM Backup einspielen&lt;br /&gt;
Rechte anpassen&lt;br /&gt;
 oder&lt;br /&gt;
Komplettes XU4 Backup über dietpi-backup wieder einspielen.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
Link zum Ordoid [https://forum.odroid.com/ Forum]&amp;lt;br /&amp;gt;&lt;br /&gt;
Link zur Odroid [https://wiki.odroid.com/ WIKI]&amp;lt;br /&amp;gt;&lt;br /&gt;
Link zum Odroid [https://magazine.odroid.com/ Magazin]&amp;lt;br /&amp;gt;&lt;br /&gt;
Link zur [https://debian.fhem.de/ FHEM for Debian] Seite&amp;lt;br /&amp;gt;&lt;br /&gt;
Link zu DietPi [https://dietpi.com/]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Server Hardware]]&lt;/div&gt;</summary>
		<author><name>AlanBlack</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=ODROID_XU4&amp;diff=38121</id>
		<title>ODROID XU4</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=ODROID_XU4&amp;diff=38121"/>
		<updated>2023-02-11T20:14:49Z</updated>

		<summary type="html">&lt;p&gt;AlanBlack: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Beim ODROID XU4 handelt es sich um einen Einplatinencomputer von [http://www.hardkernel.com/main/products/prdt_info.php Hardkernel] mit dem Exynos5422 Octa Core Prozessor bestehend aus 4x Cortex(TM) -A15 2Ghz und 4x Cortex(TM) -A7 1.4Ghz.&amp;lt;br /&amp;gt;&lt;br /&gt;
der XU4 ist der Nachfolger des XU3 und ist von der Systemebene kompatibel. Es sind aus diesem Grund viele System Images des XU4 mit der Endung XU3 versehen.&lt;br /&gt;
Zum Vergleich ist in der Tabelle [[Cubieboard 3|Cubieboard]] und [[Raspberry Pi|Raspberry Pi 3b]] aufgeführt. Die Tabelle soll nur einen Überblick darstellen und erhebt keinen Anspruch auf Vollständigkeit.&lt;br /&gt;
{| class=&amp;quot;wikitable zebra toptextcells&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Eigenschaft !! ODROID XU4 !! Cubieboard &#039;&#039;&#039;3&#039;&#039;&#039; || Raspberry Pi &#039;&#039;&#039;4&#039;&#039;&#039; Model B&lt;br /&gt;
|-&lt;br /&gt;
| SOC         || Exynos5422 || AllWinnerTech SOC A20 || Broadcom BCM2711&lt;br /&gt;
|-&lt;br /&gt;
| ARM Cortex  || 4x A15 + 4x A7 || A7               || A72&lt;br /&gt;
|-&lt;br /&gt;
| Takt        || 2Ghz + 1.4Ghz    || 0.9GHz           || 1.2GHz&lt;br /&gt;
|-&lt;br /&gt;
| RAM         || 2Gbyte DDR 3     || 1GB/2GB DDR3@480MHz || 4Gbyte&lt;br /&gt;
|-&lt;br /&gt;
|  Arbeits&amp;amp;shy;speicher || eMMC 5.0 Slot&amp;lt;br /&amp;gt;microSD Slot || NAND+MicroSD&amp;lt;br /&amp;gt;TSD+ MicroSD&amp;lt;br /&amp;gt;2x MicroSD || microSD&lt;br /&gt;
|-&lt;br /&gt;
| RTC        || Ja, Battery Buffered     || Ja, Battery Buffered || Nein&lt;br /&gt;
|-&lt;br /&gt;
| Peripherie || 2x USB 3.0 Host&amp;lt;br /&amp;gt;1x USB 2 Host&amp;lt;br /&amp;gt;Gigabit Ethernet&amp;lt;br /&amp;gt;HDMI 1.4a&amp;lt;br /&amp;gt;PWM für Lüfter&amp;lt;br /&amp;gt;30 PIN GPIO/IRQ/SPI/ADC&amp;lt;br /&amp;gt;12PIN GPIO/I2S/I2C&amp;lt;br /&amp;gt;UART für serial console || 4x USB 2 Host&amp;lt;br /&amp;gt;2 x USB HOST&amp;lt;br /&amp;gt;1 x OTG&amp;lt;br /&amp;gt;HDMI&amp;amp;VGA 1080P&amp;lt;br /&amp;gt;1 x Toslink (SPDIF Optical)&amp;lt;br /&amp;gt;1 x IR&amp;lt;br /&amp;gt;1 Headphone&amp;lt;br /&amp;gt;Wifi+BT wireless|| 2x USB 2 Host&amp;lt;br /&amp;gt;2x USB 3 Host&amp;lt;br /&amp;gt;Stereo Ausgang und HDMI&amp;lt;br /&amp;gt;Wifi+BT wireless&amp;lt;br /&amp;gt;40-pin extended GPIO&lt;br /&gt;
|-&lt;br /&gt;
| Power || 5V 4A&amp;lt;br /&amp;gt; Stecker innen 2.1mm und außen 5.5mm|| 5V 2.5A || 5V 2.5A micro USB&lt;br /&gt;
|-&lt;br /&gt;
| Preis ca. &amp;lt;small&amp;gt;(Stand Februar 2023)&amp;lt;/small&amp;gt; || ca 80€ || ca 140€ || 210€&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
Das XU4 Board gibt es in zwei Versionen. Einmal der XU4 mit PWM gesteuertem Lüfter auf einem Kühlkörper und dann die XU4Q Version ohne Lüfter aber dafür mit einem größeren Kühlkörper. Der Prozessor hat mehrere Profile zur Auswahl wie die einzelnen Kern Gruppen (A15 oder A7) Takten. Es kann dabei die maximale Taktfrequenz der BIG Cores (A15) eingestellt werden oder auch das Leistungsprofil der gesamten CPU (interactive, conservative, ondemand, powersave, performance).&lt;br /&gt;
Der Prozessor bewegt sich bei beiden Hardware Versionen mehr auf der warmen Seite. Temperaturen bis 80°C sind unter last keine Seltenheit aber auch kein Problem da der Prozessor bei 105°C automatisch heruntertaktet oder wenn nötig die BIG Cores offline schaltet.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vefügbare Betriebssysteme ==&lt;br /&gt;
Stand 12/2017&amp;lt;br /&amp;gt;&lt;br /&gt;
Im Odroid Forum oder direkt von der Hardkernel WIKI zu beziehen. &amp;lt;br /&amp;gt;&lt;br /&gt;
Zusätzlich gibt es noch ein monatlich erscheinendes Magazin mit Projekten und HowTo&#039;s&lt;br /&gt;
&lt;br /&gt;
=== Offizielle Images ===&lt;br /&gt;
Android 4.4.4&amp;lt;br /&amp;gt;&lt;br /&gt;
Ubuntu 16.04 (Kernel 3.10.y), Ubuntu 16.04.2 (LTS Kernel 4.9.y), Ubuntu 16.04.2 (LTS Kernel 4.14.y)&amp;lt;br /&amp;gt;&lt;br /&gt;
=== Third Party ===&lt;br /&gt;
Debian/Jessie, DietPi, Armbian Ubuntu/Debian&amp;lt;br /&amp;gt;&lt;br /&gt;
Arch Linux, Kali Linux&amp;lt;br /&amp;gt;&lt;br /&gt;
Android 7.1 Nougat, LineageOS-14.1, Android TV OS&amp;lt;br /&amp;gt;&lt;br /&gt;
OpenmediaVault, RecalBox, Lakka&amp;lt;br /&amp;gt;&lt;br /&gt;
GameStation Turbo mit XBMC&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Erste Inbetriebnahme ==&lt;br /&gt;
Als Betriebssystem eignet sich, wegen die Nähe zum RaspberryPi System, ein Debian Betriebssystem. Ein gut gepflegtes System das auch für Anfänger geeignet sein sollte (Viele Scrpits die per SSH alle konfiguartionen und installationen automatisieren) ist DietPi.&amp;lt;br /&amp;gt;&lt;br /&gt;
Momentan ist DietPi in der Version 6.15 und enthält den Stretch Kernel in der Version 4.14.66+.&lt;br /&gt;
In diesem Artikel wird die Installation auf SD Karte mit hilfe eines Windown PC beschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Download von DietPi und Vorbereitung der SD Karte ===&lt;br /&gt;
Von der [http://dietpi.com/ DietPi Homapage] kann nach Auswahl der XU4 das System heruntergeladen werden.&lt;br /&gt;
Nach dem Auspacken unter Windows wird das Image mit dem Win32Diskmanager (bei Hardkernel gibt es eine extra Version mit Verify Funktion) oder mit der Software Etcher auf die SD Karte geschrieben.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls direkt mit einem WIFI USB Stick gearbeitet werden soll kann das System vor dem ersten Boot darauf vorbereitet werden:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Die SD karte in den Kartenleser am PC stecken (Warnungen der nicht lesbaren Partition ignorieren)&lt;br /&gt;
Die lesbare Partition öffnen und darin die datei dietpi.txt öffnen&lt;br /&gt;
Darin (Kommentar Zeichen # vor den zeilen entfernen):&lt;br /&gt;
&lt;br /&gt;
Wifi_Enabled=1&lt;br /&gt;
Wifi_SSID=DeineSSID&lt;br /&gt;
Wifi_KEY=DeinWIFIKey&lt;br /&gt;
&lt;br /&gt;
Vor dem ersten Start den USB Wifi Adapter einstecken&lt;br /&gt;
SD karte in die XU4 stecken.&lt;br /&gt;
Stromversorgung einschalten.&lt;br /&gt;
Warten bis DietPi das Dateisystem vorbereitet hat, es kommt dabei auch zwei mal zu einem Reboot.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Weiteres bearbeiten des Systems über SSH ===&lt;br /&gt;
DietPi kommt mit Dropbear SSH Server vorinstalliert. Man sollte sich nach der installation über Putty mit dem System verbinden können.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
username = root&lt;br /&gt;
password = dietpi&lt;br /&gt;
&lt;br /&gt;
Über den Befehl:&lt;br /&gt;
dietpi-config&lt;br /&gt;
Hat man auf umfangreiche Einstellungen zugriff.&lt;br /&gt;
z.B. &lt;br /&gt;
Zeitzone einstellen&lt;br /&gt;
Router Verbindungen einstellen DHCP/Static etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installation von FHEM ==&lt;br /&gt;
Die FHEM installation kann danach von der Bash aus gestartet werden.&lt;br /&gt;
Dazu über Putty Verbindung aufbauen und FHEM Installieren. Laut der FHEM for Debian Seite ist folgendes zu tun.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - http://debian.fhem.de/archive.key | apt-key ad&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zu der Datei /etc/apt/sources.list folgendes anfügen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
deb http://debian.fhem.de/nightly/ /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
danach&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install fhem&lt;br /&gt;
reboot now&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach sollte FHEM unter eurer XU4 IP erreichbar sein.&lt;br /&gt;
Als erstes in die FHEM Commandozeile folgendes eingeben&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
update all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Weitere Konfiguartion==&lt;br /&gt;
Zusätzlich zu der Grundinstallation lassen sich noch weitere Einstellungen vornhemen. Grundsätzlich sind alle Änderungen auch mit der Linux bash und spt-get etc. durchzuführen. Da DietPi aber viele scripte mitbringt die auch in allen Parameter an das System angepasst sind sollte zuerst die Installation oder Einrichtung darüber durchgeführt werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Alle Scripts von DietPi sind über folgenden Befehl zu erreichen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dietpi-launcher&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ich gehe hier nur auf einige Module direkt ein, die anderen können je nach Aufbau des Heimsystems auch noch nützlich sein.&lt;br /&gt;
===Backup===&lt;br /&gt;
Nach erfolgreicher Installation kann von dem komplette System (Linux inklusive aller User dateien) ein Backup angelegt werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Dazu per SSH verbinden und folgendes starten&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dietpi-backup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Danach kann dort der Speicherort, der Umfang (System oder System und User data) oder ob ein Backup bzw. ein Restore gemacht werden soll, ausgewählt werden.&lt;br /&gt;
Im Falle eines System crash, einfach DietPi neu installieren und über das Dietpi-backup ein restore durchführen.&lt;br /&gt;
Das Backup ist inkrementell und ändert bei erneutem durchführen nur die veränderten oder neuen Dateien ab.&amp;lt;br /&amp;gt;Möchten man ein komplett neues Backup anlegen so ist ein anderer Speicherort (Ordner) zu wählen. Beim Restore kann dann die Version (Ordner) ausgesucht werden. &lt;br /&gt;
&lt;br /&gt;
===RootFS auslagern===&lt;br /&gt;
Ein angeschlossene HDD/SSD oder auch ein USB Stick können dazu benutzt werden das RootFS darauf auszulagern. Die SD karte ist dann leider immer noch notwendig wird aber nur zum Bootvorgang benutzt&amp;lt;br /&amp;gt;&lt;br /&gt;
Zum Start der Umlagerung gibt man folgendes ein&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dietpi-drive_manager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Es wird dann eine Auflistung der mounted drives angezeigt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Von der SD Karte&lt;br /&gt;
/dev/mmcblklp1 ist das Boot Drive&lt;br /&gt;
/deb/mmcblklp2 ist die System Partition&lt;br /&gt;
&lt;br /&gt;
und&lt;br /&gt;
&lt;br /&gt;
/dev/sda/1 ist zum Beispiel dann eine angeschlossene HDD/SSD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dann wählt man das Drive aus auf den man das RootFS auslagern möchte&amp;lt;br /&amp;gt;&lt;br /&gt;
Es werden dann einige Details der Partition angezeigt, zusätzlich gibt es noch mal ein Auswahlmenü.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Unmount         : Allows you to physically remove the drive&lt;br /&gt;
Move User data  : Move your DietPi user data to this drive&lt;br /&gt;
Mount Method    : Change from UUID to dev/sd&lt;br /&gt;
Read only       : Disabled | Select to set read only&lt;br /&gt;
Format          : Wipe all data and format drive with ext4&lt;br /&gt;
Transfer RootFS : Transfer RootFS to this drive&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Um den Transer zu starten wird das letzte Menu ausgewählt und mit return gestartet. sollte das Drive noch zu formatieren sein kann dies ebenso im Drive Manager geschehen. Das Menu ist ja oben schon aufgeführt.&amp;lt;br /&amp;gt;&lt;br /&gt;
Alle Menüs sund Dialog geführt und geben einen Hinweiß wenn etwas nicht funktionieren sollte bzw. noch etwas zu ändern ist.&amp;lt;br /&amp;gt;&lt;br /&gt;
Nach dem Ende des Vorgangs und einem Reboot startet das System nun von der Platte.&amp;lt;br /&amp;gt; &lt;br /&gt;
Falls nötig kann jederzeit das System wieder auf die SD Karte umgelagert werden. Dazu im Drive manager Menü als zu bearbeitende Partition die SD System Partition auswählen. Ein Backup danach nicht vergessen.&lt;br /&gt;
&lt;br /&gt;
==Zusätzliche Perl Module==&lt;br /&gt;
Falls, je nach Nutzung von FHEM, noch zusätzliche FHEM Module installiert werden müssen konnte ich dies immer mit den Debian Paket Manager nach den Anleitungen aus dem FHEM Forum oder der WIKI für debian-jessie tun.&amp;lt;br /&amp;gt;&lt;br /&gt;
Zum Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
JSON&lt;br /&gt;
apt-get install libjson-perl&lt;br /&gt;
&lt;br /&gt;
AES&lt;br /&gt;
apt-get install libcrypt-cbc-perl&lt;br /&gt;
apt-get install libcrypt-rijndael-perl&lt;br /&gt;
apt-get install libssl-dev&lt;br /&gt;
apt-get install libcrypt-openssl-rsa-perl&lt;br /&gt;
apt-get install make&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-install libc6-dev&lt;br /&gt;
cpan Crypt/OpenSSL/AES.pm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Einige Module sind schon vorhanden andere müssen eben wie gezeigt nachinstalliert werden.&lt;br /&gt;
&lt;br /&gt;
==Fehlersuche==&lt;br /&gt;
Hier noch der eine oder andere Tip für die Fehlersuche am XU4&amp;lt;br /&amp;gt;&lt;br /&gt;
===Heartbeat===&lt;br /&gt;
Das Board hat eine rote und eine blaue LED. Die rote LED ist die Anzeige für die Stromversorgung. Diese Leuchtet sobald der Strom verfügbar ist. Auch wenn das Board nicht aktiv ist.&amp;lt;br /&amp;gt;&lt;br /&gt;
Die blaue LED Leuchtet dauerhaft während des Boot Vorgangs und fängt dann im Sekundentakt (Heartbeat) an zu zu blinken sobald der Kernel läuft.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
blink-blink -&amp;gt; 1 sec pause -&amp;gt; blink-blink usw.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Sollte die LED nicht blinken wurde der Bootvorgang nicht sauber durchgeführt un der Kernel nicht gestartet. &amp;lt;br /&amp;gt;&lt;br /&gt;
Dies kann verschiedene Ursachen haben.&amp;lt;br /&amp;gt;&lt;br /&gt;
Unter anderem&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Stromversorgung defekt&amp;lt;br /&amp;gt;&lt;br /&gt;
SD karte defekt&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Stromversorgung MUSS 5V und mindestens 4A haben, falls weniger Leistung zur Verfügung steht kommt es zu Boot Problemen.&amp;lt;br /&amp;gt;&lt;br /&gt;
Es kann aber auch ein Problem mit der SD karte existieren (System, Boot Partition, SD defekt). Abhilfe bringt meist ein flashen der SD Karte. Wenn ein Backup erstellt wurde ist dies natürlich kein Problem.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SD karte neu flashen&lt;br /&gt;
eventuell RootFS wieder auslagern&lt;br /&gt;
&lt;br /&gt;
FHEM neu Aufspielen&lt;br /&gt;
FHEM Backup einspielen&lt;br /&gt;
Rechte anpassen&lt;br /&gt;
 oder&lt;br /&gt;
Komplettes XU4 Backup über dietpi-backup wieder einspielen.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
Link zum Ordoid [https://forum.odroid.com/ Forum]&amp;lt;br /&amp;gt;&lt;br /&gt;
Link zur Odroid [https://wiki.odroid.com/ WIKI]&amp;lt;br /&amp;gt;&lt;br /&gt;
Link zum Odroid [https://magazine.odroid.com/ Magazin]&amp;lt;br /&amp;gt;&lt;br /&gt;
Link zur [https://debian.fhem.de/ FHEM for Debian] Seite&amp;lt;br /&amp;gt;&lt;br /&gt;
Link zu DietPi [https://dietpi.com/]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Server Hardware]]&lt;/div&gt;</summary>
		<author><name>AlanBlack</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DbLog&amp;diff=37998</id>
		<title>DbLog</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DbLog&amp;diff=37998"/>
		<updated>2023-01-26T18:09:23Z</updated>

		<summary type="html">&lt;p&gt;AlanBlack: /* Beispiel: Anlegen und Nutzung einer SQLite-Datenbank */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Protokolliert Ereignisse in einer Datenbank&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=93_DbLog.pm&lt;br /&gt;
|ModOwner=tobiasfaust ({{Link2FU|118|Forum}}/[[Benutzer Diskussion:Tobias.faust|Wiki]])&amp;lt;br /&amp;gt;DS_Starter ({{Link2FU|16933|Forum}}/[[Benutzer Diskussion:DS_Starter|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Mit der Zeit entstehen in FHEM recht umfangreiche Log-Daten für die verschiedensten konfigurierten Devices. Die übliche Einstiegs-[[Konfiguration]] sieht vor, dass die Logs als {{Link2CmdRef|Lang=de|Anker=FileLog|Label=FileLog}} gespeichert werden - je nach Einstellung in wenigen sehr großen oder vielen kleineren Dateien. Der Datei-basierte Zugriff ist allerdings nicht wirklich performant und kann schnell zum Flaschenhals werden (z.B. bei der Darstellung von Graphen über einen längeren Zeitraum).&lt;br /&gt;
&lt;br /&gt;
Alternativ kann FHEM die Log-Daten mittels {{Link2CmdRef|Lang=de|Anker=DbLog|Label=DbLog}} in einer Datenbank speichern. Diese kann lokal als einfache SQLite- oder als zentrale Server-Datenbank (s.u.) gestaltet sein. Schon eine lokale einfache SQLite-Datenbank ist in der Regel deutlich performanter als File-basierte Logs.&lt;br /&gt;
&lt;br /&gt;
Damit eine Datenbank-Nutzung möglich ist, müssen folgende Anpassungen gemacht werden:&lt;br /&gt;
# [[#Datenbank|Erstellen einer entsprechenden Datenbank]]&lt;br /&gt;
# [[#Datenbank-Anbindung mittels db.conf|Konfiguration der Datenbank-Anbindung in FHEM]]&lt;br /&gt;
# [[#Konfiguration als Device in fhem.cfg|Anpassen aller (oder einzelner) Konfigurationen von FileLog nach DbLog]]&lt;br /&gt;
# [[#Anpassen der gplot-Konfigurationen|Ggf. Anpassen der gplot-Konfigurationen]]&lt;br /&gt;
&lt;br /&gt;
Eine weitere Alternative bietet das Modul [[InfluxDBLogger]].&lt;br /&gt;
&lt;br /&gt;
Reporting und Management von DbLog-Datenbankinhalten kann mit dem Modul [[DbRep - Reporting und Management von DbLog-Datenbankinhalten|DbRep]] stattfinden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
=== Datenbank-Anbindung mittels db.conf ===&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=&#039;&#039;&#039;Anmerkung&#039;&#039;&#039;: MariaDB10 nutzt nicht Port 3306 sondern 3307. Dies ist zum Beispiel bei Synology NAS der Fall.}}&lt;br /&gt;
DbLog wird durch 2 verschiedene Einträge aktiviert/definiert. In einer Datei namens &#039;&#039;&#039;db.conf&#039;&#039;&#039; werden die Parameter für eine Verbindung zur Datenbank (host, username, password, etc.) hinterlegt. Diese Datei kann in einem beliebigen Verzeichnis angelegt werden. Für eine MySQL-Datenbank sieht die db.conf folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
 %dbconfig= (&lt;br /&gt;
     connection =&amp;gt; &amp;quot;mysql:database=fhem;host=db;port=3306&amp;quot;,&lt;br /&gt;
     user =&amp;gt; &amp;quot;fhemuser&amp;quot;,&lt;br /&gt;
     password =&amp;gt; &amp;quot;fhempassword&amp;quot;,&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &#039;&#039;&#039;contrib/dblog&#039;&#039;&#039; der FHEM-Installation befindet sich eine Beispielkonfiguration mit der Syntax für jeden unterstützen Datenbanktyp.&lt;br /&gt;
Es wird empfohlen, diese Datei zu kopieren und erst dann entsprechend zu bearbeiten. Am Besten kopiert man diese Datei in das FHEM Home Directory /opt/fhem/ und achtet auf die entsprechenden Rechte!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;chown fhem:dialout /opt/fhem/db.conf&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration als Device ===&lt;br /&gt;
Das DbLog Device wird dann definiert mit&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; DbLog &amp;lt;configfilename&amp;gt; &amp;lt;regexp&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
wobei &#039;&#039;&amp;lt;configfilename&amp;gt;&#039;&#039; dem Pfad zur zuvor angelegten db.conf entspricht.&lt;br /&gt;
Ein Beispiel hierfür wäre:&lt;br /&gt;
:&amp;lt;code&amp;gt;define logdb DbLog ./db.conf .*:.* &amp;lt;/code&amp;gt;&lt;br /&gt;
Die Angabe von &amp;lt;code&amp;gt;.*:.*&amp;lt;/code&amp;gt; bedeutet, dass sämtliche DeviceMessages (Messwerte, Batteriestatus, KeepAlives, etc.) in die Datenbank geschrieben werden. Dies führt u.U. dazu, dass die Datenbank auch mit vielen teils irrelevanten Werten gefüllt wird. Man kann daher die zu loggenden Werte einschränken, indem man genau angibt welche Werte übertragen werden sollen. Dies ist in [[#Finetuning des Loggings]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
Unbedingt beachten: bei Verwendung des Moduls configdb wird die Konfigurationsdatei aus der &#039;&#039;&#039;&#039;&#039;Datenbank&#039;&#039;&#039;&#039;&#039; gelesen. Deshalb ist es erforderlich, die Datei mittels &amp;lt;code&amp;gt;configdb fileimport db.conf &amp;lt;/code&amp;gt; vorher zu importieren !&lt;br /&gt;
&lt;br /&gt;
=== Finetuning des Loggings ===&lt;br /&gt;
Bei der Konfiguration des Log-Devices werden die zu loggenden Daten definiert - in der einfachsten Form sieht das so aus: &amp;lt;code&amp;gt;define logdb DbLog ./db.conf .*:.* &amp;lt;/code&amp;gt;. Die Angabe von &amp;lt;code&amp;gt;.*:.*&amp;lt;/code&amp;gt; bedeutet, dass sämtliche DeviceMessages (Messwerte, Batteriestatus, KeepAlives, etc.) in die Datenbank geschrieben werden. Dies führt u.U. dazu, dass die Datenbank auch mit sehr vielen und teils nicht benötigten Werten gefüllt wird und schnell wächst. Die Datenbank ist zwar deutlich leistungsfähiger, was große Datenmengen angeht, Datensparsamkeit kann aber schnell sinnvoll werden...&lt;br /&gt;
&lt;br /&gt;
Um das Log-Aufkommen einzugrenzen gibt es mehrere Ansätze:&lt;br /&gt;
* Einschränkung über den &amp;lt;code&amp;gt;define&amp;lt;/code&amp;gt;-Eintrag&lt;br /&gt;
* Einschränkung über DbLogExclude-Einträge der jeweiligen Devices&lt;br /&gt;
* Einschränkung über DbLogInclude-Einträge des jeweiligen Devices&lt;br /&gt;
* Ausschluß von Device/Reading-Kombinationen über das Attribut &amp;quot;excludeDevs&amp;quot;. Es können {{Link2CmdRef|Anker=devspec|Lang=de|Label=devspec}} verwendet werden. &lt;br /&gt;
&lt;br /&gt;
==== Einschränkung über den zentralen &amp;lt;code&amp;gt;define&amp;lt;/code&amp;gt;-Eintrag ====&lt;br /&gt;
Man kann die zu loggenden Werte einschränken, indem man genau angibt welche Werte übertragen werden sollen. Die erste Wildcard, also das erste &amp;lt;code&amp;gt;.*&amp;lt;/code&amp;gt;, entspricht dem in FHEM verwendeten Device-Namen. Die zweite Wildcard entspricht dem vom Device ausgegebenen zu loggenden Wert. Separiert werden beiden Angaben durch einen Doppelpunkt. &lt;br /&gt;
&lt;br /&gt;
Ein Beispiel, um zwar alle definierten Devices zu erfassen, aber nur die Werte Temperatur, Ventilposition und Luftfeuchte in die Datenbank zu schreiben wäre:&lt;br /&gt;
:&amp;lt;code&amp;gt;define myDbLog DbLog ./db.conf .*:(temperature|valveposition|humidity).* &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Einschränkung über die jeweiligen Devices ====&lt;br /&gt;
Man kann die zu loggenden Werte für einzelne Devices separat einschränken, ohne dies im zentralen define-Eintrag machen zu müssen. Dies kann interessant sein, wenn beispielsweise ein Device Fehlerwerte meldet, die uninteressant sind, oder es meldet unnötig häufig Werte - beides ist z.B. bei 1-wire-Temperatursensoren gerne der Fall.&lt;br /&gt;
&lt;br /&gt;
Um das einzuschränken gibt es 2 Stellparameter, die als Attribute direkt zum jeweiligen Device konfiguriert werden:&lt;br /&gt;
* DbLogExclude - definiert Werte, die nicht geloggt werden sollen&lt;br /&gt;
* DbLogInclude - definiert Werte, die geloggt werden sollen ( siehe attr DbLogSelectionMode )&lt;br /&gt;
* event-min-interval, event-on-change-reading und event-on-update-reading beeinflussen, wie häufig Werte geloggt werden (vgl. {{Link2CmdRef|Lang=de|Anker=event-on-update-reading}})&lt;br /&gt;
&lt;br /&gt;
Eine konkrete Konfiguration für einen sehr gesprächigen 1-wire-Temperatursensor könnte wie folgt aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define EG_Balkon GPIO4 BUSMASTER&lt;br /&gt;
attr EG_Balkon DbLogExclude failures,T,85     # logge keine &amp;quot;failures&amp;quot;, &amp;quot;T&amp;quot;-Werte und &amp;quot;85&amp;quot;-Werte (default-Werte, wenn keine Temperatur gelesen werden kann)&lt;br /&gt;
attr EG_Balkon event-on-change-reading state  # logge nur, wenn sich ein Wert ändert (wenn sich die Temperatur nicht ändert, logge das nicht)&lt;br /&gt;
attr EG_Balkon event-min-interval state:900   # logge spätestens alle 900sec = 15min&lt;br /&gt;
attr EG_Balkon event-on-update-reading .*     # logge alle Werte, die aktualisiert werden&lt;br /&gt;
&lt;br /&gt;
attr &amp;lt;1-Wire-Device vom Typ OWTHERM oder OWSWITCH&amp;gt; DbLogExclude data.*      # verhindert das Logging der state-Eintragungen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine in diesem {{Link2Forum|Topic=33697|Message=264127}} vorgestellte Strategie zur Vermeidung unnötigen Loggings ist, dass bei der Definition von Devices durch das nachfolgende &amp;lt;code&amp;gt;notify&amp;lt;/code&amp;gt; automatisch ein DbLogExclude für alle Werte (.*) des Devices zugewiesen wird und dies nur bei Interesse an geloggten Werten gelöscht bzw. angepasst wird:&lt;br /&gt;
&amp;lt;code&amp;gt;define nDbLogExclude notify global:DEFINED.* attr $EVTPART1 DbLogExclude .*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebenso ist es mittlerweile möglich, lediglich erwünschte Werte (Positiv-Liste) zu loggen und alle anderen zu verwerfen. Hierfür wird im LogDevice das attribut DbLogSelectionMode Include verwendet. Nun kann für jedes Device mit DbLogInclude &amp;lt;Reading1&amp;gt;,&amp;lt;Reading2&amp;gt;,... angegeben werden, welche Readings geloggt werden sollen. &lt;br /&gt;
Integriert ist ebenfalls ein &amp;quot;min-interval&amp;quot;, siehe {{Link2CmdRef}}.&lt;br /&gt;
&lt;br /&gt;
== Datenbank ==&lt;br /&gt;
Unterstützte Datenbanksysteme (Auswahl):&lt;br /&gt;
* Sqlite&lt;br /&gt;
* MySQL&lt;br /&gt;
* PostGreSql&lt;br /&gt;
&lt;br /&gt;
=== Tabellen ===&lt;br /&gt;
Die Datenbank ist relativ simpel gestaltet und besteht lediglich aus den folgenden beiden Tabellen:&lt;br /&gt;
* current&lt;br /&gt;
* history&lt;br /&gt;
&lt;br /&gt;
DbLog ist auf eine feste Tabellenstruktur angewiesen. Man muss daher in seiner Datenbank eine Tabelle mit folgenden Spalten anlegen:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Spalte&lt;br /&gt;
! Beschreibung (en)&lt;br /&gt;
! Beschreibung (de)&lt;br /&gt;
! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;TIMESTAMP&#039;&#039;&#039;&lt;br /&gt;
| timestamp of event&lt;br /&gt;
| Zeitstempel&lt;br /&gt;
| 2007-12-30 21:45:22 &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;DEVICE&#039;&#039;&#039;&lt;br /&gt;
| device name&lt;br /&gt;
| Device-Name&lt;br /&gt;
| Wetterstation&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;TYPE&#039;&#039;&#039;&lt;br /&gt;
| device type&lt;br /&gt;
| Device-Typ&lt;br /&gt;
| KS300&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;EVENT&#039;&#039;&#039;&lt;br /&gt;
| event specification as full string&lt;br /&gt;
| Eventspezifikation als Text&lt;br /&gt;
| humidity: 71 (%)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;READING&#039;&#039;&#039;&lt;br /&gt;
| name of reading extracted from event&lt;br /&gt;
| Bezeichnung des Readings&lt;br /&gt;
| humidity&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VALUE&#039;&#039;&#039;&lt;br /&gt;
| actual reading extracted from event&lt;br /&gt;
| Wert des Readings&lt;br /&gt;
| 71&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UNIT&#039;&#039;&#039;&lt;br /&gt;
| unit extracted from event&lt;br /&gt;
| Einheit des Readings&lt;br /&gt;
| %&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Vorlagen zur Anlage von Tabellen und Indizes sind für jeden unterstützten Datenbanktyp im Verzeichnis &#039;&#039;&#039;contrib/dblog&#039;&#039;&#039; der FHEM-Installation, oder hier zu finden: [https://svn.fhem.de/trac/browser/trunk/fhem/contrib/dblog/ Link]. Das MySQL-Skript (db_create_mysql.sql) legt eine neue Datenbank, das PostGres-Skript (db_create_postgresql.sql) ein neues Schema mit Namen &amp;quot;fhem&amp;quot; an.&lt;br /&gt;
&lt;br /&gt;
==== current ====&lt;br /&gt;
Die Tabelle current enthält für jedes zu loggende Device lediglich den letzten Wert. Falls noch kein Wert geloggt wurde, ist diese Tabelle leer. &lt;br /&gt;
Falls der Inhalt gelöscht wird, bauen sich die Daten automatisch wieder auf. Es gehen durch das löschen der Tabelle current keine Log-Informationen verloren.&lt;br /&gt;
Der Inhalt wird aber u.a. für die Dropdown-Felder beim Plot-Editor verwendet.&lt;br /&gt;
&lt;br /&gt;
Um doppelte Einträge in der Tabelle zu vermeiden, wurden die Möglichkeit geschaffen Primary Keys zu definieren. Da in der Spalte &amp;lt;code&amp;gt;READING&amp;lt;/code&amp;gt; u.U. bei verschiedenen Geräten gleiche Namen vorkommen können, sollte der Primary Key um den Gerätenamen erweitert werden. Der Primary Key sollte also aus &amp;lt;code&amp;gt;DEVICE&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;READING&amp;lt;/code&amp;gt; bestehen. Um in der Datenbank &#039;&#039;fhem&#039;&#039; diesen PK zu setzen, kann folgender SQL Code verwendet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
ALTER TABLE `fhem`.`current` &lt;br /&gt;
CHANGE COLUMN `DEVICE` `DEVICE` VARCHAR(64) CHARACTER SET &#039;utf8&#039; COLLATE &#039;utf8_bin&#039; NOT NULL ,&lt;br /&gt;
CHANGE COLUMN `READING` `READING` VARCHAR(64) CHARACTER SET &#039;utf8&#039; COLLATE &#039;utf8_bin&#039; NOT NULL ,&lt;br /&gt;
ADD PRIMARY KEY (`DEVICE`, `READING`);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Achtung: Die Tabelle &amp;quot;current&amp;quot; wird nur befüllt, wenn das Attribut DbLogType auf Current oder Current/History gesetzt ist.&lt;br /&gt;
&lt;br /&gt;
==== history ====&lt;br /&gt;
Die Tabelle history enthält alle bisher geloggten Daten. Löschen in dieser Tabelle bedeutet automatisch Datenverlust (gewollt oder nicht ... )&lt;br /&gt;
Der Inhalt dieser Tabelle wird verwendet, um die Plots zu zeichnen oder Auswertungen mit [[DbRep - Reporting und Management von DbLog-Datenbankinhalten|DbRep]] anzufertigen&lt;br /&gt;
&lt;br /&gt;
{{Todo|Ausbauen}}&lt;br /&gt;
&lt;br /&gt;
Um Problem beim Import von cacheFiles zu vermeiden, kann in der Datenbank ein PK angelegt werden, welcher Timestamp, Device und Reading umfasst. Dadurch werden doppelte Einträge wirksam verhindert.&lt;br /&gt;
&lt;br /&gt;
== Anpassen der gplot-Konfigurationen ==&lt;br /&gt;
Die meisten gplot-Konfigurationen sind bisher lediglich auf FileLog-Konfigurationen ausgelegt. Deshalb müssen sie für die Verwendung mit DbLog angepasst werden. Glücklicherweise beschränkt sich dies auf die reinen FileLog-Zeilen - es müssen die DbLog-Äquivalente hinzugefügt werden. Die FileLog-Einträge müssen zwar nicht gelöscht werden, wenn man aber FileLog und DbLog parallel betreibt, sollte man getrennte gplot-Dateien für beide Logging-Typen haben um Auswertungsprobleme erkennen zu können.&lt;br /&gt;
&lt;br /&gt;
Für die fht.gplot Konfiguration sähe die Anpassung wie folgt aus (lediglich die vier DbLog-Zeilen wurden hinzugefügt):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Perl&amp;quot;&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-12-25 21:53:30&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;&amp;lt;L1&amp;gt;&#039;&lt;br /&gt;
set ytics nomirror&lt;br /&gt;
set y2tics &lt;br /&gt;
set grid y2tics&lt;br /&gt;
set ylabel &amp;quot;Actuator/Window (%)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Temperature in C&amp;quot;&lt;br /&gt;
set yrange 0:100&lt;br /&gt;
set y2range 5:25&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:.measured-temp\x3a:0:&lt;br /&gt;
#FileLog 4:.actuator\x3a:0:int&lt;br /&gt;
#FileLog 4:.desired-temp::&lt;br /&gt;
#FileLog 4:.window\x3a::&lt;br /&gt;
&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:.measured-temp:0:&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:.actuator:0:int&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:.desired-temp::&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:.window::&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Measured temperature&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Actuator (%)&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Desired Temperature&#039; ls l2 lw 1 with steps,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Window&#039; ls l3 lw 1 with steps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Des Weiteren ist zu beachten: &lt;br /&gt;
&lt;br /&gt;
On-Off-Plots&lt;br /&gt;
&lt;br /&gt;
 EG_Bad:window:::$val=~s/(on|off)(\d*).*/$1eq&amp;quot;on&amp;quot;?1:0/eg&lt;br /&gt;
&lt;br /&gt;
unter Berücksichtigung von dim-Werten:&lt;br /&gt;
&lt;br /&gt;
 EG_WoZi_Licht:value:::$val=~s/(on|off)(\d*).*/$1eq&amp;quot;on&amp;quot;?1:($1eq&amp;quot;dim&amp;quot;?$2*0.01:0)/eg&lt;br /&gt;
&lt;br /&gt;
== Beispiel: Anlegen und Nutzung einer SQLite-Datenbank ==&lt;br /&gt;
Im folgenden wird eine lokale SQLite-Datenbank auf einen Ubuntu-System angelegt (nach Quelle: http://www.tatsch-it.de/fhem-dblog/)&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Installation von SQLite:&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo aptitude install sqlite3 libdbi-perl libdbd-sqlite3-perl&lt;br /&gt;
&lt;br /&gt;
oder auf aktuellerem Stand&lt;br /&gt;
&lt;br /&gt;
sudo apt install sqlite3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Anlegen der SQLite-Datenbank fhem.db&#039;&#039; (öffnet auch direkt eine SQL-Kommandozeile):&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sqlite3 /opt/fhem/fhem.db&amp;lt;/pre&amp;gt;&lt;br /&gt;
In der geöffneten SQL-Kommandozeile eingeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TABLE history (TIMESTAMP TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, DEVICE varchar(64), TYPE varchar(64), EVENT varchar(512), READING varchar(64), VALUE varchar(128), UNIT varchar(32));&lt;br /&gt;
CREATE TABLE current (TIMESTAMP TIMESTAMP, DEVICE varchar(64), TYPE varchar(64), EVENT varchar(512), READING varchar(64), VALUE varchar(128), UNIT varchar(32));&lt;br /&gt;
CREATE INDEX Search_Idx ON `history` (DEVICE, READING, TIMESTAMP);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die Kommandozeile verlässt man mit &amp;lt;code&amp;gt;.exit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Anpassen des Besitzers und der Rechte der Datenbank-Datei:&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chown fhem /opt/fhem/fhem.db&lt;br /&gt;
sudo chmod 600 /opt/fhem/fhem.db&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Datenbank-Anbindung des FHEM konfigurieren:&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo nano /opt/fhem/db.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
Inhalt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%dbconfig= (&lt;br /&gt;
  connection =&amp;gt; &amp;quot;SQLite:dbname=/opt/fhem/fhem.db&amp;quot;,&lt;br /&gt;
  user =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
  password =&amp;gt; &amp;quot;&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Logging des FHEM auf die Datenbank konfigurieren:&#039;&#039; (hier sind nur die Anpassungen aufgeführt)&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo nano /opt/fhem/fhem.cfg&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
attr global userattr DbLogExclude ...  # erlaubt es einzelne Einträge nicht zu loggen&lt;br /&gt;
...&lt;br /&gt;
define logdb DbLog ./db.conf .*:.*     # logt alle(!) auflaufenden Events aller Konfigurationen&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Da durch diese &amp;lt;code&amp;gt;define&amp;lt;/code&amp;gt;-Definition alle auflaufenden Events gelogt werden, müssen keine weiteren Anpassungen in der Konfiguration gemacht werden. Die FileLog-Einträge können bedenkenlos bestehen bleiben - dann wird in Datenbank und FileLog gelogt und man verliert keine Daten, falls etwas nicht klappt. Wenn alles wie geplant läuft, können die FileLog-Definitionen gelöscht werden (ebenso die Log-Dateien). Ebenso können die zu loggenden Daten später eingegrenzt werden (s. [[#Finetuning des Loggings]]).&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;FHEM neu starten:&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo service fhem stop&lt;br /&gt;
sudo service fhem start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Kontrollieren, ob Logs in die Datenbank geschrieben werden:&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sqlite3 /opt/fhem/fhem.db&amp;lt;/pre&amp;gt;&lt;br /&gt;
In der geöffneten SQL-Kommandozeile eingeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
select * from history order by TIMESTAMP;       # dies gibt alle(!) Logs chronologisch aus (kann nach längerem Betrieb recht lange dauern)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die Kommandozeile verlässt man mit &amp;lt;code&amp;gt;.exit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Anpassung der glot-Dateien:&#039;&#039; siehe [[#Anpassen der gplot-Konfigurationen]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel: Anlegen und Nutzung einer Mysql-Datenbank ==&lt;br /&gt;
Hierfür gibt es eine [[DbLog-MySQL|extra Seite]], die die Unterschiede und Feinheiten zwischen den verschiedenen Versionen berücksichtigt&lt;br /&gt;
&lt;br /&gt;
Anstatt nano kann jeder andere kompatible Editor verwendet werden. Weiterhin bitte beachten, dass die hier genannten Befehle teilweise root-Rechte voraussetzen. Entweder komplett als root arbeiten, oder mittels sudo.&lt;br /&gt;
&lt;br /&gt;
Unter Ubuntu/debian: &lt;br /&gt;
 apt-get update &amp;amp;&amp;amp; apt-get install mysql-server mysql-client libdbd-mysql libdbd-mysql-perl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei der Installation sollte man aus Sicherheitsgründen ein Passwort für den mysql-root vergeben, wenn man nicht sogar ganz den Login verbietet.&lt;br /&gt;
&lt;br /&gt;
Hinweis: im Folgenden ist &amp;quot;#&amp;quot; der normale Prompt und &amp;quot;mysql&amp;gt;&amp;quot; der prompt innerhalb mysql, dieser kann mit exit verlassen werden. &lt;br /&gt;
&lt;br /&gt;
Zum Test mal mit mysql verbinden:&lt;br /&gt;
 # mysql -p -u root&lt;br /&gt;
 Enter password:&lt;br /&gt;
 mysql&amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
Jetzt die Tabellenstruktur anlegen. &lt;br /&gt;
Hierfür kann die Datei /opt/fhem/contrib/dblog/db_create_mysql.sql als Vorlage verwendet und das Passwort und der Benutzername geändert werden. &lt;br /&gt;
 cd /opt/fhem/contrib/dblog/&lt;br /&gt;
 nano db_create_mysql.sql&lt;br /&gt;
Dann wird die Datei eingelesen (root Passwort wird abgefragt): &lt;br /&gt;
&lt;br /&gt;
 # mysql -u root -p &amp;lt; db_create_mysql.sql&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man den Zugang testen: &lt;br /&gt;
&lt;br /&gt;
 # mysql -p -u &amp;lt;fhemuser&amp;gt;&lt;br /&gt;
 Enter password: &amp;lt;fhempassword&amp;gt;&lt;br /&gt;
 mysql&amp;gt; show databases;&lt;br /&gt;
&lt;br /&gt;
Nun müsste eine Datenbank &amp;quot;fhem&amp;quot; angezeigt werden, die die Tabellen current und history enthält.&lt;br /&gt;
&lt;br /&gt;
Nun in der Datei db.conf den mysql-Block auskommentieren und ebenfalls Benutzername, Passwort UND HOST anpassen. Leider ist hier nicht standardmäßig localhost eingestellt.&lt;br /&gt;
 nano /opt/fhem/db.conf&lt;br /&gt;
&lt;br /&gt;
Jetzt kann unter FHEM ein DbLog-Device angelegt werden (mit dem beispiel wird alles geloggt: &lt;br /&gt;
 define logdb DbLog ./db.conf .*:.*&lt;br /&gt;
Als State muss ein &amp;quot;connected&amp;quot; angezeigt werden. &lt;br /&gt;
&lt;br /&gt;
Ein rereadcfg in FHEM stellt sicher, dass die neue Konfiguration übernommen wird - ein Neustart ist nicht erforderlich.&lt;br /&gt;
&lt;br /&gt;
Nun kann die Funktion noch einmal überprüft werden: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 # mysql -u &amp;lt;fhemuser&amp;gt; -p&lt;br /&gt;
 Enter password: &amp;lt;fhempassword&amp;gt;&lt;br /&gt;
 mysql&amp;gt; use fhem;&lt;br /&gt;
 Database changed&lt;br /&gt;
 mysql&amp;gt; show tables;&lt;br /&gt;
 +----------------+&lt;br /&gt;
 | Tables_in_fhem |&lt;br /&gt;
 +----------------+&lt;br /&gt;
 | current        |&lt;br /&gt;
 | history        |&lt;br /&gt;
 +----------------+&lt;br /&gt;
 2 rows in set (0,00 sec)&lt;br /&gt;
 mysql&amp;gt; select * from history; # Achtung, kann sehr groß werden .... #&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anscheinend gibt es bei der neuen Version MariaDB (im Gegensatz zu mysql) ein neues Anmeldeverfahren, so dass in der Datenbank selbst Veränderungen vorgenommen werden müssen, damit der Zugriff durch FHEM funktioniert: https://kofler.info/root-login-problem-mit-mariadb/&lt;br /&gt;
&lt;br /&gt;
Die Daten im MySQL können auch für die längere Aufbewahrung partitioniert werden. Dabei wird pro Partition eine Datei erzeugt statt einer gemeinsamen Datei für alle Daten. Je nach Wunsch zum Beispiel partitioniert nach Jahr.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
Alter table history PARTITION BY RANGE ( UNIX_TIMESTAMP(timestamp) ) (&lt;br /&gt;
    PARTITION p0 VALUES LESS THAN ( UNIX_TIMESTAMP(&#039;2019-01-01 00:00:00&#039;) ),&lt;br /&gt;
    PARTITION p1 VALUES LESS THAN ( UNIX_TIMESTAMP(&#039;2020-01-01 00:00:00&#039;) ),&lt;br /&gt;
    PARTITION p2 VALUES LESS THAN ( UNIX_TIMESTAMP(&#039;2021-01-01 00:00:00&#039;) ),&lt;br /&gt;
    PARTITION p3 VALUES LESS THAN ( UNIX_TIMESTAMP(&#039;2022-01-01 00:00:00&#039;) ),&lt;br /&gt;
    PARTITION p4 VALUES LESS THAN ( UNIX_TIMESTAMP(&#039;2023-01-01 00:00:00&#039;) ),&lt;br /&gt;
    PARTITION p5 VALUES LESS THAN ( UNIX_TIMESTAMP(&#039;2024-01-01 00:00:00&#039;) ),&lt;br /&gt;
    PARTITION p6 VALUES LESS THAN ( UNIX_TIMESTAMP(&#039;2025-01-01 00:00:00&#039;) ),&lt;br /&gt;
    PARTITION p7 VALUES LESS THAN (MAXVALUE) );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel: Abfragescript PHP/MySQL ==&lt;br /&gt;
Um eine schnelle Übersicht zu bekommen habe ich mir dieses Script geschrieben:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php $pdo = new PDO(&#039;mysql:host=localhost;dbname=fhem&#039;, &#039;fhemuser&#039;, &#039;fhempasswort&#039;);&lt;br /&gt;
echo &#039;&amp;lt;h2&amp;gt;Tabelle Current&amp;lt;/h1&amp;gt;&amp;lt;br&amp;gt;&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
  echo &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Anzahl&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Readings&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;
$sql = &amp;quot;SELECT COUNT(*), DEVICE, GROUP_CONCAT(DISTINCT READING ORDER BY READING DESC SEPARATOR &#039;&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;&#039;) FROM current GROUP BY DEVICE;&amp;quot;; foreach ($pdo-&amp;gt;query($sql) as&lt;br /&gt;
$row) {&lt;br /&gt;
  echo &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;quot; . $row[0] . &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;quot; . $row[1] . &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt;&amp;quot; . $row[2] . &amp;quot;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
echo &amp;quot;&amp;lt;/table&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;h2&amp;gt;Tabelle History&amp;lt;/h1&amp;gt;&amp;lt;br&amp;gt;&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
  echo &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Anzahl&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;
$sql = &amp;quot;SELECT COUNT(*), DEVICE FROM history GROUP BY DEVICE;&amp;quot;; foreach ($pdo-&amp;gt;query($sql) as&lt;br /&gt;
$row) {&lt;br /&gt;
  echo &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;quot; . $row[0] . &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;quot; . $row[1] . &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
echo &amp;quot;&amp;lt;/table&amp;gt;&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte passt &#039;&#039;fhemuser&#039;&#039; und &#039;&#039;fhempasswort&#039;&#039; an. Das Ganze kommt dann nach &amp;lt;code&amp;gt;/var/www/html/fhemdb.php&amp;lt;/code&amp;gt; und ist mit &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;IP&amp;gt;/fhemdb.php&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; aufrufbar. Wenn ihr den zweiten Block für die history Tabelle ausklammert oder entfernt, läuft das Script viel schneller ab - klar die history Tabelle ist meist randvoll.&lt;br /&gt;
&lt;br /&gt;
== Integration von DBLog in eigene Module ==&lt;br /&gt;
=== Bereitstellung der UNITS ===&lt;br /&gt;
Mit der DbLog_splitFn kann der Modulautor selbst festlegen, wie die Events des Moduls in die Bestandteile Reading/Value/Unit zerlegt werden um ein korrektes Logging per DbLog zu gewährleisten.&lt;br /&gt;
&lt;br /&gt;
Dazu muss der Modulautor in der [[DevelopmentModuleIntro#X_Initialize|Initialize-Funktion]] eine &amp;lt;code&amp;gt;DbLog_splitFn&amp;lt;/code&amp;gt; bereitstellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub X_Initialize($)&lt;br /&gt;
{&lt;br /&gt;
	my ($hash) = @_;&lt;br /&gt;
	...&lt;br /&gt;
	$hash-&amp;gt;{DbLog_splitFn}      = &amp;quot;X_DbLog_splitFn&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die genaue Aufrufsyntax und Funktionweise einer DbLog_split-Funktion findet man [[DevelopmentModuleIntro#X_DbLog_split|hier]].&lt;br /&gt;
&lt;br /&gt;
== Werte auslesen ==&lt;br /&gt;
Manchmal möchte man Daten aus den Logs abrufen ohne händisch in der Datenbank herumzuwühlen (s.u.). Dies ist insbesondere auch dann hilfreich, wenn man eigene Funktionen, Notifys oder spezielle Plots entwirft, bei denen man auf Logdaten zugreifen möchte.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich beschrieben ist dies in der {{Link2CmdRef|Lang=de|Anker=DbLog}} und unterscheidet sich minimal (aber entscheidend) von der Struktur bei [[FileLog#Werte_auslesen|FileLogs]].&lt;br /&gt;
&lt;br /&gt;
Hier ein paar Beispiele, was man damit anstellen kann:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;get meineDB - - 2016-10-01 2016-10-03 meinSensor&amp;lt;/code&amp;gt; alle Einträge des meinSensor vom 01.10.-03.10.2016&lt;br /&gt;
* &amp;lt;code&amp;gt;get meineDB - - 2016-10-01_08:00:00 2016-10-01_16:00:00 meinSensor&amp;lt;/code&amp;gt; alle Einträge des meinSensor von 8-16 Uhr am 01.10.2016&lt;br /&gt;
* &amp;lt;code&amp;gt;get meineDB - - 2016-10-01_08:00:00 2016-10-01_16:00:00 meinSensor:temperature&amp;lt;/code&amp;gt; nur die temperature Werte&lt;br /&gt;
* &amp;lt;code&amp;gt;{ ReadingsTimestamp(&amp;quot;meinSensor&amp;quot;,&amp;quot;state&amp;quot;,&amp;quot;0&amp;quot;) }&amp;lt;/code&amp;gt; Timestamp des aktuellen state des meinSensor&lt;br /&gt;
* &amp;lt;code&amp;gt;{ OldTimestamp(&amp;quot;meinSensor&amp;quot;) }&amp;lt;/code&amp;gt; Timestamp des letzten state des FHT_3a32&lt;br /&gt;
* &amp;lt;code&amp;gt;{ time_str2num(OldTimestamp(&amp;quot;meinSensor&amp;quot;)) }&amp;lt;/code&amp;gt; Timestamp in Sekunden des letzten state des meinSensor&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Bearbeitung von Datenbank-Einträgen ==&lt;br /&gt;
{{Hinweis|Dieser Abschnitt soll lediglich eine kleine Einführung in die Datenbank-Bearbeitung liefern. Für vertiefende Informationen sollte man sich grundsätzlich mit SQL beschäftigen. Eine umfassende und gut verständliche Anleitung zu SQL bietet bspw. [http://www.w3schools.com/sql/default.asp w3schools].}}&lt;br /&gt;
Irgendwann wird der Fall eintreten, dass in der Datenbank Einträge drinstehen, die geändert oder gelöscht werden sollen (zB. fehlerhafte Sensor-Rückmeldungen, umbenannte Readings). In klassischen Log-Dateien würde man diese einfach bearbeiten und löschen/anpassen (wobei man aber tunlichst zuvor FHEM stoppt, um Datenfehler zu vermeiden). Eine Datenbank kann bearbeitet werden, ohne FHEM stoppen zu müssen. &lt;br /&gt;
&lt;br /&gt;
Datenbanken kann man ohne weitere Hilfsmittel direkt von der Kommandozeile/Shell aus bearbeiten. Alternativ gibt es auch verschiedenste Tools (webbasiert oder als Applikation), die einen dabei unterstützen (Bsp. findet man u.a. [https://wiki.ubuntuusers.de/SQLite/#Grafische-Benutzeroberflaechen hier]). Für einfache Arbeiten reicht allerdings idR. Shell.&lt;br /&gt;
&lt;br /&gt;
=== SQLite-Datenbanken ===&lt;br /&gt;
&#039;&#039;&#039;Öffnen der DB unter Linux:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
(Es werden Schreibrechte benötigt,ohne kann man die DB zwar öffnen, aber nichts machen)&lt;br /&gt;
 sudo sqlite3 fhem.db&lt;br /&gt;
Dadurch öffnet sich ein SQL-Konsole, auf der alle weiteren Befehle ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schliessen der DB:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; .exit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hilfe anzeigen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; .help&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alle Tabellen anzeigen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; .tables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Das Schema der DB anzeigen:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
(vgl. oben [[DbLog#Datenbanken]] und [[DbLog#Beispiel: Anlegen und Nutzung einer SQLite-Datenbank]])&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; .schema&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alle Eintäge anzeigen:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Die Einträge liegen alle in der Tabelle &amp;quot;History&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ganz wichtig&#039;&#039;&#039; ist immer das &amp;quot;;&amp;quot; am Ende Zeile (bei allen Kommandos, die nicht mit einem &amp;quot;.&amp;quot; anfangen). Wenn es vergessen wurde zeigt die Konsole solange neue Zeilen bis ein &amp;quot;;&amp;quot; eingegeben wird. So kann ein Befehl auch bequem über mehrere Zeilen geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; select * from HISTORY;&lt;br /&gt;
&lt;br /&gt;
Dies kann sehr lange dauern und kann ggf. mit &amp;lt;code&amp;gt;STRG-C&amp;lt;/code&amp;gt; abgebrochen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alle Einträge eines Geräts anzeigen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In &amp;lt;code&amp;gt;where&amp;lt;/code&amp;gt;-Statements werden Strings in einfache Anführungsstriche gesetzt, Zahlen nicht.&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; select * from HISTORY where DEVICE=&#039;Pollenflug&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alle Einträge eines Readings eines Geräts anzeigen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; select * from HISTORY where DEVICE=&#039;Pollenflug&#039; and READING=&#039;Graeser&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alle Einträge eines bestimmten Wertes eines Readings eines Geräts anzeigen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; select * from HISTORY where DEVICE=&#039;Pollenflug&#039; and READING=&#039;Graeser&#039; and VALUE&amp;gt;1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LÖSCHEN aller Einträge eines bestimmten Wertes eines Readings eines Geräts anzeigen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Löschen kann nicht rückgängig gemacht werden!! Also IMMER erst die entsprechenden SELECT-Statements solange verfeinern bis wirklich nur die gewünschten Einträge angezeigt werden. Dann das &amp;lt;code&amp;gt;select *&amp;lt;/code&amp;gt; durch &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; ersetzen.&lt;br /&gt;
&lt;br /&gt;
 sqlite&amp;gt; delete from HISTORY where DEVICE=&#039;Pollenflug&#039; and READING=&#039;Graeser&#039; and VALUE&amp;gt;1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datenbank reparieren ==&lt;br /&gt;
Es kann immer wieder mal vorkommen, dass Datenbanken Fehler enthalten. Das muss im Alltag garnicht auffallen und auch nicht immer schlimm enden. Wenn man auf der SQL-Konsole aber bspw. eine Meldung &amp;lt;code&amp;gt;Error: database disk image is malformed&amp;lt;/code&amp;gt; erhält, sollte man ein Reparatur vornehmen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Ist ein DbRep-Device definiert, kann eine Reparatur einfach mit dem eingebauten Befehl &#039;&#039;&#039;set &amp;lt;name&amp;gt; repairSQlite&#039;&#039;&#039; ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== SQLite-Datenbanken ===&lt;br /&gt;
Die folgenden Schritte beschreiben, wie man eine SQLite-DB reparieren kann (Quelle: [http://techblog.dorogin.com/2011/05/sqliteexception-database-disk-image-is.html]):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DB öffnen:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sqlite3 fhem.db&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Integritäts-Check durchführen:&lt;br /&gt;
&amp;lt;pre&amp;gt;sqlite&amp;gt; pragma integrity_check;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kommt hier ein &amp;quot;ok&amp;quot; ist die DB gesund. Ansonsten erscheint etwas wie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*** in database main ***&lt;br /&gt;
On tree page 118786 cell 1: Rowid 75 out of order (previous was 816660)&lt;br /&gt;
On tree page 118786 cell 4: Rowid 815704 out of order (previous was 816727)&lt;br /&gt;
Corruption detected in cell 0 on page 118786&lt;br /&gt;
Multiple uses for byte 132 of page 118786&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Datenbank-Dump erstellen (Export gesamten DB in die Datei &amp;quot;dump_all_20160516_1043.sql&amp;quot;) und DB verlassen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sqlite&amp;gt; .mode insert&lt;br /&gt;
sqlite&amp;gt; .output dump_all_20160516_1043.sql&lt;br /&gt;
sqlite&amp;gt; .dump&lt;br /&gt;
sqlite&amp;gt; .exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Neue Datenbank erstellen und den Dump einlesen, Integritäts-Check machen und verlassen:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sqlite3 fhem-neu.db&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sqlite&amp;gt; .read dump_all_20160516_1043.sql&lt;br /&gt;
sqlite&amp;gt; pragma integrity_check;&lt;br /&gt;
ok&lt;br /&gt;
sqlite&amp;gt; .exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Spätestens jetzt FHEM stoppen:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo service fhem stop&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Alte DB sichern und neue aktivieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mv fhem.db fhem.db.sv_20160516&lt;br /&gt;
sudo mv fhem-neu.db fhem.db&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Kontrollieren, dass die neue DB die gleichen Rechte wie die alte DB hat (und ggf. korrigieren):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/fhem$ ls -lha&lt;br /&gt;
insgesamt 6,3G&lt;br /&gt;
drwxr-xr-x 12 fhem root    4,0K Mai 16 11:07 .&lt;br /&gt;
drwxr-xr-x  4 root root    4,0K Dez 25 17:50 ..&lt;br /&gt;
...&lt;br /&gt;
-rw-r--r--  1 root root    1,4G Mai 16 11:04 fhem.db&lt;br /&gt;
-rw-r--r--  1 fhem root    2,6G Mai 16 10:59 fhem.db.sv_20160516&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
~/fhem$ sudo chown fhem:root fhem.db&lt;br /&gt;
&lt;br /&gt;
~/fhem$ ls -lha&lt;br /&gt;
insgesamt 6,3G&lt;br /&gt;
drwxr-xr-x 12 fhem root    4,0K Mai 16 11:07 .&lt;br /&gt;
drwxr-xr-x  4 root root    4,0K Dez 25 17:50 ..&lt;br /&gt;
...&lt;br /&gt;
-rw-r--r--  1 fhem root    1,4G Mai 16 11:04 fhem.db&lt;br /&gt;
-rw-r--r--  1 fhem root    2,6G Mai 16 10:59 fhem.db.sv_20160516&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FHEM wieder starten (und natürlich kontrollieren):&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo service fhem start&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hinweise für sehr große Datenbanken ===&lt;br /&gt;
Wenn die SQLite-DB sehr groß wird, kann es sein, dass der oben beschriebene Weg nicht ohne manuelle Anpassungen funktioniert. Konkret war dies bei einem Nutzer für eine 15 GB große DB nicht möglich, der Prozess hat sich immer nach mehreren Stunden aufgehängt. Die Ursache liegt darin, dass ein Dump alle Daten in einer einzigen Transaktion einfügt. Das Problem kann man lösen, indem man den Dump in mehreren Transaktionen einfügt, also aufteilt. Konkret konnte eine 23GB große DB erfolgreich eingelesen und damit repariert werden, indem alle 10.000.000 Zeilen folgende 2 Zeilen eingefügt wurden:&lt;br /&gt;
&amp;lt;pre&amp;gt;BEGIN TRANSACTION;&lt;br /&gt;
COMMIT;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Hinweis 1: Mit dem Editor joe kann man unter Linux auch sehr große Dateien flüssig bearbeiten, das Springen zu hohen Zeilennumer dauert trotzdem. &lt;br /&gt;
* Hinweis 2: joe verwendet eine temporäre Kopie der Datei. Diese liegt per default unter /tmp. Der Ort kann aber auch durch &amp;lt;code&amp;gt;export TEMP=...&amp;lt;/code&amp;gt; geändert werden. Falls also unter /tmp nicht Platz für eine Kopie des Datenbank-Dumps ist, sollte diese Variable vor dem Starten von joe entsprechend gesetzt werden. &lt;br /&gt;
* Hinweis 3: Beim Speichern legt joe im gleichen Verzeichnis eine Sicherungskopie an, d.h. im Verzeichnis des Datenbank-Dumps sollte weiterer Platz in Höhe der Dateigröße frei sein. &lt;br /&gt;
* Hinweis 4: Der reopen Mechanismus von DbLog kann verwendet werden, um eine manuelle Datenbankreparatur ohne Logunterbrechung durchzuführen (vor dem Wieder-Öffnen der DbLog Datei- und Verzeichnisrechte prüfen!). Damit kann man das harte Stoppen und Starten von FHEM in obiger Anleitung umgehen.&lt;br /&gt;
* Letzter Hinweis: Weiter gilt: bei großen DbLog-Datenbanken sollte man immer darüber nachdenken,&lt;br /&gt;
** Welche dieser Logdaten man wirklich braucht und im Zweifel per DbRep ausdünnen&lt;br /&gt;
** Zu einer echten Datenbank wie MySQL/MariaDB zu wechseln.&lt;br /&gt;
&lt;br /&gt;
== Datenbank migrieren ==&lt;br /&gt;
Eine schöne Anleitung zur Migration von SQLite zu MySQL/MariaDB mit Hilfe von [[DbRep - Reporting und Management von DbLog-Datenbankinhalten|DbRep]] findet sich hier: [https://demaya.de/fhem-umzug-sqlite-mysql-mariadb/].&lt;br /&gt;
&lt;br /&gt;
== Nützliche Codeschnipsel ==&lt;br /&gt;
Anbei ein paar nützliche Codeschnipsel rund um DbLog&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dateigrösse mitloggen ===&lt;br /&gt;
Da die Datenbank ins Unermessliche wachsen kann, empfiehlt es sich - je nach Speicherplatz - ab einer bestimmten Grösse tätig zu werden. Dazu muss diese Grösse allerdings ermittelt werden. Diese geschieht mittels des Userreadings, welches man vorteilshafterweise mit im DbLog-device anlegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;attr myDbLog userReadings DbFileSize:reduceLogState.* { (split(&#039; &#039;,`du -m fhem.db`))[0] }&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mittels dieses Attributs wird die Grösse der .db-Datei immer nach dem Ausführen des ReduceLog in das Reading &amp;quot;DbFileSize&amp;quot; in ganzzahligen MByte abgelegt.&lt;br /&gt;
&lt;br /&gt;
Basierend auf diesem Reading können dann weitere Aktionen, beispielsweise ein Plot, erstellt werden.&lt;br /&gt;
&lt;br /&gt;
Die oben beschriebene Möglichkeit ist für SQLite verwendbar. Zur Ermittlung der DB-Größe andere DB-Typen (aber auch für SQLite nutzbar) kann wie [[DbRep_-_Reporting_und_Management_von_DbLog-Datenbankinhalten#Gr.C3.B6.C3.9Fe_der_FHEM-Datenbank_ermitteln | hier]] beschrieben vorgegangen werden.&lt;br /&gt;
&lt;br /&gt;
== Performance-Optimierung ==&lt;br /&gt;
Auch eine Datenbank kann mit der Zeit langsamer werden. Dies hängt von mehreren Faktoren ab:&lt;br /&gt;
* Menge der gelogten Daten (zB. &amp;gt; 4-5 GB)&lt;br /&gt;
* Eingesetzte Hardware (zB. langsame SD-Karte vs. schnelle SSD)&lt;br /&gt;
* Eingesetztes Datenbanksystem (zB. SQLite, MySQL)&lt;br /&gt;
* Komplexität der Abfragen (zB. für aufwändige Graphen oder Berechnungen)&lt;br /&gt;
&lt;br /&gt;
Diese Punkte sollen im folgenden diskutiert werden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Komplexität der Abfragen ===&lt;br /&gt;
Dies ist kein Problem der Datenbank, sondern rein der Abfrage. Dem entsprechend muss die Optimierung auch in der Abfrage oder im Skript gesucht werden. Dies ist nicht Ziel dieses Abschnittes und wird hier nicht weiter behandelt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Eingesetztes Datenbanksystem ===&lt;br /&gt;
Welches Datenbanksystem eingesetzt wird (zB. SQLite oder MySQL) hat auf die Performance der Datenbank gar keinen so großen Einfluss, wie vielleicht zuerst gedacht. Selbst SQLite kann problemlos Datenbanken mit etlichen GB Größe performant verarbeiten. Der Flaschenhals ist hier viel mehr die darunter liegende Hardware (s.u.).&lt;br /&gt;
&lt;br /&gt;
Die Performance der Datenbank an sich, kann aber durch verschiedene Maßnahmen verbessert werden:&lt;br /&gt;
* Pflegemaßnahmen bzgl. der Daten&lt;br /&gt;
* &#039;&#039;&#039;Erstellung von Indizes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Menge der Daten und Pflegemaßnahmen bzgl. der Daten ====&lt;br /&gt;
Die Menge der geloggten Daten hat natürlich Einfluss auf die Geschwindigkeit von Abfragen - je mehr Daten vorhanden sind, desto mehr Daten müssen auch durchforstet werden um eine Abfrage zu bedienen. Die Reduzierung der geloggten Datenmenge hat also direkten Einfluss auf die Größe und damit auch die Geschwindigkeit der Datenbank. Die Menge der zu loggenden Daten lässt sich an zwei Stellen einschränken:&lt;br /&gt;
* bei der Definition jedes Devices (s. Kapitel oben)&lt;br /&gt;
* bei der Festlegung des FHEM-weiten Log-Levels (s. [[Loglevel]])&lt;br /&gt;
&lt;br /&gt;
Die Menge der bereits geloggten Daten kann zB. mit Hilfe von [[DbRep - Reporting und Management von DbLog-Datenbankinhalten|DbRep]] verringert und optimiert werden, bspw.&lt;br /&gt;
* löschen unnötiger Daten&lt;br /&gt;
* vacuum der Datenbank&lt;br /&gt;
&lt;br /&gt;
Insgesamt haben diese Maßnahmen aber nur einen eingeschränkten Effekt auf die Performance der DB. Deutlich effektiver ist die Erstellung eines Index (s.u.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Erstellung von Indizes ====&lt;br /&gt;
Die Erstellung von Indizes hat mit Abstand den größten Einfluss auf die Performance einer Datenbank (auf unveränderter Hardware). Extrem zusammengefasst ist ein Index eine extrem optimiertes Nachschlageverzeichnis für einen bestimmten Typ Daten (ein Index wie im Buch halt). Eine wunderbare Einführung in Indizes bietet [[https://use-the-index-luke.com/de|https://use-the-index-luke.com]].&lt;br /&gt;
&lt;br /&gt;
In FHEM sind Indizes sogar sehr einfach einzurichten da die Datenbank-Nutzung sehr stark vorgegeben ist. Nahezu jede Abfrage folgt dem Schema &#039;&#039;Device -&amp;gt; Reading -&amp;gt; Datum -&amp;gt; Wert&#039;&#039;. Ein Index kann genau diese Abfrage bedienen und beschleunigen. Ein Index nur über die Devices wäre ein erster Schritt, brächte aber noch keinen großen Gewinn (wie um Link oben gut beschrieben). Über die gesamten ersten drei Schritte erstellt (Device -&amp;gt; Reading -&amp;gt; Datum) bringt der Index aber sofort eine deutliche Geschwindigkeitssteigerung.&lt;br /&gt;
&lt;br /&gt;
Die Erstellung eines Index erfolgt direkt in der Datenbank (und nicht aus FHEM heraus), hier am Beispiel einer SQLite-DB:&lt;br /&gt;
&lt;br /&gt;
Öffnen der DB:&lt;br /&gt;
&amp;lt;pre&amp;gt; sudo sqlite3 fhem.db &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erzeugen des Index auf der DB-Konsole (das Semikolon am Ende ist wichtig):&lt;br /&gt;
&amp;lt;pre&amp;gt; create index idx_device_reading_timestamp on history (device, reading, timestamp); &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verlassen der DB:&lt;br /&gt;
&amp;lt;pre&amp;gt; .exit &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Einzig zu berücksichtigen ist, dass dieser Index die Datenbank um bis zu 1/3 vergrößert. Er kann aber bei Bedarf auch wieder entfernt werden. Bei meiner 15 GB SQLite-Datei (auf einem Mac Mini mit SSD) hat dies ca. 15 min gedauert (den FHEM hatte ich vorsichtshalber währenddessen deaktiviert).&lt;br /&gt;
&lt;br /&gt;
Sollte jemand spezielle Berechnungen oder Skripte ausführen, die nach einem anderen Abfrage-Schema arbeiten, könnte man dafür spezialisierte zusätzliche Indizes erstellen. Das sollte aber dann mit dem Wissen des obigen Links erarbeitet werden, da dann etwas mehr Hintergrundwissen sehr hilfreich ist.&lt;br /&gt;
&lt;br /&gt;
==== DB-Backup ====&lt;br /&gt;
Ein anderer Aspekt, der eigentlich nichts mit der Performance der DB zu tun hat, ist der Einfluss aufs Backup. Wird bspw. ein Systembackup per RSYNC gemacht, muss bei SQLite immer die komplette ggf. riesige Datei gesynct werden - bei MySQL würden nur die veränderten DB-Elemente gesynct. Dies soll hier nicht weiter vertieft werden, sollte aber bei einer Gesamtstrategie bedacht werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Eingesetzte Hardware ===&lt;br /&gt;
FHEM hat grundsätzlich sehr viele kleine Datenzugriffe, unabhängig davon ob FileLog oder DbLog eingesetzt wird. Deshalb ist der absolut größte Performance-Gewinn durch den Einsatz schneller Festplatten zu erreichen - ganz einfache Aussage: &#039;&#039;je schneller desto besser ;-)&#039;&#039;. Konkret bietet eine SSD mit mind. 250MB/s Datenzugriff eine ordentliche Basis für jedes datengestützte System, wie den FHEM.&lt;br /&gt;
&lt;br /&gt;
Wenn die Datenmenge größer und die Abfragen komplexer werden, müssen natürlich irgendwann auch die Prozessorleistung und der Arbeitsspeicher mit wachsen. Aber auch an einem Raspi wird eine SSD deutlich performanter sein, als eine einfache SD-Karte oder eine klassische rotierende Festplatte.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[Heizleistung_und_Gasverbrauch|Beispiel das DbLog-Daten für SVG-Plots verwendet]]&lt;br /&gt;
* [[SVG-Plots von FileLog auf DbLog umstellen]]&lt;br /&gt;
* Manchmal bereitet die Engine von mysql auf einem Raspberry Probleme: [https://forum.fhem.de/index.php/topic,131164.msg1253589.html#msg1253589|Link zum Forum]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Logging]]&lt;/div&gt;</summary>
		<author><name>AlanBlack</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FRITZBOX&amp;diff=37376</id>
		<title>FRITZBOX</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FRITZBOX&amp;diff=37376"/>
		<updated>2022-04-03T16:59:38Z</updated>

		<summary type="html">&lt;p&gt;AlanBlack: &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;
{{Randnotiz|RNTyp=r|RNText= Ab FRITZ!OS 6.25 wird das zwingend benötigte Telnet nicht mehr unterstützt.}}&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 Attribut&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; allowTR064Command 1&amp;lt;/code&amp;gt;&lt;br /&gt;
kann man den Befehl&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;&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.&lt;br /&gt;
&lt;br /&gt;
Ein besserer Einstiegspunkt befindet sich auf der Box unter http://fritz.box:49000/tr64desc.xml. &lt;br /&gt;
Die möglichen TR-064-Aktionen kann man auch über den Befehl &lt;br /&gt;
:&amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064ServiceList&amp;lt;/code&amp;gt; &lt;br /&gt;
auslesen.&lt;br /&gt;
&lt;br /&gt;
Folgende Services 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;
&#039;&#039;&#039;(Bitte beim Speichern darauf achten, dass nicht der Name 99_Utils gewählt wird.)&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;sub checkFritzMACpresent($$) {&lt;br /&gt;
  # Benötigt: Name der zu testenden Fritzbox ($d),&lt;br /&gt;
  #           zu suchende MAC ($m), &lt;br /&gt;
  # Rückgabe: 1 = Gerät gefunden&lt;br /&gt;
  #           0 = Gerät nicht gefunden&lt;br /&gt;
  my ($d,$m) = @_;&lt;br /&gt;
  $m =~ s/:/_/g;&lt;br /&gt;
  $m = &amp;quot;mac_&amp;quot;.uc($m);&lt;br /&gt;
  return (ReadingsVal($d,$m,&amp;quot;inactive&amp;quot;) ne &amp;quot;inactive&amp;quot;) ? 1 : 0;&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. (Siehe auch [https://forum.fhem.de/index.php/topic,39433.msg1075247.html#msg1075247 Forum Beitrag])&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=&amp;quot;perl&amp;quot;&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;
            # Dieser Zweig testet ob das Reading vorhanden ist&lt;br /&gt;
            } elsif ($StatusFritz eq &amp;quot;inactive&amp;quot;) {&lt;br /&gt;
            # Dieser Zweig testet ob im Reading inactive steht&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 { $Status = 1}&lt;br /&gt;
    }&lt;br /&gt;
  return $Status&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;
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 n_PRESENCE_mac_AA_BB_CC_DD_EE_FF notify Fritzbox:mac_AA_BB_CC_DD_EE_FF:.* {&lt;br /&gt;
  my $s = &amp;quot;absent&amp;quot;;&lt;br /&gt;
  $s = &amp;quot;present&amp;quot; if (ReadingsVal($NAME,&amp;quot;mac_AA_BB_CC_DD_EE_FF&amp;quot;,&amp;quot;inactive&amp;quot;) ne &amp;quot;inactive&amp;quot;);&lt;br /&gt;
  fhem(&amp;quot;set anwesend_smartphone $s&amp;quot;);&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 $s&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;
Ein alternativer Ansatz mit einem [[DOIF]]:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
define di_PRESENCE_handy DOIF (\&lt;br /&gt;
  [Fritzbox:mac_AA_BB_CC_DD_EE_FF,&amp;quot;inactive&amp;quot;] eq &amp;quot;inactive&amp;quot;\&lt;br /&gt;
)\&lt;br /&gt;
( msg Tschuess )\&lt;br /&gt;
DOELSE\&lt;br /&gt;
( msg Hallo )&lt;br /&gt;
&lt;br /&gt;
attr di_PRESENCE_handy cmdState absent|present&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Für das DOIF gelten im Wesentlichen dieselben Hinweise wie für das notify oben und auch die im nächsten Abschnitt beschriebenen Vor- und Nachteile. Man bekommt allerdings dank dem &amp;lt;code&amp;gt;attr cmdState&amp;lt;/code&amp;gt; auch gleichzeitig noch ein Device mit dem passenden Status &amp;quot;frei Haus&amp;quot;, kann sich also das oben beschriebene dummy-Device sparen und auch das &amp;lt;code&amp;gt;event-on-change-reading&amp;lt;/code&amp;gt; sollte nicht nötig sein.&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;global:INITIALIZED {&lt;br /&gt;
  my $s = &amp;quot;absent&amp;quot;;&lt;br /&gt;
  $s = &amp;quot;present&amp;quot; if (ReadingsVal(&amp;quot;Fritzbox&amp;quot;,&amp;quot;mac_AA_BB_CC_DD_EE_FF&amp;quot;,&amp;quot;inactive&amp;quot;) ne &amp;quot;inactive&amp;quot;);&lt;br /&gt;
  fhem(&amp;quot;set anwesend_smartphone $s&amp;quot;);&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;
{{Randnotiz|RNTyp=r|RNText=&#039;&#039;&#039;VORSICHT&#039;&#039;&#039;: man sollte einen genaueren Trigger für diese userReadings setzen, sonst wird bei jeder Aktualierung von jedem Reading das get Kommando ausgeführt, was ganz schnell ein (für fhem blockierende) Dauerlaufer werden kann.}}&lt;br /&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.&lt;br /&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.&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. Beispiel: &lt;br /&gt;
:&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.&lt;br /&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;
Damit mehrere Telefone per ring gleichzeitig klingeln, 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;
&lt;br /&gt;
Das Anlegen der Gruppe kann wie in folgender AVM Anleitung beschrieben erledigt werden. [https://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. Danach kann mit folgendem Beispielcode gearbeitet werden:&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;
Typischer Fehler ist hier &amp;quot;Error: 403 Forbidden&amp;quot;. &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 [[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 Module für die Fritzbox (z.B. {{Link2CmdRef|Anker=FBAHAHTTP|Lang=en|Label=FBAHAHTTP}}) muss der Zugang über Benutzername und Password erfolgen.&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.&lt;br /&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;
[[Kategorie:Akustische Ausgabe]]&lt;/div&gt;</summary>
		<author><name>AlanBlack</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Event-on-update-reading&amp;diff=37259</id>
		<title>Event-on-update-reading</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Event-on-update-reading&amp;diff=37259"/>
		<updated>2022-02-23T16:36:15Z</updated>

		<summary type="html">&lt;p&gt;AlanBlack: /* Wechselwirkungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:event-on-update-reading}}  &amp;lt;!-- da richtige Schreibweise kleinen Anfangsbuchstaben hat --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem Attribut [[event-on-update-reading]] kann für Readings eines Gerätes festgelegt werden, dass bei jeder Aktualisierung ein Event (und damit in der Regel auch ein Log-Eintrag) erzeugt werden soll. Da dies das Defaultverhalten von FHEM ist, ist event-on-update-reading nur dann sinnvoll einsetzbar, wenn das Defaultverhalten vorher mit dem Attribut [[event-on-change-reading]] eingeschränkt wurde.&lt;br /&gt;
&lt;br /&gt;
Wird &#039;&#039;event-on-update-reading&#039;&#039; für ein einzelnes Reading gesetzt, werden zunächst alle übrigen Readings nicht mehr protokolliert, erzeugen also keine Events mehr.&lt;br /&gt;
== Einführung ==&lt;br /&gt;
FHEM erzeugt für jedes gemeldete Reading ein Event, egal, ob das Reading sich geändert hat, oder nur Intervallweise per Update aktualisiert wurde. Dieses Verhalten kann Nachteile haben und daher mit [[event-on-change-reading]] für ein Gerät abgestellt werden.&lt;br /&gt;
&lt;br /&gt;
[[event-on-update-reading]] dient dazu, für &#039;&#039;&#039;einzelne&#039;&#039;&#039; Readings des Gerätes das Standardverhalten wieder herzustellen, sollte es für bestimmte Readings in einer gegeben FHEM Installation sinnvoll sein, doch bei jedem Update auch ohne Werteänderung ein Event zu erhalten. Dies kann z.b. bei der Erzeugung von Graphen notwendig sein.&lt;br /&gt;
== Syntax ==&lt;br /&gt;
Das &#039;&#039;event-on-update-reading&#039;&#039; Attribut wird in der folgenden Weise spezifiziert:&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attr &amp;lt;device&amp;gt; event-on-update-reading reading1[,reading2...n]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Die zu berücksichtigenden Readings sind als durch Kommata getrennte Werte anzugeben, können aber auch über reguläre Ausdrücke zusammengefasst werden.&lt;br /&gt;
&lt;br /&gt;
== Wechselwirkungen == &lt;br /&gt;
Dieses Attribut steht in Wechselwirkung mit den Attributen [[event-on-change-reading]] und [[event-min-interval]], bitte beim Einsatz berücksichtigen. Ein Einsatz ohne gleichzeitige event-on-change-reading ist idR. nicht sinvoll.&lt;br /&gt;
&lt;br /&gt;
Sind bei einem Device weder &#039;&#039;event-on-update-reading&#039;&#039; noch  &#039;&#039;event-on-change-reading&#039;&#039; spezifiziert, werden für alle Readings sowohl bei Aktualisierung (mit dem gleichen Wert) als auch bei der Änderung Events erzeugt, dies ist das Standardverhalten. Sobald jedoch eines der beiden Attribute gesetzt ist, müssen alle Readings, die protokolliert werden sollen bei (mindestens) einem der Attribute berücksichtigt sein.&lt;br /&gt;
&lt;br /&gt;
Ist für ein Reading sowohl &#039;&#039;event-on-change-reading&#039;&#039; als auch &#039;&#039;event-on-update-reading&#039;&#039; spezifiziert, wird bei jeder Aktualisierung des Readings ein Event erzeugt, das &#039;&#039;event-on-change&#039;&#039; wird für dieses Reading also außer Kraft gesetzt bzw. &amp;quot;überschrieben&amp;quot;. Das  ist erforderlich in allen Fällen, in denen ein Reading naturgemäß immer den gleichen Wert liefert oder liefern kann bspw. bei Tastern (toggle), oder in den Fällen, bei denen die Aktualisierung mit dem gleichen Readings-Wert geprüft wird wie bspw. ein Watchdog mit &amp;quot;SAME&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
Hat man durch&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; event-on-change-reading .*&amp;lt;/code&amp;gt; &lt;br /&gt;
erreicht, dass alle Readings des Gerätes nur noch bei Werteänderung eine Event erzeugen (und somit auch nur dann geloggt werden), kann mit&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attr &amp;lt;device&amp;gt; event-on-update-reading temperature, humidity&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
dafür gesorgt werden, das für Temperatur und Luftfeuchte dennoch mit jedem Update (intervallweise Aktualisierung auch ohne Werteänderung) ein Event erzeugt und geloggt wird.&lt;br /&gt;
&lt;br /&gt;
== Praktische Anwendung ==&lt;br /&gt;
Da mit [[event-min-interval]] ebenfalls dafür gesorgt werden kann, dass Readings auch ohne Werteänderungen ein Event erzeugen, muss beim Einsatz geprüft werden, ob event-min-interval nicht sinnvoller als event-on-update-reading ist. Da die Updateintervalle einiger Geräte recht kurz sind, kann der Einsatz event-on-update-reading immer noch sehr viele (ggf. nutzlose) Events für das gegebene Reading erzeugen.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
*[[event-on-change-reading]]&lt;br /&gt;
*[[event-min-interval]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Benutzungstipps (&#039;&#039;Best Practice&#039;&#039;) für das Attribut in {{Link2Forum|Topic=36522|LinkText=diesem Forenthread}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Attribut (allgemeingültig)]]&lt;/div&gt;</summary>
		<author><name>AlanBlack</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Event-on-change-reading&amp;diff=37184</id>
		<title>Event-on-change-reading</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Event-on-change-reading&amp;diff=37184"/>
		<updated>2022-02-05T18:33:05Z</updated>

		<summary type="html">&lt;p&gt;AlanBlack: /* Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:event-on-change-reading}}  &amp;lt;!-- da richtige Schreibweise kleinen Anfangsbuchstaben hat --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Infobox Attribut sinnvoll? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem Attribut [[event-on-change-reading]] kann für Readings eines Gerätes festgelegt werden, dass nur bei einer Wertänderung ein Event (und damit in der Regel auch ein Log-Eintrag) erzeugt werden soll und nicht bei jedem turnusmäßigen Update des Gerätes.&lt;br /&gt;
&lt;br /&gt;
Wird &#039;&#039;event-on-change-reading&#039;&#039; für ein einzelnes Reading gesetzt, werden zunächst alle übrigen Readings nicht mehr protokolliert, erzeugen also keine Events mehr.&lt;br /&gt;
&lt;br /&gt;
== Einführung ==&lt;br /&gt;
Grundsätzlich senden Geräte ihre Readings dann, wenn ein Ereignis zu einer Statusänderung führt, also z.b. ein Schalter betätig wird. Allerdings senden die meisten Geräte auch immer Zusatzinformationen, etwa den Batteriestatus, Zieltemperatur, Pairingstatus, PeerList etc.etc.; meist sogar in bestimmten Intervallen (Update) auch ohne das das Reading sich ändert. Einige Geräte wie z.b. Shelly Plugs sind sehr &amp;quot;gesprächig&amp;quot; und senden auch den Status des Tasters mit jedem Update, selbst wenn der Schaltzustand sich nicht ändert. &lt;br /&gt;
&lt;br /&gt;
Dies hat einige Nachteile:&lt;br /&gt;
* Aufblähen des Logfiles&lt;br /&gt;
* höhere Last der FHEM-Installation, da ein Event vom GeraetXXXX zunächst alle Notifys in FHEM benachrichtigt (d.h. notify, FileLog, sequence, watchdog, DOIF, etc), auch wenn diese mit dem Event nichts anfangen können.&lt;br /&gt;
* Konstrukte der Art &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;… notify GeraetXXXX:wert …&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; werden unter Umständen immer wieder im Update-Intervall ausgelöst, obwohl der Schaltzustand sich nicht geändert hat. (z.b. bei Shelly Plugs)&lt;br /&gt;
* EvenMonitor bzw. Telnet &#039;&#039;Info Timer&#039;&#039; mitunter unübersichtlich&lt;br /&gt;
&lt;br /&gt;
Mit event-on-change-reading lässen sich für Readings eines Gerätes festgelegt, dass nur bei einer Wertänderung ein Event erzeugt wird und nicht mit jedem Update. Dies adressiert alle oben genannten Nachteile.&lt;br /&gt;
&lt;br /&gt;
Allerdings kann die Nutzung von &#039;&#039;event-on-change-reading&#039;&#039; auch selbst Probleme erzeugen:&lt;br /&gt;
*  Es muss überlegt werden, ob die eigene FHEM Installation an manchen Stellen in bestimmten Intervallen Meldungen benötigt, auch wenn die Werte sich nicht ändern. Dies sind typischerweise Graphen.&lt;br /&gt;
* Wird &#039;&#039;event-on-change-reading&#039;&#039; für ein einzelnes Reading gesetzt, erzeugen alle übrigen Readings des Gerätes keine Events mehr, &#039;&#039;&#039;auch nicht wenn Werte sich ändern&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um das Verhalten von event-on-change-reading zu modifizieren und diese Probleme zu lösen, stehen ausserdem die Attribute [[event-on-update-reading]] (Reading soll mit jedem Update gesendet werden, auch wenn es sich nicht geändert hat) und [[event-min-interval]] ((Reading soll mit Update gesendet werden, wenn seit der letzten Meldung ZeitspanneX vergangen ist) zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
Das &#039;&#039;event-on-change-reading&#039;&#039; Attribut wird in der folgenden Weise spezifiziert:&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attr &amp;lt;device&amp;gt; event-on-change-reading reading1[:threshold][,reading2[:threshold]...n]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Die zu berücksichtigenden Readings sind als durch Komma getrennte Werte anzugeben, können aber auch über reguläre Ausdrücke zusammengefasst werden.&lt;br /&gt;
&lt;br /&gt;
Insbesondere sinnvoll ist der reguläre Ausdruck .* , der alle Readings umfasst:&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attr &amp;lt;device&amp;gt; event-on-change-reading .*&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
So formuliert führt das Attribut  dazu, dass alle Readings noch Events erzeugen, aber nur wenn diese sich im Wert ändern.&lt;br /&gt;
&lt;br /&gt;
Mit Threshold ist optional ein Wert angebbar, um den das &amp;quot;neue&amp;quot; Reading größer oder kleiner sein soll als das vorherige, um ein Event auszulösen. So löst&lt;br /&gt;
:&amp;lt;code&amp;gt;attr event-on-change-reading temperature:0.4,humidity:2 &amp;lt;/code&amp;gt;&lt;br /&gt;
nur bei Änderungen der Temperatur um mindestens 0,4 Grad oder Änderung der Luftfeuchtigkeit von 2 % ein Event aus (und damit einen Eintrag ins Logfile). Threshold ist besonders sinnvoll bei sehr fein auflösenden Sensoren, um z.B. zu verhindern, dass jede Temperaturschwankung um 0,1 Grad ein Event auslöst.&lt;br /&gt;
&lt;br /&gt;
== Wechselwirkungen == &lt;br /&gt;
Wie oben erwähnt, steht das Attribut in Wechselwirkung mit den Attributen &#039;&#039;timestamp-on-change-reading&#039;&#039; [[event-on-update-reading]] und [[event-min-interval]], die das Verhalten modifizieren. Dies ist beim Einsatz zu berücksichtigen.&lt;br /&gt;
&lt;br /&gt;
Sind bei einem Device weder &#039;&#039;event-on-change-reading&#039;&#039; noch &#039;&#039;event-on-update-reading&#039;&#039; spezifiziert, werden für alle Readings sowohl bei Änderung als auch bei der Aktualisierung (Update mit dem gleichen Wert) Events erzeugt (Default Verhalten). Sobald jedoch eines der beiden Attribute gesetzt ist, müssen alle Readings, die protokolliert werden sollen, bei (mindestens) einem der Attribute berücksichtigt sein.&lt;br /&gt;
&lt;br /&gt;
Ist für ein Reading sowohl &#039;&#039;event-on-change-reading&#039;&#039; als auch &#039;&#039;event-on-update-reading&#039;&#039; spezifiziert, wird bei jeder Aktualisierung des Readings ein Event erzeugt, das &#039;&#039;event-on-change&#039;&#039; wird für dieses Reading also außer Kraft gesetzt bzw. &amp;quot;überstimmt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== timestamp-on-change-reading ==&lt;br /&gt;
Ist nur event-on-change-reading für ein Reading spezifiziert, entfällt zunächst einmal nur der Trigger, der Zeitstempel wird weiter aktualisiert. Benötigt man jedoch den Zeitstempel der letzten Änderung (z.B. die Ein- oder Ausschaltzeit eines Relais), kann man mithilfe von &#039;&#039;timestamp-on-change-reading&#039;&#039; auch die Aktualisierung des Zeitstempels unterbinden, falls der Wert sich nicht geändert hat. &lt;br /&gt;
&lt;br /&gt;
== Beispiel == &lt;br /&gt;
In einer einfachen Anwendung kann, um alle Readings eines Gerätes nur bei Änderungen zu verarbeiten, das Attribut folgendermaßen gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attr &amp;lt;device&amp;gt; event-on-change-reading .*&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Zusätzlich kann mit&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attr &amp;lt;device&amp;gt; event-min-interval .*:3600&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
dafür gesorgt werden, dass jede Stunde auch ohne Werteänderung die Readings dennoch verarbeitet werden, also in z.b. in das Logfile geschrieben werden (findet FHEM zu wenige Ereignisse pro betrachteter Zeitspanne, bleiben Graphen leer oder werden nur teilweise gezeichnet (Plotabriss)). &lt;br /&gt;
&lt;br /&gt;
Das obige Kombination der Attribute führt also dazu, dass ein Event erzeugt wird, wenn der neue Wert wirklich abweichend vom alten Wert ist &#039;&#039;&#039;oder&#039;&#039;&#039; mindestens &#039;&#039;min-interval&#039;&#039; Sekunden seit dem letzten Event vergangen sind.&lt;br /&gt;
&lt;br /&gt;
Achtung: dies löst wie oben beschrieben ggf. Konstrukte wie &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;… notify GeraetXXXX:wert …&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; aus.&lt;br /&gt;
&lt;br /&gt;
Falls ein Reading namens &amp;quot;unwanted&amp;quot; KEINE Events erzeugen soll, lässt sich das mit&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attr &amp;lt;device&amp;gt; event-on-change-reading (?!unwanted).*&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
unterdrücken.&lt;br /&gt;
&lt;br /&gt;
Wenn KEIN Event bei einem Gerät erzeugt werden soll, lässt sich das mit &lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attr &amp;lt;device&amp;gt; event-on-change-reading $&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
erreichen.&lt;br /&gt;
&lt;br /&gt;
Um ein Threshold für nur ein Reading zu setzen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; event-on-change-reading Temp.*:0.4,.*&amp;lt;/code&amp;gt;&lt;br /&gt;
Alle Readings, die mit Temp beginnen, erzeugen nur ein Event, wenn die Änderung &amp;gt;0.4 Grad ist. Alle anderen Readings erzeugen bei jeder Änderung ein Event.&lt;br /&gt;
&lt;br /&gt;
Nur ein Reading mit Threshold berücksichtigen:&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attr &amp;lt;device&amp;gt; event-on-change-reading Temp.*:0.4&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Alle Readings, die mit Temp beginnen, erzeugen nur ein Event, wenn die Änderung &amp;gt;0.4 Grad ist. Alle anderen Readings erzeugen keine Event, auch nicht bei Werteänderung.&lt;br /&gt;
&lt;br /&gt;
Mit [[event-on-update-reading]] und [[event-min-interval]] kann das Verhalten verfeinert werden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
*{{Link2Forum|Topic=26694|Message=196955|LinkText=Forenbeitrag}}&lt;br /&gt;
*[[event-on-update-reading]]&lt;br /&gt;
*[[event-min-interval]]&lt;br /&gt;
*[[event-aggregator]]&lt;br /&gt;
* Benutzungstipps (&#039;&#039;Best Practice&#039;&#039;) für das Attribut in {{Link2Forum|Topic=36522|LinkText=diesem Forenthread}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Attribut (allgemeingültig)]]&lt;/div&gt;</summary>
		<author><name>AlanBlack</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Modul_Alarm&amp;diff=36552</id>
		<title>Modul Alarm</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Modul_Alarm&amp;diff=36552"/>
		<updated>2021-12-07T23:14:04Z</updated>

		<summary type="html">&lt;p&gt;AlanBlack: Begonnen Abweichungen zwischen Beschreibung im Wiki und Verhalten des Moduls zu entfernen.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Das Modul stellt eine komfortable Oberfläche bereit, um per Webinterface Sensoren mit Aktoren zu verknüpfen - und zwar nur innerhalb bestimmter Zeitfenster sowie an- und abschaltbar&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=Alarm&lt;br /&gt;
|ModForumArea=Unterstuetzende Dienste&lt;br /&gt;
|ModTechName=95_Alarm.pm&lt;br /&gt;
|ModOwner=Prof. Dr. Peter A. Henning&lt;br /&gt;
}}&lt;br /&gt;
Diese Seite beschreibt die Konfiguration und Verwendung des Moduls 95_Alarm.pm. Die nachfolgende Dokumentation ist nicht ganz aktuell, aber vollkommen hinreichend für die Installation.&lt;br /&gt;
Weitere Tipps und Hinweise findet man im Buch [https://www.dpunkt.de/buecher/12387/9783960090120-smarthome-hacks.html Smart Home Hacks]&amp;lt;!-- Seite, auf die verwiesen wird, existiert nicht mehr --&amp;gt;.&lt;br /&gt;
Für Supportanfragen bitte &#039;&#039;{{Link2Forum|Topic=117581.0|LinkText=diesen Forenthread}}&#039;&#039; verwenden.&lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
Das Modul &#039;&#039;95_Alarm.pm&#039;&#039; stellt eine komfortable Oberfläche bereit, um per Webinterface bestimmte auslösende Elemente (nachfolgend &#039;Sensoren&#039; genannt) mit bestimmten Aktionen (nachfolgend &#039;Aktoren&#039; genannt) zu verknüpfen - und zwar nur innerhalb bestimmter Zeitfenster sowie an- und abschaltbar (&amp;quot;scharf/armed&amp;quot; bzw. &amp;quot;unscharf/disarmed&amp;quot;). Diese Verknüpfungen werden als &amp;quot;normale&amp;quot; FHEM-Definitionen gespeichert.&lt;br /&gt;
==Erste Schritte==&lt;br /&gt;
Damit FHEM-Devices als Aktoren oder Sensoren für die Alarmanlage genutzt werden können, müssen zwei neue globale Attribute namens &amp;lt;nowiki&amp;gt;alarmDevice&amp;lt;/nowiki&amp;gt; und &amp;lt;nowiki&amp;gt;alarmSettings&amp;lt;/nowiki&amp;gt; eingeführt werden. Dazu muss in der Grundkonfiguration von FHEM die Definition der nutzerspezifischen Attribute via &#039;&#039;userattr&#039;&#039; angepasst werden. Bei Konfiguration über FHEMWEB ist es ratsam dazu die folgenden beiden Befehle zu nutzen:&lt;br /&gt;
&lt;br /&gt;
 { addToAttrList(&amp;quot;alarmDevice:Actor,Sensor&amp;quot;) }&lt;br /&gt;
 { addToAttrList(&amp;quot;alarmSettings&amp;quot;) } &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alternativ:&#039;&#039;&#039; Möchte man dies direkt im &#039;&#039;global&#039;&#039; device ändern, so sollten die weiteren Attribute beibehalten werden, dies sieht etwa so aus:&lt;br /&gt;
&lt;br /&gt;
 attr global userattr &#039;&#039;&#039;alarmDevice:Actor,Sensor alarmSettings&#039;&#039;&#039; devStateIcon devStateStyle ...&#039;&#039;(hier folgen weitere Attribute)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Zur Erläuterung:&lt;br /&gt;
*Soll ein FHEM-Device als Sensor für die Alarmanlage genutzt werden, wird der Wert seines &#039;&#039;alarmDevice&#039;&#039;-Attributes auf &#039;Sensor&#039; gesetzt.&lt;br /&gt;
*Soll ein FHEM-Device als Aktor für die Alarmanlage genutzt werden, wird der Wert seines &#039;&#039;alarmDevice&#039;&#039;-Attributes auf &#039;Actor&#039; gesetzt&lt;br /&gt;
*Das Attribut &#039;&#039;alarmSettings&#039;&#039; wird beim Setzen der Alarme auf der Alarmkonfigurationsseite automatisch befüllt.&lt;br /&gt;
Ferner muss das Modul &#039;&#039;95_Alarm.pm&#039;&#039; im Modulpfad installiert werden, ebenso die JavaScript-Datei &#039;&#039;alarm.js&#039;&#039; in www/pgm2.&lt;br /&gt;
==Definition==&lt;br /&gt;
Die Alarmanlage - hier mit dem Namen &#039;&#039;AAA&#039;&#039; versehen - selbst wird über&lt;br /&gt;
 define AAA Alarm&lt;br /&gt;
definiert. Diese Definition legt einen versteckten Raum &amp;quot;AlarmRoom&amp;quot; an, welcher über einen Weblink &#039;&#039;Alarm System&#039;&#039; im oberen Menü des Webinterfaces erreichbar ist.&lt;br /&gt;
*Der Name dieses Raumes kann durch das Attribut &#039;&#039;hiddenRoom&#039;&#039; geändert werden.&lt;br /&gt;
*Es wird ein weiterer Raum benötigt, der in der gegenwärtigen Fassung des Moduls den Namen &#039;&#039;Alarm&#039;&#039; trägt. Dieser wird automatisch erstellt, sobald die Alarme wie unten konfiguriert werden.&lt;br /&gt;
*Dieses Modul verwendet das globale Attribut &#039;&#039;language&#039;&#039; zur Bestimmung der Anzeigedaten (Standard: EN=english). Für deutsche Ausgabedaten muss in FHEM &#039;&#039;&#039;vor&#039;&#039;&#039; der Definition der Alarmanlage das Attribut &lt;br /&gt;
 attr global language DE&lt;br /&gt;
gesetzt werden. Für dieses Wiki werden die englischen Ausgabedaten verwendet.&lt;br /&gt;
&lt;br /&gt;
Beim Anklicken des Begriffes &#039;&#039;Alarm System&#039;&#039; im oberen Menü des Webinterfaces wird dieser versteckte Raum angezeigt. Er enthält an erster Stelle das Alarm-Device. Für die Konfiguration dieses Devices siehe den nächsten Abschnitt, für die Bedienung siehe den Abschnitt [Bedienung].&lt;br /&gt;
&lt;br /&gt;
==Konfiguration des Alarm-Device==&lt;br /&gt;
Das Alarm-Device kennt nur wenige Set- und Get-Befehle.&lt;br /&gt;
&lt;br /&gt;
Hinreichend beschrieben in der [https://commandref.fhem.de/#Alarm CommandRef].&lt;br /&gt;
==Bedienung im FHEMWEB Frontend==&lt;br /&gt;
In diesem Abschnitt wird die Bedienung der Weboberfläche und damit die Konfiguration der Alarmanlage beschrieben. Um sie zu erreichen, klickt man auf den Begriff &#039;&#039;Alarm System&#039;&#039; im oberen Menü des Webinterfaces.&lt;br /&gt;
===Settings===&lt;br /&gt;
Im oberen Bereich sind drei Eingabefelder zu sehen:&lt;br /&gt;
*&#039;&#039;Wait Action&#039;&#039; ist ein FHEM-Befehl, der beim Scharfschalten des Alarms ausgeführt wird. Im Beispielbild wird damit ein MP3-Funkgong ausgelöst, durch den eine Stimme sagt &#039;&#039;Alarmanlage wird in Kürze scharf geschaltet&#039;&#039;.&lt;br /&gt;
*&#039;&#039;Arm Delay&#039;&#039; ist eine Verzögerungszeit, die zwischen dem Scharfschalten des Alarms und der tatsächlichen Wirksamkeit vergeht. Diese Zeit kann beispielsweise genutzt werden, um das Haus ohne Auslösung des Alarms zu verlassen.  &lt;br /&gt;
*&#039;&#039;Arm Action&#039;&#039; ist ein FHEM-Befehl, der beim Scharfschalten ausgeführt wird. Im Beispielbild wird damit ein MP3-Funkgong ausgelöst, durch den eine Stimme sagt &#039;&#039;Alarmanlage scharf geschaltet&#039;&#039;.&lt;br /&gt;
*&#039;&#039;Disarm Action&#039;&#039; ist ein FHEM-Befehl, der beim Unscharfschalten ausgeführt wird. Im Beispielbild wird damit ein MP3-Funkgong ausgelöst, durch den eine Stimme sagt &#039;&#039;Alarmanlage unscharf geschaltet&#039;&#039;.&lt;br /&gt;
*&#039;&#039;Cancel Action&#039;&#039; ist ein FHEM-Befehl, der beim Widerrufen eines Alarms ausgeführt wird. Im Beispielbild wird damit ein MP3-Funkgong ausgelöst, durch den eine Stimme sagt &#039;&#039;Alarm widerrufen&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung, das nachfolgende Bild ist nicht ganz up to date&#039;&#039;&#039;, wird demnächst ersetzt&lt;br /&gt;
&lt;br /&gt;
[[Datei:alarm_settings.png]]&lt;br /&gt;
&lt;br /&gt;
8 Alarmlevel sind für das Modul normalerweise möglich (kann durch Setzen eines einzelnen Parameters im Modulcode verändert werden).&lt;br /&gt;
In der Tabelle &#039;Settings&#039; können für jeden Level eine Bedingung, die Startzeit &#039;&#039;ts&#039;&#039; und Endzeit &#039;&#039;te&#039;&#039; sowie die Zeit &#039;&#039;tc&#039; für das automatische Widerrufen des Alarmlevels gesetzt werden. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Bedingung wird als Perl-Code eingegeben, nur wenn sie den Wert 1 ergibt, wird der Alarm ausgeführt. Will man keine zusätzliche Bedingung prüfen lassen, muss hier einfach eine 1 stehen.&lt;br /&gt;
&lt;br /&gt;
Formate für die Zeitangaben können sein:&lt;br /&gt;
* hh:mm - direkte Eingabe einer festen Zeit.&lt;br /&gt;
* {&#039;&#039;funktion&#039;&#039;} - eine beliebige Perl-Funktion in geschweiften Klammern, die einen gültigen Zeitwert hh:mm zurückliefert. Die Gültigkeit wird erst zur Laufzeit überprüft. Beispielsweise  &amp;quot;30 Minuten vor Sonnenuntergang&amp;quot; als {sunset_abs(-1800)}. &lt;br /&gt;
Diese Aktivierungszeiten wirken sich wie folgt auf den Alarmlevel aus:&lt;br /&gt;
*Wenn  &#039;&#039;ts&#039;&#039; &amp;lt; &#039;&#039;te&#039;&#039;, ist dieser Alarmlevel aktiv, falls &#039;&#039;ts&#039;&#039; &amp;lt; Zeit &amp;lt; &#039;&#039;te&#039;&#039;.&lt;br /&gt;
*Wenn  &#039;&#039;ts&#039;&#039; &amp;gt;= &#039;&#039;te&#039;&#039;, ist dieser Alarmlevel aktiv, falls &#039;&#039;ts&#039;&#039; &amp;lt; Zeit &amp;lt;= 23:59 sowie wenn 0:00 &amp;lt; Zeit &amp;lt;= &#039;&#039;te&#039;&#039;.&lt;br /&gt;
Der Alarmlevel wird automatisch nach der Zeit für den Autowiderruf widerrufen. Setzt man diese Zeit auf 0:00, erfolgt kein automatischer Widerruf.&lt;br /&gt;
&lt;br /&gt;
Ferner kann für jeden Alarmlevel gesetzt oder bedient werden&lt;br /&gt;
*Eine Nachricht zur Erläuterung des Alarms (Teil 2)&lt;br /&gt;
*Eine Checkbox &#039;&#039;Armed&#039;&#039; = scharf&lt;br /&gt;
*Ein Button &#039;&#039;Cancel&#039;&#039; zum Canceln = Aufheben des Alarms&lt;br /&gt;
&lt;br /&gt;
===Sensors===&lt;br /&gt;
Danach wird die Tabelle der Sensoren angezeigt. Für jeden Sensor kann gesetzt werden:&lt;br /&gt;
*Alarmlevel, die hierdurch ausgelöst werden&lt;br /&gt;
*Ein regulärer Ausdruck, bei dessen Erkennung die Auslösung erfolgt &lt;br /&gt;
*Eine Nachricht zur Erläuterung des Alarms (Teil 1)&lt;br /&gt;
*Ein Selektor, um festzulegen, ob dieser Sensor den Alarm &lt;br /&gt;
**auslöst (=Raise),&lt;br /&gt;
**widerruft (=Cancel),&lt;br /&gt;
**scharf schaltet (=Arm) oder&lt;br /&gt;
**unscharf schaltet (=Disarm).&lt;br /&gt;
&#039;&#039;&#039;Achtung: Es ist zwingend notwendig, dass für einen auszulösenden Alarmlevel auch ein Sensor für den Widerruf (=Cancel) des Alarms definiert wird, ansonsten ignoriert das Modul die Definition dieses Levels.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die insgesamt in den &#039;&#039;STATE&#039;&#039; der Alarmanlage geschriebene Nachricht besteht dann aus&lt;br /&gt;
 (Anzeige der Zustände) (Nachricht Teil 1)&#039; &#039;(Nachricht Teil 2).&lt;br /&gt;
Bitte weiter unten nachlesen, was mit der [[#Anzeige der Zustände|Anzeige der Zustände]] gemeint ist.&lt;br /&gt;
In diesen Nachrichten werden die folgenden Ersetzungen vorgenommen&lt;br /&gt;
* $NAME vird durch den Namen des auslösenden Devices ersetzt&lt;br /&gt;
* $EVENT wird durch den kompletten Event ersetzt&lt;br /&gt;
* $EVTPART1... wird durch den 1. Teilstring des Events gefüllt, etc.&lt;br /&gt;
&lt;br /&gt;
[[Datei:alarm_sensors.png]]&lt;br /&gt;
&lt;br /&gt;
===Actors===&lt;br /&gt;
Anschließend wird die Tabelle der Aktoren angezeigt. Für jeden Aktor kann gesetzt werden: &lt;br /&gt;
*Alarmlevel, die diesen Aktor starten&lt;br /&gt;
*Ein FHEM-Kommando zum Starten des Aktors&lt;br /&gt;
*Ein FHEM-Kommando zum Stoppen des Aktors&lt;br /&gt;
*Eine Zeitverzögerung  - entweder als Angabe von Sekunden (&amp;lt;60) oder im Format mm:ss&lt;br /&gt;
In den Strings für diese Aktionen werden folgende Ersetzungen vorgenommen:&lt;br /&gt;
* $NAME vird durch den Namen des auslösenden Devices ersetzt&lt;br /&gt;
* $EVENT wird durch den kompletten Event ersetzt&lt;br /&gt;
* $EVTPART1... wird durch den 1. Teilstring des Events gefüllt, etc.&lt;br /&gt;
* $SHORT wird durch die vollständige Kurznachricht der Alarmauslösung ersetzt&lt;br /&gt;
&lt;br /&gt;
[[Datei:alarm_actors.png]]&lt;br /&gt;
==Bedienung mit anderen Frontends==&lt;br /&gt;
===Tablet-UI===&lt;br /&gt;
Eine Anleitung, wie das Modul mittels eines Keypads über das Tablet-UI scharf und unscharf geschaltet werden kann, findet sich auf [[Alarm und FTUI|dieser Seite]]&lt;br /&gt;
&lt;br /&gt;
==Aktivierung==&lt;br /&gt;
Durch Anklicken des Buttons &#039;&#039;Set Alarms&#039;&#039; werden die &#039;&#039;alarmSettings&#039;&#039;-Attribute befüllt. &lt;br /&gt;
&#039;&#039;&#039;Achtung, Folgendes beachten&#039;&#039;&#039;&lt;br /&gt;
*Es ist zwingend notwendig, dass für einen auszulösenden Alarmlevel auch ein Sensor für den Widerruf (=Cancel) des Alarms definiert wird, ansonsten ignoriert das Modul die Definition dieses Levels.&lt;br /&gt;
*Der Button &#039;&#039;Set Alarms&#039;&#039; wird nur funktionieren, wenn keine [[#Sperrung|Sperrung]] vorliegt, siehe unten.&lt;br /&gt;
*Es empfiehlt sich, danach ein &#039;&#039;Save Config&#039;&#039; auszuführen, damit die Attribute und Notifier permanent sind.&lt;br /&gt;
&lt;br /&gt;
===Anzeige der Zustände===&lt;br /&gt;
Auf Wunsch können die Zustände der Alarmanlage zusammen mit der konkreten Meldung im internal &#039;&#039;STATE&#039;&#039; (bzw. reading &#039;&#039;state&#039;&#039;, beide sind in diesem Modul identisch) angezeigt werden.&lt;br /&gt;
Hierfür gibt es ein Attribut &#039;&#039;statedisplay&#039;&#039; mit den folgenden möglichen Werten, die nachfolgend am Beispiel für den Zustand &amp;quot;Alarm Level 1 ausgelöst&amp;quot; erläutert sind:&lt;br /&gt;
* &#039;&#039;none&#039;&#039; - keine Anzeige&lt;br /&gt;
* &#039;&#039;simple&#039;&#039; - OXOOOOOO&lt;br /&gt;
* &#039;&#039;color&#039;&#039; - &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; 0 &amp;lt;span style=&amp;quot;width:1ex;color:red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; 2 3 4 5 6 7&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;table&#039;&#039;&amp;amp;nbsp;-&amp;amp;nbsp;&amp;lt;table&amp;gt;&amp;lt;tr style=&amp;quot;height:1ex&amp;quot;&amp;gt;&amp;lt;td style=&amp;quot;width:1ex;background-color:green&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width:1ex;background-color:red&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width:1ex;background-color:green&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width:1ex;background-color:green&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width:1ex;background-color:green&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width:1ex;background-color:green&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width:1ex;background-color:green&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width:1ex;background-color:green&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Problem ist, dass möglicherweise das internal &#039;&#039;STATE&#039;&#039; an anderer Stelle verwendet werden soll - z.B. beim Versenden von Mails als &#039;&#039;Value(&#039;AAA&#039;)&#039;&#039;&lt;br /&gt;
Es macht natürlich keinen Sinn, eine HTML-Tabelle in eine Mail zu packen. Deshalb sollte für die Weiterverarbeitung statt des obigen Code die Abkürzung &#039;&#039;$SHORT&#039;&#039; in den Feldern des Alarm-Moduls verwendet werden. Sie wird vor der Ausführung ersetzt durch &#039;&#039;$defs{&#039;AAA&#039;}{READINGS}{&amp;quot;short&amp;quot;}{VAL}&#039;&#039;&lt;br /&gt;
Dies enthält nur die Meldung, nicht aber die Anzeige aller Zustände. &lt;br /&gt;
&lt;br /&gt;
Alternativ kann man auch die Zustandsanzeige durch Wahl des Attributwertes &#039;&#039;none&#039;&#039; komplett abstellen.&lt;br /&gt;
===Sperrung===&lt;br /&gt;
Das Reading &#039;&#039;lockstate&#039;&#039; muss den Wert &#039;&#039;unlocked&#039;&#039; haben, damit durch Anklicken des Buttons &#039;&#039;Set Alarms&#039;&#039; die &#039;&#039;alarmSettings&#039;&#039;-Attribute befüllt werden können. Das ist in der Regel beim ersten Laden des Moduls &#039;&#039;&#039;nicht&#039;&#039;&#039; der Fall, hierzu muss also das Reading von Hand auf den richtigen Wert gesetzt werden. Dazu muss der Befehl &#039;&#039;&#039;set ... unlocked&#039;&#039;&#039; ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=Sensoren=&lt;br /&gt;
==Rauchalarm==&lt;br /&gt;
&#039;&#039;&#039;Dieser Alarm ist mit Lebensgefahr verbunden und wird deshalb unabhängig von FHEM ausgelöst, und von FHEM nur registriert und mit weiteren Aktoren verbunden&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Beispiel werden vernetzte Rauchmelder des Typs [[HM-SEC-SD_Rauchmelder|HM-SEC-SD]] verwendet. Deren Teamleader erhalten das Attribut &#039;&#039;alarmDevice Sensor&#039;&#039;, so dass sie in der Sensorenliste der Alarmanlage auftauchen. Sie lösen den Alarm mit dem höchsten Level aus. Diese Einbindung in die Alarmanlage lässt sich aber auch für beliebige andere in FHEM eingebundene Rauchmelder erreichen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:alarm_smoke.png]]&lt;br /&gt;
&lt;br /&gt;
==Öffnung von Fenstern oder Türen ==&lt;br /&gt;
Dies dient der Überwachung von &#039;&#039;&#039;Zustandsänderungen&#039;&#039;&#039;, ebenso wie zur &#039;&#039;&#039;Überprüfung eines statischen Zustands&#039;&#039;&#039;&lt;br /&gt;
===Szenarien===&lt;br /&gt;
====Kontrollrunde====&lt;br /&gt;
Dieses Alarmszenario (Alarmlevel 4) liegt vor, wenn die Hausbewohner anwesend sind, aber irgendwann zu Bett gehen wollen und vorher noch überprüfen, ob auch alle Türen und das Garagentor geschlossen sind. Sagen wir, beginnend um 22:00 bis 23:59. Man könnte diesen Alarmlevel aber auch durch einen externen Regensensor auslösen, der die Dachfenster auf ihren Öffnungszustand untersucht. Jedenfalls sollte dieser Alarmlevel immer scharf sein.&lt;br /&gt;
&lt;br /&gt;
Durch einen externen Auslöser (sagen wir, beginnend um 22:00 Uhr) wird in periodischen Abständen eine Hilfsroutine gestartet, welche die Zustandsprüfung vornimmt und registriert. Nur wenn diese Registrierung eine Öffnung ergibt, wird der Alarm ausgelöst. Dieser Alarmlevel gehört also zur Kategorie &#039;&#039;Warnung&#039;&#039; und wird deshalb nur eine moderate Signalisierung benötigen - beispielsweise&lt;br /&gt;
*eine Sprachmeldung wird auf einem wandhängenden Tablet ausgegeben &lt;br /&gt;
*eine Nachricht mit gelbem Hintergrund erscheint auf einem [[Digitaler_Bilderrahmen_mit_lcd4linux|Digitalen Bilderrahmen]]&lt;br /&gt;
*eine Nachricht erscheint auf einem [[1-Wire_Textdisplay]] &lt;br /&gt;
*eine LED geht an auf dem [[1-Wire LED-Statusmonitor]]&lt;br /&gt;
&lt;br /&gt;
====Zutritt====&lt;br /&gt;
Dieses Alarmszenario (Alarmlevel 5) liegt vor, wenn die Hausbewohner anwesend sind, aber vermutlich schlafen gegangen sind. Sagen wir, von 0:00 bis 5:00. &lt;br /&gt;
&lt;br /&gt;
Wenn morgens um 4:00 die Haustür geöffnet wird, handelt es sich entweder um ein spätes Heimkommen eines Hausbewohners von einer Party - oder um einen Einbruchsversuch. Der Partygeher sollte also eine gewisse Warnungszeit bekommen, bevor ein moderater akustischer Aktor (sagen wir, ein Funkgong) losgeht. Dieser Aktor  muss deshalb mit einer Verzögerung eingeschaltet werden, und der Partygeher erhält eine Warnung. Diese Warnung - sagen wir, eine bestimmte Lampe geht an -  informiert ihn, dass er innerhalb von 30 Sekunden einen bestimmten Schalter betätigen muss. Etwa den für genau diese Lampe, um sie auszuschalten. Der Einbrecher kennt diesen Schalter nicht, der moderate Alarm wird also die schlafenden Hausbewohner wecken und ihn abschrecken.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich verfügt dieser Level auch noch über einen Partymodus: Mit diesem kann er für 24 Stunden abgestellt werden, so dass man auch um 3:00 in der Frühe die eigenen Partygäste aus dem Haus lassen kann, ohne ihn auszulösen.&lt;br /&gt;
====Einbruch====&lt;br /&gt;
Dieses Alarmszenario (Alarmlevel 6) liegt vor, wenn die Hausbewohner abwesend sind und diesen Level vorher scharf geschaltet haben - und idealerweise von 0:00 bis 23:59. Jeder Zutritt zu Haus löst diesen Alarm aus, und der akustische Aktor kann durchaus kräftig sein (etwa Einschalten der Rauchmelder für 1 Minute). &lt;br /&gt;
&lt;br /&gt;
Da die Auslösung auch erfolgt, wenn der Hausbesitzer heimkommt, muss der akustische Aktor eine Verzögerung haben und innerhalb dieser einer Warnung gegeben werden, z.B. indem  zunächst eine bestimmte Lampe angeht. Dies informiert ihn, dass er innerhalb von 30 Sekunden einen bestimmten Schalter betätigen muss. Etwa die Kombination, um diesen Alarmlevel unscharf zu schalten. Der Einbrecher kennt diese Kombination nicht, die Beleuchtung wird ihn also zunächst abschrecken und der nachfolgende laute akustische Aktor auch die Nachbarn wecken.&lt;br /&gt;
===Zustandsänderung===&lt;br /&gt;
Dazu werden alle überwachten Fenster- und Türkontakte mit dem Attribut &#039;&#039;alarmDevice Sensor&#039;&#039; versehen, so dass sie in der Sensorenliste der Alarmanlage auftauchen. In der Alarmkonfiguration sieht das dann so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:alarm_tf.png]]&lt;br /&gt;
&lt;br /&gt;
===Zustandsprüfung===&lt;br /&gt;
Dies dient der Überprüfung eines &#039;&#039;&#039;statischen Zustands&#039;&#039;&#039;, konkret ob und welche Fenster oder Türen offen sind - z.B. abends, oder bei Regenwetter. Dazu benötigen wir drei &#039;&#039;dummy&#039;&#039; Devices, von denen zwei als &#039;&#039;alarmDevice Sensor&#039;&#039; und einer als &#039;&#039;alarmDevice Actor&#039;&#039; attributiert werden und somit in der Sensoren- bzw. Aktorenliste der Alarmanlage auftauchen. &lt;br /&gt;
&lt;br /&gt;
 define TFOpen.warn dummy&lt;br /&gt;
 attr TFOpen.warn alarmDevice Sensor&lt;br /&gt;
 &#039;&#039;&#039;attr TFOpen.warn alarmSettings alarm4,|TFOpen.warn:.*[TF].*|$EVENT|on&#039;&#039;&#039; (Diese Zeile wird vom Modul 95_Alarm.pm automatisch erzeugt)&lt;br /&gt;
 attr TFOpen.warn group windowDetector&lt;br /&gt;
 attr TFOpen.warn room Alarm&lt;br /&gt;
&lt;br /&gt;
 define TFClose.warn dummy&lt;br /&gt;
 attr TFClose.warn alarmDevice Sensor&lt;br /&gt;
 &#039;&#039;&#039;attr TFClose.warn alarmSettings alarm4,|TFClose.warn:yes|Alle zu|off&#039;&#039;&#039; (Diese Zeile wird vom Modul 95_Alarm.pm automatisch erzeugt)&lt;br /&gt;
 attr TFClose.warn group windowDetector&lt;br /&gt;
 attr TFClose.warn room Alarm&lt;br /&gt;
&lt;br /&gt;
 define TFOpen.check dummy&lt;br /&gt;
 attr TFOpen.check alarmDevice Actor&lt;br /&gt;
 &#039;&#039;&#039;attr TFOpen.check alarmSettings alarm4,|{HouseOpen()}||10:00&#039;&#039;&#039; (Diese Zeile wird vom Modul 95_Alarm.pm automatisch erzeugt)&lt;br /&gt;
 attr TFOpen.check group windowDetector&lt;br /&gt;
 attr TFOpen.check room Alarm&lt;br /&gt;
&lt;br /&gt;
[[Datei:TFAlarm.png|left|thumb|200px|]]Als nächstes muss eine Überwachungsroutine geschrieben werden. Das kann entweder als FHEM-Skript geschehen, oder in der Datei 99_myUtils.pm als perl-Code. Dieses Unterprogramm muss &lt;br /&gt;
*den obigen &#039;&#039;dummy&#039;&#039; TFOpen.warn setzen, und zwar auf den oder die Namen der geöffneten Fenster und Türen oder &amp;quot;none&amp;quot;, wenn keine geöffnet sind.&lt;br /&gt;
*den obigen &#039;&#039;dummy&#039;&#039; TFClose.warn setzen, und zwar auf den Wert &amp;quot;no&amp;quot;, wenn irgendeine geöffnet ist und &amp;quot;yes&amp;quot;, wenn keine geöffnet sind.&lt;br /&gt;
Ein Beispiel für eine solche Überwachungsroutine ist weiter unten zu sehen.&lt;br /&gt;
&lt;br /&gt;
Diese Doppelung ist nötig, weil jeder Sensor nur mit einem notify in den Alarmen auftauchen kann - das dient der Sicherheit gegen Fehlkonfiguration und ist beabsichtigt.&lt;br /&gt;
&lt;br /&gt;
In dem nebenstehenden Flussdiagramm wird der Ablauf dargestellt, der sich mit diesem System ergibt. Dabei wird um 22:00 der erste Test auf ein ordnungsgemäß geschlossenes Haus gestartet - und bis Mitternacht alle 10 Minuten wiederholt. Alternativ könnte man das auch mit einem Regensensor als Erstauslöser koppeln.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beispielcode für eine Überwachungsroutine:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
 sub HouseOpen()&lt;br /&gt;
 {&lt;br /&gt;
  my $kfo = 0;&lt;br /&gt;
  my $kfs = &amp;quot;&amp;quot;;&lt;br /&gt;
  my $kto = 0;&lt;br /&gt;
  my $kts = &amp;quot;&amp;quot;;&lt;br /&gt;
  my $str = &amp;quot;&amp;quot;;&lt;br /&gt;
  if( Value(&amp;quot;BK.F&amp;quot;) ne &amp;quot;Closed&amp;quot; ){&lt;br /&gt;
    $kfo++;&lt;br /&gt;
    $kfs = &amp;quot;BK/&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  if( Value(&amp;quot;WK.F&amp;quot;) ne &amp;quot;Closed&amp;quot; ){&lt;br /&gt;
    $kfo++;&lt;br /&gt;
    $kfs = $kfs.&amp;quot;WK/&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  if( Value(&amp;quot;VK.T&amp;quot;) ne &amp;quot;Closed&amp;quot; ){&lt;br /&gt;
    $kto++;&lt;br /&gt;
    $kts = &amp;quot;VK/&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  if( Value(&amp;quot;WZ.T&#039;) ne &amp;quot;Closed&amp;quot; ){&lt;br /&gt;
    $kto++;&lt;br /&gt;
    $kts = $kts.&amp;quot;WZ/&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
 if( ($kfo &amp;gt;= 1) &amp;amp;&amp;amp; ($kto == 0) ){&lt;br /&gt;
    $kfs = substr($kfs,0,-1);&lt;br /&gt;
    fhem(&amp;quot;define TFOpen.delay at +00:00:30 set TFOpen.warn $kfs Fenster&amp;quot;); &lt;br /&gt;
    fhem(&amp;quot;define TFClose.delay at +00:00:30 set TFClose.warn no&amp;quot;);&lt;br /&gt;
  }elsif( ($kfo == 0) &amp;amp;&amp;amp; ($kto &amp;gt;= 1) ){&lt;br /&gt;
    $kts = substr($kts,0,-1);&lt;br /&gt;
    fhem(&amp;quot;define TFOpen.delay at +00:00:30 set TFOpen.warn $kts Tür&amp;quot;); &lt;br /&gt;
    fhem(&amp;quot;define TFClose.delay at +00:00:30 set TFClose.warn no&amp;quot;);&lt;br /&gt;
  }elsif( ($kfo &amp;gt;= 1) &amp;amp;&amp;amp; ($kto &amp;gt;= 1)){&lt;br /&gt;
     $kts = substr($kts,0,-1);&lt;br /&gt;
     $kfs = substr($kfs,0,-1);&lt;br /&gt;
     $str = &amp;quot;$kts Tür + $kfs Fenster&amp;quot;;&lt;br /&gt;
     fhem(&amp;quot;define TFOpen.delay at +00:00:30 set TFOpen.warn $kts T / $kfs F&amp;quot;);&lt;br /&gt;
     fhem(&amp;quot;define TFClose.delay at +00:00:30 set TFClose.warn no&amp;quot;);&lt;br /&gt;
  }else{&lt;br /&gt;
     fhem(&amp;quot;set TFOpen.warn none&amp;quot;);&lt;br /&gt;
     fhem(&amp;quot;set TFClose.warn yes&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
 return $str;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Batterie schwach bei FHEM-Devices==&lt;br /&gt;
Dieser Sensor besteht aus einem &#039;&#039;notify&#039;&#039; und einem &#039;&#039;dummy&#039;&#039;, der bei einer &#039;battery low&#039;-Meldung eines beliebigen FHEM-Device auf dessen Namen gesetzt wird. Der &#039;&#039;dummy&#039;&#039; wird als &#039;&#039;alarmDevice Sensor&#039;&#039; attributiert, so dass er in der Sensorenliste der Alarmanlage auftaucht. &lt;br /&gt;
	&lt;br /&gt;
 define LBatt.N notify .*:[Bb]attery.*[Ll]ow.* set LBatt.warn $NAME&lt;br /&gt;
 attr LBatt.N room Alarm&lt;br /&gt;
 attr LBatt.N group deviceDetector&lt;br /&gt;
&lt;br /&gt;
 define LBatt.warn dummy&lt;br /&gt;
 attr LBatt.warn alarmDevice Sensor&lt;br /&gt;
 attr LBatt.warn room Alarm&lt;br /&gt;
 attr LBatt.warn group deviceDetector&lt;br /&gt;
Auf einen Test, ob gleichzeitig bei anderen FHEM-Devices die Batterie ebenfalls schwach ist, wird hier verzichtet. Für diesen Sensor wird ein eigener Alarmlevel (niedriger Priorität) erzeugt. Bei einem beliebigen &#039;battery low&#039; Event wird somit der STATE der Alarmanlage gesetzt auf &#039;&#039;&#039;Batt. &amp;lt;devicename&amp;gt; schwach&#039;&#039;&#039;. Dieser Alarm muss manuell zurückgesetzt werden (schließlich sollten die Batterien ja erst gewechselt werden...) &lt;br /&gt;
&lt;br /&gt;
[[Datei:alarm_lbatt.png]]&lt;br /&gt;
&lt;br /&gt;
=Aktoren=&lt;br /&gt;
Aktoren können natürlich real existierende Devices sein. Man kann aber auch einfach Dummy-Devices anlegen und ihnen das Attribut &#039;&#039;alarmDevice Actor&#039;&#039; geben. Bei beiden Arten von Aktoren kann man dann als Aktion&lt;br /&gt;
* real existierende Devices schalten,&lt;br /&gt;
* ein Perl-Unterprogramm aufrufen oder&lt;br /&gt;
* einen Dummy auf einen bestimmten Wert setzen. Das löst einen Event aus, den man z.B. mit einem notify abfangen kann (eher umständlich...), oder der auf einer entfernten FHEM-Instanz mit FHEM2FHEM registriert wird. &lt;br /&gt;
Nachfolgend drei Beispiele&lt;br /&gt;
==Rauchmelder als Alarmsignal==&lt;br /&gt;
Für Alarme, bei denen es wirklich auf schnelle Reaktionen ankommt, kann man auch Rauchdetektoren verwenden, die über Funk aktivierbar sind. Im Beispiel werden vernetzte Rauchmelder des Typs [[HM-SEC-SD_Rauchmelder|HM-SEC-SD]] verwendet. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung: Es ist sehr empfehlenswert, diesen Alarm auch wieder automatisch auszuschalten.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dazu wird ein &#039;&#039;dummy&#039;&#039; erzeugt und mit &#039;&#039;alarmDevice Actor&#039;&#039; attributiert, so dass er in der Aktorenliste auftaucht:&lt;br /&gt;
&lt;br /&gt;
 define SD.alarm dummy&lt;br /&gt;
 attr SD.alarm alarmDevice Actor&lt;br /&gt;
 &#039;&#039;&#039;attr SD.alarm alarmSettings alarm7,|set TH.SD0 alarmOn|set TH.SD0 alarmOff|30&#039;&#039;&#039; (Vom Modul 95_Alarm.pm automatisch erzeugt)&lt;br /&gt;
 attr SD.alarm group alarmActor&lt;br /&gt;
 attr SD.alarm room Alarm &lt;br /&gt;
In der Alarmkonfiguration sieht das dann so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:alarm_smokeactor.png]]&lt;br /&gt;
&lt;br /&gt;
==Funk-Türgong / MP3-Türgong als Alarmsignal==&lt;br /&gt;
Hier wird ein FS20-Türgong als akustisches Alarmsignal verwendet.&lt;br /&gt;
&lt;br /&gt;
 define WZ.Gong FS20 &amp;lt;adresse&amp;gt;&lt;br /&gt;
 attr WZ.Gong IODev CUL&lt;br /&gt;
 attr WZ.Gong alarmDevice Actor&lt;br /&gt;
 &#039;&#039;&#039;attr WZ.Gong alarmSettings alarm5,alarm6,|set WZ.Gong on||30&#039;&#039;&#039; (Vom Modul 95_Alarm.pm automatisch erzeugt)&lt;br /&gt;
 attr WZ.Gong group alarmActor&lt;br /&gt;
 attr WZ.Gong room Alarm,Erdgeschoss&lt;br /&gt;
In der Alarmkonfiguration sieht das dann so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:alarm_gongactor.png]]&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung eines MP3-Funkgongs (z.B. aus dem Homematic-Programm) kann man auf diesem eine ganze Menge verschiedene MP3-Dateien speichern, die z.B. Stimmenmeldungen &amp;quot;Alarmanlage scharf geschaltet&amp;quot; abgeben. Zur Erstellung dieser Meldungen hat es sich bewährt, einen kostenlosen Online-TTS (Text-to-Speech) Service zu nutzen, z.B. Ivona.&lt;br /&gt;
==Alarmierung per SMS== &lt;br /&gt;
Für Alarme, die man auch im Urlaub auf das Handy bekommen möchte, bedarf es natürlich eines Providers, der eine bestimmte Mailadresse als SMS weiterleitet. Ferner einer FHEM-Konfiguration, die Mails versenden kann. Dann wird ein &#039;&#039;dummy&#039;&#039; erzeugt und mit &#039;&#039;alarmDevice Actor&#039;&#039; attributiert, so dass er in der Aktorenliste auftaucht. Die Abkürzung &#039;&#039;$SHORT&#039;&#039; wird vor der Ausführung durch die Kurzbeschreibung des Alarms ersetzt.&lt;br /&gt;
 define Mail.alarm dummy&lt;br /&gt;
 attr Mail.alarm alarmDevice Actor&lt;br /&gt;
 &#039;&#039;&#039;attr Mail.alarm alarmSettings alarm6,alarm7,|{DebianMail(&amp;lt;mailadresse&amp;gt;,&#039;Alarm&#039;,&#039;$SHORT&#039;}||30&#039;&#039;&#039; (Vom Modul 95_Alarm.pm automatisch erzeugt)&lt;br /&gt;
 attr Mail.alarm group alarmActor&lt;br /&gt;
 attr Mail.alarm room Alarm&lt;br /&gt;
In der Alarmkonfiguration sieht das dann so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:alarm_mailactor.png]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=117581.0|LinkText=Forenthread}}&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>AlanBlack</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Modul_Alarm&amp;diff=36551</id>
		<title>Modul Alarm</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Modul_Alarm&amp;diff=36551"/>
		<updated>2021-12-07T22:26:20Z</updated>

		<summary type="html">&lt;p&gt;AlanBlack: Link inzwischen nicht mehr gültig&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Das Modul stellt eine komfortable Oberfläche bereit, um per Webinterface Sensoren mit Aktoren zu verknüpfen - und zwar nur innerhalb bestimmter Zeitfenster sowie an- und abschaltbar&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=Alarm&lt;br /&gt;
|ModForumArea=Unterstuetzende Dienste&lt;br /&gt;
|ModTechName=95_Alarm.pm&lt;br /&gt;
|ModOwner=Prof. Dr. Peter A. Henning&lt;br /&gt;
}}&lt;br /&gt;
Diese Seite beschreibt die Konfiguration und Verwendung des Moduls 95_Alarm.pm. Die nachfolgende Dokumentation ist nicht ganz aktuell, aber vollkommen hinreichend für die Installation.&lt;br /&gt;
Weitere Tipps und Hinweise findet man im Buch [https://www.dpunkt.de/buecher/12387/9783960090120-smarthome-hacks.html Smart Home Hacks]&amp;lt;!-- Seite, auf die verwiesen wird, existiert nicht mehr --&amp;gt;.&lt;br /&gt;
Für Supportanfragen bitte &#039;&#039;{{Link2Forum|Topic=117581.0|LinkText=diesen Forenthread}}&#039;&#039; verwenden.&lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
Das Modul &#039;&#039;95_Alarm.pm&#039;&#039; stellt eine komfortable Oberfläche bereit, um per Webinterface bestimmte auslösende Elemente (nachfolgend &#039;Sensoren&#039; genannt) mit bestimmten Aktionen (nachfolgend &#039;Aktoren&#039; genannt) zu verknüpfen - und zwar nur innerhalb bestimmter Zeitfenster sowie an- und abschaltbar (&amp;quot;scharf/armed&amp;quot; bzw. &amp;quot;unscharf/disarmed&amp;quot;). Diese Verknüpfungen werden als &amp;quot;normale&amp;quot; FHEM-Definitionen gespeichert.&lt;br /&gt;
==Erste Schritte==&lt;br /&gt;
Damit FHEM-Devices als Aktoren oder Sensoren für die Alarmanlage genutzt werden können, müssen zwei neue globale Attribute namens &amp;lt;nowiki&amp;gt;alarmDevice&amp;lt;/nowiki&amp;gt; und &amp;lt;nowiki&amp;gt;alarmSettings&amp;lt;/nowiki&amp;gt; eingeführt werden. Dazu muss in der Grundkonfiguration von FHEM die Definition der nutzerspezifischen Attribute via &#039;&#039;userattr&#039;&#039; angepasst werden. Bei Konfiguration über FHEMWEB ist es ratsam dazu die folgenden beiden Befehle zu nutzen:&lt;br /&gt;
&lt;br /&gt;
 { addToAttrList(&amp;quot;alarmDevice:Actor,Sensor&amp;quot;) }&lt;br /&gt;
 { addToAttrList(&amp;quot;alarmSettings&amp;quot;) } &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alternativ:&#039;&#039;&#039; Möchte man dies direkt im &#039;&#039;global&#039;&#039; device ändern, so sollten die weiteren Attribute beibehalten werden, dies sieht etwa so aus:&lt;br /&gt;
&lt;br /&gt;
 attr global userattr &#039;&#039;&#039;alarmDevice:Actor,Sensor alarmSettings&#039;&#039;&#039; devStateIcon devStateStyle ...&#039;&#039;(hier folgen weitere Attribute)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Zur Erläuterung:&lt;br /&gt;
*Soll ein FHEM-Device als Sensor für die Alarmanlage genutzt werden, wird der Wert seines &#039;&#039;alarmDevice&#039;&#039;-Attributes auf &#039;Sensor&#039; gesetzt.&lt;br /&gt;
*Soll ein FHEM-Device als Aktor für die Alarmanlage genutzt werden, wird der Wert seines &#039;&#039;alarmDevice&#039;&#039;-Attributes auf &#039;Actor&#039; gesetzt&lt;br /&gt;
*Das Attribut &#039;&#039;alarmSettings&#039;&#039; wird beim Setzen der Alarme auf der Alarmkonfigurationsseite automatisch befüllt.&lt;br /&gt;
Ferner muss das Modul &#039;&#039;95_Alarm.pm&#039;&#039; im Modulpfad installiert werden, ebenso die JavaScript-Datei &#039;&#039;alarm.js&#039;&#039; in www/pgm2.&lt;br /&gt;
==Definition==&lt;br /&gt;
Die Alarmanlage - hier mit dem Namen &#039;&#039;AAA&#039;&#039; versehen - selbst wird über&lt;br /&gt;
 define AAA Alarm&lt;br /&gt;
definiert. Diese Definition legt einen versteckten Raum &amp;quot;AlarmRoom&amp;quot; an, welcher über einen Weblink im oberen Menü des Webinterfaces erreichbar ist.&lt;br /&gt;
*Der Name dieses Raumes kann durch das Attribut &#039;&#039;hiddenRoom&#039;&#039; geändert werden.&lt;br /&gt;
*Es wird ein weiterer Raum benötigt, der in der gegenwärtigen Fassung des Moduls den Namen &#039;&#039;Alarm&#039;&#039; trägt. Dieser wird automatisch erstellt, sobald die Alarme wie unten konfiguriert werden.&lt;br /&gt;
*Dieses Modul verwendet das globale Attribut &#039;&#039;language&#039;&#039; zur Bestimmung der Anzeigedaten (Standard: EN=english). Für deutsche Ausgabedaten muss in FHEM das Attribut &lt;br /&gt;
 attr global language DE&lt;br /&gt;
gesetzt werden. Für dieses Wiki werden die deutschen Ausgabedaten verwendet.&lt;br /&gt;
&lt;br /&gt;
Beim Anklicken des Begriffes &#039;&#039;Alarmanlage&#039;&#039; im oberen Menü des Webinterfaces wird dieser versteckte Raum angezeigt. Er enthält an erster Stelle das Alarm-Device. Für die Konfiguration dieses Devices siehe den nächsten Abschnitt, für die Bedienung siehe den Abschnitt [Bedienung].&lt;br /&gt;
&lt;br /&gt;
==Konfiguration des Alarm-Device==&lt;br /&gt;
Das Alarm-Device kennt nur wenige Set- und Get-Befehle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Bedienung im FHEMWEB Frontend==&lt;br /&gt;
In diesem Abschnitt wird die Bedienung der Weboberfläche und damit die Konfiguration der Alarmanlage beschrieben. Um sie zu erreichen, klickt man auf den Begriff &#039;&#039;Alarmanlage&#039;&#039; im oberen Menü des Webinterfaces.&lt;br /&gt;
===Settings===&lt;br /&gt;
Im oberen Bereich sind drei Eingabefelder zu sehen:&lt;br /&gt;
*&#039;&#039;Wait Action&#039;&#039; ist ein FHEM-Befehl, der beim Scharfschalten des Alarms ausgeführt wird. Im Beispielbild wird damit ein MP3-Funkgong ausgelöst, durch den eine Stimme sagt &#039;&#039;Alarmanlage wird in Kürze scharf geschaltet&#039;&#039;.&lt;br /&gt;
*&#039;&#039;Arm Delay&#039;&#039; ist eine Verzögerungszeit, die zwischen dem Scharfschalten des Alarms und der tatsächlichen Wirksamkeit vergeht. Diese Zeit kann beispielsweise genutzt werden, um das Haus ohne Auslösung des Alarms zu verlassen.  &lt;br /&gt;
*&#039;&#039;Arm Action&#039;&#039; ist ein FHEM-Befehl, der beim Scharfschalten ausgeführt wird. Im Beispielbild wird damit ein MP3-Funkgong ausgelöst, durch den eine Stimme sagt &#039;&#039;Alarmanlage scharf geschaltet&#039;&#039;.&lt;br /&gt;
*&#039;&#039;Disarm Action&#039;&#039; ist ein FHEM-Befehl, der beim Unscharfschalten ausgeführt wird. Im Beispielbild wird damit ein MP3-Funkgong ausgelöst, durch den eine Stimme sagt &#039;&#039;Alarmanlage unscharf geschaltet&#039;&#039;.&lt;br /&gt;
*&#039;&#039;Cancel Action&#039;&#039; ist ein FHEM-Befehl, der beim Widerrufen eines Alarms ausgeführt wird. Im Beispielbild wird damit ein MP3-Funkgong ausgelöst, durch den eine Stimme sagt &#039;&#039;Alarm widerrufen&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung, das nachfolgende Bild ist nicht ganz up to date&#039;&#039;&#039;, wird demnächst ersetzt&lt;br /&gt;
&lt;br /&gt;
[[Datei:alarm_settings.png]]&lt;br /&gt;
&lt;br /&gt;
8 Alarmlevel sind für das Modul normalerweise möglich (kann durch Setzen eines einzelnen Parameters im Modulcode verändert werden).&lt;br /&gt;
In der Tabelle &#039;Settings&#039; können für jeden Level eine Bedingung, die Startzeit &#039;&#039;ts&#039;&#039; und Endzeit &#039;&#039;te&#039;&#039; sowie die Zeit &#039;&#039;tc&#039; für das automatische Widerrufen des Alarmlevels gesetzt werden. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Bedingung wird als Perl-Code eingegeben, nur wenn sie den Wert 1 ergibt, wird der Alarm ausgeführt. Will man keine zusätzliche Bedingung prüfen lassen, muss hier einfach eine 1 stehen.&lt;br /&gt;
&lt;br /&gt;
Formate für die Zeitangaben können sein:&lt;br /&gt;
* hh:mm - direkte Eingabe einer festen Zeit.&lt;br /&gt;
* {&#039;&#039;funktion&#039;&#039;} - eine beliebige Perl-Funktion in geschweiften Klammern, die einen gültigen Zeitwert hh:mm zurückliefert. Die Gültigkeit wird erst zur Laufzeit überprüft. Beispielsweise  &amp;quot;30 Minuten vor Sonnenuntergang&amp;quot; als {sunset_abs(-1800)}. &lt;br /&gt;
Diese Aktivierungszeiten wirken sich wie folgt auf den Alarmlevel aus:&lt;br /&gt;
*Wenn  &#039;&#039;ts&#039;&#039; &amp;lt; &#039;&#039;te&#039;&#039;, ist dieser Alarmlevel aktiv, falls &#039;&#039;ts&#039;&#039; &amp;lt; Zeit &amp;lt; &#039;&#039;te&#039;&#039;.&lt;br /&gt;
*Wenn  &#039;&#039;ts&#039;&#039; &amp;gt;= &#039;&#039;te&#039;&#039;, ist dieser Alarmlevel aktiv, falls &#039;&#039;ts&#039;&#039; &amp;lt; Zeit &amp;lt;= 23:59 sowie wenn 0:00 &amp;lt; Zeit &amp;lt;= &#039;&#039;te&#039;&#039;.&lt;br /&gt;
Der Alarmlevel wird automatisch nach der Zeit für den Autowiderruf widerrufen. Setzt man diese Zeit auf 0:00, erfolgt kein automatischer Widerruf.&lt;br /&gt;
&lt;br /&gt;
Ferner kann für jeden Alarmlevel gesetzt oder bedient werden&lt;br /&gt;
*Eine Nachricht zur Erläuterung des Alarms (Teil 2)&lt;br /&gt;
*Eine Checkbox &#039;&#039;Armed&#039;&#039; = scharf&lt;br /&gt;
*Ein Button &#039;&#039;Cancel&#039;&#039; zum Canceln = Aufheben des Alarms&lt;br /&gt;
&lt;br /&gt;
===Sensors===&lt;br /&gt;
Danach wird die Tabelle der Sensoren angezeigt. Für jeden Sensor kann gesetzt werden:&lt;br /&gt;
*Alarmlevel, die hierdurch ausgelöst werden&lt;br /&gt;
*Ein regulärer Ausdruck, bei dessen Erkennung die Auslösung erfolgt &lt;br /&gt;
*Eine Nachricht zur Erläuterung des Alarms (Teil 1)&lt;br /&gt;
*Ein Selektor, um festzulegen, ob dieser Sensor den Alarm &lt;br /&gt;
**auslöst (=Raise),&lt;br /&gt;
**widerruft (=Cancel),&lt;br /&gt;
**scharf schaltet (=Arm) oder&lt;br /&gt;
**unscharf schaltet (=Disarm).&lt;br /&gt;
&#039;&#039;&#039;Achtung: Es ist zwingend notwendig, dass für einen auszulösenden Alarmlevel auch ein Sensor für den Widerruf (=Cancel) des Alarms definiert wird, ansonsten ignoriert das Modul die Definition dieses Levels.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die insgesamt in den &#039;&#039;STATE&#039;&#039; der Alarmanlage geschriebene Nachricht besteht dann aus&lt;br /&gt;
 (Anzeige der Zustände) (Nachricht Teil 1)&#039; &#039;(Nachricht Teil 2).&lt;br /&gt;
Bitte weiter unten nachlesen, was mit der [[#Anzeige der Zustände|Anzeige der Zustände]] gemeint ist.&lt;br /&gt;
In diesen Nachrichten werden die folgenden Ersetzungen vorgenommen&lt;br /&gt;
* $NAME vird durch den Namen des auslösenden Devices ersetzt&lt;br /&gt;
* $EVENT wird durch den kompletten Event ersetzt&lt;br /&gt;
* $EVTPART1... wird durch den 1. Teilstring des Events gefüllt, etc.&lt;br /&gt;
&lt;br /&gt;
[[Datei:alarm_sensors.png]]&lt;br /&gt;
&lt;br /&gt;
===Actors===&lt;br /&gt;
Anschließend wird die Tabelle der Aktoren angezeigt. Für jeden Aktor kann gesetzt werden: &lt;br /&gt;
*Alarmlevel, die diesen Aktor starten&lt;br /&gt;
*Ein FHEM-Kommando zum Starten des Aktors&lt;br /&gt;
*Ein FHEM-Kommando zum Stoppen des Aktors&lt;br /&gt;
*Eine Zeitverzögerung  - entweder als Angabe von Sekunden (&amp;lt;60) oder im Format mm:ss&lt;br /&gt;
In den Strings für diese Aktionen werden folgende Ersetzungen vorgenommen:&lt;br /&gt;
* $NAME vird durch den Namen des auslösenden Devices ersetzt&lt;br /&gt;
* $EVENT wird durch den kompletten Event ersetzt&lt;br /&gt;
* $EVTPART1... wird durch den 1. Teilstring des Events gefüllt, etc.&lt;br /&gt;
* $SHORT wird durch die vollständige Kurznachricht der Alarmauslösung ersetzt&lt;br /&gt;
&lt;br /&gt;
[[Datei:alarm_actors.png]]&lt;br /&gt;
==Bedienung mit anderen Frontends==&lt;br /&gt;
===Tablet-UI===&lt;br /&gt;
Eine Anleitung, wie das Modul mittels eines Keypads über das Tablet-UI scharf und unscharf geschaltet werden kann, findet sich auf [[Alarm und FTUI|dieser Seite]]&lt;br /&gt;
&lt;br /&gt;
==Aktivierung==&lt;br /&gt;
Durch Anklicken des Buttons &#039;&#039;Set Alarms&#039;&#039; werden die &#039;&#039;alarmSettings&#039;&#039;-Attribute befüllt. &lt;br /&gt;
&#039;&#039;&#039;Achtung, Folgendes beachten&#039;&#039;&#039;&lt;br /&gt;
*Es ist zwingend notwendig, dass für einen auszulösenden Alarmlevel auch ein Sensor für den Widerruf (=Cancel) des Alarms definiert wird, ansonsten ignoriert das Modul die Definition dieses Levels.&lt;br /&gt;
*Der Button &#039;&#039;Set Alarms&#039;&#039; wird nur funktionieren, wenn keine [[#Sperrung|Sperrung]] vorliegt, siehe unten.&lt;br /&gt;
*Es empfiehlt sich, danach ein &#039;&#039;Save Config&#039;&#039; auszuführen, damit die Attribute und Notifier permanent sind.&lt;br /&gt;
&lt;br /&gt;
===Anzeige der Zustände===&lt;br /&gt;
Auf Wunsch können die Zustände der Alarmanlage zusammen mit der konkreten Meldung im internal &#039;&#039;STATE&#039;&#039; (bzw. reading &#039;&#039;state&#039;&#039;, beide sind in diesem Modul identisch) angezeigt werden.&lt;br /&gt;
Hierfür gibt es ein Attribut &#039;&#039;statedisplay&#039;&#039; mit den folgenden möglichen Werten, die nachfolgend am Beispiel für den Zustand &amp;quot;Alarm Level 1 ausgelöst&amp;quot; erläutert sind:&lt;br /&gt;
* &#039;&#039;none&#039;&#039; - keine Anzeige&lt;br /&gt;
* &#039;&#039;simple&#039;&#039; - OXOOOOOO&lt;br /&gt;
* &#039;&#039;color&#039;&#039; - &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; 0 &amp;lt;span style=&amp;quot;width:1ex;color:red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; 2 3 4 5 6 7&amp;lt;/span&amp;gt;&lt;br /&gt;
* &#039;&#039;table&#039;&#039;&amp;amp;nbsp;-&amp;amp;nbsp;&amp;lt;table&amp;gt;&amp;lt;tr style=&amp;quot;height:1ex&amp;quot;&amp;gt;&amp;lt;td style=&amp;quot;width:1ex;background-color:green&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width:1ex;background-color:red&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width:1ex;background-color:green&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width:1ex;background-color:green&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width:1ex;background-color:green&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width:1ex;background-color:green&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width:1ex;background-color:green&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width:1ex;background-color:green&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Problem ist, dass möglicherweise das internal &#039;&#039;STATE&#039;&#039; an anderer Stelle verwendet werden soll - z.B. beim Versenden von Mails als &#039;&#039;Value(&#039;AAA&#039;)&#039;&#039;&lt;br /&gt;
Es macht natürlich keinen Sinn, eine HTML-Tabelle in eine Mail zu packen. Deshalb sollte für die Weiterverarbeitung statt des obigen Code die Abkürzung &#039;&#039;$SHORT&#039;&#039; in den Feldern des Alarm-Moduls verwendet werden. Sie wird vor der Ausführung ersetzt durch &#039;&#039;$defs{&#039;AAA&#039;}{READINGS}{&amp;quot;short&amp;quot;}{VAL}&#039;&#039;&lt;br /&gt;
Dies enthält nur die Meldung, nicht aber die Anzeige aller Zustände. &lt;br /&gt;
&lt;br /&gt;
Alternativ kann man auch die Zustandsanzeige durch Wahl des Attributwertes &#039;&#039;none&#039;&#039; komplett abstellen.&lt;br /&gt;
===Sperrung===&lt;br /&gt;
Das Reading &#039;&#039;lockstate&#039;&#039; muss den Wert &#039;&#039;unlocked&#039;&#039; haben, damit durch Anklicken des Buttons &#039;&#039;Set Alarms&#039;&#039; die &#039;&#039;alarmSettings&#039;&#039;-Attribute befüllt werden können. Das ist in der Regel beim ersten Laden des Moduls &#039;&#039;&#039;nicht&#039;&#039;&#039; der Fall, hierzu muss also das Reading von Hand auf den richtigen Wert gesetzt werden. Dazu muss der Befehl &#039;&#039;&#039;set ... unlocked&#039;&#039;&#039; ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=Sensoren=&lt;br /&gt;
==Rauchalarm==&lt;br /&gt;
&#039;&#039;&#039;Dieser Alarm ist mit Lebensgefahr verbunden und wird deshalb unabhängig von FHEM ausgelöst, und von FHEM nur registriert und mit weiteren Aktoren verbunden&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Beispiel werden vernetzte Rauchmelder des Typs [[HM-SEC-SD_Rauchmelder|HM-SEC-SD]] verwendet. Deren Teamleader erhalten das Attribut &#039;&#039;alarmDevice Sensor&#039;&#039;, so dass sie in der Sensorenliste der Alarmanlage auftauchen. Sie lösen den Alarm mit dem höchsten Level aus. Diese Einbindung in die Alarmanlage lässt sich aber auch für beliebige andere in FHEM eingebundene Rauchmelder erreichen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:alarm_smoke.png]]&lt;br /&gt;
&lt;br /&gt;
==Öffnung von Fenstern oder Türen ==&lt;br /&gt;
Dies dient der Überwachung von &#039;&#039;&#039;Zustandsänderungen&#039;&#039;&#039;, ebenso wie zur &#039;&#039;&#039;Überprüfung eines statischen Zustands&#039;&#039;&#039;&lt;br /&gt;
===Szenarien===&lt;br /&gt;
====Kontrollrunde====&lt;br /&gt;
Dieses Alarmszenario (Alarmlevel 4) liegt vor, wenn die Hausbewohner anwesend sind, aber irgendwann zu Bett gehen wollen und vorher noch überprüfen, ob auch alle Türen und das Garagentor geschlossen sind. Sagen wir, beginnend um 22:00 bis 23:59. Man könnte diesen Alarmlevel aber auch durch einen externen Regensensor auslösen, der die Dachfenster auf ihren Öffnungszustand untersucht. Jedenfalls sollte dieser Alarmlevel immer scharf sein.&lt;br /&gt;
&lt;br /&gt;
Durch einen externen Auslöser (sagen wir, beginnend um 22:00 Uhr) wird in periodischen Abständen eine Hilfsroutine gestartet, welche die Zustandsprüfung vornimmt und registriert. Nur wenn diese Registrierung eine Öffnung ergibt, wird der Alarm ausgelöst. Dieser Alarmlevel gehört also zur Kategorie &#039;&#039;Warnung&#039;&#039; und wird deshalb nur eine moderate Signalisierung benötigen - beispielsweise&lt;br /&gt;
*eine Sprachmeldung wird auf einem wandhängenden Tablet ausgegeben &lt;br /&gt;
*eine Nachricht mit gelbem Hintergrund erscheint auf einem [[Digitaler_Bilderrahmen_mit_lcd4linux|Digitalen Bilderrahmen]]&lt;br /&gt;
*eine Nachricht erscheint auf einem [[1-Wire_Textdisplay]] &lt;br /&gt;
*eine LED geht an auf dem [[1-Wire LED-Statusmonitor]]&lt;br /&gt;
&lt;br /&gt;
====Zutritt====&lt;br /&gt;
Dieses Alarmszenario (Alarmlevel 5) liegt vor, wenn die Hausbewohner anwesend sind, aber vermutlich schlafen gegangen sind. Sagen wir, von 0:00 bis 5:00. &lt;br /&gt;
&lt;br /&gt;
Wenn morgens um 4:00 die Haustür geöffnet wird, handelt es sich entweder um ein spätes Heimkommen eines Hausbewohners von einer Party - oder um einen Einbruchsversuch. Der Partygeher sollte also eine gewisse Warnungszeit bekommen, bevor ein moderater akustischer Aktor (sagen wir, ein Funkgong) losgeht. Dieser Aktor  muss deshalb mit einer Verzögerung eingeschaltet werden, und der Partygeher erhält eine Warnung. Diese Warnung - sagen wir, eine bestimmte Lampe geht an -  informiert ihn, dass er innerhalb von 30 Sekunden einen bestimmten Schalter betätigen muss. Etwa den für genau diese Lampe, um sie auszuschalten. Der Einbrecher kennt diesen Schalter nicht, der moderate Alarm wird also die schlafenden Hausbewohner wecken und ihn abschrecken.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich verfügt dieser Level auch noch über einen Partymodus: Mit diesem kann er für 24 Stunden abgestellt werden, so dass man auch um 3:00 in der Frühe die eigenen Partygäste aus dem Haus lassen kann, ohne ihn auszulösen.&lt;br /&gt;
====Einbruch====&lt;br /&gt;
Dieses Alarmszenario (Alarmlevel 6) liegt vor, wenn die Hausbewohner abwesend sind und diesen Level vorher scharf geschaltet haben - und idealerweise von 0:00 bis 23:59. Jeder Zutritt zu Haus löst diesen Alarm aus, und der akustische Aktor kann durchaus kräftig sein (etwa Einschalten der Rauchmelder für 1 Minute). &lt;br /&gt;
&lt;br /&gt;
Da die Auslösung auch erfolgt, wenn der Hausbesitzer heimkommt, muss der akustische Aktor eine Verzögerung haben und innerhalb dieser einer Warnung gegeben werden, z.B. indem  zunächst eine bestimmte Lampe angeht. Dies informiert ihn, dass er innerhalb von 30 Sekunden einen bestimmten Schalter betätigen muss. Etwa die Kombination, um diesen Alarmlevel unscharf zu schalten. Der Einbrecher kennt diese Kombination nicht, die Beleuchtung wird ihn also zunächst abschrecken und der nachfolgende laute akustische Aktor auch die Nachbarn wecken.&lt;br /&gt;
===Zustandsänderung===&lt;br /&gt;
Dazu werden alle überwachten Fenster- und Türkontakte mit dem Attribut &#039;&#039;alarmDevice Sensor&#039;&#039; versehen, so dass sie in der Sensorenliste der Alarmanlage auftauchen. In der Alarmkonfiguration sieht das dann so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:alarm_tf.png]]&lt;br /&gt;
&lt;br /&gt;
===Zustandsprüfung===&lt;br /&gt;
Dies dient der Überprüfung eines &#039;&#039;&#039;statischen Zustands&#039;&#039;&#039;, konkret ob und welche Fenster oder Türen offen sind - z.B. abends, oder bei Regenwetter. Dazu benötigen wir drei &#039;&#039;dummy&#039;&#039; Devices, von denen zwei als &#039;&#039;alarmDevice Sensor&#039;&#039; und einer als &#039;&#039;alarmDevice Actor&#039;&#039; attributiert werden und somit in der Sensoren- bzw. Aktorenliste der Alarmanlage auftauchen. &lt;br /&gt;
&lt;br /&gt;
 define TFOpen.warn dummy&lt;br /&gt;
 attr TFOpen.warn alarmDevice Sensor&lt;br /&gt;
 &#039;&#039;&#039;attr TFOpen.warn alarmSettings alarm4,|TFOpen.warn:.*[TF].*|$EVENT|on&#039;&#039;&#039; (Diese Zeile wird vom Modul 95_Alarm.pm automatisch erzeugt)&lt;br /&gt;
 attr TFOpen.warn group windowDetector&lt;br /&gt;
 attr TFOpen.warn room Alarm&lt;br /&gt;
&lt;br /&gt;
 define TFClose.warn dummy&lt;br /&gt;
 attr TFClose.warn alarmDevice Sensor&lt;br /&gt;
 &#039;&#039;&#039;attr TFClose.warn alarmSettings alarm4,|TFClose.warn:yes|Alle zu|off&#039;&#039;&#039; (Diese Zeile wird vom Modul 95_Alarm.pm automatisch erzeugt)&lt;br /&gt;
 attr TFClose.warn group windowDetector&lt;br /&gt;
 attr TFClose.warn room Alarm&lt;br /&gt;
&lt;br /&gt;
 define TFOpen.check dummy&lt;br /&gt;
 attr TFOpen.check alarmDevice Actor&lt;br /&gt;
 &#039;&#039;&#039;attr TFOpen.check alarmSettings alarm4,|{HouseOpen()}||10:00&#039;&#039;&#039; (Diese Zeile wird vom Modul 95_Alarm.pm automatisch erzeugt)&lt;br /&gt;
 attr TFOpen.check group windowDetector&lt;br /&gt;
 attr TFOpen.check room Alarm&lt;br /&gt;
&lt;br /&gt;
[[Datei:TFAlarm.png|left|thumb|200px|]]Als nächstes muss eine Überwachungsroutine geschrieben werden. Das kann entweder als FHEM-Skript geschehen, oder in der Datei 99_myUtils.pm als perl-Code. Dieses Unterprogramm muss &lt;br /&gt;
*den obigen &#039;&#039;dummy&#039;&#039; TFOpen.warn setzen, und zwar auf den oder die Namen der geöffneten Fenster und Türen oder &amp;quot;none&amp;quot;, wenn keine geöffnet sind.&lt;br /&gt;
*den obigen &#039;&#039;dummy&#039;&#039; TFClose.warn setzen, und zwar auf den Wert &amp;quot;no&amp;quot;, wenn irgendeine geöffnet ist und &amp;quot;yes&amp;quot;, wenn keine geöffnet sind.&lt;br /&gt;
Ein Beispiel für eine solche Überwachungsroutine ist weiter unten zu sehen.&lt;br /&gt;
&lt;br /&gt;
Diese Doppelung ist nötig, weil jeder Sensor nur mit einem notify in den Alarmen auftauchen kann - das dient der Sicherheit gegen Fehlkonfiguration und ist beabsichtigt.&lt;br /&gt;
&lt;br /&gt;
In dem nebenstehenden Flussdiagramm wird der Ablauf dargestellt, der sich mit diesem System ergibt. Dabei wird um 22:00 der erste Test auf ein ordnungsgemäß geschlossenes Haus gestartet - und bis Mitternacht alle 10 Minuten wiederholt. Alternativ könnte man das auch mit einem Regensensor als Erstauslöser koppeln.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beispielcode für eine Überwachungsroutine:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
 sub HouseOpen()&lt;br /&gt;
 {&lt;br /&gt;
  my $kfo = 0;&lt;br /&gt;
  my $kfs = &amp;quot;&amp;quot;;&lt;br /&gt;
  my $kto = 0;&lt;br /&gt;
  my $kts = &amp;quot;&amp;quot;;&lt;br /&gt;
  my $str = &amp;quot;&amp;quot;;&lt;br /&gt;
  if( Value(&amp;quot;BK.F&amp;quot;) ne &amp;quot;Closed&amp;quot; ){&lt;br /&gt;
    $kfo++;&lt;br /&gt;
    $kfs = &amp;quot;BK/&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  if( Value(&amp;quot;WK.F&amp;quot;) ne &amp;quot;Closed&amp;quot; ){&lt;br /&gt;
    $kfo++;&lt;br /&gt;
    $kfs = $kfs.&amp;quot;WK/&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  if( Value(&amp;quot;VK.T&amp;quot;) ne &amp;quot;Closed&amp;quot; ){&lt;br /&gt;
    $kto++;&lt;br /&gt;
    $kts = &amp;quot;VK/&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  if( Value(&amp;quot;WZ.T&#039;) ne &amp;quot;Closed&amp;quot; ){&lt;br /&gt;
    $kto++;&lt;br /&gt;
    $kts = $kts.&amp;quot;WZ/&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
 if( ($kfo &amp;gt;= 1) &amp;amp;&amp;amp; ($kto == 0) ){&lt;br /&gt;
    $kfs = substr($kfs,0,-1);&lt;br /&gt;
    fhem(&amp;quot;define TFOpen.delay at +00:00:30 set TFOpen.warn $kfs Fenster&amp;quot;); &lt;br /&gt;
    fhem(&amp;quot;define TFClose.delay at +00:00:30 set TFClose.warn no&amp;quot;);&lt;br /&gt;
  }elsif( ($kfo == 0) &amp;amp;&amp;amp; ($kto &amp;gt;= 1) ){&lt;br /&gt;
    $kts = substr($kts,0,-1);&lt;br /&gt;
    fhem(&amp;quot;define TFOpen.delay at +00:00:30 set TFOpen.warn $kts Tür&amp;quot;); &lt;br /&gt;
    fhem(&amp;quot;define TFClose.delay at +00:00:30 set TFClose.warn no&amp;quot;);&lt;br /&gt;
  }elsif( ($kfo &amp;gt;= 1) &amp;amp;&amp;amp; ($kto &amp;gt;= 1)){&lt;br /&gt;
     $kts = substr($kts,0,-1);&lt;br /&gt;
     $kfs = substr($kfs,0,-1);&lt;br /&gt;
     $str = &amp;quot;$kts Tür + $kfs Fenster&amp;quot;;&lt;br /&gt;
     fhem(&amp;quot;define TFOpen.delay at +00:00:30 set TFOpen.warn $kts T / $kfs F&amp;quot;);&lt;br /&gt;
     fhem(&amp;quot;define TFClose.delay at +00:00:30 set TFClose.warn no&amp;quot;);&lt;br /&gt;
  }else{&lt;br /&gt;
     fhem(&amp;quot;set TFOpen.warn none&amp;quot;);&lt;br /&gt;
     fhem(&amp;quot;set TFClose.warn yes&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
 return $str;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Batterie schwach bei FHEM-Devices==&lt;br /&gt;
Dieser Sensor besteht aus einem &#039;&#039;notify&#039;&#039; und einem &#039;&#039;dummy&#039;&#039;, der bei einer &#039;battery low&#039;-Meldung eines beliebigen FHEM-Device auf dessen Namen gesetzt wird. Der &#039;&#039;dummy&#039;&#039; wird als &#039;&#039;alarmDevice Sensor&#039;&#039; attributiert, so dass er in der Sensorenliste der Alarmanlage auftaucht. &lt;br /&gt;
	&lt;br /&gt;
 define LBatt.N notify .*:[Bb]attery.*[Ll]ow.* set LBatt.warn $NAME&lt;br /&gt;
 attr LBatt.N room Alarm&lt;br /&gt;
 attr LBatt.N group deviceDetector&lt;br /&gt;
&lt;br /&gt;
 define LBatt.warn dummy&lt;br /&gt;
 attr LBatt.warn alarmDevice Sensor&lt;br /&gt;
 attr LBatt.warn room Alarm&lt;br /&gt;
 attr LBatt.warn group deviceDetector&lt;br /&gt;
Auf einen Test, ob gleichzeitig bei anderen FHEM-Devices die Batterie ebenfalls schwach ist, wird hier verzichtet. Für diesen Sensor wird ein eigener Alarmlevel (niedriger Priorität) erzeugt. Bei einem beliebigen &#039;battery low&#039; Event wird somit der STATE der Alarmanlage gesetzt auf &#039;&#039;&#039;Batt. &amp;lt;devicename&amp;gt; schwach&#039;&#039;&#039;. Dieser Alarm muss manuell zurückgesetzt werden (schließlich sollten die Batterien ja erst gewechselt werden...) &lt;br /&gt;
&lt;br /&gt;
[[Datei:alarm_lbatt.png]]&lt;br /&gt;
&lt;br /&gt;
=Aktoren=&lt;br /&gt;
Aktoren können natürlich real existierende Devices sein. Man kann aber auch einfach Dummy-Devices anlegen und ihnen das Attribut &#039;&#039;alarmDevice Actor&#039;&#039; geben. Bei beiden Arten von Aktoren kann man dann als Aktion&lt;br /&gt;
* real existierende Devices schalten,&lt;br /&gt;
* ein Perl-Unterprogramm aufrufen oder&lt;br /&gt;
* einen Dummy auf einen bestimmten Wert setzen. Das löst einen Event aus, den man z.B. mit einem notify abfangen kann (eher umständlich...), oder der auf einer entfernten FHEM-Instanz mit FHEM2FHEM registriert wird. &lt;br /&gt;
Nachfolgend drei Beispiele&lt;br /&gt;
==Rauchmelder als Alarmsignal==&lt;br /&gt;
Für Alarme, bei denen es wirklich auf schnelle Reaktionen ankommt, kann man auch Rauchdetektoren verwenden, die über Funk aktivierbar sind. Im Beispiel werden vernetzte Rauchmelder des Typs [[HM-SEC-SD_Rauchmelder|HM-SEC-SD]] verwendet. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung: Es ist sehr empfehlenswert, diesen Alarm auch wieder automatisch auszuschalten.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dazu wird ein &#039;&#039;dummy&#039;&#039; erzeugt und mit &#039;&#039;alarmDevice Actor&#039;&#039; attributiert, so dass er in der Aktorenliste auftaucht:&lt;br /&gt;
&lt;br /&gt;
 define SD.alarm dummy&lt;br /&gt;
 attr SD.alarm alarmDevice Actor&lt;br /&gt;
 &#039;&#039;&#039;attr SD.alarm alarmSettings alarm7,|set TH.SD0 alarmOn|set TH.SD0 alarmOff|30&#039;&#039;&#039; (Vom Modul 95_Alarm.pm automatisch erzeugt)&lt;br /&gt;
 attr SD.alarm group alarmActor&lt;br /&gt;
 attr SD.alarm room Alarm &lt;br /&gt;
In der Alarmkonfiguration sieht das dann so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:alarm_smokeactor.png]]&lt;br /&gt;
&lt;br /&gt;
==Funk-Türgong / MP3-Türgong als Alarmsignal==&lt;br /&gt;
Hier wird ein FS20-Türgong als akustisches Alarmsignal verwendet.&lt;br /&gt;
&lt;br /&gt;
 define WZ.Gong FS20 &amp;lt;adresse&amp;gt;&lt;br /&gt;
 attr WZ.Gong IODev CUL&lt;br /&gt;
 attr WZ.Gong alarmDevice Actor&lt;br /&gt;
 &#039;&#039;&#039;attr WZ.Gong alarmSettings alarm5,alarm6,|set WZ.Gong on||30&#039;&#039;&#039; (Vom Modul 95_Alarm.pm automatisch erzeugt)&lt;br /&gt;
 attr WZ.Gong group alarmActor&lt;br /&gt;
 attr WZ.Gong room Alarm,Erdgeschoss&lt;br /&gt;
In der Alarmkonfiguration sieht das dann so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:alarm_gongactor.png]]&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung eines MP3-Funkgongs (z.B. aus dem Homematic-Programm) kann man auf diesem eine ganze Menge verschiedene MP3-Dateien speichern, die z.B. Stimmenmeldungen &amp;quot;Alarmanlage scharf geschaltet&amp;quot; abgeben. Zur Erstellung dieser Meldungen hat es sich bewährt, einen kostenlosen Online-TTS (Text-to-Speech) Service zu nutzen, z.B. Ivona.&lt;br /&gt;
==Alarmierung per SMS== &lt;br /&gt;
Für Alarme, die man auch im Urlaub auf das Handy bekommen möchte, bedarf es natürlich eines Providers, der eine bestimmte Mailadresse als SMS weiterleitet. Ferner einer FHEM-Konfiguration, die Mails versenden kann. Dann wird ein &#039;&#039;dummy&#039;&#039; erzeugt und mit &#039;&#039;alarmDevice Actor&#039;&#039; attributiert, so dass er in der Aktorenliste auftaucht. Die Abkürzung &#039;&#039;$SHORT&#039;&#039; wird vor der Ausführung durch die Kurzbeschreibung des Alarms ersetzt.&lt;br /&gt;
 define Mail.alarm dummy&lt;br /&gt;
 attr Mail.alarm alarmDevice Actor&lt;br /&gt;
 &#039;&#039;&#039;attr Mail.alarm alarmSettings alarm6,alarm7,|{DebianMail(&amp;lt;mailadresse&amp;gt;,&#039;Alarm&#039;,&#039;$SHORT&#039;}||30&#039;&#039;&#039; (Vom Modul 95_Alarm.pm automatisch erzeugt)&lt;br /&gt;
 attr Mail.alarm group alarmActor&lt;br /&gt;
 attr Mail.alarm room Alarm&lt;br /&gt;
In der Alarmkonfiguration sieht das dann so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:alarm_mailactor.png]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=117581.0|LinkText=Forenthread}}&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>AlanBlack</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Z-Wave&amp;diff=35985</id>
		<title>Z-Wave</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Z-Wave&amp;diff=35985"/>
		<updated>2021-09-04T20:11:01Z</updated>

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

		<summary type="html">&lt;p&gt;AlanBlack: /* Einrichtung unter Linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-CFG-USB-2.jpg&lt;br /&gt;
|Bildbeschreibung=HomeMatic USB Konfigurationsadapter (Version 2)&lt;br /&gt;
|HWProtocol=HomeMatic &lt;br /&gt;
|HWType=Interface/Gateway&lt;br /&gt;
|HWCategory=HomeMatic&lt;br /&gt;
|HWComm=868,3 MHz&lt;br /&gt;
|HWChannels=&lt;br /&gt;
|HWVoltage=5 V&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=USB-Bus&lt;br /&gt;
|HWSize=V1: 40 x 90 x 25 mm&amp;lt;br /&amp;gt;V2: 28 x 84 x 11,5 mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#CUL_HM CUL_HM]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=eQ-3&lt;br /&gt;
}}&lt;br /&gt;
Der [[HomeMatic]] &#039;&#039;&#039;USB Konfigurations-Adapter&#039;&#039;&#039; ist ein USB-Stick, der außer zur Konfiguration von HomeMatic-Komponenten auch als [[Interface]] zwischen FHEM und HomeMatic-Geräten benutzt werden kann. Er existiert in zwei Versionen: der älteren HM-CFG-USB und der neueren HM-CFG-USB2. Die folgenden Beschreibungen gelten für beide Versionen, es sei denn, es ist ausdrücklich eine spezifische Version genannt.&lt;br /&gt;
&lt;br /&gt;
== Einbindung in FHEM ==&lt;br /&gt;
Im FHEM-Forum wird die Einbindung als Interface in diesem {{Link2Forum|Topic=13071}} beschrieben und diskutiert. Im {{Link2Forum|Topic=13071|Message=79872|LinkText=Eröffnungsbeitrag}} wird eine gut funktionierende HMLAN-Emulationssoftware [https://git.zerfleddert.de/cgi-bin/gitweb.cgi/hmcfgusb hmland] von ihrem Entwickler vorgestellt, um den HM-CFG-USB in FHEM zu integrieren. Die HMLAN-Emulationssoftware muss zunächst kompiliert und installiert werden. Anschließend wird der HM-CFG-USB (üblicherweise auf localhost) genau wie [[HM-CFG-LAN LAN Konfigurations-Adapter|HMLAN]] in FHEM eingebunden. &lt;br /&gt;
&lt;br /&gt;
=== Einrichtung unter Linux ===&lt;br /&gt;
Die Schritte zur Kompilierung und Installation hat der hmland-Entwickler sowohl auf der [https://git.zerfleddert.de/cgi-bin/gitweb.cgi/hmcfgusb hmland-Internetseite] in Englisch (kurz) als auch im oben genannten {{Link2Forum|Topic=13071|Message=79872|LinkText=Eröffnungsbeitrag}} in Deutsch (ausführlich) dargestellt. Die dort gemachten Angaben werden auch bei Bedarf aktualisiert und sind deshalb der beste Anlaufpunkt für Kompilierung und Installation. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=Info|RNText=&#039;&#039;&#039;Skript zur Kompletteinrichtung unter Linux&#039;&#039;&#039;&lt;br /&gt;
Dieser {{Link2Forum|Topic=13071|Message=190887|LinkText=Bericht}} im Forum stellt ein Script vor, das &#039;&#039;hmland&#039;&#039; herunterlädt, übersetzt (kompiliert), installiert sowie ein init-Script anlegt, so dass fast keine manuellen Eingriffe mehr notwendig sind.}}&lt;br /&gt;
Die nachfolgenden Angaben in diesem Abschnitt sind rein zu Informationszwecken (noch) enthalten: &lt;br /&gt;
&lt;br /&gt;
Zunächst muss die HMLAN-Emulationssoftware kompiliert werden. Analog zu [https://git.zerfleddert.de/cgi-bin/gitweb.cgi/hmcfgusb dieser Beschreibung] ist die Vorgehensweise die folgende (in Debian/Ubuntu/Raspbian):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd /opt/&lt;br /&gt;
 apt-get install build-essential libusb-1.0-0-dev make gcc git&lt;br /&gt;
 git clone git://git.zerfleddert.de/hmcfgusb&lt;br /&gt;
 cd hmcfgusb&lt;br /&gt;
 make&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach kann der Dienst (zu Testzwecken sind Debugging-Ausgaben mit &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; aktiviert) gestartet werden:&lt;br /&gt;
:&amp;lt;code&amp;gt; /opt/hmcfgusb/hmland -p 1234 -D&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Start als Daemon ====&lt;br /&gt;
Um &#039;&#039;hmland&#039;&#039; automatisch als Daemon bei &#039;&#039;&#039;init.d Systemen&#039;&#039;&#039; zu starten, kann ein init-Script genutzt werden. Die Quellen von &#039;&#039;hmland&#039;&#039; enthalten ein solches Script im &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt; Unterverzeichnis:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /opt/hmcfgusb/debian/hmland.init /etc/init.d/hmland&lt;br /&gt;
cp /opt/hmcfgusb/debian/hmland.default /etc/default/hmland&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Einstellungen, beispielsweise der Port, auf dem &#039;&#039;hmland&#039;&#039; hört, können (und sollten) in der Datei &amp;lt;code&amp;gt;/etc/default/hmland&amp;lt;/code&amp;gt; vorgenommen werden. Wichtig: Wenn diese Anleitung befolgt wurde, muss in der Datei &amp;lt;code&amp;gt;/etc/init.d/hmland&amp;lt;/code&amp;gt; die folgende Zeile wie folgt angepasst werden (&amp;lt;code&amp;gt;/hm&amp;lt;/code&amp;gt; aus dem Pfad entfernen), damit der automatische Start des Daemon klappt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
DAEMON=/opt/hmcfgusb/$NAME # Introduce the server&#039;s location here&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die kopierte Datei mit &amp;lt;code&amp;gt;chmod 755 /etc/init.d/hmland&amp;lt;/code&amp;gt; ausführbar machen, anschließend kann &#039;&#039;hmland&#039;&#039; mit folgendem Befehl gestartet werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;/etc/init.d/hmland start&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei Distributionen, die &#039;&#039;&#039;systemd&#039;&#039;&#039; einsetzen (z.B. Debian Stretch) kann folgende Konfigurationsdatei verwendet werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Homematic LAN Adapter service&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStart=/opt/hmcfgusb/hmland -p 1234&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;
Dabei muss dann natürlich der Port (1234) an die eigene Konfiguration angepasst werden und auch der Pfad wo sich der &amp;lt;Code&amp;gt; hmland&amp;lt;/code&amp;gt; befindet, wenn man sich an oben stehendem Beispiel orientiert wäre das dann &amp;lt;Code&amp;gt;/opt/hmcfgusb/&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Datei muss dann als &amp;lt;Code&amp;gt;hmland.service&amp;lt;/code&amp;gt; unter &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;/etc/systemd/system&amp;lt;/syntaxhighlight&amp;gt; abgelegt werden.&lt;br /&gt;
Nun muss einmalig der Befehl&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;systemctl daemon-reload&amp;lt;/syntaxhighlight&amp;gt; ausgeführt werden damit die neuen Dateien eingelesen werden.&lt;br /&gt;
Mit dem Befehl &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;systemctl enable hmland&amp;lt;/syntaxhighlight&amp;gt; wird dafür gesorgt, dass bei einem Systemstart hmland automatisch gestartet wird&lt;br /&gt;
Mit  &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;systemctl status hmland &amp;lt;/syntaxhighlight&amp;gt; kann dann noch geprüft werden ob der Service läuft&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei Distributionen, die &#039;&#039;&#039;Upstart&#039;&#039;&#039; einsetzen (z.B. xbian) kann folgende Konfigurationsdatei verwendet werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# HMLAND&lt;br /&gt;
&lt;br /&gt;
description     &amp;quot;hmland&amp;quot;&lt;br /&gt;
&lt;br /&gt;
start on starting fhem&lt;br /&gt;
stop on stopped fhem&lt;br /&gt;
&lt;br /&gt;
respawn&lt;br /&gt;
expect fork&lt;br /&gt;
&lt;br /&gt;
chdir /opt/hmcfgusb&lt;br /&gt;
exec /opt/hmcfgusb/hmland -d -l 127.0.0.1 -p 1234&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei sollte als &amp;lt;code&amp;gt;/etc/init/hmland.conf&amp;lt;/code&amp;gt; angelegt werden. Mit dem Befehl&lt;br /&gt;
:&amp;lt;code&amp;gt;initctl reload-configuration &amp;lt;/code&amp;gt;&lt;br /&gt;
wird Upstart angewiesen, seine Konfiguration erneut einzulesen. Danach kann der Dienst &#039;&#039;hmland&#039;&#039; mit&lt;br /&gt;
:&amp;lt;code&amp;gt;service hmland start &amp;lt;/code&amp;gt;&lt;br /&gt;
gestartet werden. &amp;lt;code&amp;gt;hmland&amp;lt;/code&amp;gt; wird jetzt immer vor FHEM gestartet und nach FHEM beendet.&lt;br /&gt;
&lt;br /&gt;
==== Start über FHEM Startskript ====&lt;br /&gt;
Ausprobiert auf einem BBB mit Debian, eigentlich ist das alles von Betateilchen:&lt;br /&gt;
&lt;br /&gt;
Zunächst hmland kompilieren wie oben beschrieben, bis zum make. Das muss erfolgreich durchgelaufen sein.&lt;br /&gt;
&lt;br /&gt;
Dann geht es weiter:&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo cp hmcfgusb.rules /etc/udev/rules.d/ &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt das FHEM Startskript anpassen (in den Blöcken &#039;start&#039; und &#039;stop&#039; muss quasi nur jeweils 1 Zeile eingefügt werden:&lt;br /&gt;
&lt;br /&gt;
Damit editiert man das FHEM Startskript:&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo nano /etc/init.d/fhem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und so sollten die Blöcke anschließend aussehen (bitte nur jeweils die Zeile mit hmland einfügen)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 &#039;start&#039;)&lt;br /&gt;
        echo &amp;quot;Starting fhem...&amp;quot;&lt;br /&gt;
        /opt/hmcfgusb/hmland -d -p 1234&lt;br /&gt;
        perl fhem.pl fhem.cfg&lt;br /&gt;
        RETVAL=$?&lt;br /&gt;
        ;;&lt;br /&gt;
&lt;br /&gt;
 &#039;stop&#039;)&lt;br /&gt;
        echo &amp;quot;Stopping fhem...&amp;quot;&lt;br /&gt;
        perl fhem.pl $port &amp;quot;shutdown&amp;quot;&lt;br /&gt;
        RETVAL=$?&lt;br /&gt;
        pkill hmland&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So wird hmland vor FHEM gestartet und nach FHEM beendet. Letztlich erspart es Probleme mit den diversen Startskripten und ihren Rechten.&lt;br /&gt;
&lt;br /&gt;
Es dauert nach dem Start von FHEM noch einige Sekunden, bis hmland fertig geladen ist. In dieser Zeit kann es zu fehlerhaften Einträgen im Logfile kommen.&lt;br /&gt;
&lt;br /&gt;
=== Einrichtung auf Synology DiskStations ===&lt;br /&gt;
Packages für DSM5.2 finden sich hier:&lt;br /&gt;
https://github.com/mkunzmann/spksrc/releases/tag/0.101-3&lt;br /&gt;
&lt;br /&gt;
Welches Package für welche DS kann man hier sehen:&lt;br /&gt;
https://github.com/SynoCommunity/spksrc/wiki/Architecture-per-Synology-model&lt;br /&gt;
&lt;br /&gt;
Einfach das passende Package installieren und dann kann man den hmland über den Synology Package-Manager starten und stoppen. Während der Installation kann man den Port für hmland festlegen. Bitte einen Port &amp;gt; 1024 wählen, da der hmland nicht als root läuft. Außerdem kann ein Logfile angegeben werden. Hier am besten eine Datei auf einem USB Stick angeben die für jedermann schreibbar sein muss. Damit sollten die Platten nach wie vor in den Standby gehen.&lt;br /&gt;
&lt;br /&gt;
=== Einrichtung unter Mac OS X ===&lt;br /&gt;
Wie unter Linux braucht man die HMLAN-Emulationssoftware hmland, die man aus Quelltexten erstellen muss. Dazu muss man die Bibliothek libusb installieren, entweder mit einem der Paketmanager wie Fink, MacPorts oder Homebrew oder direkt aus den Quellentexten (Beispiel: &amp;quot;fink install libusb1-shlibs libusb1&amp;quot;). Hat man wie bei Linux das Quelltextarchiv für hmland heruntergeladen und ausgepackt, müssen die Dateien Makefile und hmcfgusb.c angepasst werden. &lt;br /&gt;
&lt;br /&gt;
Im Makefile muss man den Pfad zur libusb anpassen. Hat man libusb mit fink installiert, muss man, &amp;quot;/opt/local/&amp;quot; durch &amp;quot;/sw/&amp;quot; bei den CFLAGS und den LDFLAGS ersetzen und&lt;br /&gt;
das &amp;quot;-lrt&amp;quot; aus den LDLIBS entfernen. Die Library librt gibt es bei Mac OS X nicht und wird anscheinend auch nicht gebraucht. (Stimmt das eigentlich?)&lt;br /&gt;
&lt;br /&gt;
In der Datei hmcfgusb.c muss man die Zeilen 130-134 mit dem Aufruf libusb_detach_kernel_driver auskommentieren oder löschen. Der geht nicht auf Mac OS X.&lt;br /&gt;
&lt;br /&gt;
Nach den Änderungen in den zwei Dateien, kann man wie bei Linux den Dämon hmland mit dem Kommando &amp;quot;make&amp;quot; erzeugen und mit &amp;quot;./hmland&amp;quot; ausführen. Automatisches Starten beim Booten mit launchd ist noch nicht probiert.&lt;br /&gt;
&lt;br /&gt;
Beim Start von hmland sollte man folgende Fehlermeldung in einer Endlos-Schleife erhalten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Datum Zeit: Client 127.0.0.1 connected!&lt;br /&gt;
Can&#039;t claim interface: Access denied (insufficient permissions)&lt;br /&gt;
Can&#039;t find/open hmcfgusb!&lt;br /&gt;
Datum Zeit: Connection to 127.0.0.1 closed!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch ein Start von hmland mit Superuser-Rechten ändert daran nichts. Damit das claim interface klappt, muss man eine codeless kext in den Ordner /Library/Extensions legen. Ich habe dieses (http://mspdebug.sourceforge.net/misc/ex430rf2500-kext.zip) herunter geladen. Damit es funktioniert, muss man aber in der Datei Info.plist des Bundle die Properties idProduct und idVendor ändern, entweder mit dem Property List Editor oder einem anderen Texteditor. Die beiden Properties sind etwas versteckt bei Information Property List → IOKitPersonalities → ComIntf. Bei DebugIntf und DeviceDriver scheint man es nicht ändern zu müssen, aber schaden kann es nicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
idProduct: 49167&lt;br /&gt;
idVendor: 6943&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rechte des kext-Bundles müssen auch noch gesetzt werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  chmod -R 755 ex430rf2500.kext&lt;br /&gt;
  chown -R root:wheel ex430rf2500.kext&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach die Datei ex430rf2500.kext in den Ordner /Library/Extensions legen und hmland sollte dann funktionieren.&lt;br /&gt;
&lt;br /&gt;
Es kann sein, dass ab Mac OS X 10.9 der Trick mit dem codeless kext nicht mehr funktioniert, aber noch ist das nicht getestet oder bestätigt. Langfristig kann man vielleicht auch eine kext mit einem Treiber für den HM-CFG-USB USB erstellen&lt;br /&gt;
&lt;br /&gt;
=== Einrichtung unter Windows ===&lt;br /&gt;
Bei der Einrichtung und vermutlich auch dem Betrieb unter Windows 8.1 sind wegen der erweiterten Energieverwaltungsfunktionen die von eQ-3 [http://www.eq-3.de/Downloads/eq3/pdf_FAQ/Funk-Konfigurationsdapter-USB_Windos_8.1.pdf zusammengestellten Tipps] zu befolgen.&lt;br /&gt;
&lt;br /&gt;
=== Definition(en) in der FHEM-Konfiguration ===&lt;br /&gt;
In der FHEM [[Konfiguration]] muss noch, sofern/sobald der &#039;&#039;hmland&#039;&#039; läuft, das Device eingerichtet werden mit den folgenden Anweisungen:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &#039;&#039;&#039;hmusb&#039;&#039;&#039; HMLAN 127.0.0.1:1234 &amp;lt;/code&amp;gt;&lt;br /&gt;
wobei &#039;&#039;&#039;hmusb&#039;&#039;&#039; der frei wählbare Devicename ist. Anschließend sollte bzw. muss noch mit&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &#039;&#039;&#039;hmusb&#039;&#039;&#039; hmId &amp;lt;&#039;&#039;&#039;hmId&#039;&#039;&#039;&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
eine &#039;&#039;&#039;hmId&#039;&#039;&#039; zugeordnet werden (dabei bitte auch die Hinweise und Regeln beachten, die im Zusammenhang mit der [[Virtueller Controller VCCU|VCCU]] beschrieben sind!&lt;br /&gt;
&lt;br /&gt;
== Firmware Update ==&lt;br /&gt;
Der Firmware Update (unter Linux) ist ebenfalls auf der [https://git.zerfleddert.de/cgi-bin/gitweb.cgi/hmcfgusb hmland-Internetseite] beschrieben. Auch die letzte bekannte Firmware-Version (0.967) steht dort zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
=== Verbindung zu neueren hmland-Versionen nicht stabil ===&lt;br /&gt;
Seit Version 0.100 meldet sich die HMLAN-Emulationssoftware als USB-Interface bei FHEM. Ältere FHEM-Versionen (vor dem 19.6.2015) brechen deshalb die Verbindung ab, da sie nur ein LAN-Interface erwarten.&lt;br /&gt;
&lt;br /&gt;
Lösung: Kommandozeilenparameter &amp;lt;code&amp;gt;-I&amp;lt;/code&amp;gt; dem hmland-Aufruf hinzufügen, dann meldet sich dieser wieder als LAN-Interface.&lt;br /&gt;
&lt;br /&gt;
=== Stick nicht (mehr) ansprechbar ===&lt;br /&gt;
Zitat aus dem {{Link2Forum|Topic=32502|Message=249122|LinkText=FHEM-Forum}}: &lt;br /&gt;
:&#039;&#039;... befürchte ich, dass dein Stick das Zeitliche gesegnet hat. Machen die Dinger leider sehr gerne... Ganz besonders beim Modus-Wechsel vom 10k- in den 100k-Modus, wenn man bei irgendeinem Device ein Firmwareupdate durchführt. &amp;lt;br /&amp;gt;Die gute Nachricht ist, dass der Fehler bei sämtlichen Händlern bekannt ist und anstandslos getauscht wird.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Raspberry Pi ===&lt;br /&gt;
Der USB-Stack am Raspberry Pi ist für viele Probleme verantwortlich. Daher sieht man öfter Fehlermeldungen:&lt;br /&gt;
:&amp;lt;code&amp;gt;usb-transfer took more than 100ms (1039ms), this may lead to timing problems!&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da das Timing bei HomeMatic wichtig ist führt das zu vielen Retransmits und zu unzuverlässigen Aktoren. Als Workaround kann man den USB-Stack auf die deutlich langsamere Version 1.1 stellen. Dazu fügt man folgenden Text am Anfang der Datei /boot/cmdline.txt ein:&lt;br /&gt;
:&amp;lt;code&amp;gt;dwc_otg.speed=1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weitergehende Informationen ==&lt;br /&gt;
Es sind zwei Versionen des HM-CFG-USB im Umlauf:&lt;br /&gt;
{{Randnotiz|RNTyp=r|RNText=Stand März 2016 ist allem Anschein nach kein HM-CFG-USB mehr im ELV Programm enthalten!}}&lt;br /&gt;
* HM-CFG-USB-2: die aktuelle Version; Kennzeichen dieser Version: &lt;br /&gt;
** Größe: 28 x 84 x 11,5&amp;amp;nbsp;mm&lt;br /&gt;
** Gewicht: 18&amp;amp;nbsp;g&lt;br /&gt;
** Antenne innenliegend&lt;br /&gt;
* HM-CFG-USB: Vorgängerversion; Stand 12/2013 noch Restbestände im Handel verfügbar. Dokumentation ([http://files.voelkner.de/625000-649999/646462-an-01-ml-HM_Konfigurationsadapter_CFG_USB_de_en.pdf Völkner]); Kennzeichen:&lt;br /&gt;
** Anschluss per separatem USB-Kabel&lt;br /&gt;
** abstehende Stabantenne&lt;br /&gt;
** Größe: 40 x 90 x 25&amp;amp;nbsp;mm&lt;br /&gt;
** Gewicht: 45&amp;amp;nbsp;g&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Bedienungsanleitung [http://www.eq-3.de/Downloads/eq3/pdf_produkte/HM-CFG-USB-2_-UM-eQ-3-150129-web.pdf HM-CFG-USB-2, PDF]&lt;br /&gt;
* FHEM-Forums {{Link2Forum|Topic=13071}}: HomeMatic USB Konfigurations-Adapter (HM-CFG-USB) in FHEM nutzen&lt;br /&gt;
* [http://www.eq-3.de/produkt-detail-zentralen-und-gateways/items/homematic-funk-konfigurationsadapter-usb.html eQ-3 Produktseite] zum &amp;quot;HomeMatic Funk-Konfigurationsadapter USB&amp;quot;; Downloads, technische Daten, etc.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;br /&gt;
[[Kategorie:OSX]]&lt;br /&gt;
[[Kategorie:868MHz]]&lt;/div&gt;</summary>
		<author><name>AlanBlack</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=ZigBee&amp;diff=30963</id>
		<title>ZigBee</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=ZigBee&amp;diff=30963"/>
		<updated>2019-07-11T21:27:50Z</updated>

		<summary type="html">&lt;p&gt;AlanBlack: Nur etwas Rechtschreibung und Grammatik&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Allgemeines ==&lt;br /&gt;
[[ZigBee]] ist eine Spezifikation für drahtlose Netzwerke mit geringem Datenaufkommen, wie beispielsweise Hausautomation, Sensornetzwerke oder Lichttechnik. Der Schwerpunkt von ZigBee liegt in kurzreichweitigen Netzwerken (bis 100 Meter). Es sind via vermaschtem Netz (auch Meshnetzwerk) aber auch Reichweiten von mehreren Kilometern möglich.&lt;br /&gt;
&lt;br /&gt;
Die Spezifikation ist eine Entwicklung der ZigBee-Allianz, die Ende 2002 gegründet wurde. Die Allianz ist ein Zusammenschluss von derzeit mehr als 230 Unternehmen, welche die weltweite Entwicklung dieser Technologie vorantreiben. &lt;br /&gt;
&lt;br /&gt;
== Gerätetypen ==&lt;br /&gt;
=== Endgerät (ZigBee End Device, ZED) ===&lt;br /&gt;
Geräte, wie zum Beispiel Steuerungs- oder Sensormodule, werden meist mit Batterien betrieben. Diese können als ZigBee-Endgeräte implementiert werden und benötigen nur einen Teil der Funktionen der ZigBee-Spezifikation. Sie nehmen nicht am Routing im Netzwerk teil und können in einen Schlafmodus gehen. Sie melden sich an einem Router ihrer Wahl an und treten so dem ZigBee-Netzwerk bei. Sie können ausschließlich mit dem Router kommunizieren, über den sie dem Netzwerk beigetreten sind. Werden Daten an ein solches Endgerät geschickt, welches sich im Schlafmodus befindet, speichert der Router diese Pakete, bis das Endgerät sie abruft.&lt;br /&gt;
&lt;br /&gt;
=== Router (ZigBee-Router, ZR) ===&lt;br /&gt;
ZigBee-Router nehmen am Routing der Pakete durch das Netzwerk teil. Sie benötigen einen größeren Funktionsumfang und damit auch etwas mehr Hardwareressourcen. ZigBee-Router treten einem Netzwerk bei, indem sie sich an einem im Netzwerk befindlichen Router anmelden. Das Routing im Netzwerk erfolgt entweder entlang eines sich so bildenden Baumes (Stackprofil ZigBee) oder durch dynamisches Routing als Meshnetzwerk.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ein ZigBee Router hat so ungefähr die Funktion wie ein WLAN Repeater...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Koordinator (ZigBee coordinator, ZC) ===&lt;br /&gt;
Ein ZigBee-Koordinator startet das Netzwerk mit festgelegten Parametern. Nach dem Start übernimmt er dieselben Aufgaben wie ein ZigBee-Router.&lt;br /&gt;
Es kann nur einen Koordinator in einem ZigBee Netz geben. &lt;br /&gt;
&#039;&#039;&#039;In FHEM wird ein solches Gerät Gateway genannt.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Mischen von Komponenten unterschiedlicher Hersteller ==&lt;br /&gt;
Prinzipiell ist es möglich, die Komponenten unterschiedlicher Hersteller zu mischen. Dies kann interessant sein, da jeder Hersteller andere Schwerpunkte in der Modellpalette hat, nicht jeder Hersteller alle Leuchtmittel-Typen vertreibt und sich auch die Eigenschaften und Preise für vergleichbare Leuchtmittel unterscheiden. Auch der in FHEM verfügbare Funktionsumfang unterscheidet sich je nach Bridge. &lt;br /&gt;
&lt;br /&gt;
Leuchtmittel sind in der Regel am unproblematischsten. Taster auch wenn sie direkt die Leuchtmittel steuern. Über die Bridge sind in der Regel aber oft nur die Taster des jeweiligen Herstellers direkt abfragbar bzw. in FHEM einzubinden. Dies gilt auch für Bewegungsmelder und sonstige Sensoren.&lt;br /&gt;
&lt;br /&gt;
Im einzelnen sollte man sich also vor dem Kauf informieren, welche Komponenten tatsächlich problemlos zusammen arbeiten.&lt;br /&gt;
&lt;br /&gt;
Beim Vergleich der Kosten muss aber die jeweilige Bridge des Herstellers zusätzlich mit berücksichtigt werden (siehe [[#Firmware updates]]).&lt;br /&gt;
&lt;br /&gt;
=== Firmware updates ===&lt;br /&gt;
Es ist sinnvoll oder sogar zwingend nötig, neue Leuchtmittel zumindest einmal bei der Inbetriebnahme auf den aktuellen Firmwarestand zu bringen. Gerade wenn Komponenten herstellerübergreifend verwendet werden sollen, ist sonst oft mit Einschränkungen oder sogar Problemen zu rechnen.&lt;br /&gt;
&lt;br /&gt;
Hierzu ist aktuell in der Regel&amp;lt;ref&amp;gt;Der Diskussionsstand 11/2018 hierzu ist diesem {{Link2Forum|Topic=93836|LinkText=Forenthread}} zu entnehmen.&amp;lt;/ref&amp;gt; die zugehörige original Bridge (und oft auch die App) des jeweiligen Herstellers nötig, d.h., auch wenn man z.B. Osram LIGHTIFY oder IKEA Trådfri Leuchtmittel an einer Hue Bridge betreiben möchte, braucht man zumindest am Anfang einmal auch noch die Osram und IKEA Bridge und muss das Leuchtmittel jeweils an- und ab- und wieder anlernen.&lt;br /&gt;
&lt;br /&gt;
Aktualisierungen der Hue Bridge und Hue Leuchtmittel lassen sich auch aus FHEM heraus anstoßen.&lt;br /&gt;
&lt;br /&gt;
== Einbindung in FHEM ==&lt;br /&gt;
Prinzipiell lässt sich hier vorwegschicken, dass die FHEM Hue-Module (ob mit einer Philips Hue Bridge oder mit der Dresden Elektronik Software) den größten Funktionsumfang ermöglichen. &lt;br /&gt;
&lt;br /&gt;
=== Hersteller-Bridges ===&lt;br /&gt;
Wir benötigen also zur Einbindung ein Gateway. Manche Nutzer haben sich gleich ein Starterkit wie Philips Hue oder IKEA Trådfri gekauft. &lt;br /&gt;
Diese Lösungen haben den Vorteil, dass Alexa-Integration etc. sowie die Smartphone-App gleich mitkommen, und das Einbinden der Endgeräte, aber vor allem aber Softwareupdates i.d.R. herstellerproprietär gelöst wurden.&lt;br /&gt;
&lt;br /&gt;
Der Nachteil ist, dass die Lösungen bis hin zum gut dokumentierten Hue-System mit API in anderer Hinsicht geschlossene Systeme sind. So ist z.B. über die Hue-Bridge die Abfrage von Hue-Bewegungssensoren oder -Tastern nur per Polling durch FHEM möglich - es gibt keinen Event-Mechanismus, der FHEM notifizieren könnte (siehe [[#Freie Lösungen]]). Alle 5 Minuten die Bridge fragen (= Pollen), ob der Bewegungsmelder jemanden gesehen hat und ggf. das Licht ausschalten, ist also per Polling machbar, auf einen ZigBee-Tasterdruck oder Bewegung hin via FHEM die WiFi-Steckdose schalten hingegen eher zu verzögert.&lt;br /&gt;
&lt;br /&gt;
Außerdem ist unser Ziel ja, die Steckerleiste der Steuergeräte kurz zu halten.&lt;br /&gt;
&lt;br /&gt;
Auch die native HomeKit- (Siri) oder Alexa-Integration ist mit kleinen oder größeren Problemen und Einschränkungen behaftet, diese sind unter anderem:&lt;br /&gt;
* nur Steuerung der herstellereigenen Leuchtmittel&lt;br /&gt;
* Verzögerung der Statusaktualisierung in FHEM, wenn an FHEM vorbei geschaltet wird&lt;br /&gt;
* Eventuell &#039;Cloud-Zwang&#039; des jeweiligen Herstellers&lt;br /&gt;
* Eventuell erhöhter Ressourcenverbrauch auf der jeweiligen Bridge durch zusätzliche Verbindungen&lt;br /&gt;
Diese Nachteile gibt es bei einer Integration über FHEM nicht.&lt;br /&gt;
&lt;br /&gt;
==== Hue Bridge von Philips ====&lt;br /&gt;
Siehe [[Hue]]. Eine gute Dokumentation kompatibler Geräte findet sich [https://iconnecthue.com/supported-devices/ hier]. Hue ist wohl die meist verbreitete Bridge und hat auch ein dokumentiertes REST-API. Jedoch ist die Anzahl der Endgeräte (offiziell: 50) und Regeln (ca. 200) stärker als bei anderen Lösungen begrenzt und Events können nicht zu FHEM weitergeleitet werden.&lt;br /&gt;
&lt;br /&gt;
==== Trådfri von IKEA ====&lt;br /&gt;
Siehe {{Link2Forum|Topic=70653}} und [[TRÅDFRI]].&lt;br /&gt;
&lt;br /&gt;
==== Lightify von Osram ====&lt;br /&gt;
Siehe {{Link2Forum|Topic=28339}}. Auch hier geht nur Polling von Events, ebenfalls max. 50 Geräte, und der Nutzerkreis ist kleiner.&lt;br /&gt;
&lt;br /&gt;
=== Andere Lösungen ===&lt;br /&gt;
Die Alternative sind Lösungen, die spezielle Hardware erfordern, wie den RaspBee (Aufsteckmodul für Raspberry) oder Conbee (USB-Gateway) von Dresden Elektronik oder manche Module mit Chips des Herstellers [https://github.com/Koenkk/zigbee2mqtt/wiki/Supported-sniffer-devices Texas Instruments], und die zusätzlich nötige Software auf dem Raspberry etc. mitlaufen lassen. Eine reine Hardware-Lösung ohne Zusatzsoftware, in der FHEM die Software-Funktionen des Gateway vollständig abbildet, gibt es nicht - FHEM kommuniziert lediglich mit einer Software, die ebenfalls auf dem - ggf. gleichen - Computer mitläuft.&lt;br /&gt;
&lt;br /&gt;
==== Dresden Elektronik ====&lt;br /&gt;
Das Dresden Elektronik System ermöglicht aktuell als einziges der &#039;fertigen&#039; Systeme auch das aktive Senden von Events und somit eine &#039;fast Echtzeit&#039; Reaktion auf Taster, Bewegungsmelder oder Ähnliches. Realisiert ist das über eine Push Erweiterung im ansonsten weitgehend Hue kompatiblen API. Auch die Integration von Tastern und anderen Sensoren unterschiedlichster Hersteller ist mit der DE Software gut möglich. Die Anbindung an FHEM (inklusive Push) erfolgt über die HUE-Module.&lt;br /&gt;
&lt;br /&gt;
==== Direkt per MQTT ====&lt;br /&gt;
Siehe [[MQTT2-Module - Praxisbeispiele#zigbee2mqtt]]&lt;br /&gt;
&lt;br /&gt;
==== Das Modul von Neumann ====&lt;br /&gt;
Siehe diesen Forenbeitrag: {{Link2Forum|Topic=84790}}&lt;br /&gt;
&lt;br /&gt;
== Funkübertragung ==&lt;br /&gt;
&lt;br /&gt;
=== Reichweite erhöhen ===&lt;br /&gt;
* Eine brauchbare WLAN Antenne (2,4GHz) an einen CC2531 &amp;quot;Stick&amp;quot; oder ein anderes Gateway anbauen (eher für Experten)&lt;br /&gt;
* ein CC2530 als Gateway oder in der Mitte als Repeater (Achtung verschiedene Firmwares erforderlich. Gute Antenne muss meist gesondert gekauft werden, anstatt der beigelegten)&lt;br /&gt;
* ZigBee ist ein Mesh-Netz, daher irgendwo auf dem Weg ein ZigBee-Gerät verbauen, welches immer eingeschaltet ist (z.B. ZigBee Funksteckdose)&lt;br /&gt;
{{Hinweis|Da derselbe Frequenzbereich wie WLAN genutzt wird, kann es auch zu Interferenzen mit diesem kommen. In diesen Fall kann es sinnvoll sein, für eine der beiden Techniken einen anderen Kanal zu wählen.}}&lt;br /&gt;
&lt;br /&gt;
== Sicherheit ==&lt;br /&gt;
=== Sicherheitsrelevante Geräte ===&lt;br /&gt;
Welche Geräte sicherheitsrelevant sind, ist eine sehr schwierige Frage. Beim Türschloss ist das klar. Wenn ein Temperatursensor dafür sorgt, dass ein Raum nicht mehr beheizt und daraufhin wegen geplatztem Heizkörper die Wohnung geflutet wird, so ist dies schon etwas schwerer zu erkennen...&lt;br /&gt;
&lt;br /&gt;
=== Bekannte Sicherheitslücken ===&lt;br /&gt;
==== Insecure Rejoin ====&lt;br /&gt;
Insecure Rejoin ist eine der Schwachstellen im Protokoll. ZigBee 3.0 wurde 2015 freigegeben und soll das Problem lösen. Allerdings ist ZigBee 3.0 (Stand Ende 2018) noch immer recht wenig verbreitet.&lt;br /&gt;
&lt;br /&gt;
Ablauf des Insecure Rejoin aus Angreifersicht:&lt;br /&gt;
* einen Node aus dem Netz werfen, um nicht auf die Aktivierung neuer Geräte warten zu müssen&lt;br /&gt;
* der Node versucht erneut Mitglied im Netz zu werden. Schlüsselaustausch erfolgt mittels dem Key &amp;quot;ZigBeeAlliance09&amp;quot;&lt;br /&gt;
* Mitsniffen des neuen Schlüssels&lt;br /&gt;
&lt;br /&gt;
Quelle: Link zu Golem.de über die Forschung von Tobias Zillner&lt;br /&gt;
&lt;br /&gt;
==== DDOS ====&lt;br /&gt;
* manipulierte Counter (können sogar manche HW zerstören)&lt;br /&gt;
* Jamming (einfach die Frequenz belegen mit beliebigem Signal)&lt;br /&gt;
* Flutung mit ZigBee Messages&lt;br /&gt;
&lt;br /&gt;
Quelle: https://research.kudelskisecurity.com/2017/11/21/zigbee-security-basics-part-3/&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* https://www.golem.de/news/smart-home-sicherheitsluecken-im-zigbee-protokoll-demonstriert-1511-117657-2.html&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:ZigBee|!]]&lt;/div&gt;</summary>
		<author><name>AlanBlack</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Reading&amp;diff=27907</id>
		<title>Reading</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Reading&amp;diff=27907"/>
		<updated>2018-09-18T15:04:09Z</updated>

		<summary type="html">&lt;p&gt;AlanBlack: Die Seite wurde neu angelegt: „{{Baustelle}} Readings sind i.d.R. modulabhängig und geben zusammen mit Attributen und Internals den aktuellen Zustand des dahinter liegenden phy…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
Readings sind i.d.R. modulabhängig und geben zusammen mit [[Attribut|Attributen]] und Internals den aktuellen Zustand des dahinter liegenden physischen oder virtuellen [[Gerät|Gerats]] wieder.&lt;br /&gt;
&lt;br /&gt;
== Allgemeines ==&lt;br /&gt;
Readings geben in FHEM wieder, welche Einstellungen oder Messwerte (allg. Gerätedaten) am jeweiligen Gerät vorliegen. So hat ein Temperatursensor ein Reading für die Temperatur, ein Lichtsensor hat ein Reading für die Helligkeit und ein Schalter ein Reading für An/Aus. Je nach Gerätefamilie (zWave, FS20, Homematic,...) werden Readings in FHEM und Gerätedaten möglichst synchron gehalten. Zu Ausnahmen später mehr.&lt;br /&gt;
&lt;br /&gt;
Readings werden mit dem &amp;lt;code&amp;gt;define&amp;lt;/code&amp;gt;-Befehl des jeweiligen [[Gerät|Devices]] oder bei den ersten Übertragungen mit jenem angelegt und mit Werten gefüllt. &lt;br /&gt;
&lt;br /&gt;
Beim Herunterfahren von FHEM werden die bekannten Werte aller Readings entweder in das statefile oder die Konfigurationsdatenbank geschrieben. So können sie beim Start von FHEM wieder ausgelesen und in die entsprechenden Readings der Geräte geschrieben werden. Damit entsteht ein wahrscheinlich halbwegs aktueller Zustand aller Geräte, ohne dass beim Start von FHEM erst alle Geräte abgefragt werden müssen, was aber bei den meisten per Funk angesprochenen Gerätefamilien wegen der 1%-Regel mitunter sehr lange dauern würde.&lt;br /&gt;
&lt;br /&gt;
Alle [[Gerät|Geräte]] haben Readings, deren Werte entweder vom Modulcode oder mit dem Befehl &amp;lt;code&amp;gt;setreading&amp;lt;/code&amp;gt; verändert werden können. Werden dabei moduleigene Readings gesetzt, können mitunter unerwünschte Nebenwirkungen auftreten. Es können aber auch mit diesem Befehl neue Readings erzeugt werden, die bspw. zum Zwischenspeichern dienen sollen. So können Readings auch mit dem Kommando &amp;lt;code&amp;gt;deletereading&amp;lt;/code&amp;gt; entfernt werden. Wobei hier durch das Löschen von modulinternen Readings sehr sicher Fehler in der Ausführung von FHEM auftreten werden. Dazu können Readings über userreadings {{Link2CmdRef}} erstellt werden. &lt;br /&gt;
&lt;br /&gt;
== ReadingsGroup ==&lt;br /&gt;
[[ReadingsGroup]] stellt eine Möglichkeit dar, neben Readings auch [[Attribut|Attribute] strukturiert darzustellen. &lt;br /&gt;
Mit Hilfe dieses [[Modul|Moduls]] können auch den End-Anwendern auf einfache Weise vielfältige Einstellmöglichkeiten zur Verfügung gestellt werden.&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
Zusammenhänge mit event-on.+, DOIF(?), devState.+,...&lt;br /&gt;
&lt;br /&gt;
Artikel &amp;quot;Internal&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Akualität und Ausnahmen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Kategorie:FHEM]]&lt;br /&gt;
[[Kategorie:FHEM-Verwendung]]&lt;br /&gt;
[[Kategorie:Glossary]]&lt;/div&gt;</summary>
		<author><name>AlanBlack</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-LC-SW1-FM_Schaltaktor_1-fach_UP&amp;diff=27863</id>
		<title>HM-LC-SW1-FM Schaltaktor 1-fach UP</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-LC-SW1-FM_Schaltaktor_1-fach_UP&amp;diff=27863"/>
		<updated>2018-09-13T17:55:47Z</updated>

		<summary type="html">&lt;p&gt;AlanBlack: Bild eing., &amp;quot;Technische Daten&amp;quot; in Infobox versch., Hinweis Netzspannung eing.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homematic Funk-Schaltaktor 1-fach (Unterputz)&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=HM-LC-SW1-FM.jpg&lt;br /&gt;
|Bildbeschreibung=HomeMatic Funk-Schaltaktor&lt;br /&gt;
|HWProtocol=HomeMatic&lt;br /&gt;
|HWType=Aktor&lt;br /&gt;
|HWCategory=HomeMatic&lt;br /&gt;
|HWComm=868MHz&lt;br /&gt;
|HWChannels=1&lt;br /&gt;
|HWVoltage=230V AC&lt;br /&gt;
|HWPowerConsumption=0,5W&lt;br /&gt;
|HWPoweredBy=Netzspannung&lt;br /&gt;
|HWSize=53x53x30mm&lt;br /&gt;
|HWDeviceFHEM=[[CUL_HM]]&lt;br /&gt;
|HWManufacturer=ELV / eQ-3&lt;br /&gt;
}}&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
Schalten eines angeschlossenen Verbrauchers mittels [[CUL]]/[[CUN]]/[[HMLAN Konfigurator]] und über einen mechanischen spannungsfesten Taster. &lt;br /&gt;
&lt;br /&gt;
== Hinweise zur Hardware-Installation ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WICHTIG&#039;&#039;&#039;: die Installation von Komponenten mit Netzspannung darf nur von Fachpersonal durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Will man die Funk-Schaltaktoren auch manuell betreiben, d.h. man upgradet eine vorhandene Elektroinstallation, so sind Taster notwendig. Schalter können notfalls mittels einer zusätzlichen Feder zu Taster umgebaut werden, Tastschalter sind leider nicht geeignet. Schalter und Tastschalter führen dazu, dass der Aktor nach Betätigung des Schalters in den Anlernmodus versetzt wird und auch in diesem verbleibt.&lt;br /&gt;
&lt;br /&gt;
Je nach vorhandenen Schalterdosen empfiehlt es sich bestehende Schalterdosen nach hinten auszuweiten, d.h. die Abdeckung nach hinten heraus zu brechen, da die Aktoren und Kabel nicht gerade sparsam mit dem Platz umgehen. Alternativ könnte man den Aktor auch in eine zusätzliche Schalterdosen unterbringen und diese mit einem Federdeckel abschließen. Dies hat den Vorteil, dass man auch durch relativ dicke Tapete die LED und somit den Zustand des Aktors ablesen kann.&lt;br /&gt;
&lt;br /&gt;
Der Aktor kann auch gänzlich ohne Taster, also nur per &#039;&#039;set&#039;&#039;-Befehlen durch FHEM oder per gepeerten Geräten gesteuert werden, jedoch muss zumindest für das Anlernen zeitweise ein Taster angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
&lt;br /&gt;
Das [[Pairing (HomeMatic)|Pairing]] sollte wie in [[HomeMatic Devices pairen]] beschrieben durchgeführt werden. Hierfür wird ein am Aktor temporär angeschlossener spannungsfester Taster zwingend benötigt.&lt;br /&gt;
&lt;br /&gt;
# Sicherstellen, dass &#039;&#039;autocreate&#039;&#039; aktiv ist&lt;br /&gt;
# Am CUL/HMLAN o.ä. &amp;lt;code&amp;gt;set HMLAN hmPairForSec 60&amp;lt;/code&amp;gt;&lt;br /&gt;
# Binnen 60 Sekunden Aktor in Anlernmodus bringen (Taster 4s festhalten bis LED blinkt) -&amp;gt; Device wird in fhem angelegt, z.B. als CUL_HM_HM_LC_SW1_FM_2BAD45&lt;br /&gt;
# &amp;lt;code&amp;gt;rename &amp;lt;Aktor&amp;gt; &amp;lt;AktorNameNeu&amp;gt;&amp;lt;/code&amp;gt; -&amp;gt; richtigen Namen zuordnen&lt;br /&gt;
&lt;br /&gt;
=== FHEM Config-Auszug ===&lt;br /&gt;
&lt;br /&gt;
Ein exemplarischer Auszug aus der fhem.cfg:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define LichtTerasse CUL_HM 17AEA6&lt;br /&gt;
attr LichtTerasse devInfo 010100&lt;br /&gt;
attr LichtTerasse firmware 1.9&lt;br /&gt;
attr LichtTerasse hmClass receiver&lt;br /&gt;
attr LichtTerasse model HM-LC-SW1-FM&lt;br /&gt;
attr LichtTerasse room Terasse&lt;br /&gt;
attr LichtTerasse serialNr IEQ00xxxx&lt;br /&gt;
attr LichtTerasse subType switch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mögliche Schaltoperationen ===&lt;br /&gt;
&lt;br /&gt;
Der Aktor versteht folgende Aktionen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set &amp;lt;name&amp;gt; on -&amp;gt; Schaltet den Aktor ein&lt;br /&gt;
set &amp;lt;name&amp;gt; off -&amp;gt; Schaltet den Aktor aus&lt;br /&gt;
set &amp;lt;name&amp;gt; toggle -&amp;gt; Ändert den Zustand des Aktors, d.h. ein eingeschalteter Aktor wird ausgeschaltet&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Log-Auszug ===&lt;br /&gt;
&lt;br /&gt;
In FHEM ist nach dem Schalten des HM-LC-SW1-FM folgendes Log zu sehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2012.02.05 16:51:44 2: CUL_HM set LichtTerasse on&lt;br /&gt;
2012.02.05 16:52:14 2: CUL_HM set LichtTerasse off&lt;br /&gt;
2012.02.05 16:52:15 2: CUL_HM set LichtTerasse toggle&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nützliches Zubehör ==&lt;br /&gt;
&lt;br /&gt;
Wer den Schaltaktor im Sicherungskasten selbst einbauen möchte, z.B. um einen Stromstossschalter zu ersetzen, dem kann folgendes Zubehör empfohlen werden: Hutschienengehäuse CNMB-4V-Kit, Bestellnr. 532659 bei conrad. Das ist zwar sicher auch nicht VdE-konform, aber besser wie ohne. Alternativ kann auch der [[HM-LC-Sw1-DR 1fach Schaltaktor Hutschiene]] zur direkten Montage auf Hutschienen eingesetzt werde.&lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
&lt;br /&gt;
Um den HM-LC-SW1-FM in den Anlernmodus zu versetzen, soll man lt. Anleitung den (temporär) angeschlossenen Taster für 4 Sekunden gedrückt halten. Falls dies bei Ihnen nicht funktioniert, so versuchen Sie den Taster einfach mal ca. 7 bis 8 Sekunden gedrückt zu halten (bis die LED des SW1-FM kurz aufleuchtet).&lt;br /&gt;
&lt;br /&gt;
Wenn das Pairing nicht komplett durchläuft (Device zeigt als Status MissingACK und kann nicht von FHEM aus gesteuert werden), dann hilft ggf. ein weiteres Pairing über hmPairSerial.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
Ein Integrationsbeispiel ist in [[Jalousie und Beleuchtung in mehreren Räumen]] zu finden. &lt;br /&gt;
&lt;br /&gt;
[http://files.elv.de/Assets/Produkte/7/767/76793/Downloads/76793_HM_LC_Sw1_FM_um.pdf Anleitung (PDF)]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Schalter (Empfänger)]]&lt;/div&gt;</summary>
		<author><name>AlanBlack</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:HM-LC-SW1-FM.jpg&amp;diff=27862</id>
		<title>Datei:HM-LC-SW1-FM.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:HM-LC-SW1-FM.jpg&amp;diff=27862"/>
		<updated>2018-09-13T17:48:06Z</updated>

		<summary type="html">&lt;p&gt;AlanBlack: HM-LC-SW1-FM Homematic 1-fach Schaltaktor unterputz&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Beschreibung ==&lt;br /&gt;
HM-LC-SW1-FM Homematic 1-fach Schaltaktor unterputz&lt;/div&gt;</summary>
		<author><name>AlanBlack</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-Sen-MDIR-SM_Au%C3%9Fen-Bewegungsmelder&amp;diff=27861</id>
		<title>HM-Sen-MDIR-SM Außen-Bewegungsmelder</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-Sen-MDIR-SM_Au%C3%9Fen-Bewegungsmelder&amp;diff=27861"/>
		<updated>2018-09-13T17:41:00Z</updated>

		<summary type="html">&lt;p&gt;AlanBlack: Bild eingefügt, regList akt., Hinw. Bausatz&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-Sen-MDIR-SM.jpg&lt;br /&gt;
|Bildbeschreibung=HM-Sen-MDIR-SM&lt;br /&gt;
|HWProtocol=[[HomeMatic]]&lt;br /&gt;
|HWType=[[HomeMatic Type motionDetector|motionDetector]]&lt;br /&gt;
|HWCategory=HomeMatic&lt;br /&gt;
|HWComm=868,3 MHz&lt;br /&gt;
|HWChannels=1&lt;br /&gt;
|HWVoltage=3,0V&lt;br /&gt;
|HWPowerConsumption=1Jahr&lt;br /&gt;
|HWPoweredBy=Batterie, 2x LR06 (Micro)&lt;br /&gt;
|HWSize=64x58x35mm&lt;br /&gt;
|HWDeviceFHEM=[[CUL_HM]]&lt;br /&gt;
|HWManufacturer=eQ-3 &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[HM-Sen-MDIR-SM Außen-Bewegungsmelder|HM-Sen-MDIR-SM]] ist ein batteriebetriebener PIR-Bewegungsmelder, der in einem wetterfesten Gehäuse (IP65) eingebaut ist.&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
Das Gerät ist sowohl nutzungsbereit als auch als Bausatz verfügbar. Letzterer muss selbst gelötet werden, wobei etwas mehr Erfahrung erforderlich ist als bspw. beim HM-Sec-SCo. Die Arbeitszeit sollte für erfahrende Personen unter 30 Minuten liegen. &lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
Das [[Pairing (HomeMatic)|Pairing]] sollte wie in [[HomeMatic Devices pairen]] beschrieben durchgeführt werden. Der Sensor muss hierfür geöffnet und die Anlerntaste betätigt werden. Hierbei gibt es zwei Konfigurationsmöglichkeiten:&lt;br /&gt;
* Anlerntaste kurz betätigen, um den Bewegungsmelder ohne Helligkeitsschwelle anzulernen&lt;br /&gt;
* Anlerntaste für ca. 4s betätigen, um den Bewegungsmelder bei einer festen Helligkeitsschwelle (10 Lux) anzulernen (vgl. Handbuch)&lt;br /&gt;
&lt;br /&gt;
=== FHEM Config-Auszug ===&lt;br /&gt;
Ein exemplarischer Auszug aus der fhem.cfg:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Aussen_Bewegungssensor CUL_HM 18xxx&lt;br /&gt;
attr Aussen_Bewegungssensor devInfo 010100&lt;br /&gt;
attr Aussen_Bewegungssensor firmware 1.2&lt;br /&gt;
attr Aussen_Bewegungssensor hmClass sender&lt;br /&gt;
attr Aussen_Bewegungssensor model HM-SEN-MDIR-SM&lt;br /&gt;
attr Aussen_Bewegungssensor room Outdoor&lt;br /&gt;
attr Aussen_Bewegungssensor serialNr IEQ0xxxxx&lt;br /&gt;
attr Aussen_Bewegungssensor subType motionDetector&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration über Register ===&lt;br /&gt;
==== Anzeige aller dekodierten Register ====&lt;br /&gt;
Mit dem Befehl &lt;br /&gt;
:&amp;lt;code&amp;gt;get &amp;amp;lt;name&amp;amp;gt; regList&amp;lt;/code&amp;gt;&lt;br /&gt;
werden alle möglichen &#039;dekodierten&#039; Register angezeigt. Für den HM-Sen-MDIR-SM sind dies alle, die Liste sollte also komplett sein. Hier findet man sowohl den Wertebereich als auch eine kurze Beschreibung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 list:   register   | range          | peer | description&lt;br /&gt;
   0: pairCentral      |   0 to 16777215    |          | pairing to central&lt;br /&gt;
   1: brightFilter     |   0 to 7           |          | 7: filter fast changes to 0: no filter of light changes&lt;br /&gt;
   1: captInInterval   |     literal        |          | capture motion in interval, send result in next trigger options:on,off&lt;br /&gt;
   1: evtFltrNum       |   1 to 15          |          | sensitivity - read each n-th puls&lt;br /&gt;
   1: evtFltrPeriod    | 0.5 to 7.5s        |          | event filter period&lt;br /&gt;
   1: ledOnTime        |   0 to 1.275s      |          | LED ontime&lt;br /&gt;
   1: minInterval      |     literal        |          | interval in sec options:240,60,120,30,15&lt;br /&gt;
   1: sign             |     literal        |          | signature (AES) options:on,off&lt;br /&gt;
   4: peerNeedsBurst   |     literal        | required | peer expects burst options:on,off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Auslesen der Register aus dem Device ====&lt;br /&gt;
Mit dem Befehl &lt;br /&gt;
:&amp;lt;code&amp;gt;set &amp;amp;lt;name&amp;amp;gt; getConfig&amp;lt;/code&amp;gt;&lt;br /&gt;
werden die Register aus dem Device ausgelesen. Die wichtigsten Register werden direkt in den Readings angezeigt. Bei Anwendung auf ein &amp;quot;device&amp;quot; werden auch die Kanäle ausgelesen, bei Kanal nur der Kanal.&lt;br /&gt;
Die Anzeige der Register in den Readings ist R-&amp;amp;lt;regname&amp;amp;gt;. Der &amp;quot;R-&amp;quot; Präfix dient zur Sortierung und auch zur einfacheren Identifizierung, dass es ein Register ist.&lt;br /&gt;
&lt;br /&gt;
==== Editieren von Registerwerten ====&lt;br /&gt;
Die Inhalte von Registern können mit dem Befehl&lt;br /&gt;
:&amp;lt;code&amp;gt;set &amp;amp;lt;name&amp;amp;gt; regSet &amp;amp;lt;regname&amp;amp;gt; &amp;amp;lt;value&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
modifiziert werden.&lt;br /&gt;
&lt;br /&gt;
== Mögliche Zustände ==&lt;br /&gt;
=== Log-Auszug ===&lt;br /&gt;
In FHEM sind folgende Zustände des HM-Sen-MDIR-SM im Log zu sehen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2012-05-30_16:17:26 Aussen_Bewegungssensor motion&lt;br /&gt;
2012-05-30_16:17:26 Aussen_Bewegungssensor motion: on (to broadcast)&lt;br /&gt;
2012-05-30_16:18:34 Aussen_Bewegungssensor brightness: 43&lt;br /&gt;
2012-05-30_16:18:34 Aussen_Bewegungssensor alive&lt;br /&gt;
2012-05-30_16:18:34 Aussen_Bewegungssensor cover: closed&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Einem ELV Forenbeitrag mit dem Titel &amp;quot;[http://www.elv.de/topic/problem-mit-helligkeitsmessung.html Problem mit Helligkeitsmessung]&amp;quot; zufolge sendet HM-Sen-MDIR-SM den Helligkeitswert nur bei Erkennung einer Bewegung, womit er - anders als z.B. [[HM-Sen-MDIR-O Funk-IR-Bewegungsmelder außen|HM-Sen-MDIR-O]] - nicht als permanenter Helligkeitssensor eingesetzt werden kann.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Montage- und Bedienungsanleitung ({{DocLink|elv|/service/manuals/84579_HM_Sen_MDIR_SM_um.pdf}})&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Bewegungs- und Anwesenheitsmelder]]&lt;br /&gt;
[[Kategorie:Lichtsensoren]]&lt;br /&gt;
[[Kategorie:868MHz]]&lt;/div&gt;</summary>
		<author><name>AlanBlack</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:HM-Sen-MDIR-SM.jpg&amp;diff=27860</id>
		<title>Datei:HM-Sen-MDIR-SM.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:HM-Sen-MDIR-SM.jpg&amp;diff=27860"/>
		<updated>2018-09-13T17:31:08Z</updated>

		<summary type="html">&lt;p&gt;AlanBlack: HM-Sen-MDIR-SM Homematic Bewegungsmelder für den Außenbereich&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Beschreibung ==&lt;br /&gt;
HM-Sen-MDIR-SM Homematic Bewegungsmelder für den Außenbereich&lt;/div&gt;</summary>
		<author><name>AlanBlack</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=27833</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=27833"/>
		<updated>2018-09-12T09:07:44Z</updated>

		<summary type="html">&lt;p&gt;AlanBlack: Hinweis auf nur ein GPIO-Modul pro Raspi eingefügt&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 Verbidnung 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 ([https://forum.fhem.de/index.php/topic,56606.0.html Thread]), in dem PeMue eine eigene Platinenversion (Schaltplan, Stückliste und vieles mehr) vorstellt.&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=all&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 möglichst weit weg von jeder Elektronik positionieren. Außerdem bitte das Ende der Drahtantenne mit einem Klecks Heißkleber oder ähnlichem isolieren. Eine Berührung vor allem mit dem Innenleben des Raspberry Pi muss vermieden werden!&lt;br /&gt;
&lt;br /&gt;
Bitte auf die richtige Lage (Bilder) beim Zusammenbau und auf Lötzinnbrücken achten. Das sind häufige Fehler beim Zusammenbau! &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(rechts). Damit passen die kleineren Pi Gehäuse nicht, das Gesamtmodul klemmt am Deckel.&lt;br /&gt;
&lt;br /&gt;
Man kann ohne weiteres das UART Modul unter dem PCB Modul montieren (links), damit wird die Gesamthöhe geringer und es passt problemlos in jedes Gehäuse. Es kann sein das jetzt aber Kühlkörper oder ähnliches seitens der Pi Platine stören.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Verwendung mit Raspberry Pi ==&lt;br /&gt;
&lt;br /&gt;
=== Originaler Einsatzzweck im Raspberry ===&lt;br /&gt;
Die notwendige Konfiguration der Schnittstelle 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;
&lt;br /&gt;
=== Remoteanbindung - Pi + RPI Modul = LAN Modul ===&lt;br /&gt;
&lt;br /&gt;
Mit einem vorhandene Pi kann man HM-MOD-RPI-PCB Modul 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.C3.BCr_Zusatzmodule|Verwendung UART für Zusatzmodule]]. Die [[HM-MOD-RPI-PCB_HomeMatic_Funkmodul_für_Raspberry_Pi#Definition_in_FHEM_2|Definition in FHEM]] erfolgt dann mit dem Parameter uart:// .&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;
== Verwendung mit anderer Hardware ==&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! 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;
Es kann ein beliebiger ESP8266 verwendet werden. Beim ESP8266 gibt es zwei verschiedene Firmware-Möglichkeiten: ESPLink oder ESPEasy. Ebenso sind zwei verschiedene Schnittstellen möglich: Entweder direkt die serielle Schnittstelle (da die ESP auf 3,3V laufen, sind keine Spannungsteiler erforderlich, Verschaltung siehe oben) oder aber durch eine &#039;&#039;swapped&#039;&#039; Schnittstelle, bei der auf die digitalen Pins D7/D8 zurückgegriffen wird (siehe unten). Die letztere Verschaltung erfordert aber eine entsprechende Implementierung der Schnittstelle in der Firmware selbst (&#039;&#039;serieller Server&#039;&#039; genannt), die beispielsweise bei ESPEasy 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)&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; D8&lt;br /&gt;
   Tx    &amp;lt;-&amp;gt; D7&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].&lt;br /&gt;
&lt;br /&gt;
Verwendet man ESP-Link, so muss neben der WLAN Konfiguration nur das Pin Assignment konfiguriert werden. Alle Pins auf disabled und UART pins auf swapped stellen.&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;
=== 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;
&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;
&lt;br /&gt;
Je nach physischem Anschluss erfolgt eine Anbindung in FHEM in unterschiedlicher Weise. 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;
&lt;br /&gt;
Die Module werden mit einer Firmware 1.2.1 ausgeliefert. Dies Firmware ist nicht für einen stabilen Betrieb geeignet,&lt;br /&gt;
die Firmware 1.4.1 ist die minimal lauffähige Version.&lt;br /&gt;
&lt;br /&gt;
Die ersten zwei Schritte werden in der Kommandozeile auf Betriebssystemebene ausgeführt, also im &amp;quot;Terminal&amp;quot;. Punkt 3 ist bis auf die Pfadeingabe in der FHEM Web Oberfläche auswählbar.&lt;br /&gt;
&lt;br /&gt;
1. Firmware herunterladen&lt;br /&gt;
 # Version 1.4.1&lt;br /&gt;
 wget https://raw.githubusercontent.com/eq-3/occu/28045df83480122f90ab92f7c6e625f9bf3b61aa/firmware/HM-MOD-UART/coprocessor_update.eq3&lt;br /&gt;
 # Alternativ die aktuellste&lt;br /&gt;
 wget https://raw.githubusercontent.com/eq-3/occu/HEAD/firmware/HM-MOD-UART/coprocessor_update.eq3&lt;br /&gt;
&lt;br /&gt;
2. Kopieren an einen Ort wo FHEM Zugriff hat, am Besten nach /opt/fhem/FHEM/firmware&lt;br /&gt;
 sudo cp coprocessor_update.eq3 /opt/fhem/FHEM/firmware/&lt;br /&gt;
&lt;br /&gt;
3. Flashen der neuen Firmware aus FHEM&lt;br /&gt;
 set myHmUART updateCoPro /opt/fhem/FHEM/firmware/coprocessor_update.eq3&lt;br /&gt;
&lt;br /&gt;
=== Firmware Update des UART-Moduls ohne FHEM ===&lt;br /&gt;
&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;
&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;
&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;
&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>AlanBlack</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-CFG-USB_USB_Konfigurations-Adapter&amp;diff=27832</id>
		<title>HM-CFG-USB USB Konfigurations-Adapter</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-CFG-USB_USB_Konfigurations-Adapter&amp;diff=27832"/>
		<updated>2018-09-12T08:20:51Z</updated>

		<summary type="html">&lt;p&gt;AlanBlack: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=HM-CFG-USB-2.jpg&lt;br /&gt;
|Bildbeschreibung=HomeMatic USB Konfigurationsadapter (Version 2)&lt;br /&gt;
|HWProtocol=HomeMatic &lt;br /&gt;
|HWType=Interface/Gateway&lt;br /&gt;
|HWCategory=HomeMatic&lt;br /&gt;
|HWComm=868,3 MHz&lt;br /&gt;
|HWChannels=&lt;br /&gt;
|HWVoltage=5 V&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=USB-Bus&lt;br /&gt;
|HWSize=V1: 40 x 90 x 25 mm&amp;lt;br /&amp;gt;V2: 28 x 84 x 11,5 mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#CUL_HM CUL_HM]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=eQ-3&lt;br /&gt;
}}&lt;br /&gt;
Der [[HomeMatic]] &#039;&#039;&#039;USB Konfigurations-Adapter&#039;&#039;&#039; ist ein USB-Stick, der außer zur Konfiguration von HomeMatic-Komponenten auch als [[Interface]] zwischen FHEM und HomeMatic-Geräten benutzt werden kann. Er existiert in zwei Versionen: der älteren HM-CFG-USB und der neueren HM-CFG-USB2. Die folgenden Beschreibungen gelten für beide Versionen, es sei denn, es ist ausdrücklich eine spezifische Version genannt.&lt;br /&gt;
&lt;br /&gt;
== Einbindung in FHEM ==&lt;br /&gt;
Im FHEM-Forum wird die Einbindung als Interface in diesem {{Link2Forum|Topic=13071}} beschrieben und diskutiert. Im {{Link2Forum|Topic=13071|Message=79872|LinkText=Eröffnungsbeitrag}} wird eine gut funktionierende HMLAN-Emulationssoftware [https://git.zerfleddert.de/cgi-bin/gitweb.cgi/hmcfgusb hmland] von ihrem Entwickler vorgestellt, um den HM-CFG-USB in FHEM zu integrieren. Die HMLAN-Emulationssoftware muss zunächst kompiliert und installiert werden. Anschließend wird der HM-CFG-USB (üblicherweise auf localhost) genau wie [[HM-CFG-LAN LAN Konfigurations-Adapter|HMLAN]] in FHEM eingebunden. &lt;br /&gt;
&lt;br /&gt;
=== Einrichtung unter Linux ===&lt;br /&gt;
Die Schritte zur Kompilierung und Installation hat der hmland-Entwickler sowohl auf der [https://git.zerfleddert.de/cgi-bin/gitweb.cgi/hmcfgusb hmland-Internetseite] in Englisch (kurz) als auch im oben genannten {{Link2Forum|Topic=13071|Message=79872|LinkText=Eröffnungsbeitrag}} in Deutsch (ausführlich) dargestellt. Die dort gemachten Angaben werden auch bei Bedarf aktualisiert und sind deshalb der beste Anlaufpunkt für Kompilierung und Installation. &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=Info|RNText=&#039;&#039;&#039;Skript zur Kompletteinrichtung unter Linux&#039;&#039;&#039;&lt;br /&gt;
Dieser {{Link2Forum|Topic=13071|Message=190887|LinkText=Bericht}} im Forum stellt ein Script vor, das &#039;&#039;hmland&#039;&#039; herunterlädt, übersetzt (kompiliert), installiert sowie ein init-Script anlegt, so dass fast keine manuellen Eingriffe mehr notwendig sind.}}&lt;br /&gt;
Die nachfolgenden Angaben in diesem Abschnitt sind rein zu Informationszwecken (noch) enthalten: &lt;br /&gt;
&lt;br /&gt;
Zunächst muss die HMLAN-Emulationssoftware kompiliert werden. Analog zu [https://git.zerfleddert.de/cgi-bin/gitweb.cgi/hmcfgusb dieser Beschreibung] ist die Vorgehensweise die folgende (in Debian/Ubuntu/Raspbian):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd /opt/&lt;br /&gt;
 apt-get install build-essential libusb-1.0-0-dev make gcc git&lt;br /&gt;
 git clone git://git.zerfleddert.de/hmcfgusb&lt;br /&gt;
 cd hmcfgusb&lt;br /&gt;
 make&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach kann der Dienst (zu Testzwecken sind Debugging-Ausgaben mit &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; aktiviert) gestartet werden:&lt;br /&gt;
:&amp;lt;code&amp;gt; /opt/hmcfgusb/hmland -p 1234 -D&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Start als Daemon ====&lt;br /&gt;
Um &#039;&#039;hmland&#039;&#039; automatisch als Daemon zu starten, kann ein init-Script genutzt werden. Die Quellen von &#039;&#039;hmland&#039;&#039; enthalten ein solches Script im &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt; Unterverzeichnis:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /opt/hmcfgusb/debian/hmland.init /etc/init.d/hmland&lt;br /&gt;
cp /opt/hmcfgusb/debian/hmland.default /etc/default/hmland&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Einstellungen, beispielsweise der Port, auf dem &#039;&#039;hmland&#039;&#039; hört, können (und sollten) in der Datei &amp;lt;code&amp;gt;/etc/default/hmland&amp;lt;/code&amp;gt; vorgenommen werden. Wichtig: Wenn diese Anleitung befolgt wurde, muss in der Datei &amp;lt;code&amp;gt;/etc/init.d/hmland&amp;lt;/code&amp;gt; die folgende Zeile wie folgt angepasst werden (&amp;lt;code&amp;gt;/hm&amp;lt;/code&amp;gt; aus dem Pfad entfernen), damit der automatische Start des Daemon klappt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
DAEMON=/opt/hmcfgusb/$NAME # Introduce the server&#039;s location here&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die kopierte Datei mit &amp;lt;code&amp;gt;chmod 755 /etc/init.d/hmland&amp;lt;/code&amp;gt; ausführbar machen, anschließend kann &#039;&#039;hmland&#039;&#039; mit folgendem Befehl gestartet werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;/etc/init.d/hmland start&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei Distributionen, die Upstart einsetzen (z.B. xbian) kann folgende Konfigurationsdatei verwendet werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# HMLAND&lt;br /&gt;
&lt;br /&gt;
description     &amp;quot;hmland&amp;quot;&lt;br /&gt;
&lt;br /&gt;
start on starting fhem&lt;br /&gt;
stop on stopped fhem&lt;br /&gt;
&lt;br /&gt;
respawn&lt;br /&gt;
expect fork&lt;br /&gt;
&lt;br /&gt;
chdir /opt/hmcfgusb&lt;br /&gt;
exec /opt/hmcfgusb/hmland -d -l 127.0.0.1 -p 1234&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei sollte als &amp;lt;code&amp;gt;/etc/init/hmland.conf&amp;lt;/code&amp;gt; angelegt werden. Mit dem Befehl&lt;br /&gt;
:&amp;lt;code&amp;gt;initctl reload-configuration &amp;lt;/code&amp;gt;&lt;br /&gt;
wird Upstart angewiesen, seine Konfiguration erneut einzulesen. Danach kann der Dienst &#039;&#039;hmland&#039;&#039; mit&lt;br /&gt;
:&amp;lt;code&amp;gt;service hmland start &amp;lt;/code&amp;gt;&lt;br /&gt;
gestartet werden. &amp;lt;code&amp;gt;hmland&amp;lt;/code&amp;gt; wird jetzt immer vor FHEM gestartet und nach FHEM beendet.&lt;br /&gt;
&lt;br /&gt;
==== Start über FHEM Startskript ====&lt;br /&gt;
Ausprobiert auf einem BBB mit Debian, eigentlich ist das alles von Betateilchen:&lt;br /&gt;
&lt;br /&gt;
Zunächst hmland kompilieren wie oben beschrieben, bis zum make. Das muss erfolgreich durchgelaufen sein.&lt;br /&gt;
&lt;br /&gt;
Dann geht es weiter:&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo cp hmcfgusb.rules /etc/udev/rules.d/ &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt das FHEM Startskript anpassen (in den Blöcken &#039;start&#039; und &#039;stop&#039; muss quasi nur jeweils 1 Zeile eingefügt werden:&lt;br /&gt;
&lt;br /&gt;
Damit editiert man das FHEM Startskript:&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo nano /etc/init.d/fhem &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und so sollten die Blöcke anschließend aussehen (bitte nur jeweils die Zeile mit hmland einfügen)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 &#039;start&#039;)&lt;br /&gt;
        echo &amp;quot;Starting fhem...&amp;quot;&lt;br /&gt;
        /opt/hmcfgusb/hmland -d -p 1234&lt;br /&gt;
        perl fhem.pl fhem.cfg&lt;br /&gt;
        RETVAL=$?&lt;br /&gt;
        ;;&lt;br /&gt;
&lt;br /&gt;
 &#039;stop&#039;)&lt;br /&gt;
        echo &amp;quot;Stopping fhem...&amp;quot;&lt;br /&gt;
        perl fhem.pl $port &amp;quot;shutdown&amp;quot;&lt;br /&gt;
        RETVAL=$?&lt;br /&gt;
        pkill hmland&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So wird hmland vor FHEM gestartet und nach FHEM beendet. Letztlich erspart es Probleme mit den diversen Startskripten und ihren Rechten.&lt;br /&gt;
&lt;br /&gt;
Es dauert nach dem Start von FHEM noch einige Sekunden, bis hmland fertig geladen ist. In dieser Zeit kann es zu fehlerhaften Einträgen im Logfile kommen.&lt;br /&gt;
&lt;br /&gt;
=== Einrichtung auf Synology DiskStations ===&lt;br /&gt;
Packages für DSM5.2 finden sich hier:&lt;br /&gt;
https://github.com/mkunzmann/spksrc/releases/tag/0.101-3&lt;br /&gt;
&lt;br /&gt;
Welches Package für welche DS kann man hier sehen:&lt;br /&gt;
https://github.com/SynoCommunity/spksrc/wiki/Architecture-per-Synology-model&lt;br /&gt;
&lt;br /&gt;
Einfach das passende Package installieren und dann kann man den hmland über den Synology Package-Manager starten und stoppen. Während der Installation kann man den Port für hmland festlegen. Bitte einen Port &amp;gt; 1024 wählen, da der hmland nicht als root läuft. Außerdem kann ein Logfile angegeben werden. Hier am besten eine Datei auf einem USB Stick angeben die für jedermann schreibbar sein muss. Damit sollten die Platten nach wie vor in den Standby gehen.&lt;br /&gt;
&lt;br /&gt;
=== Einrichtung unter Mac OS X ===&lt;br /&gt;
Wie unter Linux braucht man die HMLAN-Emulationssoftware hmland, die man aus Quelltexten erstellen muss. Dazu muss man die Bibliothek libusb installieren, entweder mit einem der Paketmanager wie Fink, MacPorts oder Homebrew oder direkt aus den Quellentexten (Beispiel: &amp;quot;fink install libusb1-shlibs libusb1&amp;quot;). Hat man wie bei Linux das Quelltextarchiv für hmland heruntergeladen und ausgepackt, müssen die Dateien Makefile und hmcfgusb.c angepasst werden. &lt;br /&gt;
&lt;br /&gt;
Im Makefile muss man den Pfad zur libusb anpassen. Hat man libusb mit fink installiert, muss man, &amp;quot;/opt/local/&amp;quot; durch &amp;quot;/sw/&amp;quot; bei den CFLAGS und den LDFLAGS ersetzen und&lt;br /&gt;
das &amp;quot;-lrt&amp;quot; aus den LDLIBS entfernen. Die Library librt gibt es bei Mac OS X nicht und wird anscheinend auch nicht gebraucht. (Stimmt das eigentlich?)&lt;br /&gt;
&lt;br /&gt;
In der Datei hmcfgusb.c muss man die Zeilen 130-134 mit dem Aufruf libusb_detach_kernel_driver auskommentieren oder löschen. Der geht nicht auf Mac OS X.&lt;br /&gt;
&lt;br /&gt;
Nach den Änderungen in den zwei Dateien, kann man wie bei Linux den Dämon hmland mit dem Kommando &amp;quot;make&amp;quot; erzeugen und mit &amp;quot;./hmland&amp;quot; ausführen. Automatisches Starten beim Booten mit launchd ist noch nicht probiert.&lt;br /&gt;
&lt;br /&gt;
Beim Start von hmland sollte man folgende Fehlermeldung in einer Endlos-Schleife erhalten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Datum Zeit: Client 127.0.0.1 connected!&lt;br /&gt;
Can&#039;t claim interface: Access denied (insufficient permissions)&lt;br /&gt;
Can&#039;t find/open hmcfgusb!&lt;br /&gt;
Datum Zeit: Connection to 127.0.0.1 closed!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch ein Start von hmland mit Superuser-Rechten ändert daran nichts. Damit das claim interface klappt, muss man eine codeless kext in den Ordner /Library/Extensions legen. Ich habe dieses (http://mspdebug.sourceforge.net/misc/ex430rf2500-kext.zip) herunter geladen. Damit es funktioniert, muss man aber in der Datei Info.plist des Bundle die Properties idProduct und idVendor ändern, entweder mit dem Property List Editor oder einem anderen Texteditor. Die beiden Properties sind etwas versteckt bei Information Property List → IOKitPersonalities → ComIntf. Bei DebugIntf und DeviceDriver scheint man es nicht ändern zu müssen, aber schaden kann es nicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
idProduct: 49167&lt;br /&gt;
idVendor: 6943&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rechte des kext-Bundles müssen auch noch gesetzt werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  chmod -R 755 ex430rf2500.kext&lt;br /&gt;
  chown -R root:wheel ex430rf2500.kext&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach die Datei ex430rf2500.kext in den Ordner /Library/Extensions legen und hmland sollte dann funktionieren.&lt;br /&gt;
&lt;br /&gt;
Es kann sein, dass ab Mac OS X 10.9 der Trick mit dem codeless kext nicht mehr funktioniert, aber noch ist das nicht getestet oder bestätigt. Langfristig kann man vielleicht auch eine kext mit einem Treiber für den HM-CFG-USB USB erstellen&lt;br /&gt;
&lt;br /&gt;
=== Einrichtung unter Windows ===&lt;br /&gt;
Bei der Einrichtung und vermutlich auch dem Betrieb unter Windows 8.1 sind wegen der erweiterten Energieverwaltungsfunktionen die von eQ-3 [http://www.eq-3.de/Downloads/eq3/pdf_FAQ/Funk-Konfigurationsdapter-USB_Windos_8.1.pdf zusammengestellten Tipps] zu befolgen.&lt;br /&gt;
&lt;br /&gt;
=== Definition(en) in der FHEM-Konfiguration ===&lt;br /&gt;
In der FHEM [[Konfiguration]] muss noch, sofern/sobald der &#039;&#039;hmland&#039;&#039; läuft, das Device eingerichtet werden mit den folgenden Anweisungen:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &#039;&#039;&#039;hmusb&#039;&#039;&#039; HMLAN 127.0.0.1:1234 &amp;lt;/code&amp;gt;&lt;br /&gt;
wobei &#039;&#039;&#039;hmusb&#039;&#039;&#039; der frei wählbare Devicename ist. Anschließend sollte bzw. muss noch mit&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &#039;&#039;&#039;hmusb&#039;&#039;&#039; hmId &amp;lt;&#039;&#039;&#039;hmId&#039;&#039;&#039;&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
eine &#039;&#039;&#039;hmId&#039;&#039;&#039; zugeordnet werden (dabei bitte auch die Hinweise und Regeln beachten, die im Zusammenhang mit der [[Virtueller Controller VCCU|VCCU]] beschrieben sind!&lt;br /&gt;
&lt;br /&gt;
== Firmware Update ==&lt;br /&gt;
Der Firmware Update (unter Linux) ist ebenfalls auf der [https://git.zerfleddert.de/cgi-bin/gitweb.cgi/hmcfgusb hmland-Internetseite] beschrieben. Auch die letzte bekannte Firmware-Version (0.967) steht dort zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
=== Verbindung zu neueren hmland-Versionen nicht stabil ===&lt;br /&gt;
Seit Version 0.100 meldet sich die HMLAN-Emulationssoftware als USB-Interface bei FHEM. Ältere FHEM-Versionen (vor dem 19.6.2015) brechen deshalb die Verbindung ab, da sie nur ein LAN-Interface erwarten.&lt;br /&gt;
&lt;br /&gt;
Lösung: Kommandozeilenparameter &amp;lt;code&amp;gt;-I&amp;lt;/code&amp;gt; dem hmland-Aufruf hinzufügen, dann meldet sich dieser wieder als LAN-Interface.&lt;br /&gt;
&lt;br /&gt;
=== Stick nicht (mehr) ansprechbar ===&lt;br /&gt;
Zitat aus dem {{Link2Forum|Topic=32502|Message=249122|LinkText=FHEM-Forum}}: &lt;br /&gt;
:&#039;&#039;... befürchte ich, dass dein Stick das Zeitliche gesegnet hat. Machen die Dinger leider sehr gerne... Ganz besonders beim Modus-Wechsel vom 10k- in den 100k-Modus, wenn man bei irgendeinem Device ein Firmwareupdate durchführt. &amp;lt;br /&amp;gt;Die gute Nachricht ist, dass der Fehler bei sämtlichen Händlern bekannt ist und anstandslos getauscht wird.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Raspberry Pi ===&lt;br /&gt;
Der USB-Stack am Raspberry Pi ist für viele Probleme verantwortlich. Daher sieht man öfter Fehlermeldungen:&lt;br /&gt;
:&amp;lt;code&amp;gt;usb-transfer took more than 100ms (1039ms), this may lead to timing problems!&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da das Timing bei HomeMatic wichtig ist führt das zu vielen Retransmits und zu unzuverlässigen Aktoren. Als Workaround kann man den USB-Stack auf die deutlich langsamere Version 1.1 stellen. Dazu fügt man folgenden Text am Anfang der Datei /boot/cmdline.txt ein:&lt;br /&gt;
:&amp;lt;code&amp;gt;dwc_otg.speed=1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weitergehende Informationen ==&lt;br /&gt;
Es sind zwei Versionen des HM-CFG-USB im Umlauf:&lt;br /&gt;
{{Randnotiz|RNTyp=r|RNText=Stand März 2016 ist allem Anschein nach kein HM-CFG-USB mehr im ELV Programm enthalten!}}&lt;br /&gt;
* HM-CFG-USB-2: die aktuelle Version; Kennzeichen dieser Version: &lt;br /&gt;
** Größe: 28 x 84 x 11,5&amp;amp;nbsp;mm&lt;br /&gt;
** Gewicht: 18&amp;amp;nbsp;g&lt;br /&gt;
** Antenne innenliegend&lt;br /&gt;
* HM-CFG-USB: Vorgängerversion; Stand 12/2013 noch Restbestände im Handel verfügbar. Dokumentation ([http://files.voelkner.de/625000-649999/646462-an-01-ml-HM_Konfigurationsadapter_CFG_USB_de_en.pdf Völkner]); Kennzeichen:&lt;br /&gt;
** Anschluss per separatem USB-Kabel&lt;br /&gt;
** abstehende Stabantenne&lt;br /&gt;
** Größe: 40 x 90 x 25&amp;amp;nbsp;mm&lt;br /&gt;
** Gewicht: 45&amp;amp;nbsp;g&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Bedienungsanleitung [http://www.eq-3.de/Downloads/eq3/pdf_produkte/HM-CFG-USB-2_-UM-eQ-3-150129-web.pdf HM-CFG-USB-2, PDF]&lt;br /&gt;
* FHEM-Forums {{Link2Forum|Topic=13071}}: HomeMatic USB Konfigurations-Adapter (HM-CFG-USB) in FHEM nutzen&lt;br /&gt;
* [http://www.elv.de/homematic-usb-konfigurations-adapter-1.html ELV Shopseite] zum HM-CFG-USB&lt;br /&gt;
* [http://www.eq-3.de/produkt-detail-zentralen-und-gateways/items/homematic-funk-konfigurationsadapter-usb.html eQ-3 Produktseite] zum &amp;quot;HomeMatic Funk-Konfigurationsadapter USB&amp;quot;; Downloads, technische Daten, etc.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;br /&gt;
[[Kategorie:OSX]]&lt;br /&gt;
[[Kategorie:868MHz]]&lt;/div&gt;</summary>
		<author><name>AlanBlack</name></author>
	</entry>
</feed>