<?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=Benheim</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=Benheim"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Benheim"/>
	<updated>2026-04-17T07:31:43Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=LightScene&amp;diff=40582</id>
		<title>LightScene</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=LightScene&amp;diff=40582"/>
		<updated>2025-12-25T17:15:02Z</updated>

		<summary type="html">&lt;p&gt;Benheim: Hinweis, dass gespeichert werden muss, auch wenn das rote Fragezeichen nicht angezeigt wird.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Speicherung und Wiederherstellung des Zustands von einer Gruppe von Geräten.&lt;br /&gt;
|ModType=h&lt;br /&gt;
&amp;lt;!-- |ModCategory=?? --&amp;gt;&lt;br /&gt;
&amp;lt;!-- |ModCmdRef=http://fhem.de/commandref.html#LightScene --&amp;gt;&lt;br /&gt;
|ModTechName=31_LightScene.pm&lt;br /&gt;
|ModOwner=justme1968&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LightScene&#039;&#039;&#039; ist ein Hilfsmodul, das es erlaubt, Zustände einer Gruppe von Geräten abzuspeichern und wiederherzustellen.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; LightScene [&amp;lt;dev1&amp;gt;] [&amp;lt;dev2&amp;gt;] [&amp;lt;dev3&amp;gt;] ... &amp;lt;/code&amp;gt;&lt;br /&gt;
:Beispiele:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
define light_group LightScene Lampe1 Lampe2 Dimmer1&lt;br /&gt;
define kino_group LightScene LampeDecke LampeFernseher Fernseher Verstaerker&lt;br /&gt;
define Wohnzimmer LightScene Leinwand Beamer TV Leselampe Deckenlampe&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Die Gerätedetailansicht zeigt eine HTML-Übersicht über den aktuellen Zustand aller eingebundenen Geräte und aller konfigurierten Szenen mit den jeweiligen Gerätezuständen. Die Spaltenüberschrift mit den Gerätenamen ist anklickbar, um zur Detailansicht dieses Geräts zu gelangen. Die erste Zeile, die den aktuellen Gerätezustand anzeigt, ist anklickbar und sollte wie ein Klick auf das Gerätesymbol in einer Raumübersicht reagieren. Damit kann interaktiv eine neue Szene konfiguriert und mit dem Befehlsmenü der Detailansicht gespeichert werden. Die erste Spalte der Tabelle mit den Szenennamen ist anklickbar, um die Szene zu aktivieren.&lt;br /&gt;
:&#039;&#039;&#039;Achtung&#039;&#039;&#039;: nach einer Änderung von Szenen muss die FHEM-Konfiguration gespeichert werden, auch wenn nicht wie üblich mit einem roten Fragezeichen angezeigt wird, dass die Konfiguration geändert hat.&lt;br /&gt;
:Ein Weblink mit einer Szenenübersicht, der in jeden Raum oder Grundriss eingebunden werden kann, lässt sich erstellen mit:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
define wlScene weblink htmlCode {LightScene_2html(&amp;quot;LightSceneName&amp;quot;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
&lt;br /&gt;
=== Get ===&lt;br /&gt;
&lt;br /&gt;
=== Attributes ===&lt;br /&gt;
&lt;br /&gt;
== Funktionen ==&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
* [[XBMC#Lichtsteuerung_durch_KODI_oder_PLEX|Lichtsteuerung durch KODI oder PLEX]]&lt;br /&gt;
* [[Zuhause-Status|Umsetzung Zuhause-Status mit LightScene]]&lt;br /&gt;
* [[ReadingsGroup#LightScene_DropDown-Men.C3.BC_f.C3.BCr_smallscreen_Styles_oder_Floorplan|LightScene-DropDown-Menü für Smallscreen-Styles oder Floorplan]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* weitere Dokumentation&lt;br /&gt;
* ...&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-CFG-USB_USB_Konfigurations-Adapter&amp;diff=26420</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=26420"/>
		<updated>2018-04-16T12:14:34Z</updated>

		<summary type="html">&lt;p&gt;Benheim: /* Einrichtung unter Linux */ git-core ist obsolet und umbenannt in git (siehe https://packages.debian.org/jessie/git-core)&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 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;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Alexa-Fhem&amp;diff=23452</id>
		<title>Alexa-Fhem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Alexa-Fhem&amp;diff=23452"/>
		<updated>2017-12-04T06:59:25Z</updated>

		<summary type="html">&lt;p&gt;Benheim: /* Alexa Skills */ URL zu &amp;quot;Login with Amazon&amp;quot; eingefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Alexa-Fhem&#039;&#039;&#039; ist eine in JavaScript geschriebene und auf NodeJS basierende Software, welche es ermöglicht, der digitalen Amazon Assistentin Alexa zusätzliche Skills für die Heimautomatisierung via FHEM beizubringen. Eine erste funktionierende Version wurde von [https://forum.fhem.de/index.php?action=profile;u=430 justme1968] im {{Link2Forum|Topic=60244|LinkText=Forum}} veröffentlicht.&lt;br /&gt;
Das ist eine erste Version der Dokumentation zur Installation und Einrichtung, eine Erweiterung wird sicherlich in nächster Zeit noch folgen.&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Anbindung von FHEM an Amazon Assistent Alexa&lt;br /&gt;
|ModType=x&lt;br /&gt;
|ModTechName=&lt;br /&gt;
|ModForumArea=Frontends/Sprachsteuerung&lt;br /&gt;
|ModOwner=justme1968&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Einführung==&lt;br /&gt;
===Glossar===&lt;br /&gt;
*Echo bzw. Echo Dot (im Folgenden maskulin bezeichnet) sind die derzeit verfügbaren Geräte des Alexa-Systems &#039;&#039;&#039;BILDER EINSTELLEN - Achtung Urheberrecht&#039;&#039;&#039;&lt;br /&gt;
*AVS ist der Amazon Voice Service, d.h. die Spracherkennungskomponente des Systems.{{Randnotiz|RNTyp=r|RNText=Für die Nutzung der Amazon AWS-Dienste müssen zwingend die Daten einer Kreditkarte angegeben werden. Nach gegenwärtigem Kenntnisstand sollen jedoch keine Kosten für die Nutzung der im Rahmen dieses How To beschriebenen Dienste anfallen, sofern diese in einem Rahmen genutzt werden, der selbst eine intensive private Nutzung nicht überschreitet. Der Benutzer sei an dieser Stelle auf die von Amazon veröffentlichten Preislisten verwiesen. Die Autoren dieser Anleitung und der darin beschriebenen Module übernehmen keine Haftung für eventuelle Kosten, die aus der Nutzung der AWS entstehen. }}&lt;br /&gt;
*AWS sind die Amazon Web Services, also per URL erreichbare Dienste zur Ausführung von Berechnungen etc. Im Rahmen von Alexa-Fhem wird bei AWS eine eigene JavaScript-Funktion hinterlegt, die zur Kommunikation mit dem FHEM-Server dient. Im Jargon von Amazon ist dies eine so genannte Lambda-Funktion &#039;&#039;&#039;WARUM ? Nachlesen bei Amazon&#039;&#039;&#039;.&lt;br /&gt;
*Card bezeichnet einen Eintrag in der Alexa-App, der die erkannte Sprachnachricht sowie weiter gehenden Informationen über die Reaktion von Alexa enzthält und Rückmeldung an Amazon erlaubt.&lt;br /&gt;
*Skill (engl. für Fähigkeit) ist die Bezeichnung für eine per Spracherkennung bediente Funktionalität des Alexa-Systems, z.B. zur Nachrichtenansage, zur Wettervorhersage oder zur Steuerung von FHEM&lt;br /&gt;
&lt;br /&gt;
===Arbeitsweise und Datenfluss===&lt;br /&gt;
[[Datei:2gpXyLN.jpg|200px|thumb|right|Grafische Darstellung der beteiligten Komponenten]]&lt;br /&gt;
Echo -&amp;gt; AVS -&amp;gt; AWS Lambda -&amp;gt; alexa-fhem -&amp;gt; AWS Lambda -&amp;gt; AVS -&amp;gt; Echo&lt;br /&gt;
 &lt;br /&gt;
*Der Echo (oder ein anderes Alexa/AVS fähiges Gerät)  nimmt Audiodaten auf und schickt diese an AVS  (Amazon Voice Service) zur Erkennung&lt;br /&gt;
*AVS führt die Spracherkennung durch und erzeugt ein Event mit Informationen zu den erkannten Daten&lt;br /&gt;
:*Beim Alexa SmartHome Skill sind die möglichen Sätze für die Spracherkennung relativ fest vorgegeben &lt;br /&gt;
:*Beim Alexa Custom Skill kommen die dazu nötigen Informationen aus dem &#039;&#039;Interaction Model&#039;&#039; der Alexa Skills Configuration&lt;br /&gt;
*Das Event wird an den unter &#039;&#039;Configuration&#039;&#039; in der Alexa Skills Configuration hinterlegten Endpoint geschickt&lt;br /&gt;
:*Beim Alexa SmartHome Skill ist das zwingend eine AWS Lambda Routine&lt;br /&gt;
:*Beim Alexa Custom Skill kann das im Prinzip auch ein eigener Web Service sein&lt;br /&gt;
*Das Event wird vom &amp;lt;code&amp;gt;lambda.js&amp;lt;/code&amp;gt; code an alexa-fhem weitergeleitet&lt;br /&gt;
*alexa-fhem steuert FHEM und sendet ein Antwort-Event zurück&lt;br /&gt;
*&amp;lt;code&amp;gt;lambda.js&amp;lt;/code&amp;gt; nimmt diese Antwort entgegen und gibt sie an AVS zurück&lt;br /&gt;
*AVS sogt dafür das der Echo &#039;antwortet&#039; und dass die Card in der Alexa App erscheint&lt;br /&gt;
&lt;br /&gt;
===Anmerkungen===&lt;br /&gt;
*Ein Skill hat keinen Zugriff auf die Audiodaten&lt;br /&gt;
*Mit dem Skill API kann ein Skill zu zu keiner Zeit von sich aus aktiv werden und &#039;einfach&#039; Daten an den Echo schicken oder ihn dazu bringen irgendetwas zu tun.&lt;br /&gt;
*Wenn man berücksichtigt welchen Weg die Daten insgesamt gehen, ist es erstaunlich, wie schnell die Reaktion auf einen gesprochenen Satz erfolgt.&lt;br /&gt;
&lt;br /&gt;
=== Abgrenzung des &#039;&#039;&#039;Alexa Smart Home Skills&#039;&#039;&#039; und des &#039;&#039;&#039;Alexa Custom Skills&#039;&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
Der [[Alexa-Fhem#Smart_Home|Alexa Smart Home Skill]] ist ein Amazon-Alexa-Standard-Skill, der wesentliche Basisfunktionalitäten bereitstellt. Zu diesen gehört im Wesentlichen die Funktionalität, durch Alexa-FHEM bereitgestellte Devices im Alexa-Account des Benutzers anzulegen. Der Alexa Smart Home Skill reagiert auf gesprochene Interaktion in einem beschränkten Umfang. Beispielsweise genügt ein &amp;quot;Alexa, schalte die Wohnzimmerlampe an&amp;quot; um eine Interaktion zwischen Alexa Smart Home Skill und FHEM-Alexa auszulösen. Nach erfolgreicher Einrichtung wird dieser Skill in der Alexa-App bzw. im Web in der Rubrik &amp;quot;Smart Home&amp;quot; als Skill angezeigt.&lt;br /&gt;
&lt;br /&gt;
Der [[Alexa-Fhem#Custom|Alexa Custom Skill]] ist kein Standard-Smart-Home-Skill, sondern ein individuell entwickelter Skill, so wie alle anderen Skills auch. Er wird daher auch nicht in der Alexa-App unter der Rubrik &amp;quot;Smart Home&amp;quot; angezeigt. Gesprochene Interaktion mit diesem Skill erfolgt dadurch, dass entweder der Skill explizit gestartet wird (z.B. &amp;quot;Alexa, starte [Name des Skills]&amp;quot;) oder direkt angesprochen wird (z.B. &amp;quot;Alexa, frage [Name des Skills] wie ist der Status von [Device] &amp;quot;). Der Alexa Custom Skill befindet sich in Entwicklung und wird hinsichtlich seiner Funktionalitäten laufend weiterentwickelt. Die Einrichtung dieses Skills ist grundsätzlich optional, jedoch werden anspruchsvollere Steuerungsmöglichkeiten nur mit diesem realisiert werden können.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
{{Randnotiz|RNTyp=[g|Info]|RNText=Da die einzelnen Schritte der Anleitung an verschiedenen Stellen unterbrochen und später fortgesetzt werden müssen, empfiehlt es sich, die Anleitung einmal vollständig gelesen zu haben. Während der Konfiguration sollten alle nachfolgenden Abschnitte parallel in gleichzeitig geöffneten Browserfenstern durchgeführt werden, die jeweils bis zum Abschluss geöffnet bleiben müssen. }}&lt;br /&gt;
Grundvoraussetzung für alle folgenden Schritte ist das Vorhandensein eines Amazon-Accounts. Es wird davon ausgegangen, dass die Konten für alle im Folgenden genutzten Amazon-Dienste eingerichtet wurden.&lt;br /&gt;
&lt;br /&gt;
===node.js installieren===&lt;br /&gt;
Zunächst wird das Betriebssystem (in diesem Falle Debian oder Ubuntu) auf den aktuellen Stand gebracht:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get upgrade&lt;br /&gt;
sudo apt-get install build-essential libssl-dev&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun muss NodeJS installiert werden. Leider ist die Version im Debian Repository deutlich zu alt, daher wird mit den folgenden Befehlen das Node Repository hinzugefügt und NodeJS (in der LTS Version) entsprechend installiert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -&lt;br /&gt;
sudo apt-get install -y nodejs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alexa-Fhem installieren ===&lt;br /&gt;
&#039;&#039;&#039;Aus gegebenem Anlass: Dies ist weder eine Einführung in Linux, noch eine Anfängerdokumentation für FHEM.&#039;&#039;&#039; Also erst die Grundlagen lernen, und dann mit Alexa beginnen !&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version ist jeweils  {{Link2Forum|Topic=60244|Message=540117|LinkText=hier}} zu finden.&lt;br /&gt;
&lt;br /&gt;
====Erstinstallation====&lt;br /&gt;
Hier wird die Erstinstallation von Alexa-Fhem beschrieben.&lt;br /&gt;
===== Linux =====&lt;br /&gt;
# Die tgz-Datei unter Linux im Hauptverzeichnis von FHEM (typischerweise &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;) entpacken (&#039;&#039;nicht&#039;&#039; unter Windows, das zerstört die Rechteeinstellungen).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;tar -xvzf dateiname.tgz&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Das dabei entstandene Verzeichnis &#039;&#039;package&#039;&#039; in &#039;&#039;alexa-fhem&#039;&#039; umbenennen &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;mv package alexa-fhem&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Durch &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;cd alexa-fhem&amp;lt;/syntaxhighlight&amp;gt; in das Verzeichnis wechseln&lt;br /&gt;
# Mit &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/syntaxhighlight&amp;gt; alle Abhängigkeiten installieren (kein sudo!).&lt;br /&gt;
# SSL Zertifikat erzeugen durch Aufruf von &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;./createKey.sh&amp;lt;/syntaxhighlight&amp;gt; (kein sudo!). Hierbei beachten, dass ein Kennwort vergeben werden muss, das mindestens aus 4 Zeichen besteht, dieses Kennwort bitte merken.&lt;br /&gt;
# Das Verzeichnis &#039;&#039;.alexa&#039;&#039; anlegen, &#039;&#039;und zwar im Home-Verzeichnis desjenigen Benutzers, unter dem Alexa-Fhem laufen soll.&#039;&#039; Insbesondere ist zu beachten, dass dieser Nutzer u.U. im Startskript explizit gesetzt wird. Mit dem untenstehenden Skript ist das &#039;&#039;nicht&#039;&#039; der User fhem, sondern der User &#039;&#039;pi&#039;&#039;. Das Symbol &#039;&#039;~/&#039;&#039; verweist auf das Home-Verzeichnis des Benutzers, der gerade die Installation vornimmt.&lt;br /&gt;
# Die Datei &#039;&#039;config-sample.json&#039;&#039; nach &#039;&#039;.alexa/config.json&#039;&#039; kopieren. Achtung: Installiert man alexa-fhem als root-user, zeigt das Symbol &#039;&#039;~/&#039;&#039; auf &#039;&#039;/root&#039;&#039; - und die Konfigurationsdatei wird ggf. bei einem manuellen Start von Alexa-Fhem nicht gefunden.&lt;br /&gt;
# Achtung: Ggf. müssen auch die Dateien key.pem und cert.pem ins entsprechende Verzeichnis kopiert werden.&lt;br /&gt;
===== Windows =====&lt;br /&gt;
&#039;&#039;Vor&#039;&#039; der Installation von Alexa-Fhem muss man folgende Anwendungen installieren:&lt;br /&gt;
* Node.js (die aktuelle Version findet man unter https://nodejs.org/en/download/)&lt;br /&gt;
* OpenSSL (http://slproweb.com/products/Win32OpenSSL.html oder https://www.heise.de/download/product/win32-openssl-47316/download)&lt;br /&gt;
Erst dann fängt man mit Alexa-Fhem an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Die tgz-Datei im Hauptverzeichnis von FHEM (z.B. &amp;lt;code&amp;gt;С:\Program Files (x86)\fhem&amp;lt;/code&amp;gt;) entpacken.&lt;br /&gt;
# Das dabei entstandene Verzeichnis &#039;&#039;package&#039;&#039; in &#039;&#039;alexa-fhem&#039;&#039; umbenennen&lt;br /&gt;
# Windows-Shell (Kommandozeile, Eingabeaufforderung usw.) öffnen. &amp;quot;Start&amp;quot; -&amp;gt; &amp;quot;Ausführen&amp;quot; (oder [Windows-Taste]+[R]) -&amp;gt; cmd -&amp;gt; Ok. Durch &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;cd &amp;quot;&amp;lt;FHEM-Hauptverzeichis&amp;gt;\alexa-fhem&amp;quot;&amp;lt;/syntaxhighlight&amp;gt; in das Verzeichnis wechseln. &amp;lt;br/&amp;gt;Dabei ist natürlich das &amp;lt;FHEM-Hauptverzeichis&amp;gt; durch den entsprechenden Pfad aus dem Schritt 1 zu ersetzen. Im o.g. Beispiel wäre es &amp;lt;code&amp;gt;cd &amp;quot;С:\Program Files (x86)\fhem\alexa-fhem&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Mit &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/syntaxhighlight&amp;gt; alle Abhängigkeiten installieren.&amp;lt;br/&amp;gt; Bei der Fehlermeldung wie &amp;quot;Der Befehl &amp;quot;npm&amp;quot; ist entweder falsch geschrieben oder konnte nicht gefunden werden.&amp;quot; ist die Installation von Node.js zu überprüfen.&lt;br /&gt;
# SSL Zertifikat erzeugen. Dafür muss man alle Befehle aus dem Skript &#039;&#039;createKey.sh&#039;&#039; nacheinander manuell ausführen. Hierbei beachten, dass ein Kennwort vergeben werden muss, das mindestens aus 4 Zeichen besteht, dieses Kennwort bitte merken. Der Windows-Welt unbekannter Befehl &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; ist durch &amp;lt;code&amp;gt;move /y&amp;lt;/code&amp;gt; zu ersetzen:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;openssl rsa -in key.pem -out newkey.pem&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;move /y newkey.pem key.pem&amp;lt;/syntaxhighlight&amp;gt; Eventuelle Fehlermeldung &amp;quot;can&#039;t open config file: /usr/local/ssl/openssl.cnf&amp;quot; o.Ä. lässt sich durch Befehl &amp;lt;code&amp;gt;set OPENSSL_CONF=&amp;lt;OpenSSL-Verzeichnis&amp;gt;\bin\openssl.cfg&amp;lt;/code&amp;gt; beheben, wobei &amp;lt;OpenSSL-Verzeichnis&amp;gt; durch den entsprechenden Installationspfad (typischerweise &amp;lt;code&amp;gt;c:\OpenSSL-Win32&amp;lt;/code&amp;gt;) zu ersetzen ist.&lt;br /&gt;
# Das Verzeichnis &#039;&#039;.alexa&#039;&#039; anlegen, &#039;&#039;und zwar im Benutzerverzeichnis desjenigen Benutzers, unter dem Alexa-Fhem laufen soll.&#039;&#039; In aktuellen Versionen von Windows (ab Windows 7 bzw. ab Windows Server 2008 R2) liegt das Verzeichnis unter &amp;lt;code&amp;gt;C:\Users\&amp;lt;Benutzername&amp;gt;&amp;lt;/code&amp;gt;, also z.B. für Benutzer &amp;quot;Administrator&amp;quot; - unter &amp;lt;code&amp;gt;C:\Users\Administrator&amp;lt;/code&amp;gt;.&amp;lt;br/&amp;gt;Falls Windows sich weigert das Verzichniss mit dem Punkt am Anfang zu erstellen, kann man das aus der Kommandozeile machen:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;cd &amp;quot;C:\Users\&amp;lt;Benutzername&amp;gt;&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
mkdir &amp;quot;.alexa&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Die Datei &#039;&#039;config-sample.json&#039;&#039; nach &#039;&#039;C:\Users\&amp;lt;Benutzername&amp;gt;\.alexa\config.json&#039;&#039; kopieren.&lt;br /&gt;
# Achtung: Ggf. müssen auch die Dateien key.pem und cert.pem ins entsprechende Verzeichnis (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;FHEM-Hauptverzeichis&amp;gt;\alexa-fhem\bin&amp;lt;/code&amp;gt;) kopiert werden.&lt;br /&gt;
&lt;br /&gt;
====Update====&lt;br /&gt;
Hier wir das Update auf eine neue Version von Alexa-Fhem beschrieben&lt;br /&gt;
===== Linux =====&lt;br /&gt;
# Das Verzeichnis &#039;&#039;alexa-fhem&#039;&#039; im Hauptverzeichnis von FHEM (typischerweise &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;) umbenennen in &#039;&#039;alexa-fhem.old&#039;&#039;.&lt;br /&gt;
# Die tgz-Datei der neuen Alexa-Fhem-Version unter Linux im Hauptverzeichnis von FHEM (typischerweise &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;) entpacken (&#039;&#039;nicht&#039;&#039; unter Windows, das zerstört die Rechteeinstellungen).&lt;br /&gt;
# Das dabei entstandene Verzeichnis &#039;&#039;package&#039;&#039; in &#039;&#039;alexa-fhem&#039;&#039; umbenennen, in das Verzeichnis wechseln&lt;br /&gt;
# Mit &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/syntaxhighlight&amp;gt; alle Abhängigkeiten installieren (kein sudo!).&lt;br /&gt;
# Die Zertifikatsdateien key.pem und cert.pem aus dem alten Verzeichnis &#039;&#039;alexa-fhem.old&#039;&#039; ins neue Verzeichnis &#039;&#039;alexa-fhem&#039;&#039; kopieren.&lt;br /&gt;
Natürlich dann den Dienst neu starten, auch müssen selbstredend irgendwelche Modifikationen an der Datei server.js in der neuen Version nachgezogen werden. Wenn alles läuft, kann das alte Verzeichnis &#039;&#039;alexa-fhem.old&#039;&#039; gelöscht werden.&lt;br /&gt;
===== Windows =====&lt;br /&gt;
# Das Verzeichnis &#039;&#039;alexa-fhem&#039;&#039; im Hauptverzeichnis von FHEM (z.B. &amp;lt;code&amp;gt;С:\Program Files (x86)\fhem&amp;lt;/code&amp;gt;) umbenennen in &#039;&#039;alexa-fhem.old&#039;&#039;.&lt;br /&gt;
# Die tgz-Datei der neuen Alexa-Fhem-Version im Hauptverzeichnis von FHEM entpacken.&lt;br /&gt;
# Das dabei entstandene Verzeichnis &#039;&#039;package&#039;&#039; in &#039;&#039;alexa-fhem&#039;&#039; umbenennen&lt;br /&gt;
# Windows-Shell (Kommandozeile, Eingabeaufforderung usw.) öffnen. &amp;quot;Start&amp;quot; -&amp;gt; &amp;quot;Ausführen&amp;quot; (oder [Windows-Taste]+[R]) -&amp;gt; cmd -&amp;gt; Ok. Durch &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;cd &amp;quot;&amp;lt;FHEM-Hauptverzeichis&amp;gt;\alexa-fhem&amp;quot;&amp;lt;/syntaxhighlight&amp;gt; in das Verzeichnis wechseln. &amp;lt;br/&amp;gt;Dabei ist natürlich das &amp;lt;FHEM-Hauptverzeichis&amp;gt; durch den entsprechenden Pfad aus dem Schritt 1 zu ersetzen. Im o.g. Beispiel wäre es &amp;lt;code&amp;gt;cd &amp;quot;С:\Program Files (x86)\fhem\alexa-fhem&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Mit &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/syntaxhighlight&amp;gt; alle Abhängigkeiten installieren.&lt;br /&gt;
# Die Zertifikatsdateien key.pem und cert.pem aus dem alten Verzeichnis &#039;&#039;alexa-fhem.old&#039;&#039; ins neue Verzeichnis &#039;&#039;alexa-fhem&#039;&#039; kopieren.&lt;br /&gt;
Natürlich dann den Dienst neu starten, auch müssen selbstredend irgendwelche Modifikationen an der Datei server.js in der neuen Version nachgezogen werden. Wenn alles läuft, kann das alte Verzeichnis &#039;&#039;alexa-fhem.old&#039;&#039; gelöscht werden.&lt;br /&gt;
&lt;br /&gt;
==== Alexa-Fhem konfigurieren ====&lt;br /&gt;
Der Inhalt der Datei &#039;&#039;~/.alexa/config.json&#039;&#039; muss an die eigene Umgebung angepasst werden. &lt;br /&gt;
# &#039;&#039;nat-pmp&#039;&#039; -&amp;gt; wenn nat-pmp verwendet werden soll: die ip des eigenen routers,&lt;br /&gt;
# &#039;&#039;nat-upnp&#039;&#039; -&amp;gt; wenn nat-upnp verwendet werden soll: &#039;&#039;true&#039;&#039;,&lt;br /&gt;
# &#039;&#039;applicationId&#039;&#039; &lt;br /&gt;
#:* Wenn man nur den SmartHome-Skill verwenden möchte, kann dieser Eintrag leer bleiben.&lt;br /&gt;
#:* Ansonsten ist er mit der SkillID des Alexa Custom Skills zu belegen, siehe Abschnitt [[#Skill_Id_bestimmen | Skill Id bestimmen]]&lt;br /&gt;
# &#039;&#039;oauthClientID&#039;&#039; -&amp;gt; &#039;&#039;Client ID&#039;&#039; dem Abschnitt [[#Login_with_Amazon | Login with Amazon]], Punkt 1&lt;br /&gt;
# &#039;&#039;server&#039;&#039; -&amp;gt; IP-Adresse des eigenen FHEM-Servers&lt;br /&gt;
# &#039;&#039;port&#039;&#039; -&amp;gt; Portnummer des eigenen FHEM-Servers&lt;br /&gt;
Beispiel:&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;alexa&amp;quot;: {&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;Alexa TEST&amp;quot;,&lt;br /&gt;
        &amp;quot;keyFile&amp;quot;: &amp;quot;./key.pem&amp;quot;,&lt;br /&gt;
        &amp;quot;certFile&amp;quot;: &amp;quot;./cert.pem&amp;quot;,&lt;br /&gt;
        &amp;quot;applicationId&amp;quot;: &amp;quot;amzn1.ask.skill.xxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;quot;,&lt;br /&gt;
        &amp;quot;oauthClientID&amp;quot;: &amp;quot;amzn1.application-oa2-client.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;connections&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;name&amp;quot;: &amp;quot;FHEM&amp;quot;,&lt;br /&gt;
            &amp;quot;server&amp;quot;: &amp;quot;192.168.0.xxx.xxx&amp;quot;,&lt;br /&gt;
            &amp;quot;port&amp;quot;: &amp;quot;8083&amp;quot;,&lt;br /&gt;
            &amp;quot;filter&amp;quot;: &amp;quot;room=AlexaRoom&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Mehrere Custom Skills lassen sich mit der folgenden Syntax eintragen&lt;br /&gt;
         &amp;quot;applicationId&amp;quot;: [ &amp;quot;amzn1.ask.skill.1&amp;quot; , &amp;quot;amzn1.ask.skill.2&amp;quot; ],&lt;br /&gt;
         &amp;quot;oauthClientID&amp;quot;: [ &amp;quot;amzn1.application-oa2-client.1&amp;quot; , &amp;quot;amzn1.application-oa2-client.1&amp;quot; ]&lt;br /&gt;
&lt;br /&gt;
Danach durch Aufruf von &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;./bin/alexa&amp;lt;/syntaxhighlight&amp;gt; den Dienst starten (kein sudo!)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unter Windows startet man Alexa-Dienst durch &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;node alexa&amp;lt;/syntaxhighlight&amp;gt; aus der &amp;lt;code&amp;gt;alex-fhem/bin&amp;lt;/code&amp;gt; (also erst z.B. durch &amp;lt;code&amp;gt;cd &amp;quot;&amp;lt;FHEM-Hauptverzeichis&amp;gt;\alexa-fhem\bin&amp;quot;&amp;lt;/code&amp;gt; ins richtige Verzeichnis kommen)&lt;br /&gt;
&lt;br /&gt;
Der Start des Alexa-Dienstes auf der Console ist immer dann zu empfehlen, wenn man auf die Ausgaben des Dienstes angewiesen ist und beispielsweise sehen möchte, welche Devices durch den Dienst bereitgestellt werden oder ob Fehler auftreten. Beendet man die Console-Session wird auch der Dienst wieder beendet. Insofern ist die vorgenannte Vorgehensweise nur für ein Debugging zu empfehlen und nicht im Regelbetrieb. Nachfolgend ist beschrieben, wie man den Alexa-Dienst aus FHEM heraus starten / stoppen und neu starten kann.&lt;br /&gt;
&lt;br /&gt;
==== Alexa-Fhem aus FHEM heraus starten ====&lt;br /&gt;
Zunächst das Start-up-Skript aus diesem Post herunterladen {{Link2Forum|Topic=60244|Message=517271|LinkText=https://forum.fhem.de/index.php/topic,60244.msg517271.html#msg517271}} und unter /etc/init.d/alexa speichern.&lt;br /&gt;
&lt;br /&gt;
Das Script geht davon aus, das der alexa-fhem script unter /opt/fhem/alexa-fhem liegt, und die logfiles später unter /opt/fhem/log. Sollte das nicht der Fall sein, muss das Skript angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Nun folgende Kommandos ausführen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;sudo chmod 755 /etc/init.d/alexa&lt;br /&gt;
sudo update-rc.d alexa defaults&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Datei &amp;lt;code&amp;gt;/etc/sudoers&amp;lt;/code&amp;gt; den User fhem für die Nutzung von sudo zulassen (&amp;lt;code&amp;gt;sudo nano /etc/sudoers&amp;lt;/code&amp;gt;), z.B. durch Anfügen der nachfolgenden Zeile:&lt;br /&gt;
&amp;lt;code&amp;gt;fhem ALL=(ALL) NOPASSWD: ALL&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun folgende Devices anlegen (ggf. einem Raum zuordnen, z.B. AlexaControl):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:75%;&amp;quot;&amp;gt;define FHEM.Alexa.Status dummy&lt;br /&gt;
&lt;br /&gt;
define FHEM.Alexa dummy&lt;br /&gt;
attr FHEM.Alexa event-on-change-reading state&lt;br /&gt;
attr FHEM.Alexa webCmd status:start:stop:restart&lt;br /&gt;
&lt;br /&gt;
define FHEM.Alexa.DOIF DOIF ([FHEM.Alexa] eq &amp;quot;start&amp;quot;) &lt;br /&gt;
(set FHEM.Alexa on, {system (&amp;quot;sudo /etc/init.d/alexa start &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&amp;quot;)}) &lt;br /&gt;
DOELSEIF ([FHEM.Alexa] eq &amp;quot;stop&amp;quot;)&lt;br /&gt;
(set FHEM.Alexa on, {system (&amp;quot;sudo /etc/init.d/alexa stop &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&amp;quot;)}) &lt;br /&gt;
DOELSEIF ([FHEM.Alexa] eq &amp;quot;restart&amp;quot;) &lt;br /&gt;
(set FHEM.Alexa on, {system (&amp;quot;sudo /etc/init.d/alexa restart &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&amp;quot;)}) &lt;br /&gt;
DOELSEIF ([FHEM.Alexa] eq &amp;quot;status&amp;quot;) &lt;br /&gt;
(set FHEM.Alexa on, {system (&amp;quot;sudo /etc/init.d/alexa status &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&amp;quot;)})&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Alexa-Fhem als Service (systemd) installieren ====&lt;br /&gt;
Auf neueren Installationen (z.B. RPi Jessie) wird init.d durch systemd ersetzt. Folgend die Anleitung um alexa-fhem als Service zu installieren auf einem Raspberry Pi mit Jessie.&lt;br /&gt;
&lt;br /&gt;
Zunächst einen neuen Benutzer anlegen unter dem alexa-fhem laufen soll, falls man nicht möchtet dass alexa-fhem z.B. mit dem fhem User ausgeführt wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:75%;&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -M --system alexa&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentlich braucht der Benutzer keine Gruppen, aber man kann den Benutzer auch der Gruppe &amp;lt;code&amp;gt;dialout&amp;lt;/code&amp;gt; hinzufügen (&amp;lt;code&amp;gt;sudo usermod -a -G dialout alexa&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Datei &amp;quot;alexa.service&amp;quot; unter &amp;lt;code&amp;gt;/etc/systemd/system&amp;lt;/code&amp;gt; anlegen:&lt;br /&gt;
&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Node.js Alexa Server &lt;br /&gt;
 After=syslog.target network-online.target&lt;br /&gt;
 &lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=simple&lt;br /&gt;
 User=alexa &lt;br /&gt;
 WorkingDirectory=/opt/alexa/alexa-fhem&lt;br /&gt;
 ExecStart=/opt/fhem/alexa-fhem/bin/alexa -U /home/alexa/.alexa&lt;br /&gt;
 Restart=on-failure&lt;br /&gt;
 RestartSec=10&lt;br /&gt;
 KillMode=process&lt;br /&gt;
 &lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target &lt;br /&gt;
&lt;br /&gt;
Den Pfad &amp;lt;code&amp;gt;/home/alexa/.alexa&amp;lt;/code&amp;gt; an die Systemgegebenheiten anpassen. Letztendlich kann die config.json irgendwo liegen, hauptsache alexa-fhem weiß wo. &lt;br /&gt;
&lt;br /&gt;
Im WorkingDirectory wird der alexa Dienst die Zertifikate suchen.&lt;br /&gt;
&lt;br /&gt;
Achtung: Natürlich muss der Benutzer auch Zugriff sowohl auf das Verzeichnis mit der config als auch das alexa-fhem Verzeichnis und das WorkingDirectory haben.&lt;br /&gt;
&lt;br /&gt;
Um den Service zu aktiveren und zu starten helfen folgende Befehle:&lt;br /&gt;
 sudo systemctl daemon-reload&lt;br /&gt;
 sudo systemctl enable alexa&lt;br /&gt;
 sudo systemctl start alexa&lt;br /&gt;
&lt;br /&gt;
Status abfragen mit&lt;br /&gt;
 sudo systemctl status alexa&lt;br /&gt;
&lt;br /&gt;
Log einsehen?&lt;br /&gt;
 sudo journalctl -u alexa&lt;br /&gt;
&lt;br /&gt;
(mit &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt; kann man den follow Modus aktivieren, wie &amp;lt;code&amp;gt;tail -f&amp;lt;/code&amp;gt;).&lt;br /&gt;
Bei einen reboot startet alexa-fhem jetzt automatisch.&lt;br /&gt;
&lt;br /&gt;
==== Alexa-Fhem testen ====&lt;br /&gt;
Node.Js stellt einen Web-Server am Port 3000 bereit, das oben erzeugte Zertifikat sichert diesen Zugang per SSL ab. Durch Aufruf der Adresse&lt;br /&gt;
&amp;lt;code&amp;gt;https://&amp;lt;IP-Adresse des Servers&amp;gt;:3000&amp;lt;/code&amp;gt; kann man testen, ob der Alexa-Fhem Service läuft - der Seitenaufruf liefert eine Zeile JSON-Code, beginnend mit&lt;br /&gt;
&amp;lt;code&amp;gt;{&amp;quot;header&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;UnsupportedOperationError&amp;quot;...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alexa Device anlegen ===&lt;br /&gt;
Das Modul 39_alexa.pm stellt innerhalb von FHEM verschiedene Attribute z.B. alexaName oder alexaRoom zur Verfügung. Manche dieser Attribute (wie z.b. alexaName) werden in beiden Skills verwendet, andere werden ausschließlich bei einer Nutzung des Alexa Custom Skill verwendet.&lt;br /&gt;
&lt;br /&gt;
Die Einrichtung des Alexa Device geschieht durch die nachfolgende Definition:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;define MyAlexa alexa&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alexa Skills ===&lt;br /&gt;
Für folgende Schritte muss man unter der Adresse http://developer.amazon.com angemeldet sein&lt;br /&gt;
# Anmeldung auswählen&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-01-login2.png|200px]]&lt;br /&gt;
# Anmeldedaten eingeben&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-02-userpass2.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==== Security Profile anlegen ====&lt;br /&gt;
Die Erzeugung eines Sicherheitsprofils muss nur einmal erfolgen, es wird dann für alle weiteren Skills verwendet.&lt;br /&gt;
# Nach der Anmeldung Auswahl von &#039;&#039;APPS &amp;amp; SERVICES&#039;&#039;&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-03-apps_and_services.png|200px]]&lt;br /&gt;
# Anschließend auswählen &#039;&#039;Security Profiles&#039;&#039;&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-05-apps_and_services_-_security_profiles.png|200px]]&lt;br /&gt;
# Auswählen &#039;&#039;Create a New Security Profile&#039;&#039; aus&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-06-apps_and_services_-_create_a_new_security_profile.png|200px]]&lt;br /&gt;
# Dann einen Namen und eine Beschreibung für das Profil eingeben und mit &#039;&#039;Save&#039;&#039; bestätigen&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-07-apps_and_services_-_security_profile_management.png|200px]]&lt;br /&gt;
&lt;br /&gt;
===== Login with Amazon =====&lt;br /&gt;
{{Randnotiz|RNTyp=[g|Info]|RNText=Hier wird beschrieben, wo &#039;&#039;Client Id&#039;&#039; und &#039;&#039;Client Secret&#039;&#039; zu finden sind}}&lt;br /&gt;
# Oben rechts auf &#039;&#039;Login with Amazon&#039;&#039; klicken (https://developer.amazon.com/lwa/sp/overview.html).&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-08-login_with_amazon.png|200px]]&lt;br /&gt;
# Auf der neu geladenen Seite auswählen &#039;&#039;Sign up&#039;&#039;&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-09-login_with_amazon_-_sign_up.png|200px]]&lt;br /&gt;
# Anschließend im Dropdown Menü das vorher angelegte Profil auswählen und mit &#039;&#039;Confirm&#039;&#039; bestätigen&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-10-login_with_amazon_-_create_new_profile.png|200px]] [[Datei:Developer.amazon.com-11-login_with_amazon_-_create_new_profile2.png|200px]]&lt;br /&gt;
# Im folgenden Fenster die Adresse [https://www.amazon.com/gp/help/customer/display.html?nodeId=468496 https://www.amazon.com/gp/help/customer/display.html?nodeId=468496] eingeben und mit &#039;&#039;Save&#039;&#039; bestätigen. &#039;&#039;&#039;Todo Erklärungsbedarf: WARUM diese Adresse&#039;&#039;&#039;&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-12-login_with_amazon_-_enter_consent_screen_information.png|200px]]&lt;br /&gt;
# Anschließend bei dem neu angelegten Eintrag auf der rechten Seite auf das Zahnrad klicken und &#039;&#039;Web Settings&#039;&#039; auswählen&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-13-login_with_amazon_-_web_settings.png|200px]]&lt;br /&gt;
# Im neu geladenen Fenster anklicken von &#039;&#039;Edit&#039;&#039;&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-14-login_with_amazon_-_edit.png|200px]]&lt;br /&gt;
# Anschließend bei &#039;&#039;Allowed Return URLs&#039;&#039; die folgenden drei Adressen eingeben. &#039;&#039;xxx&#039;&#039; muss hierbei durch den Wert ersetzt werden, der in den beiden Abschnitten [[#SmartHome_Skill_anlegen | SmartHome Skill anlegen]] bzw. [[#Custom_Skill_anlegen | Custom Skill anlegen]] jeweils unter Punkt 4 (Seite &#039;&#039;Configuration&#039;&#039;) bei &#039;&#039;Redirect Urls&#039;&#039; am Ende der URLs angezeigt wird&lt;br /&gt;
## [https://layla.amazon.co.uk/api/skill/link/xxx https://layla.amazon.co.uk/api/skill/link/xxx]&lt;br /&gt;
## [https://pitangui.amazon.com/api/skill/link/xxx https://pitangui.amazon.com/api/skill/link/xxx]&lt;br /&gt;
## [https://layla.amazon.com/api/skill/link/xxx https://layla.amazon.com/api/skill/link/xxx]&lt;br /&gt;
.&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-15-login_with_amazon_-_allowed_return_urls.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==== Skills bearbeiten ====&lt;br /&gt;
# Im Menü den Punkt &#039;&#039;ALEXA&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-03-apps_and_services.png|200px]]&lt;br /&gt;
# Anschließend im Feld &#039;&#039;Alexa Skills Kit&#039;&#039; auf &#039;&#039;Get started&#039;&#039; klicken&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-17-alexa_-_alex_skills_kit_-_get_started.png|200px]]&lt;br /&gt;
&lt;br /&gt;
===== SmartHome Skill anlegen =====&lt;br /&gt;
# Oben rechts &#039;&#039;Add a New Skill&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-18-alexa_-_alex_skills_kit_-_add_a_new_skill.png|200px]]&lt;br /&gt;
# Auf der folgenden Seite eingeben und dann mit &#039;&#039;Next&#039;&#039; bestätigen:&lt;br /&gt;
#:* &#039;&#039;Skill Type&#039;&#039; -&amp;gt; &#039;&#039;SmartHome Skill API&#039;&#039; &lt;br /&gt;
#:* &#039;&#039;Language&#039;&#039; -&amp;gt; &#039;&#039;German&#039;&#039;&lt;br /&gt;
#:* &#039;&#039;Name&#039;&#039; -&amp;gt; beliebiger Name, z.B. &amp;quot;MySmartHome Basic&amp;quot;)&lt;br /&gt;
#:* &#039;&#039;Payload Version&#039;&#039; -&amp;gt; &#039;&#039;v2 (other devices)&#039;&#039; &amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-19-alexa_-_alex_skills_kit_-_skill_information.png|200px]]&lt;br /&gt;
# Die folgende Seite einfach mit &#039;&#039;Next&#039;&#039; überspringen&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-20-alexa_-_alex_skills_kit_-_interaction_model.png|200px]]&lt;br /&gt;
# Auf der Seite &#039;&#039;Configuration&#039;&#039; Folgendes eingeben:&lt;br /&gt;
#:* &#039;&#039;Service Endpoint Type&#039;&#039; -&amp;gt; &#039;&#039;AWS Lambda&#039;&#039; ist vorausgewählt und kann nicht geändert werden.&lt;br /&gt;
#:* &#039;&#039;Geographical Region&#039;&#039; -&amp;gt; &#039;&#039;Europe&#039;&#039; auswählen und im Textfeld die ARN aus Abschnitt [[#ARN_der_AWS_Lambda_Funktion_bestimmen | AWS Lambda Funktion]] eintragen. &lt;br /&gt;
#:* &#039;&#039;Authorization URL&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;https://www.amazon.com/ap/oa&amp;lt;/code&amp;gt;&lt;br /&gt;
#:* &#039;&#039;Client ID&#039;&#039; -&amp;gt; &#039;&#039;Client ID&#039;&#039; aus Abschnitt [[#Login_with_Amazon | Login with Amazon]], Punkt 1&lt;br /&gt;
#:* &#039;&#039;Scope&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;profile:user_id&amp;lt;/code&amp;gt;    (wörtlich 1:1 eintragen)&lt;br /&gt;
#:* &#039;&#039;Redirect URLs&#039;&#039; - sollten vorbelegt sein&lt;br /&gt;
#:* &#039;&#039;Authorization Grant Type&#039;&#039; -&amp;gt; &#039;&#039;Auth Code Grant&#039;&#039; auswählen&lt;br /&gt;
#:* &#039;&#039;Access Token URI&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;https://api.amazon.com/auth/o2/token&amp;lt;/code&amp;gt;&lt;br /&gt;
#:* &#039;&#039;Client Secret&#039;&#039; -&amp;gt; &#039;&#039;Client Secret&#039;&#039; aus Abschnitt [[#Login_with_Amazon | Login with Amazon]], Punkt 1&lt;br /&gt;
#:* &#039;&#039;Client Authentication Scheme&#039;&#039; -&amp;gt; &#039;&#039;HTTP Basic&#039;&#039;&lt;br /&gt;
#:* &#039;&#039;Privacy Policy URL&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;https://www.amazon.com/gp/help/customer/display.html?nodeId=468496&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-21-alexa_-_alex_skills_kit_-_configuration.png|200px]] [[Datei:Developer.amazon.com-22-alexa_-_alex_skills_kit_-_test.png|200px]]&lt;br /&gt;
&lt;br /&gt;
===== Custom Skill anlegen =====&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Oben rechts &#039;&#039;Add a New Skill&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-18-alexa_-_alex_skills_kit_-_add_a_new_skill.png|200px]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Auf der folgenden Seite (&#039;&#039;Skill Information&#039;&#039;) die nachstehenden Daten eingeben und dann mit &#039;&#039;Next&#039;&#039; bestätigen:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Skill Type&#039;&#039; -&amp;gt; &#039;&#039;Custom Interaction Model&#039;&#039; &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Language&#039;&#039; -&amp;gt; &#039;&#039;German&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Name&#039;&#039; -&amp;gt; beliebiger Name, z.B. &amp;quot;MySmartHome Advanced&amp;quot;. Dieser wird in der Alexa App unter &amp;quot;Meine Skills&amp;quot; angezeigt.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Invocation Name&#039;&#039; -&amp;gt; Aufruf des Skills, unter dem dieser später gestartet wird. Z.B. &amp;quot;Alexa, starte James&amp;quot;&amp;lt;br /&amp;gt;[[Datei:CustomSkill_2.PNG|400px]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Auf der Seite &#039;&#039;Interaction Model&#039;&#039; folgende Eingaben tätigen und mit &#039;&#039;Next&#039;&#039; abschließen&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In einem separaten Browserfenster FHEM aufrufen, und für das bereits definierte Alexa-Gerät das Kommando &amp;lt;code&amp;gt;get MyAlexa interactionModel&amp;lt;/code&amp;gt; aufrufen. Es erscheint ein Popup-Fenster mit ziemlich vielen Zeilen.&lt;br /&gt;
&amp;lt;li&amp;gt;In die Box &#039;&#039;Intent Schema&#039;&#039; kopiert man den ersten Teil dieser FHEM-Ausgabe hinein, also:&amp;lt;br/&amp;gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
 { &lt;br /&gt;
   &amp;quot;intents&amp;quot; : [ &lt;br /&gt;
    &amp;lt;hier ziemlich viele Zeilen&amp;gt;  &lt;br /&gt;
   ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Nun die &#039;&#039;Custom Slot Types&#039;&#039; einrichten. Dazu muss aus dem zweiten Teil der FHEM-Ausgabe jeweils der Slot-Type (z.B. &amp;lt;code&amp;gt;FHEM_article&amp;lt;/code&amp;gt;) in das Feld &#039;&#039;TYPE&#039;&#039; eingetragen werden, das nach dem Anklicken von &#039;&#039;Add Slot Type&#039;&#039; erscheint. In das darunter liegende größere Textfeld kommen die möglichen Werte für diesen Slot, so wie sie aus der FHEM-Ausgabe abzulesen sind. Dann mit &#039;&#039;Save&#039;&#039; sichern. Als Custom Slot Type erscheint dann für diesen Beispiel-Slot&lt;br /&gt;
 FHEM_article 	der | die | das | den&lt;br /&gt;
d.h., die Zeilenumbrüche bei den möglichen Werten werden als &amp;quot;|&amp;quot; dargestellt.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Hier muss nun ein Bruch im Arbeitsfluss durchgeführt werden, denn bei der Erstellung des Custom Skills kommt es auf die Reihenfolge der Einträge an. Deshalb zunächst diese FHEM-Ausgabe schließen, und für dasselbe FHEM-Device &amp;lt;code&amp;gt;get MyAlexa customSlotTypes&amp;lt;/code&amp;gt; ausführen. Auch diese Ausgabe wird, wie oben beschriebeen, in Custom Slot Types eingetragen (erst der TYPE, dann die möglichen Werte)&lt;br /&gt;
&amp;lt;li&amp;gt;Anschließend erneut die FHEM-Ausgabe schließen und erneut  für das bereits definierte Alexa-Gerät das Kommando &amp;lt;code&amp;gt;get MyAlexa interactionModel&amp;lt;/code&amp;gt; aufrufen.&lt;br /&gt;
&amp;lt;li&amp;gt;Unter &#039;&#039;Sample Utterances&#039;&#039; nun den Text aus dem dritten Teil dieser FHEM-Ausgabe hineinkopieren&amp;lt;br /&amp;gt;[[Datei:CustomSkill_5.PNG|400px]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Auf der Seite &#039;&#039;Configuration&#039;&#039; Folgendes eingeben und mit &#039;&#039;Next&#039;&#039; bestätigen:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Service Endpoint Type&#039;&#039; -&amp;gt; &#039;&#039;AWS Lambda&#039;&#039; auswählen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Geographical Region&#039;&#039; -&amp;gt; &#039;&#039;Europe&#039;&#039; auswählen und im Textfeld den Wert aus Abschnitt [[#AWS_Lambda_Funktion_anlegen | AWS Lambda Funktion anlegen]] (Punkt 12) eintragen. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Do you allow users to create an account or link to an existing account with you?&#039;&#039; -&amp;gt; &#039;&#039;Yes&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Authorization URL&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;https://www.amazon.com/ap/oa&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Client ID&#039;&#039; -&amp;gt; &#039;&#039;Client ID&#039;&#039; aus Abschnitt [[#Login_with_Amazon | Login with Amazon]], Punkt 1&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Scope&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;profile:user_id&amp;lt;/code&amp;gt; (wörtlich 1:1 eintragen)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Redirect URLs&#039;&#039; - sollten vorbelegt sein&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Authorization Grant Type&#039;&#039; -&amp;gt; &#039;&#039;Auth Code Grant&#039;&#039; auswählen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Access Token URI&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;https://api.amazon.com/auth/o2/token&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Client Secret&#039;&#039; -&amp;gt; &#039;&#039;Client Secret&#039;&#039; aus Abschnitt [[#Login_with_Amazon | Login with Amazon]], Punkt 1&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Client Authentication Scheme&#039;&#039; -&amp;gt; &#039;&#039;HTTP Basic&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Privacy Policy URL&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;https://www.amazon.com/gp/help/customer/display.html?nodeId=468496&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Beim Sichern dieser Seite mit &#039;&#039;Next&#039;&#039; kann es zu einer Fehlermeldung kommen, wenn man seine Skill-Definitionen mit dem einfachen SmartHome-Skill begonnen hat. Deshalb muss noch der entsprechende Trigger für die [[#AWS_Lambda-Funktion | AWS Lambda Funktion]] nachgetragen werden, dies wird in Abschnitt [[#Trigger_f.C3.BCr_Custom_Skill_hinzuf.C3.BCgen | Trigger für Custom Skill hinzufügen]] beschrieben.&lt;br /&gt;
&amp;lt;br /&amp;gt;[[Datei:CustomSkill_6.PNG|400px]] [[Datei:CustomSkill_7.PNG|400px]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Testen ====&lt;br /&gt;
Hat man den Custom Skill angelegt, bietet dieser auch eine komfortable Testmöglichkeit. Dazu wählt man in der Übersichtsseite &#039;&#039;All Skills&#039;&#039; den Button &#039;&#039;Edit&#039;&#039; des Alexa Custom Skill aus. Auf der nachfolgenden Seite dann links &#039;&#039;Test&#039;&#039;. &lt;br /&gt;
Die Testseite enthält &lt;br /&gt;
* ein Feld &#039;&#039;Voice Simulator&#039;&#039;, mit dem man die Sprachsausgabe testen kann, &lt;br /&gt;
* ein Feld &#039;&#039;Service Simulator&#039;&#039;, mit dem die Verarbeitung von Alexa-Kommandois getestet werden kann. Hier kann man z.B. eintragen&lt;br /&gt;
 &amp;quot;Alexa, sage &amp;lt;Custom Skill Invocation Name&amp;gt;: Stelle Weckzeit auf Neunzehn Siebenundzwanzig Uhr&amp;quot;&lt;br /&gt;
 &amp;quot;Alexa, frage &amp;lt;Custom Skill Invocation Name&amp;gt; nach dem Status von Weckzeit&amp;quot;&lt;br /&gt;
Dabei ist natürlich der &#039;&#039;Custom Skill Invocation Name&#039;&#039; durch den Wert zu ersetzen, den man im Abschnitt [[#Custom_Skill_anlegen | Custom Skill Anlegen]] unter Punkt 2 eingetragen hat.&lt;br /&gt;
&lt;br /&gt;
==== Skill Id bestimmen ====&lt;br /&gt;
{{Randnotiz|RNTyp=[g|Info]|RNText=Hier wird beschrieben, wo die &#039;&#039;Alexa Skill Id&#039;&#039; zu finden ist}}&lt;br /&gt;
Für das [[#AWS_Lamba_Funktion_anlegen | Anlegen einer &#039;&#039;AWS Lambda Funktion&#039;&#039;]] bzw für die [[#Alexa-Fhem_konfigurieren | Konfiguration von Alexa-Fhem]] wird die &#039;&#039;Alexa Skill Id&#039;&#039; benötigt. An diese kommt man wie folgt:&lt;br /&gt;
# Anmelden wie unter [[#Alexa_Skills | Alexa Skills]] beschrieben.&lt;br /&gt;
# Menüpunkt &#039;&#039;ALEXA&#039;&#039; auswählen, wie [[#Skills_bearbeiten | Skills bearbeiten]] erklärt.&lt;br /&gt;
# Beim gewünschten Eintrag auf &#039;&#039;Edit&#039;&#039; klicken&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-23-alexa_-_alex_skills_kit_-_overview.png|200px]]&lt;br /&gt;
# Die Id, die nun oben angezeigt wird, ist die gesuchte. Sie hat typischerweise das Format &amp;lt;code&amp;gt;amzn1.ask.skill.[Zahlen und Bindestriche]&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-06-configure_triggers2.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== AWS Lambda Funktion ===&lt;br /&gt;
Für folgende Schritte muss man unter der Adresse http://aws.amazon.com angemeldet sein&lt;br /&gt;
# Anmeldung auswählen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-01-site.png|200px]]&lt;br /&gt;
# Anmeldedaten eingeben&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-02-login.png|200px]]&lt;br /&gt;
# Den Punkt &#039;&#039;Lambda&#039;&#039; links auf der Startseite auswählen, bzw. im Menü &#039;&#039;Services&#039;&#039; unter &#039;&#039;Compute&#039;&#039; den Menüpunkt &#039;&#039;Lambda&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-03-lambda.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==== AWS Lambda Funktion anlegen ====&lt;br /&gt;
# Für eine erste Lambda-Funktion den Punkt &#039;&#039;Get Started Now&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-04-get_started_now.png|200px]]&lt;br /&gt;
# Den Blueprint &#039;&#039;Blank function&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-05-select_blueprint.png|200px]]&lt;br /&gt;
# Im neuen Fenster dann auf den gestrichelten Kasten klicken und &#039;&#039;Alexa Smart Home&#039;&#039; auswählen und mit &#039;&#039;Next&#039;&#039; bestätigen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-06-configure_triggers1.png|200px]]&lt;br /&gt;
## Achtung, es ist möglich, dass dabei &#039;&#039;Alexa Smart Home&#039;&#039; überhaupt nicht angeboten wird. Dann bitte ganz rechts oben in der Ecke nachsehen, welche Region bzw. welches Land ausgewählt ist. Empfohlen wird, &#039;&#039;Ireland&#039;&#039; auszuwählen. Dann erscheint bei den Funktionen auch &#039;&#039;Alexa Smart Home&#039;&#039;.&lt;br /&gt;
# Bei &#039;&#039;Application Id&#039;&#039; den Wert eintragen, dessen Ermittlung im Abschnitt [[#Skill_Id_bestimmen | Skill Id bestimmen]] beschrieben wird, den Haken bei &#039;&#039;Enable trigger&#039;&#039; setzen und mit &#039;&#039;Next&#039;&#039; bestätigen &amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-06-configure_triggers3.png|200px]]&lt;br /&gt;
# Auf der Konfigurationsseite eingeben:&lt;br /&gt;
## &#039;&#039;Name&#039;&#039; -&amp;gt; &#039;&#039;FHEM&#039;&#039;&lt;br /&gt;
## &#039;&#039;Runtime&#039;&#039; -&amp;gt; Node.js 4.3. &lt;br /&gt;
## &#039;&#039;Role&#039;&#039; -&amp;gt; &#039;&#039;Choose an existing role&#039;&#039; &lt;br /&gt;
### Achtung: wenn es noch keine existing role gibt, zuerst &#039;&#039;Create a custom role&#039;&#039; -&amp;gt; in dem Popup dann &#039;&#039;lambda_basic_execution&#039;&#039; auswählen und auf &#039;&#039;Allow&#039;&#039; klicken sowie bei &#039;&#039;Existing role&#039;&#039; dann &#039;&#039;x&#039;&#039; wählen.&lt;br /&gt;
# Auf der Code-Seite ist im großen Textfeld dann der Code aus der Datei &#039;&#039;lambda.js&#039;&#039; im Paket [[#Alexa-Fhem_installieren | Alexa-Fhem]] vollständig einzufügen. Dabei muss der vorhandene Code im Texteil komplett gelöscht, der Teil aus der &#039;&#039;lamda.js&#039;&#039; eingefügt und noch der Hostname im Quellcode an den eigenen Hostnamen angepasst werden. &lt;br /&gt;
# Anschließend alles mit &#039;&#039;Next&#039;&#039; bestätigen.&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-07-configure_function.png|200px]]&lt;br /&gt;
# Auf der Übersichtsseite dann &#039;&#039;Create function&#039;&#039; anklicken&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-08-review.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==== Trigger für Custom Skill hinzufügen ====&lt;br /&gt;
Editiert man eine Lambda-Funktion, werden auf der Seite &#039;&#039;Triggers&#039;&#039; diejenigen Dienste angezeigt, die diese Funktion aufrufen.&lt;br /&gt;
* Hier taucht der Trigger &#039;&#039;Alexa Smart Home&#039;&#039; zusammen mit der &#039;&#039;Application Id&#039;&#039; auf, der bei der Einrichtung des SmartHome-Skills eingetragen wurde.&lt;br /&gt;
* Zur Verbindung mit dem Custom Skill ist es nötig, einen zweiten Trigger hinzuzufügen. Durch Anklicken von &#039;&#039;Add Trigger&#039;&#039; wird eine Auswahlseite eingeblendet. Im neuen Fenster dann auf den gestrichelten Kasten klicken und &#039;&#039;Alexa Skills Kit&#039; auswählen und mit &#039;&#039;Next&#039;&#039; bestätigen&lt;br /&gt;
&lt;br /&gt;
==== ARN der AWS Lambda Funktion bestimmen ====&lt;br /&gt;
# Auf der Übersichtsseite oben links den Menüpunkt &#039;&#039;Functions&#039;&#039; aúswählen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-09-go_overview.png|200px]]&lt;br /&gt;
# Anschließend den Radiobutton der angelegten Funktion &#039;&#039;FHEM&#039;&#039; markieren und im Menü &#039;&#039;Action&#039;&#039; den Punkt &#039;&#039;Show ARN&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-10-1-show_arn.png|200px]]&lt;br /&gt;
# Es wird nun eine ARN Adresse angezeigt, die für den Abschnitt [[#SmartHome_Skill_anlegen| SmartHome Skill anlegen]] benötigt wird&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-10-2-arn.png|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Absichern des Zugriffs ===&lt;br /&gt;
Natürlich muss der Zugriff auf den von Alexa-Fhem verwendeten Port (default: 3000, Bestandteil des Codes in der AWS Lambda-Funktion) durch die Firewall freigeschaltet werden (auf einer FritzBox unter &amp;quot;Portfreigaben&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
==== Absicherung direkt in Alexa-FHEM ====&lt;br /&gt;
Die Kommunikation zwischen Amazon AWS und Alexa-FHEM ist auf die folgenden Arten gesichert:&lt;br /&gt;
* Die Verbindung erfolgt per HTTPS&lt;br /&gt;
* Es werden nur Verbindung angenommen auf denen ein gültiges Alexa-Event gesendet wird. &lt;br /&gt;
* Es werden nur Verbindungen angenommen die ein gültiges und noch nicht abgelaufenes OAuth-Token enthalten. Jedes neue Token wird live bei Amazon auf Gültigkeit geprüft.    &lt;br /&gt;
* Es werden nur Verbindungen mit lokal konfigurierter Skill-ID angenommen.&lt;br /&gt;
* Es ist nicht möglich von außen beliebige FHEM Kommandos zu senden. Die FHEM Kommandos werden nur lokal erzeugt.&lt;br /&gt;
&lt;br /&gt;
Wer möchte kann Alexa-FHEM natürlich noch weiter absichern. Es gilt aber, dass nicht jedes zusätzliche Glied in der Kette die Sicherheit sondern unter Umständen nur die Angriffsfläche erhöht. Ein falsch konfigurierter und nach aussen offener Apache (oder anderer ReverseProxy) ist unter Umständen ein größeres Risiko als Alexa-FHEM alleine.&lt;br /&gt;
&lt;br /&gt;
==== Absicherung per ReverseProxy ====&lt;br /&gt;
&amp;lt;s&amp;gt;Die Kommunikation zwischen Amazon und FHEM ist wegen der Verwendung von SSL schon verschlüsselt - prinzipiell kann aber jeder von außen mit Alexa-Fhem kommunizieren. Man sollte sich deshalb im Klaren darüber sein, dass dies eine Sicherheitslücke darstellt:&amp;lt;/s&amp;gt; Jeder offene Port verleitet zu Angriffen, und mit zunehmender Verbreitung von Alexa steigt auch das Risiko. Es wird deshalb empfohlen, vor den eigentlichen Alexa-Server zur Absicherung einen Apache-Webserver als ReverseProxy zu setzen. Nicht nur ist der Apache eine hervorragend stabile und seit Jahrzehnten getestete Software, sondern die Konfiguration als ReverseProxy erlaubt auch, den Zugriff auf den Alexa-Fhem-Rechner auf die Amazon-Maschinen zu beschränken.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung: Dies ist keine allgemeine Anleitung in Sachen Computersicherheit.&#039;&#039;&#039; Im Folgenden gehen wir davon aus, dass &lt;br /&gt;
* Grundbegriffe wie Firewall, IP-Ports, SSL und Dynamic DNS vertraut sind&lt;br /&gt;
* Ein Apache Webserver (idealerweise auf einer zweiten Maschine) bereits installiert ist und die Konfiguration verstanden wurde (wenn nicht: Es gibt im Netz &#039;&#039;tausende&#039;&#039; von Anleitungen dafür...)&lt;br /&gt;
* Ein Servername von einem DynDNS-Anbieter - sagen wir &#039;&#039;myhome.is-my-castle.com&#039;&#039; - bereits von &#039;&#039;außen&#039;&#039; auf unser SmartHome zeigt.&lt;br /&gt;
* Alexa-Fhem in einer der oben beschriebenen Basiskonfigurationen läuft, d.h. der Zugriff auf &amp;lt;code&amp;gt;https://myhome.is-my-castle.com:3000&amp;lt;/code&amp;gt; ergibt, wie im Punkt [[#Alexa-Fhem_testen|Alexa-Fhem testen]] beschrieben, eine Antwort des Node.js Servers.&lt;br /&gt;
&lt;br /&gt;
Als erster Schritt zur Absicherung muss das ReverseProxy Modul für den Apache installiert und mit &amp;lt;code&amp;gt;a2enmod&amp;lt;/code&amp;gt; aktiviert werden, hierzu sei auf [https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-proxy-using-mod_proxy-extension diese Anleitung] verwiesen. Der zweite Schritt besteht darin, den SSL-Zugriff durch ein Passwort abzusichern. Dazu wird auf dem Apache-Rechner das Programm &lt;br /&gt;
 htpasswd &amp;lt;passwdfile&amp;gt; &amp;lt;username&amp;gt;&lt;br /&gt;
ausgeführt, das Programm fragt dann nach dem gewünschten Passwort. Wir nehmen im Folgenden an, dass das Passwortfile &#039;&#039;/etc/apache2/htpasswd&#039;&#039; ist, der gesetzte Username &#039;&#039;alexa&#039;&#039; lautet und das Passwort &#039;&#039;my_smarthome&#039;&#039; ist.&lt;br /&gt;
&lt;br /&gt;
Im dritten Schritt wird nun in das Apache-Konfigurationsfile die Weiterleitung auf den eigentlichen Alexa-Fhem-Rechner eingetragen. Dazu wählen wir, dass von außen der Standard-SSL-Port 443 benutzt werden soll, sowie als Verzeichnisname &#039;&#039;/alexa&#039;&#039;. &#039;&#039;&#039;Achtung:&#039;&#039;&#039; Dieser Code soll &#039;&#039;&#039;nicht&#039;&#039;&#039; in die Default-Konfiguration des Apache-Webservers. Sondern in eine separate Datei (Dateiname z.B. &amp;quot;fhem&amp;quot;), die ins Unterverzeichnis /etc/apache2/conf.d gestellt wird.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
  ServerName myhome.is-my-castle.com&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLProxyEngine on&lt;br /&gt;
  SSLProxyCheckPeerCN off&lt;br /&gt;
  SSLProxyCheckPeerName off&lt;br /&gt;
  SSLCertificateKeyFile /etc/apache2/mycert/server.key&lt;br /&gt;
  SSLCertificateFile /etc/apache2/mycert/server.crt&lt;br /&gt;
 &amp;lt;Location /alexa&amp;gt;&lt;br /&gt;
  AuthType Basic&lt;br /&gt;
  AuthName &amp;quot;Authentication Required&amp;quot;&lt;br /&gt;
  AuthUserFile &amp;quot;/etc/apache2/htpasswd&amp;quot;&lt;br /&gt;
  Require valid-user&lt;br /&gt;
  ProxyPass https://&amp;lt;hier IP-Adresse des Alexa-Fhem-Rechners&amp;gt;:3000/&lt;br /&gt;
  ProxyPassReverse https://&amp;lt;hier IP-Adresse des Alexa-Fhem-Rechners&amp;gt;:3000/&lt;br /&gt;
  Order deny,allow&lt;br /&gt;
  Allow from All&lt;br /&gt;
 &amp;lt;/Location&amp;gt;&lt;br /&gt;
 (... Hier eventuell weitere Umleitungen)&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
Nach einem Neustart des Apache-Servers, dem Schließen des Ports 3000 in der Firewall sowie dem Öffnen des Ports 443 ist der Alexa-Fhem-Rechner von außen nur noch erreichbar durch den Aufruf von &amp;lt;code&amp;gt;https://myhome.is-my-castle.com/alexa&amp;lt;/code&amp;gt; und verlangt unmittelbar die Eingabe von Username und Passwort.&lt;br /&gt;
&lt;br /&gt;
Der vierte Schritt ist nun, den Code der AWS Lambda-Funktion an fünf Stellen zu verändern&lt;br /&gt;
 &#039;&#039;&#039;const PORT=443;&#039;&#039;&#039;&lt;br /&gt;
 const HOST=&#039;myhome.is-my-castle.com&#039;;&lt;br /&gt;
 &#039;&#039;&#039;const PATH=&#039;/alexa&#039;;&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;const AUTH=&#039;alexa:my_smarthome&#039;;&#039;&#039;&#039;&lt;br /&gt;
 // entry&lt;br /&gt;
 exports.handler = function(event, context, callback) {&lt;br /&gt;
  console.log(`EVENT: ${event}`);&lt;br /&gt;
  console.log(`CONTEXT: ${context}`);  &lt;br /&gt;
  var post_data = JSON.stringify(event);&lt;br /&gt;
  var options = {&lt;br /&gt;
    hostname: HOST,&lt;br /&gt;
    port: PORT,&lt;br /&gt;
    //family: 6,&lt;br /&gt;
    &#039;&#039;&#039;path: PATH,&#039;&#039;&#039;&lt;br /&gt;
    method: &#039;POST&#039;,&lt;br /&gt;
    &#039;&#039;&#039;auth: AUTH,&#039;&#039;&#039;&lt;br /&gt;
    rejectUnauthorized: false, // accept self-signed&lt;br /&gt;
 (etc., Rest des Codes wie gehabt)&lt;br /&gt;
Natürlich muss der Zugriff getestet werden. Bei Beachtung aller dieser Schritte werden alle un-autorisierten Zugriffe von außen abgewehrt. Eine noch weiter gehende Sicherung ist möglich, dazu kann in der Serverkonfiguration der Zugriff auf die Amazon-Domains beschränkt werden. Das ganze Alexa-System ist aber noch in konstanter Weiterentwicklung, diese Domain-Namen können sich also noch ändern.&lt;br /&gt;
&lt;br /&gt;
== Einrichtung in der Alexa App==&lt;br /&gt;
Nachdem die Alexa Skills angelegt wurden, müssen diese noch in der Alexa App eingerichtet werden.&lt;br /&gt;
Dafür jeweils per Desktop-Browser auf [http://alexa.amazon.de alexa.amazon.de] anmelden, nicht die App unter iOS oder Android verwenden. Diese hat Probleme mit der OAuth Verknüpfung.&lt;br /&gt;
&lt;br /&gt;
=== Alexa Skill ===&lt;br /&gt;
# Auf &#039;&#039;Skills&#039;&#039; klicken&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-01-startseite.png|200px]]&lt;br /&gt;
# Oben rechts &#039;&#039;Meine Skills&#039;&#039;  bzw. &#039;&#039;Ihre Skills&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-03-meine_skills.png|200px]]&lt;br /&gt;
# In der Liste der Skills sollte das angelegte FHEM Skill angezeigt werden. Dieses anklicken&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-02-liste_skills.png|200px]]&lt;br /&gt;
# Oben Rechts in den Details des Skills auf &#039;&#039;Skill aktivieren&#039;&#039; klicken&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-04-skill_details.png|200px]]&lt;br /&gt;
# In dem neu geöffneten Fenster die Autorisierung bestätigen&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-05-amazon_auth.png|200px]]&lt;br /&gt;
# Anschließend sollte die Verbindung erfolgreich aufgebaut worden sein &amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-06-success.png|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Geräte ===&lt;br /&gt;
# Auf http://alexa.amazon.de anmelden&lt;br /&gt;
# Auf &#039;&#039;Smart Home&#039;&#039; klicken&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-01-startseite.png|200px]]&lt;br /&gt;
# Anschließend den Punkt &#039;&#039;Geräte suchen&#039;&#039; anklicken&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-07-Gerätesuche.png|200px]]&lt;br /&gt;
# Wurde soweit alles korrekt eingerichtet, werden nun die gefundenen Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
Tip: Es macht Sinn, unter &#039;&#039;Meine Gruppen&#039;&#039; Gruppen benannt nach den Räumen einzurichten. Hierdurch kann Alexa die Geräte besser auseinander halten, vor allem wenn die den gleichen Alias (z.B. &amp;quot;Licht&amp;quot;) haben.&lt;br /&gt;
&lt;br /&gt;
== Einrichtung unter FHEM ==&lt;br /&gt;
Im Folgenden werden exemplarisch ein paar Geräte beschrieben, die man nutzbringend mit FHEM einsetzen kann.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung des Custom Skills übersetzt die Kombination der Attribute &#039;&#039;alexaMapping&#039;&#039; und &#039;&#039;homebridgeMapping&#039;&#039; Sprachbefehle (&amp;quot;Intents&amp;quot;) in gerätespezifische Kommandos. &lt;br /&gt;
* Das Attribut alexaMapping wird am Alexa-Device gesetzt und dient dazu, erkannte Sprachkommandos in abstrakte Characteristiken zu überführen. Für den einfacheren SmartHome Skill hat darum das Attribut &#039;&#039;alexaMapping&#039;&#039; keine Bedeutung, sondern nur der &#039;&#039;genericDeviceType&#039;&#039; des zu steuernden Gerätes.&lt;br /&gt;
* Das Attribut homebridgeMapping wird für beide Skills am zu steuernden Gerät gesetzt und übersetzt diese Charakteristiken in die konkreten Befehle, die das Gerät versteht. Der inhalt des Attributs wird von links nach rechts ausgewertet und ist wie folgt aufgebaut:&lt;br /&gt;
** Das Attribut enthält eine durch Leerzeichen getrennte Liste aus Konfigurationen für jeweils eine Characteristik&lt;br /&gt;
** Jede einzelne der Characteristik-Konfigurationen besteht aus dem Namen der Characteristik, gefolgt von &amp;quot;=&amp;quot; und einer kommaseparierten Liste von Parametern.&lt;br /&gt;
  attr &amp;lt;device&amp;gt; homebridgeMapping &amp;lt;Characteristic1&amp;gt;=&amp;lt;param1.1&amp;gt;,&amp;lt;param1.2&amp;gt;,... &amp;lt;Characteristic2&amp;gt;=&amp;lt;param2.1&amp;gt;,&amp;lt;param2.2&amp;gt;,...&lt;br /&gt;
** Jeder Parameter besteht entweder aus&lt;br /&gt;
*** &amp;lt;code&amp;gt;&amp;lt;cmd&amp;gt;:&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;&amp;lt;/code&amp;gt;, hier können nicht verwendete Elemente von links nach rechts weg gelassen werden.&lt;br /&gt;
*** &amp;lt;code&amp;gt;&amp;lt;name&amp;gt;=&amp;lt;value&amp;gt;&amp;lt;/code&amp;gt;, hier kann &amp;lt;code&amp;gt;&amp;lt;value&amp;gt;&amp;lt;/code&amp;gt; entweder ein Wert oder semikolonseparierte Liste sein.&lt;br /&gt;
*** Oder dem schlüsselwort &amp;lt;code&amp;gt;clear&amp;lt;/code&amp;gt;, welches alle vorhandenen (default) Parameter dieser Characteristik löscht. &amp;lt;code&amp;gt;clear&amp;lt;/code&amp;gt; kann auch an Stelle einer ganzen Characteristik-Konfiguration stehen&lt;br /&gt;
Weiter führende Dokumentation zum homebridgeMapping findet sich unter https://forum.fhem.de/index.php/topic,48558.0.html&lt;br /&gt;
&lt;br /&gt;
=== Einfacher Schalter ===&lt;br /&gt;
* Ein einfacher Schalter, der die set-Kommandos &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; kennt, kann direkt mit Alexa-Fhem gekoppelt werden &lt;br /&gt;
* Für kompliziertere Aktionen, etwa das Übermitteln eines spezifischen Schaltbefehls an FHEM, ist die Einrichtung eines Dummies zu empfehlen. &lt;br /&gt;
Ob Dummy oder nicht, wichtig sind die drei fett gedruckten Zeilen&lt;br /&gt;
 define Alexa.Party dummy&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Party alexaName party&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Party alexaRoom alexaroom&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Party genericDeviceType switch&#039;&#039;&#039;&lt;br /&gt;
 attr Alexa.Party group AlexaGeräte&lt;br /&gt;
 attr Alexa.Party room AlexaRoom&lt;br /&gt;
 attr Alexa.Party setList on off&lt;br /&gt;
Selbstverständlich kann man diesen Dummy mit einem notify oder DOIF abfangen, um die gewünschte Schaltaktion auszuführen. &lt;br /&gt;
&lt;br /&gt;
Ein Alternative zum Dummy ist das Anlegen eines readingsProxy, dem die entsprechenden Attribute gegeben werden.&lt;br /&gt;
&lt;br /&gt;
Weil es sich hierbei um eines der einfachen Geräte handelt, die Alexa selbst im SmartHome Skill bearbeiten kann, ist auch der zweite Schritt bei der Einrichtung in der Alexa App sinnvoll: Der Schalter wird dann im Bereich Smart Home der Alexa App erkannt. Wer ihn auch mit dem Custon Skill bedienen möchte, muss natürlich Sorge tragen, dass der Alexa-Name &#039;&#039;party&#039;&#039; bei den FHEM_Devices auftaucht und die entsprechenden weiteren Slot Types und Example Utterances in der Konfiguration des Custom Skills vorhanden sind (siehe Abschnitt [[##Custom_Skill_anlegen | Custom Skill Anlegen]]).&lt;br /&gt;
&lt;br /&gt;
=== Wecker ===&lt;br /&gt;
Dieses Gerät kann man nur mit dem Custom Skill bedienen, es wird also &#039;&#039;&#039;nicht&#039;&#039;&#039; im Bereich Smart Home der Alexa App auftauchen. Wir richten einen Dummy ein, wichtig sind wieder die fett gedruckten Zeilen:&lt;br /&gt;
 define Alexa.Weckzeit dummy&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Weckzeit alexaName weckzeit&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Weckzeit alexaRoom alexaroom&#039;&#039;&#039;&lt;br /&gt;
 attr Alexa.Weckzeit genericDeviceType clock&lt;br /&gt;
 attr Alexa.Weckzeit group AlexaGeräte&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Weckzeit homebridgeMapping Weckzeit=state,cmd=+&#039;&#039;&#039;&lt;br /&gt;
 attr Alexa.Weckzeit room AlexaRoom&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Weckzeit setList Weckzeit:time&#039;&#039;&#039;&lt;br /&gt;
Das Attribut &#039;&#039;genericDeviceTye&#039;&#039; ist nicht wichtig, weil es ein generisches Device dieser Art gar nicht gibt. Wichtig hingegen ist das Attribut &#039;&#039;homebridgeMapping&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Für das Gerät &#039;&#039;MyAlexa&#039;&#039;, das in Abschnitt definiert wurde, muss im Attribut &#039;&#039;alexaMapping&#039;&#039; auftauchen&lt;br /&gt;
 Weckzeit=verb=stelle,valuePrefix=für;auf,values=AMAZON.TIME,valueSuffix=uhr&lt;br /&gt;
Darüber hinaus muss der Alexa-Name &#039;&#039;weckzeit&#039;&#039; bei den FHEM_Devices auftauchen und die entsprechenden weiteren Slot Types und Example Utterances in der Konfiguration des Custom Skills vorhanden sein (siehe Abschnitt [[#Custom_Skill_anlegen | Custom Skill Anlegen]]).&lt;br /&gt;
&lt;br /&gt;
Der Aufruf dieses Gerätes mit Alexa erfolgt dann z.B. mit den Sätzen&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;Alexa, sage &amp;lt;Custom Skill Invocation Name&amp;gt;: Stelle Weckzeit auf Neunzehn Uhr Siebenundzwanzig&amp;quot;&lt;br /&gt;
&amp;quot;Alexa, frage &amp;lt;Custom Skill Invocation Name&amp;gt; nach dem Status von Weckzeit&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dabei ist natürlich der &#039;&#039;Custom Skill Invocation Name&#039;&#039; durch den Wert zu ersetzen, den man im Abschnitt [[#Custom_Skill_anlegen | Custom Skill Anlegen]] unter Punkt 2 eingetragen hat.&lt;br /&gt;
&lt;br /&gt;
Zur weiteren Bearbeitung kann man jetzt mit einem DOIF Statusänderungen des Dummies abfangen und durch eine kleine Helperfunktion ins &amp;quot;echte&amp;quot; FHEM weiterleiten.&lt;br /&gt;
  define Alexa.Weckzeit.N DOIF ([&amp;quot;Alexa.Weckzeit:.*&amp;quot;])({AlexaHelper(&amp;quot;Alexa.Weckzeit&amp;quot;,&amp;quot;$EVENT&amp;quot;)}) &lt;br /&gt;
Die Helperfunktion (z.B. in 99_myUtils.pm) stellt aus der übergebenen Zeit (immer im Format dd:mm) eine sprachkompatible Nachricht $nc und einen mit den FHEM-Zeitangaben kompatiblen String $nt zusammen und reicht beide an eine Routine &#039;&#039;changeWakeTime&#039;&#039; weiter (dokumentiert in den [https://www.dpunkt.de/buecher/12387/9783960090120-smarthome-hacks.html Smart Home Hacks]).&lt;br /&gt;
 sub AlexaHelper($$){&lt;br /&gt;
  my ($name,$event)=@_;&lt;br /&gt;
  if( $name eq &amp;quot;Alexa.Weckzeit&amp;quot; ){ &lt;br /&gt;
    my ($nc,$nt);&lt;br /&gt;
    #-- volle Stunde----------------------------------------&lt;br /&gt;
    if( $event =~ /(\d+):00/ ){&lt;br /&gt;
      $nc=sprintf(&amp;quot;%d Uhr&amp;quot;,$1);&lt;br /&gt;
      $nt=sprintf(&amp;quot;%02d:00:00&amp;quot;,$1);&lt;br /&gt;
    #-- nicht volle Stunde---------------------------------&lt;br /&gt;
    }elsif( $event =~ /(\d+):(\d+)/ ){&lt;br /&gt;
      $nc=sprintf(&amp;quot;%d Uhr %d&amp;quot;,$1,$2);&lt;br /&gt;
      $nt=sprintf(&amp;quot;%02d:%02d:00&amp;quot;,$1,$2);&lt;br /&gt;
    }&lt;br /&gt;
    changeWakeTime(\&#039;GalaxyTab.EG\&#039;,\&#039;$nc\&#039;,\&#039;$nt\&#039;);&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lichtszene ===&lt;br /&gt;
Eine Lichtszene wird mit dem Modul LightScene angelegt. Wir gehen davon aus, dass in der Lichtszene die beiden Szenen Alle_An und Alle_Aus, sowie mindestens eine weitere Szene (hier: Sitzgruppe) definiert wurde.&lt;br /&gt;
* Nachfolgend wird ein Beispiel beschrieben, wie man eine Lichtszene mit dem einfachen SmartHome Skill steuern kann. Die verwendeten Kommandos sind dann&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Alexa, schalte (die) Beleuchtung an&amp;quot; -&amp;gt; LightScene Alle_An wird ausgewählt&lt;br /&gt;
&amp;quot;Alexa, schalte (die) Beleuchtungsitzgruppe an&amp;quot; -&amp;gt; LightScene Sitzgruppe wird ausgewählt&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;Alexa, schalte (die) Beleuchtung aus&amp;quot; -&amp;gt; LightScene Alle_Aus wird ausgewählt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Künftig wird man LightScene mit dem Custom Skill eventuell direkt steuern können - allerdings hat das einen geringeren WAF, als die Steuerung über den SmartHome Skill: Der Einschaltsatz muss dann mindestens lauten&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Alexa, sage &amp;lt;Custom Skill Invocation Name&amp;gt;: schalte (die) Beleuchtung an&amp;quot; -&amp;gt; LightScene Alle_An wird ausgewählt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dafür wird es aber auch möglich sein direkt die SzenenNamen im gesprochenen Kommando zu verwenden und so auf die Umwege über dummys und ähnliches zu verzichten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im ersten Schritt wird ein Dummy für die Gesamtbeleuchtung eingerichtet:&lt;br /&gt;
 define Alexa.Beleuchtung dummy &lt;br /&gt;
 attr Beleuchtung setList on off&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Beleuchtung alexaName beleuchtung&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Beleuchtung alexaRoom alexaroom&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Beleuchtung genericDeviceType switch&#039;&#039;&#039;&lt;br /&gt;
Anschließend wird für jede vorhandene Lichtszene (außer Alle_An und Alle_Aus) ein weiterer Dummy angelegt:&lt;br /&gt;
 define Alexa.Beleuchtung.Sitzgruppe dummy &lt;br /&gt;
 attr Beleuchtung setList on off&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Beleuchtung.Sitzgruppe alexaName beleuchtungsitzgruppe&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Beleuchtung.Sitzgruppe alexaRoom alexaroom&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Beleuchtung.Sitzgruppe genericDeviceType switch&#039;&#039;&#039; &lt;br /&gt;
Die eigentliche Steuerung übernimmt dann ein DOIF&lt;br /&gt;
 define Alexa.Beleuchtung.N DOIF&lt;br /&gt;
 ([&amp;quot;Alexa.Beleuchtung.Sitzgruppe:on&amp;quot;])&lt;br /&gt;
 (set &amp;lt;devicename der Lichtszene&amp;gt; scene Sitzgruppe,&lt;br /&gt;
  set Alexa.Beleuchtung off,&lt;br /&gt;
   ...&amp;lt;weitere dummies der anderen Szenen werden ebenfalls ausgeschaltet&amp;gt;&lt;br /&gt;
 )&lt;br /&gt;
 DOELSIF&lt;br /&gt;
 ... &amp;lt;weitere on-Events der anderen Szenen werden abgefangen&amp;gt;&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
 ([&amp;quot;Alexa.Beleuchtung:on&amp;quot;])&lt;br /&gt;
 (set &amp;lt;devicename der Lichtszene&amp;gt; scene Alle_An,&lt;br /&gt;
  set Alexa.Beleuchtung.Sitzgruppe off,&lt;br /&gt;
  ...&amp;lt;weitere dummies der anderen Szenen werden ebenfalls ausgeschaltet&amp;gt;&lt;br /&gt;
 )&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
 ([&amp;quot;Alexa.Beleuchtung:off&amp;quot;])&lt;br /&gt;
 (set &amp;lt;devicename der Lichtszene&amp;gt; scene Alle_Aus,&lt;br /&gt;
  set Alexa.Beleuchtung.Sitzgruppe off,&lt;br /&gt;
  ...&amp;lt;weitere dummies der anderen Szenen werden ebenfalls ausgeschaltet&amp;gt;&lt;br /&gt;
 )&lt;br /&gt;
Mit diesem DOIF wird ein Radiobutton simuliert, d.h. wie bei den Stationstasten vor Uralt-Radios sorgt die Auswahl einer Szene immer dafür, dass alle anderen Dummies ausgeschaltet werden.&lt;br /&gt;
Natürlich kann man das auch mit einem kleinen Perl-Programm erreichen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zwei andere Ansätze Lichtszenen zu schalten die ohne DOIF auskommen sind im Folgenden beschrieben:&lt;br /&gt;
&lt;br /&gt;
* Wenn es von Interesse ist die Steuerung mit einer Darstellung in FTUI zu verbinden: Statt der oben beschriebenen dummy Devices kann man readingsProxy Devices mit passenden setFn und valueFn analog zum  [[Harmony#Button_f.C3.BCr_eine_bestimmte_Activity_im_Frontend_und_Homekit_.C3.BCber_readingsProxy|diesem Beispiel für harmony aktivitäten]] verwenden.&lt;br /&gt;
&lt;br /&gt;
* Für jede zu schaltende Szene wird ein dummy angelegt dessen homebridgeMapping direkt auf das LightScene Device zeigt:&lt;br /&gt;
&lt;br /&gt;
 define &amp;lt;dummy&amp;gt; dummy&lt;br /&gt;
 attr &amp;lt;dummy&amp;gt; setList on off&lt;br /&gt;
 attr &amp;lt;dummy&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;dummy&amp;gt; homebridgeMapping On=&amp;lt;light scene&amp;gt;::state,valueOn=&amp;lt;szene&amp;gt;,cmdOn=scene+&amp;lt;szene&amp;gt;,cmdOff=scene+&amp;lt;szene aus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei der zweiten Variante wird davon ausgegangen das der aktuelle status nicht abgefragt oder angezeigt werden soll. Deshalb gibt es keine direkte RadioButton Funktionalität.&lt;br /&gt;
&lt;br /&gt;
=== Harmony Hub ===&lt;br /&gt;
Ein [https://forum.fhem.de/index.php/topic,60244.msg550298.html#msg550298 HowTo-Beitrag im Forum] beschreibt die Ansteuerung von Harmony-Aktionen über den Custom Skill, beispielsweise für eine Aktion &#039;&#039;ARD&#039;&#039;: „Alexa, sage FHEM stelle Anlage auf ARD“.&lt;br /&gt;
&lt;br /&gt;
== Nutzung ==&lt;br /&gt;
Um den Namen zu bestimmen, unter dem ein Gerät mit Alexa angesprochen wird, verwendet Alexa-Fhem mit absteigender Priorität:&lt;br /&gt;
* das alexaName Attribut&lt;br /&gt;
* das alias Attribut&lt;br /&gt;
* das NAME Internal&lt;br /&gt;
Damit Alexa ein Gerät eindeutig identifizieren kann, sollten eindeutige Gerätenamen verwendet werden, bestehed möglichst aus einem Wort und ohne Ziffern. Wenn Alexa einen Namen nicht versteht, kann man unter [http://alexa.amazon.de/spa/index.html] nachsehen was tatsächlich verstanden wurde und den Gerätenamen ggf. anpassen.&lt;br /&gt;
&lt;br /&gt;
=== SmartHome Skill ===&lt;br /&gt;
Gruppen (Räume) müssen in der Alexa App konfiguriert werden. Über das API lassen sich nur der Name und die Schalteigenschaften übergeben.&lt;br /&gt;
&lt;br /&gt;
Nach erfolgreicher Einrichtung des SmartHome Skills sollte Alexa mit den folgenden Befehlen nutzbar sein:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
“alexa, schalte &amp;lt;gerät/gruppe&amp;gt; ein”&lt;br /&gt;
“alexa, schalte &amp;lt;gerät/gruppe&amp;gt; aus”&lt;br /&gt;
“alexa, stelle &amp;lt;gerät/gruppe&amp;gt; auf &amp;lt;wert&amp;gt; prozent”&lt;br /&gt;
“alexa, stelle &amp;lt;gerät/gruppe&amp;gt; auf &amp;lt;anzahl&amp;gt; grad”&lt;br /&gt;
“alexa, erhöhe &amp;lt;gerät/gruppe&amp;gt; um &amp;lt;anzahl&amp;gt; prozent”&lt;br /&gt;
“alexa, reduziere &amp;lt;gerät/gruppe&amp;gt; um &amp;lt;anzahl&amp;gt; prozent”&lt;br /&gt;
“alexa, erhöhe &amp;lt;gerät/gruppe&amp;gt; um &amp;lt;anzahl&amp;gt; grad”&lt;br /&gt;
“alexa, reduziere &amp;lt;gerät/gruppe&amp;gt; um &amp;lt;anzahl&amp;gt; grad”&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Custom Skill ===&lt;br /&gt;
Der Custom Skill erlaubt im Gegensatz zum SmartHome Skill eine weitreichende Konfiguration der möglichen Kommandos.&lt;br /&gt;
&lt;br /&gt;
Das Prinzip der Kommandokonfiguration ist {{Link2Forum|Topic=60244|Message=532513|LinkText=im Forum}} beschrieben.&lt;br /&gt;
&lt;br /&gt;
TODO: Abfragen, Attribute (alexaMapping, alexaTypes, fhemIntents, articles, prepositions)&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
====Allgemeiner Hinweis====&lt;br /&gt;
Besonders wichtig ist, dass man sich sehr genau an diese Anleitung hält. Ein häufiger Fehler ist, dass die einfachen Anführungszeichen in der Anleitung unter &#039;&#039;&#039;AWS Lambda Funktion anlegen&#039;&#039;&#039; Punkt 8 einfach weggelassen werden. Diese sind zwingend notwendig. Es darf auch nur der reine Hostname eingetragen werden. Also kein &#039;&#039;http://&#039;&#039; davor. Entweder eine feste IP Adresse oder den Hostnamen, um den Rechner zu erreichen, den ihr über den Port 3000 freigegeben habt. Das sollte dann so aussehen:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
const PORT=3000;&lt;br /&gt;
const HOST=&#039;mein.host.name&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Freigabe von Port 3000====&lt;br /&gt;
{{Randnotiz|RNTyp=Fehl|RNText=Derzeit müsst ihr über einen echten IPv4 Anschluss verfügen, damit der Amazon Lambda-Server euch erreichen kann. DS-Lite Anschlüsse wie die von &amp;lt;b&amp;gt;UnityMedia&amp;lt;/b&amp;gt; z.B. funktionieren derzeit leider nicht. Eine möglicher &amp;quot;Workaround&amp;quot; wird hier beschrieben: https://forum.fhem.de/index.php/topic,60244.msg518276.html#msg518276}}&lt;br /&gt;
&lt;br /&gt;
Auf dem Router muss der Port 3000 Protokoll TCP freigegeben werden. D.h. von außen muss man wenn man den Port 3000 aufruft, auf dem intern laufenden node.js Alexa-Dienst zugreifen können.&lt;br /&gt;
Je nach Router gestaltet sich das Portforwarding bzw. die Portumleitung etwas schwieriger.&lt;br /&gt;
&lt;br /&gt;
Bei einem Speedport Router der Telekom beispielsweise, muss der Router komplett neu gestartet werden, wenn die Portfreigabe eingerichtet wurde. &lt;br /&gt;
&lt;br /&gt;
Bei der Fritz!Box ist das nicht nötig, bei dieser finden die Freigabe unter &#039;&#039;Internet -&amp;gt; Freigaben -&amp;gt; Portfreigaben&#039;&#039; statt. Dort wählt man dann den Rechner aus und richtet eine neue Freigabe ein. Wichtig hierbei ist, dass man Portfreigabe auswählt und nicht MyFRITZ!-Freigabe. Bei Port von bis trägt man 3000 ein, bei Port extern ebenfalls.&lt;br /&gt;
&lt;br /&gt;
Um die Portweiterleitung zu testen, solltet ihr euch auch nicht im gleichen Netz befinden. Viele Router blockieren den Netzaufruf aus dem gleichen Netz. Am besten testet ihr es, wenn ihr an eurem Mobiltelefon W-LAN deaktiviert und im Browser folgende Seite aufruft: &#039;&#039;https://mein.hostname:3000&#039;&#039;. Wenn ihr im Browser dann einen Quellcode von Alexa seht, funktioniert die Portumleitung.&lt;br /&gt;
&lt;br /&gt;
Wenn bis hier alles funktioniert und es läuft dennoch nicht rund, liegt das Problem woanders. Kommt z.B. bei der Gerätesuche kein Request rein (sichtbar auf dem Bildschirm, wenn bin/alexa gestartet wurden), kann evtl. der Lambda-Dienst falsch konfiguriert sein.&lt;br /&gt;
&lt;br /&gt;
====Probleme mit node.js - npm install====&lt;br /&gt;
&lt;br /&gt;
Falls eine Fehlermeldung auftritt, dass &amp;quot;npm&amp;quot; nicht gefunden werden kann, bitte NodeJS entsprechend der Anleitung im Homebridge-Artikel vorgehen: [[Homebridge_einrichten#NodeJS_installieren|NodeJS installieren]] sowie [[Homebridge_einrichten#Python.2C_g.2B.2B.2C_MDNS_installieren|Python, g++, MDNS installieren]], siehe auch folgenden Abschnitt.&lt;br /&gt;
&lt;br /&gt;
====Es kommen diverse Fehlermeldungen beim Starten von alexa-fhem und es beendet sich====&lt;br /&gt;
Wenn man auf der Konsole angemeldet ist, den Befehl&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;node -v&amp;lt;/syntaxhighlight&amp;gt;eingeben. Ist die Version niedriger als die geforderte 0.12, muss eine neuere installiert werden. Hier darf man dann im Wiki unter [[Homebridge_einrichten#NodeJS_installieren]] nachschauen. NodeJS V4 sollte hierbei schon ausreichen. Solange die node.js Version nicht passt, gar nicht groß rum experimentieren! Bitte beachtet, dass alle Voraussetzungen unter [[Alexa-Fhem#Voraussetzungen]] erfüllt sind! Keine Experimente mit Versionen die darunter liegen.&lt;br /&gt;
&lt;br /&gt;
====Fehlermeldung &#039;&#039;NAT-PMP failed: Error: timeout&#039;&#039; Fehler angezeigt beim Start von alexa-fhem====&lt;br /&gt;
Wenn ihr dann alexa-fhem über die Konsole startet und bekommt folgenden Fehler: &#039;&#039;NAT-PMP failed: Error: timeout&#039;&#039;, lasst euch davon nicht irritieren. Das bedeutet lediglich, dass der Port nicht automatich freigegeben wurde über uPNP. Alternativ prüft, ob die Funktion der Portfreigabe via uPNP auf eurem Router aktiviert ist.&lt;br /&gt;
&lt;br /&gt;
====Nach Start auf der Console beendet sich Alexa-FHEM sofort wieder====&lt;br /&gt;
Unmittelbar nach dem Start von Alexa-FHEM werden ein paar UPNP Fehlermeldungen ausgegeben. Unmittelbar danach beendet sich Alexa-FHEM wieder. &lt;br /&gt;
&lt;br /&gt;
Viele scheinen ein Problem mit UPNP auf dem Raspberry Pi zu haben. Wenn dieses Problem auftritt einfach in der &amp;lt;code&amp;gt;~/.alexa/config.json&amp;lt;/code&amp;gt; die folgenden Zeilen rauslöschen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;quot;nat-pmp&amp;quot;: &amp;quot;10.0.1.1&amp;quot;,&lt;br /&gt;
        &amp;quot;nat-upnp&amp;quot;: true,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt erneut Alexa-FHEM starten. Sollte nun laufen.&lt;br /&gt;
&lt;br /&gt;
====Was ist zu tun, wenn alexa-fhem keine Geräte findet?====&lt;br /&gt;
Zunächst müssen die Geräte, die angesprochen werden wollen, unter FHEM ein neues Attribut zugewiesen bekommen. Dazu das Gerät in FHEM öffnen und das Attribut &#039;&#039;genericDeviceType switch&#039;&#039; hinzufügen, wenn es ein Schalter mit der Funktiona AN/AUS sein soll. Wenn man will, kann man dem Gerät jetzt noch über das Attribut &#039;&#039;alias&#039;&#039; eine besseren Namen geben, mit dem Alexa das Gerät dann auch finden kann.&lt;br /&gt;
Anschließend muss alexa-fhem neu gestartet werden und die definierten Geräte sollten nun gefunden werden.&lt;br /&gt;
&lt;br /&gt;
====Was ist zu tun, wenn Alexa zwar Geräte findet, diese aber nicht angesprochen werden können?====&lt;br /&gt;
Zuerst die Informationen zum Datenfluss ganz oben ansehen. Dann am besten von hinten nach vorne vorgehen:&lt;br /&gt;
* wenn nichts bei alexa-fhem ankommt: port forwarding prüfen&lt;br /&gt;
* wenn lambda.js nichts los wird: im cloudwatch log nachsehen&lt;br /&gt;
* wenn bei lambda.js nichts ankommt: den trigger prüfen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte man sich unter &#039;&#039;http://aws.amazon.com&#039;&#039; das Logfile seiner erstellten Funktion anschauen. Ist überhaupt ein Logfile vorhanden? Falls nicht, liegt es vermutlich am Trigger.&lt;br /&gt;
Den solltet ihr überprüfen. Scheinbar kommt es hin und wieder vor, dass dieser nicht gesetzt ist. Dazu einfach auf &#039;&#039;Triggers&#039;&#039; klicken und mit &#039;&#039;Add trigger&#039;&#039; erneut einen anlegen. Hier muss, wie in der Anleitung unter &#039;&#039;&#039;AWS Lambda Funktion anlegen&#039;&#039;&#039; Punkt 7, die &#039;&#039;Application Id&#039;&#039; stehen und der Haken bei &#039;&#039;Enable trigger&#039;&#039; gesetzt sein. Dann alexa-fhem neu starten.&lt;br /&gt;
Wenn ihr Änderungen gemacht habt und den alexa-fhem Dienst noch nicht neu gestartet habt, wäre jetzt der richtige Zeitpunkt. Fürs Debugging empfiehlt es sich, alexa-fhem in einer Konsole laufen zu lassen, um eingehende Anfragen mitverfolgen zu können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es kann sein, dass immer noch keine Log im Cloudwatch ([http://docs.aws.amazon.com/de_de/lambda/latest/dg/monitoring-functions-logs.html]) zu sehen ist. In dem Fall hilft es, eine neue Role Policy anzulegen. &lt;br /&gt;
* in der AWS Console [https://console.aws.amazon.com] oben links auf Services klicken, und in der Gruppe &amp;quot;Security, Identity &amp;amp; Compliance&amp;quot; auf IAM klicken&lt;br /&gt;
* links auf Roles klicken&lt;br /&gt;
* Auf dem Knopf &amp;quot;Create Role&amp;quot; klicken&lt;br /&gt;
* AWS Services &amp;gt; Lambda auswählen, unten auf Next:Permissions klicken&lt;br /&gt;
* im Filter / Policy Type,  &amp;quot;log&amp;quot; eintragen (ohne quotes)&lt;br /&gt;
* CloudWatchLogsFullAccess hacken, auf Next:Review unten klicken&lt;br /&gt;
* Name vergeben und mit &amp;quot;Create role&amp;quot; bestätigen&lt;br /&gt;
* Oben links auf Services klicken, und in der Gruppe &amp;quot;Compute&amp;quot;, auf Lambda klicken&lt;br /&gt;
* auf den Name der Funktion klicken&lt;br /&gt;
* Reiter Configuration auswählen&lt;br /&gt;
* in Existing Role, den neukreierten Role auswählen&lt;br /&gt;
* oben auf Save (und Testen wenn gewünscht) klicken.&lt;br /&gt;
Schon sollte eine neue Gruppe im Cloudwatch sichtbar sein. Die Suche von den Devices in Alexa wiederholen, und die Logs analysieren&lt;br /&gt;
&lt;br /&gt;
====Was ist zu tun, wenn sich der Alexa-Service nicht starten lässt?====&lt;br /&gt;
{{Randnotiz|RNTyp=[g|Info]|RNText=Der User in der User= Directive von alexa.service muss Ausführungsrecht auf dem alexa binary haben (x), so wie auch mind. Lesezugriff auf dem Verzeichnis nach -U Option in der ExecStart= Directive und auch auf dem WorkingDirectory }}&lt;br /&gt;
Schaut bitte in das Unterverzeichnis [alexa-fhem (also dort, wo Ihr Alexa-FHEM instelliert habt]/bin. Die dort befindliche Datei &#039;&#039;alexa&#039;&#039; muss ausführbar sein. Also z.B. so:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;2755327 4 -rwxr-xr-x 1 pi pi  339 Nov 26 23:20 alexa&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Sollte dies nicht der Fall sein bitte mit:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;chmod +x alexa&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
die Datei ausführbar machen. Sofern der User &amp;quot;pi&amp;quot; Eigentümer ist, ist kein sudo erforderlich.&lt;br /&gt;
&lt;br /&gt;
Eine lauffähige Konfiguration ist {{Link2Forum|Topic=71612|Message=668383|LinkText=hier}} zu sehen.&lt;br /&gt;
&lt;br /&gt;
Ein Fehler in der Rechtekonfiguration führt in der Regel zu folgendem Ergebnis nach &amp;lt;code&amp;gt;sudo systemctl status alexa&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;   Loaded: loaded (/etc/systemd/system/alexa.service; enabled)&lt;br /&gt;
   Active: activating (auto-restart) (Result: exit-code) since mer. 2017-09-06 02:33:23 CEST; 3s ago&lt;br /&gt;
  Process: 18332 ExecStart=/opt/fhem/alexa-fhem/bin/alexa -U /home/alexa/.alexa (code=exited, status=217/USER)&lt;br /&gt;
 Main PID: 18332 (code=exited, status=217/USER)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wie kann ich via Alexa-FHEM auf FHEM zugreifen, wenn der Port mit Benutzername/Kennwort geschützt ist?====&lt;br /&gt;
&lt;br /&gt;
Hierzu muss die Datei &amp;lt;code&amp;gt;~/.alexa/config.json&amp;lt;/code&amp;gt; geöffnet werden und der Abschnitt &amp;quot;connections&amp;quot; um folgende Zeile ergänzt werden:&amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;quot;auth&amp;quot;: {&amp;quot;user&amp;quot;: &amp;quot;fhem&amp;quot;, &amp;quot;pass&amp;quot;: &amp;quot;fhempassword&amp;quot;},&amp;lt;/pre&amp;gt;&lt;br /&gt;
Bei Verwendung von SSL bei FHEM muss auch noch &amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;quot;ssl&amp;quot;: true,&amp;lt;/pre&amp;gt; hinzugefügt werden&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Sprachsteuerung]]&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Alexa-Fhem&amp;diff=23451</id>
		<title>Alexa-Fhem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Alexa-Fhem&amp;diff=23451"/>
		<updated>2017-12-03T21:48:01Z</updated>

		<summary type="html">&lt;p&gt;Benheim: /* Was ist zu tun, wenn Alexa zwar Geräte findet, diese aber nicht angesprochen werden können? */ Hinweis auf Ausgabe von alexa-fhem in Konsole&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Alexa-Fhem&#039;&#039;&#039; ist eine in JavaScript geschriebene und auf NodeJS basierende Software, welche es ermöglicht, der digitalen Amazon Assistentin Alexa zusätzliche Skills für die Heimautomatisierung via FHEM beizubringen. Eine erste funktionierende Version wurde von [https://forum.fhem.de/index.php?action=profile;u=430 justme1968] im {{Link2Forum|Topic=60244|LinkText=Forum}} veröffentlicht.&lt;br /&gt;
Das ist eine erste Version der Dokumentation zur Installation und Einrichtung, eine Erweiterung wird sicherlich in nächster Zeit noch folgen.&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Anbindung von FHEM an Amazon Assistent Alexa&lt;br /&gt;
|ModType=x&lt;br /&gt;
|ModTechName=&lt;br /&gt;
|ModForumArea=Frontends/Sprachsteuerung&lt;br /&gt;
|ModOwner=justme1968&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Einführung==&lt;br /&gt;
===Glossar===&lt;br /&gt;
*Echo bzw. Echo Dot (im Folgenden maskulin bezeichnet) sind die derzeit verfügbaren Geräte des Alexa-Systems &#039;&#039;&#039;BILDER EINSTELLEN - Achtung Urheberrecht&#039;&#039;&#039;&lt;br /&gt;
*AVS ist der Amazon Voice Service, d.h. die Spracherkennungskomponente des Systems.{{Randnotiz|RNTyp=r|RNText=Für die Nutzung der Amazon AWS-Dienste müssen zwingend die Daten einer Kreditkarte angegeben werden. Nach gegenwärtigem Kenntnisstand sollen jedoch keine Kosten für die Nutzung der im Rahmen dieses How To beschriebenen Dienste anfallen, sofern diese in einem Rahmen genutzt werden, der selbst eine intensive private Nutzung nicht überschreitet. Der Benutzer sei an dieser Stelle auf die von Amazon veröffentlichten Preislisten verwiesen. Die Autoren dieser Anleitung und der darin beschriebenen Module übernehmen keine Haftung für eventuelle Kosten, die aus der Nutzung der AWS entstehen. }}&lt;br /&gt;
*AWS sind die Amazon Web Services, also per URL erreichbare Dienste zur Ausführung von Berechnungen etc. Im Rahmen von Alexa-Fhem wird bei AWS eine eigene JavaScript-Funktion hinterlegt, die zur Kommunikation mit dem FHEM-Server dient. Im Jargon von Amazon ist dies eine so genannte Lambda-Funktion &#039;&#039;&#039;WARUM ? Nachlesen bei Amazon&#039;&#039;&#039;.&lt;br /&gt;
*Card bezeichnet einen Eintrag in der Alexa-App, der die erkannte Sprachnachricht sowie weiter gehenden Informationen über die Reaktion von Alexa enzthält und Rückmeldung an Amazon erlaubt.&lt;br /&gt;
*Skill (engl. für Fähigkeit) ist die Bezeichnung für eine per Spracherkennung bediente Funktionalität des Alexa-Systems, z.B. zur Nachrichtenansage, zur Wettervorhersage oder zur Steuerung von FHEM&lt;br /&gt;
&lt;br /&gt;
===Arbeitsweise und Datenfluss===&lt;br /&gt;
[[Datei:2gpXyLN.jpg|200px|thumb|right|Grafische Darstellung der beteiligten Komponenten]]&lt;br /&gt;
Echo -&amp;gt; AVS -&amp;gt; AWS Lambda -&amp;gt; alexa-fhem -&amp;gt; AWS Lambda -&amp;gt; AVS -&amp;gt; Echo&lt;br /&gt;
 &lt;br /&gt;
*Der Echo (oder ein anderes Alexa/AVS fähiges Gerät)  nimmt Audiodaten auf und schickt diese an AVS  (Amazon Voice Service) zur Erkennung&lt;br /&gt;
*AVS führt die Spracherkennung durch und erzeugt ein Event mit Informationen zu den erkannten Daten&lt;br /&gt;
:*Beim Alexa SmartHome Skill sind die möglichen Sätze für die Spracherkennung relativ fest vorgegeben &lt;br /&gt;
:*Beim Alexa Custom Skill kommen die dazu nötigen Informationen aus dem &#039;&#039;Interaction Model&#039;&#039; der Alexa Skills Configuration&lt;br /&gt;
*Das Event wird an den unter &#039;&#039;Configuration&#039;&#039; in der Alexa Skills Configuration hinterlegten Endpoint geschickt&lt;br /&gt;
:*Beim Alexa SmartHome Skill ist das zwingend eine AWS Lambda Routine&lt;br /&gt;
:*Beim Alexa Custom Skill kann das im Prinzip auch ein eigener Web Service sein&lt;br /&gt;
*Das Event wird vom &amp;lt;code&amp;gt;lambda.js&amp;lt;/code&amp;gt; code an alexa-fhem weitergeleitet&lt;br /&gt;
*alexa-fhem steuert FHEM und sendet ein Antwort-Event zurück&lt;br /&gt;
*&amp;lt;code&amp;gt;lambda.js&amp;lt;/code&amp;gt; nimmt diese Antwort entgegen und gibt sie an AVS zurück&lt;br /&gt;
*AVS sogt dafür das der Echo &#039;antwortet&#039; und dass die Card in der Alexa App erscheint&lt;br /&gt;
&lt;br /&gt;
===Anmerkungen===&lt;br /&gt;
*Ein Skill hat keinen Zugriff auf die Audiodaten&lt;br /&gt;
*Mit dem Skill API kann ein Skill zu zu keiner Zeit von sich aus aktiv werden und &#039;einfach&#039; Daten an den Echo schicken oder ihn dazu bringen irgendetwas zu tun.&lt;br /&gt;
*Wenn man berücksichtigt welchen Weg die Daten insgesamt gehen, ist es erstaunlich, wie schnell die Reaktion auf einen gesprochenen Satz erfolgt.&lt;br /&gt;
&lt;br /&gt;
=== Abgrenzung des &#039;&#039;&#039;Alexa Smart Home Skills&#039;&#039;&#039; und des &#039;&#039;&#039;Alexa Custom Skills&#039;&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
Der [[Alexa-Fhem#Smart_Home|Alexa Smart Home Skill]] ist ein Amazon-Alexa-Standard-Skill, der wesentliche Basisfunktionalitäten bereitstellt. Zu diesen gehört im Wesentlichen die Funktionalität, durch Alexa-FHEM bereitgestellte Devices im Alexa-Account des Benutzers anzulegen. Der Alexa Smart Home Skill reagiert auf gesprochene Interaktion in einem beschränkten Umfang. Beispielsweise genügt ein &amp;quot;Alexa, schalte die Wohnzimmerlampe an&amp;quot; um eine Interaktion zwischen Alexa Smart Home Skill und FHEM-Alexa auszulösen. Nach erfolgreicher Einrichtung wird dieser Skill in der Alexa-App bzw. im Web in der Rubrik &amp;quot;Smart Home&amp;quot; als Skill angezeigt.&lt;br /&gt;
&lt;br /&gt;
Der [[Alexa-Fhem#Custom|Alexa Custom Skill]] ist kein Standard-Smart-Home-Skill, sondern ein individuell entwickelter Skill, so wie alle anderen Skills auch. Er wird daher auch nicht in der Alexa-App unter der Rubrik &amp;quot;Smart Home&amp;quot; angezeigt. Gesprochene Interaktion mit diesem Skill erfolgt dadurch, dass entweder der Skill explizit gestartet wird (z.B. &amp;quot;Alexa, starte [Name des Skills]&amp;quot;) oder direkt angesprochen wird (z.B. &amp;quot;Alexa, frage [Name des Skills] wie ist der Status von [Device] &amp;quot;). Der Alexa Custom Skill befindet sich in Entwicklung und wird hinsichtlich seiner Funktionalitäten laufend weiterentwickelt. Die Einrichtung dieses Skills ist grundsätzlich optional, jedoch werden anspruchsvollere Steuerungsmöglichkeiten nur mit diesem realisiert werden können.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
{{Randnotiz|RNTyp=[g|Info]|RNText=Da die einzelnen Schritte der Anleitung an verschiedenen Stellen unterbrochen und später fortgesetzt werden müssen, empfiehlt es sich, die Anleitung einmal vollständig gelesen zu haben. Während der Konfiguration sollten alle nachfolgenden Abschnitte parallel in gleichzeitig geöffneten Browserfenstern durchgeführt werden, die jeweils bis zum Abschluss geöffnet bleiben müssen. }}&lt;br /&gt;
Grundvoraussetzung für alle folgenden Schritte ist das Vorhandensein eines Amazon-Accounts. Es wird davon ausgegangen, dass die Konten für alle im Folgenden genutzten Amazon-Dienste eingerichtet wurden.&lt;br /&gt;
&lt;br /&gt;
===node.js installieren===&lt;br /&gt;
Zunächst wird das Betriebssystem (in diesem Falle Debian oder Ubuntu) auf den aktuellen Stand gebracht:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get upgrade&lt;br /&gt;
sudo apt-get install build-essential libssl-dev&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun muss NodeJS installiert werden. Leider ist die Version im Debian Repository deutlich zu alt, daher wird mit den folgenden Befehlen das Node Repository hinzugefügt und NodeJS (in der LTS Version) entsprechend installiert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -&lt;br /&gt;
sudo apt-get install -y nodejs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alexa-Fhem installieren ===&lt;br /&gt;
&#039;&#039;&#039;Aus gegebenem Anlass: Dies ist weder eine Einführung in Linux, noch eine Anfängerdokumentation für FHEM.&#039;&#039;&#039; Also erst die Grundlagen lernen, und dann mit Alexa beginnen !&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version ist jeweils  {{Link2Forum|Topic=60244|Message=540117|LinkText=hier}} zu finden.&lt;br /&gt;
&lt;br /&gt;
====Erstinstallation====&lt;br /&gt;
Hier wird die Erstinstallation von Alexa-Fhem beschrieben.&lt;br /&gt;
===== Linux =====&lt;br /&gt;
# Die tgz-Datei unter Linux im Hauptverzeichnis von FHEM (typischerweise &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;) entpacken (&#039;&#039;nicht&#039;&#039; unter Windows, das zerstört die Rechteeinstellungen).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;tar -xvzf dateiname.tgz&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Das dabei entstandene Verzeichnis &#039;&#039;package&#039;&#039; in &#039;&#039;alexa-fhem&#039;&#039; umbenennen &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;mv package alexa-fhem&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Durch &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;cd alexa-fhem&amp;lt;/syntaxhighlight&amp;gt; in das Verzeichnis wechseln&lt;br /&gt;
# Mit &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/syntaxhighlight&amp;gt; alle Abhängigkeiten installieren (kein sudo!).&lt;br /&gt;
# SSL Zertifikat erzeugen durch Aufruf von &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;./createKey.sh&amp;lt;/syntaxhighlight&amp;gt; (kein sudo!). Hierbei beachten, dass ein Kennwort vergeben werden muss, das mindestens aus 4 Zeichen besteht, dieses Kennwort bitte merken.&lt;br /&gt;
# Das Verzeichnis &#039;&#039;.alexa&#039;&#039; anlegen, &#039;&#039;und zwar im Home-Verzeichnis desjenigen Benutzers, unter dem Alexa-Fhem laufen soll.&#039;&#039; Insbesondere ist zu beachten, dass dieser Nutzer u.U. im Startskript explizit gesetzt wird. Mit dem untenstehenden Skript ist das &#039;&#039;nicht&#039;&#039; der User fhem, sondern der User &#039;&#039;pi&#039;&#039;. Das Symbol &#039;&#039;~/&#039;&#039; verweist auf das Home-Verzeichnis des Benutzers, der gerade die Installation vornimmt.&lt;br /&gt;
# Die Datei &#039;&#039;config-sample.json&#039;&#039; nach &#039;&#039;.alexa/config.json&#039;&#039; kopieren. Achtung: Installiert man alexa-fhem als root-user, zeigt das Symbol &#039;&#039;~/&#039;&#039; auf &#039;&#039;/root&#039;&#039; - und die Konfigurationsdatei wird ggf. bei einem manuellen Start von Alexa-Fhem nicht gefunden.&lt;br /&gt;
# Achtung: Ggf. müssen auch die Dateien key.pem und cert.pem ins entsprechende Verzeichnis kopiert werden.&lt;br /&gt;
===== Windows =====&lt;br /&gt;
&#039;&#039;Vor&#039;&#039; der Installation von Alexa-Fhem muss man folgende Anwendungen installieren:&lt;br /&gt;
* Node.js (die aktuelle Version findet man unter https://nodejs.org/en/download/)&lt;br /&gt;
* OpenSSL (http://slproweb.com/products/Win32OpenSSL.html oder https://www.heise.de/download/product/win32-openssl-47316/download)&lt;br /&gt;
Erst dann fängt man mit Alexa-Fhem an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Die tgz-Datei im Hauptverzeichnis von FHEM (z.B. &amp;lt;code&amp;gt;С:\Program Files (x86)\fhem&amp;lt;/code&amp;gt;) entpacken.&lt;br /&gt;
# Das dabei entstandene Verzeichnis &#039;&#039;package&#039;&#039; in &#039;&#039;alexa-fhem&#039;&#039; umbenennen&lt;br /&gt;
# Windows-Shell (Kommandozeile, Eingabeaufforderung usw.) öffnen. &amp;quot;Start&amp;quot; -&amp;gt; &amp;quot;Ausführen&amp;quot; (oder [Windows-Taste]+[R]) -&amp;gt; cmd -&amp;gt; Ok. Durch &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;cd &amp;quot;&amp;lt;FHEM-Hauptverzeichis&amp;gt;\alexa-fhem&amp;quot;&amp;lt;/syntaxhighlight&amp;gt; in das Verzeichnis wechseln. &amp;lt;br/&amp;gt;Dabei ist natürlich das &amp;lt;FHEM-Hauptverzeichis&amp;gt; durch den entsprechenden Pfad aus dem Schritt 1 zu ersetzen. Im o.g. Beispiel wäre es &amp;lt;code&amp;gt;cd &amp;quot;С:\Program Files (x86)\fhem\alexa-fhem&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Mit &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/syntaxhighlight&amp;gt; alle Abhängigkeiten installieren.&amp;lt;br/&amp;gt; Bei der Fehlermeldung wie &amp;quot;Der Befehl &amp;quot;npm&amp;quot; ist entweder falsch geschrieben oder konnte nicht gefunden werden.&amp;quot; ist die Installation von Node.js zu überprüfen.&lt;br /&gt;
# SSL Zertifikat erzeugen. Dafür muss man alle Befehle aus dem Skript &#039;&#039;createKey.sh&#039;&#039; nacheinander manuell ausführen. Hierbei beachten, dass ein Kennwort vergeben werden muss, das mindestens aus 4 Zeichen besteht, dieses Kennwort bitte merken. Der Windows-Welt unbekannter Befehl &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; ist durch &amp;lt;code&amp;gt;move /y&amp;lt;/code&amp;gt; zu ersetzen:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;openssl rsa -in key.pem -out newkey.pem&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;move /y newkey.pem key.pem&amp;lt;/syntaxhighlight&amp;gt; Eventuelle Fehlermeldung &amp;quot;can&#039;t open config file: /usr/local/ssl/openssl.cnf&amp;quot; o.Ä. lässt sich durch Befehl &amp;lt;code&amp;gt;set OPENSSL_CONF=&amp;lt;OpenSSL-Verzeichnis&amp;gt;\bin\openssl.cfg&amp;lt;/code&amp;gt; beheben, wobei &amp;lt;OpenSSL-Verzeichnis&amp;gt; durch den entsprechenden Installationspfad (typischerweise &amp;lt;code&amp;gt;c:\OpenSSL-Win32&amp;lt;/code&amp;gt;) zu ersetzen ist.&lt;br /&gt;
# Das Verzeichnis &#039;&#039;.alexa&#039;&#039; anlegen, &#039;&#039;und zwar im Benutzerverzeichnis desjenigen Benutzers, unter dem Alexa-Fhem laufen soll.&#039;&#039; In aktuellen Versionen von Windows (ab Windows 7 bzw. ab Windows Server 2008 R2) liegt das Verzeichnis unter &amp;lt;code&amp;gt;C:\Users\&amp;lt;Benutzername&amp;gt;&amp;lt;/code&amp;gt;, also z.B. für Benutzer &amp;quot;Administrator&amp;quot; - unter &amp;lt;code&amp;gt;C:\Users\Administrator&amp;lt;/code&amp;gt;.&amp;lt;br/&amp;gt;Falls Windows sich weigert das Verzichniss mit dem Punkt am Anfang zu erstellen, kann man das aus der Kommandozeile machen:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;cd &amp;quot;C:\Users\&amp;lt;Benutzername&amp;gt;&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
mkdir &amp;quot;.alexa&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Die Datei &#039;&#039;config-sample.json&#039;&#039; nach &#039;&#039;C:\Users\&amp;lt;Benutzername&amp;gt;\.alexa\config.json&#039;&#039; kopieren.&lt;br /&gt;
# Achtung: Ggf. müssen auch die Dateien key.pem und cert.pem ins entsprechende Verzeichnis (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;FHEM-Hauptverzeichis&amp;gt;\alexa-fhem\bin&amp;lt;/code&amp;gt;) kopiert werden.&lt;br /&gt;
&lt;br /&gt;
====Update====&lt;br /&gt;
Hier wir das Update auf eine neue Version von Alexa-Fhem beschrieben&lt;br /&gt;
===== Linux =====&lt;br /&gt;
# Das Verzeichnis &#039;&#039;alexa-fhem&#039;&#039; im Hauptverzeichnis von FHEM (typischerweise &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;) umbenennen in &#039;&#039;alexa-fhem.old&#039;&#039;.&lt;br /&gt;
# Die tgz-Datei der neuen Alexa-Fhem-Version unter Linux im Hauptverzeichnis von FHEM (typischerweise &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;) entpacken (&#039;&#039;nicht&#039;&#039; unter Windows, das zerstört die Rechteeinstellungen).&lt;br /&gt;
# Das dabei entstandene Verzeichnis &#039;&#039;package&#039;&#039; in &#039;&#039;alexa-fhem&#039;&#039; umbenennen, in das Verzeichnis wechseln&lt;br /&gt;
# Mit &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/syntaxhighlight&amp;gt; alle Abhängigkeiten installieren (kein sudo!).&lt;br /&gt;
# Die Zertifikatsdateien key.pem und cert.pem aus dem alten Verzeichnis &#039;&#039;alexa-fhem.old&#039;&#039; ins neue Verzeichnis &#039;&#039;alexa-fhem&#039;&#039; kopieren.&lt;br /&gt;
Natürlich dann den Dienst neu starten, auch müssen selbstredend irgendwelche Modifikationen an der Datei server.js in der neuen Version nachgezogen werden. Wenn alles läuft, kann das alte Verzeichnis &#039;&#039;alexa-fhem.old&#039;&#039; gelöscht werden.&lt;br /&gt;
===== Windows =====&lt;br /&gt;
# Das Verzeichnis &#039;&#039;alexa-fhem&#039;&#039; im Hauptverzeichnis von FHEM (z.B. &amp;lt;code&amp;gt;С:\Program Files (x86)\fhem&amp;lt;/code&amp;gt;) umbenennen in &#039;&#039;alexa-fhem.old&#039;&#039;.&lt;br /&gt;
# Die tgz-Datei der neuen Alexa-Fhem-Version im Hauptverzeichnis von FHEM entpacken.&lt;br /&gt;
# Das dabei entstandene Verzeichnis &#039;&#039;package&#039;&#039; in &#039;&#039;alexa-fhem&#039;&#039; umbenennen&lt;br /&gt;
# Windows-Shell (Kommandozeile, Eingabeaufforderung usw.) öffnen. &amp;quot;Start&amp;quot; -&amp;gt; &amp;quot;Ausführen&amp;quot; (oder [Windows-Taste]+[R]) -&amp;gt; cmd -&amp;gt; Ok. Durch &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;cd &amp;quot;&amp;lt;FHEM-Hauptverzeichis&amp;gt;\alexa-fhem&amp;quot;&amp;lt;/syntaxhighlight&amp;gt; in das Verzeichnis wechseln. &amp;lt;br/&amp;gt;Dabei ist natürlich das &amp;lt;FHEM-Hauptverzeichis&amp;gt; durch den entsprechenden Pfad aus dem Schritt 1 zu ersetzen. Im o.g. Beispiel wäre es &amp;lt;code&amp;gt;cd &amp;quot;С:\Program Files (x86)\fhem\alexa-fhem&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Mit &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/syntaxhighlight&amp;gt; alle Abhängigkeiten installieren.&lt;br /&gt;
# Die Zertifikatsdateien key.pem und cert.pem aus dem alten Verzeichnis &#039;&#039;alexa-fhem.old&#039;&#039; ins neue Verzeichnis &#039;&#039;alexa-fhem&#039;&#039; kopieren.&lt;br /&gt;
Natürlich dann den Dienst neu starten, auch müssen selbstredend irgendwelche Modifikationen an der Datei server.js in der neuen Version nachgezogen werden. Wenn alles läuft, kann das alte Verzeichnis &#039;&#039;alexa-fhem.old&#039;&#039; gelöscht werden.&lt;br /&gt;
&lt;br /&gt;
==== Alexa-Fhem konfigurieren ====&lt;br /&gt;
Der Inhalt der Datei &#039;&#039;~/.alexa/config.json&#039;&#039; muss an die eigene Umgebung angepasst werden. &lt;br /&gt;
# &#039;&#039;nat-pmp&#039;&#039; -&amp;gt; wenn nat-pmp verwendet werden soll: die ip des eigenen routers,&lt;br /&gt;
# &#039;&#039;nat-upnp&#039;&#039; -&amp;gt; wenn nat-upnp verwendet werden soll: &#039;&#039;true&#039;&#039;,&lt;br /&gt;
# &#039;&#039;applicationId&#039;&#039; &lt;br /&gt;
#:* Wenn man nur den SmartHome-Skill verwenden möchte, kann dieser Eintrag leer bleiben.&lt;br /&gt;
#:* Ansonsten ist er mit der SkillID des Alexa Custom Skills zu belegen, siehe Abschnitt [[#Skill_Id_bestimmen | Skill Id bestimmen]]&lt;br /&gt;
# &#039;&#039;oauthClientID&#039;&#039; -&amp;gt; &#039;&#039;Client ID&#039;&#039; dem Abschnitt [[#Login_with_Amazon | Login with Amazon]], Punkt 1&lt;br /&gt;
# &#039;&#039;server&#039;&#039; -&amp;gt; IP-Adresse des eigenen FHEM-Servers&lt;br /&gt;
# &#039;&#039;port&#039;&#039; -&amp;gt; Portnummer des eigenen FHEM-Servers&lt;br /&gt;
Beispiel:&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;alexa&amp;quot;: {&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;Alexa TEST&amp;quot;,&lt;br /&gt;
        &amp;quot;keyFile&amp;quot;: &amp;quot;./key.pem&amp;quot;,&lt;br /&gt;
        &amp;quot;certFile&amp;quot;: &amp;quot;./cert.pem&amp;quot;,&lt;br /&gt;
        &amp;quot;applicationId&amp;quot;: &amp;quot;amzn1.ask.skill.xxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;quot;,&lt;br /&gt;
        &amp;quot;oauthClientID&amp;quot;: &amp;quot;amzn1.application-oa2-client.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;connections&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;name&amp;quot;: &amp;quot;FHEM&amp;quot;,&lt;br /&gt;
            &amp;quot;server&amp;quot;: &amp;quot;192.168.0.xxx.xxx&amp;quot;,&lt;br /&gt;
            &amp;quot;port&amp;quot;: &amp;quot;8083&amp;quot;,&lt;br /&gt;
            &amp;quot;filter&amp;quot;: &amp;quot;room=AlexaRoom&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Mehrere Custom Skills lassen sich mit der folgenden Syntax eintragen&lt;br /&gt;
         &amp;quot;applicationId&amp;quot;: [ &amp;quot;amzn1.ask.skill.1&amp;quot; , &amp;quot;amzn1.ask.skill.2&amp;quot; ],&lt;br /&gt;
         &amp;quot;oauthClientID&amp;quot;: [ &amp;quot;amzn1.application-oa2-client.1&amp;quot; , &amp;quot;amzn1.application-oa2-client.1&amp;quot; ]&lt;br /&gt;
&lt;br /&gt;
Danach durch Aufruf von &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;./bin/alexa&amp;lt;/syntaxhighlight&amp;gt; den Dienst starten (kein sudo!)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unter Windows startet man Alexa-Dienst durch &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;node alexa&amp;lt;/syntaxhighlight&amp;gt; aus der &amp;lt;code&amp;gt;alex-fhem/bin&amp;lt;/code&amp;gt; (also erst z.B. durch &amp;lt;code&amp;gt;cd &amp;quot;&amp;lt;FHEM-Hauptverzeichis&amp;gt;\alexa-fhem\bin&amp;quot;&amp;lt;/code&amp;gt; ins richtige Verzeichnis kommen)&lt;br /&gt;
&lt;br /&gt;
Der Start des Alexa-Dienstes auf der Console ist immer dann zu empfehlen, wenn man auf die Ausgaben des Dienstes angewiesen ist und beispielsweise sehen möchte, welche Devices durch den Dienst bereitgestellt werden oder ob Fehler auftreten. Beendet man die Console-Session wird auch der Dienst wieder beendet. Insofern ist die vorgenannte Vorgehensweise nur für ein Debugging zu empfehlen und nicht im Regelbetrieb. Nachfolgend ist beschrieben, wie man den Alexa-Dienst aus FHEM heraus starten / stoppen und neu starten kann.&lt;br /&gt;
&lt;br /&gt;
==== Alexa-Fhem aus FHEM heraus starten ====&lt;br /&gt;
Zunächst das Start-up-Skript aus diesem Post herunterladen {{Link2Forum|Topic=60244|Message=517271|LinkText=https://forum.fhem.de/index.php/topic,60244.msg517271.html#msg517271}} und unter /etc/init.d/alexa speichern.&lt;br /&gt;
&lt;br /&gt;
Das Script geht davon aus, das der alexa-fhem script unter /opt/fhem/alexa-fhem liegt, und die logfiles später unter /opt/fhem/log. Sollte das nicht der Fall sein, muss das Skript angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Nun folgende Kommandos ausführen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;sudo chmod 755 /etc/init.d/alexa&lt;br /&gt;
sudo update-rc.d alexa defaults&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Datei &amp;lt;code&amp;gt;/etc/sudoers&amp;lt;/code&amp;gt; den User fhem für die Nutzung von sudo zulassen (&amp;lt;code&amp;gt;sudo nano /etc/sudoers&amp;lt;/code&amp;gt;), z.B. durch Anfügen der nachfolgenden Zeile:&lt;br /&gt;
&amp;lt;code&amp;gt;fhem ALL=(ALL) NOPASSWD: ALL&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun folgende Devices anlegen (ggf. einem Raum zuordnen, z.B. AlexaControl):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:75%;&amp;quot;&amp;gt;define FHEM.Alexa.Status dummy&lt;br /&gt;
&lt;br /&gt;
define FHEM.Alexa dummy&lt;br /&gt;
attr FHEM.Alexa event-on-change-reading state&lt;br /&gt;
attr FHEM.Alexa webCmd status:start:stop:restart&lt;br /&gt;
&lt;br /&gt;
define FHEM.Alexa.DOIF DOIF ([FHEM.Alexa] eq &amp;quot;start&amp;quot;) &lt;br /&gt;
(set FHEM.Alexa on, {system (&amp;quot;sudo /etc/init.d/alexa start &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&amp;quot;)}) &lt;br /&gt;
DOELSEIF ([FHEM.Alexa] eq &amp;quot;stop&amp;quot;)&lt;br /&gt;
(set FHEM.Alexa on, {system (&amp;quot;sudo /etc/init.d/alexa stop &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&amp;quot;)}) &lt;br /&gt;
DOELSEIF ([FHEM.Alexa] eq &amp;quot;restart&amp;quot;) &lt;br /&gt;
(set FHEM.Alexa on, {system (&amp;quot;sudo /etc/init.d/alexa restart &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&amp;quot;)}) &lt;br /&gt;
DOELSEIF ([FHEM.Alexa] eq &amp;quot;status&amp;quot;) &lt;br /&gt;
(set FHEM.Alexa on, {system (&amp;quot;sudo /etc/init.d/alexa status &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&amp;quot;)})&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Alexa-Fhem als Service (systemd) installieren ====&lt;br /&gt;
Auf neueren Installationen (z.B. RPi Jessie) wird init.d durch systemd ersetzt. Folgend die Anleitung um alexa-fhem als Service zu installieren auf einem Raspberry Pi mit Jessie.&lt;br /&gt;
&lt;br /&gt;
Zunächst einen neuen Benutzer anlegen unter dem alexa-fhem laufen soll, falls man nicht möchtet dass alexa-fhem z.B. mit dem fhem User ausgeführt wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:75%;&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -M --system alexa&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentlich braucht der Benutzer keine Gruppen, aber man kann den Benutzer auch der Gruppe &amp;lt;code&amp;gt;dialout&amp;lt;/code&amp;gt; hinzufügen (&amp;lt;code&amp;gt;sudo usermod -a -G dialout alexa&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Datei &amp;quot;alexa.service&amp;quot; unter &amp;lt;code&amp;gt;/etc/systemd/system&amp;lt;/code&amp;gt; anlegen:&lt;br /&gt;
&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Node.js Alexa Server &lt;br /&gt;
 After=syslog.target network-online.target&lt;br /&gt;
 &lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=simple&lt;br /&gt;
 User=alexa &lt;br /&gt;
 WorkingDirectory=/opt/alexa/alexa-fhem&lt;br /&gt;
 ExecStart=/opt/fhem/alexa-fhem/bin/alexa -U /home/alexa/.alexa&lt;br /&gt;
 Restart=on-failure&lt;br /&gt;
 RestartSec=10&lt;br /&gt;
 KillMode=process&lt;br /&gt;
 &lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target &lt;br /&gt;
&lt;br /&gt;
Den Pfad &amp;lt;code&amp;gt;/home/alexa/.alexa&amp;lt;/code&amp;gt; an die Systemgegebenheiten anpassen. Letztendlich kann die config.json irgendwo liegen, hauptsache alexa-fhem weiß wo. &lt;br /&gt;
&lt;br /&gt;
Im WorkingDirectory wird der alexa Dienst die Zertifikate suchen.&lt;br /&gt;
&lt;br /&gt;
Achtung: Natürlich muss der Benutzer auch Zugriff sowohl auf das Verzeichnis mit der config als auch das alexa-fhem Verzeichnis und das WorkingDirectory haben.&lt;br /&gt;
&lt;br /&gt;
Um den Service zu aktiveren und zu starten helfen folgende Befehle:&lt;br /&gt;
 sudo systemctl daemon-reload&lt;br /&gt;
 sudo systemctl enable alexa&lt;br /&gt;
 sudo systemctl start alexa&lt;br /&gt;
&lt;br /&gt;
Status abfragen mit&lt;br /&gt;
 sudo systemctl status alexa&lt;br /&gt;
&lt;br /&gt;
Log einsehen?&lt;br /&gt;
 sudo journalctl -u alexa&lt;br /&gt;
&lt;br /&gt;
(mit &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt; kann man den follow Modus aktivieren, wie &amp;lt;code&amp;gt;tail -f&amp;lt;/code&amp;gt;).&lt;br /&gt;
Bei einen reboot startet alexa-fhem jetzt automatisch.&lt;br /&gt;
&lt;br /&gt;
==== Alexa-Fhem testen ====&lt;br /&gt;
Node.Js stellt einen Web-Server am Port 3000 bereit, das oben erzeugte Zertifikat sichert diesen Zugang per SSL ab. Durch Aufruf der Adresse&lt;br /&gt;
&amp;lt;code&amp;gt;https://&amp;lt;IP-Adresse des Servers&amp;gt;:3000&amp;lt;/code&amp;gt; kann man testen, ob der Alexa-Fhem Service läuft - der Seitenaufruf liefert eine Zeile JSON-Code, beginnend mit&lt;br /&gt;
&amp;lt;code&amp;gt;{&amp;quot;header&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;UnsupportedOperationError&amp;quot;...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alexa Device anlegen ===&lt;br /&gt;
Das Modul 39_alexa.pm stellt innerhalb von FHEM verschiedene Attribute z.B. alexaName oder alexaRoom zur Verfügung. Manche dieser Attribute (wie z.b. alexaName) werden in beiden Skills verwendet, andere werden ausschließlich bei einer Nutzung des Alexa Custom Skill verwendet.&lt;br /&gt;
&lt;br /&gt;
Die Einrichtung des Alexa Device geschieht durch die nachfolgende Definition:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;define MyAlexa alexa&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alexa Skills ===&lt;br /&gt;
Für folgende Schritte muss man unter der Adresse http://developer.amazon.com angemeldet sein&lt;br /&gt;
# Anmeldung auswählen&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-01-login2.png|200px]]&lt;br /&gt;
# Anmeldedaten eingeben&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-02-userpass2.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==== Security Profile anlegen ====&lt;br /&gt;
Die Erzeugung eines Sicherheitsprofils muss nur einmal erfolgen, es wird dann für alle weiteren Skills verwendet.&lt;br /&gt;
# Nach der Anmeldung Auswahl von &#039;&#039;APPS &amp;amp; SERVICES&#039;&#039;&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-03-apps_and_services.png|200px]]&lt;br /&gt;
# Anschließend auswählen &#039;&#039;Security Profiles&#039;&#039;&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-05-apps_and_services_-_security_profiles.png|200px]]&lt;br /&gt;
# Auswählen &#039;&#039;Create a New Security Profile&#039;&#039; aus&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-06-apps_and_services_-_create_a_new_security_profile.png|200px]]&lt;br /&gt;
# Dann einen Namen und eine Beschreibung für das Profil eingeben und mit &#039;&#039;Save&#039;&#039; bestätigen&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-07-apps_and_services_-_security_profile_management.png|200px]]&lt;br /&gt;
&lt;br /&gt;
===== Login with Amazon =====&lt;br /&gt;
{{Randnotiz|RNTyp=[g|Info]|RNText=Hier wird beschrieben, wo &#039;&#039;Client Id&#039;&#039; und &#039;&#039;Client Secret&#039;&#039; zu finden sind}}&lt;br /&gt;
# Oben rechts auf &#039;&#039;Login with Amazon&#039;&#039; klicken.&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-08-login_with_amazon.png|200px]]&lt;br /&gt;
# Auf der neu geladenen Seite auswählen &#039;&#039;Sign up&#039;&#039;&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-09-login_with_amazon_-_sign_up.png|200px]]&lt;br /&gt;
# Anschließend im Dropdown Menü das vorher angelegte Profil auswählen und mit &#039;&#039;Confirm&#039;&#039; bestätigen&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-10-login_with_amazon_-_create_new_profile.png|200px]] [[Datei:Developer.amazon.com-11-login_with_amazon_-_create_new_profile2.png|200px]]&lt;br /&gt;
# Im folgenden Fenster die Adresse [https://www.amazon.com/gp/help/customer/display.html?nodeId=468496 https://www.amazon.com/gp/help/customer/display.html?nodeId=468496] eingeben und mit &#039;&#039;Save&#039;&#039; bestätigen. &#039;&#039;&#039;Todo Erklärungsbedarf: WARUM diese Adresse&#039;&#039;&#039;&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-12-login_with_amazon_-_enter_consent_screen_information.png|200px]]&lt;br /&gt;
# Anschließend bei dem neu angelegten Eintrag auf der rechten Seite auf das Zahnrad klicken und &#039;&#039;Web Settings&#039;&#039; auswählen&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-13-login_with_amazon_-_web_settings.png|200px]]&lt;br /&gt;
# Im neu geladenen Fenster anklicken von &#039;&#039;Edit&#039;&#039;&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-14-login_with_amazon_-_edit.png|200px]]&lt;br /&gt;
# Anschließend bei &#039;&#039;Allowed Return URLs&#039;&#039; die folgenden drei Adressen eingeben. &#039;&#039;xxx&#039;&#039; muss hierbei durch den Wert ersetzt werden, der in den beiden Abschnitten [[#SmartHome_Skill_anlegen | SmartHome Skill anlegen]] bzw. [[#Custom_Skill_anlegen | Custom Skill anlegen]] jeweils unter Punkt 4 (Seite &#039;&#039;Configuration&#039;&#039;) bei &#039;&#039;Redirect Urls&#039;&#039; am Ende der URLs angezeigt wird&lt;br /&gt;
## [https://layla.amazon.co.uk/api/skill/link/xxx https://layla.amazon.co.uk/api/skill/link/xxx]&lt;br /&gt;
## [https://pitangui.amazon.com/api/skill/link/xxx https://pitangui.amazon.com/api/skill/link/xxx]&lt;br /&gt;
## [https://layla.amazon.com/api/skill/link/xxx https://layla.amazon.com/api/skill/link/xxx]&lt;br /&gt;
.&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-15-login_with_amazon_-_allowed_return_urls.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==== Skills bearbeiten ====&lt;br /&gt;
# Im Menü den Punkt &#039;&#039;ALEXA&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-03-apps_and_services.png|200px]]&lt;br /&gt;
# Anschließend im Feld &#039;&#039;Alexa Skills Kit&#039;&#039; auf &#039;&#039;Get started&#039;&#039; klicken&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-17-alexa_-_alex_skills_kit_-_get_started.png|200px]]&lt;br /&gt;
&lt;br /&gt;
===== SmartHome Skill anlegen =====&lt;br /&gt;
# Oben rechts &#039;&#039;Add a New Skill&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-18-alexa_-_alex_skills_kit_-_add_a_new_skill.png|200px]]&lt;br /&gt;
# Auf der folgenden Seite eingeben und dann mit &#039;&#039;Next&#039;&#039; bestätigen:&lt;br /&gt;
#:* &#039;&#039;Skill Type&#039;&#039; -&amp;gt; &#039;&#039;SmartHome Skill API&#039;&#039; &lt;br /&gt;
#:* &#039;&#039;Language&#039;&#039; -&amp;gt; &#039;&#039;German&#039;&#039;&lt;br /&gt;
#:* &#039;&#039;Name&#039;&#039; -&amp;gt; beliebiger Name, z.B. &amp;quot;MySmartHome Basic&amp;quot;)&lt;br /&gt;
#:* &#039;&#039;Payload Version&#039;&#039; -&amp;gt; &#039;&#039;v2 (other devices)&#039;&#039; &amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-19-alexa_-_alex_skills_kit_-_skill_information.png|200px]]&lt;br /&gt;
# Die folgende Seite einfach mit &#039;&#039;Next&#039;&#039; überspringen&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-20-alexa_-_alex_skills_kit_-_interaction_model.png|200px]]&lt;br /&gt;
# Auf der Seite &#039;&#039;Configuration&#039;&#039; Folgendes eingeben:&lt;br /&gt;
#:* &#039;&#039;Service Endpoint Type&#039;&#039; -&amp;gt; &#039;&#039;AWS Lambda&#039;&#039; ist vorausgewählt und kann nicht geändert werden.&lt;br /&gt;
#:* &#039;&#039;Geographical Region&#039;&#039; -&amp;gt; &#039;&#039;Europe&#039;&#039; auswählen und im Textfeld die ARN aus Abschnitt [[#ARN_der_AWS_Lambda_Funktion_bestimmen | AWS Lambda Funktion]] eintragen. &lt;br /&gt;
#:* &#039;&#039;Authorization URL&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;https://www.amazon.com/ap/oa&amp;lt;/code&amp;gt;&lt;br /&gt;
#:* &#039;&#039;Client ID&#039;&#039; -&amp;gt; &#039;&#039;Client ID&#039;&#039; aus Abschnitt [[#Login_with_Amazon | Login with Amazon]], Punkt 1&lt;br /&gt;
#:* &#039;&#039;Scope&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;profile:user_id&amp;lt;/code&amp;gt;    (wörtlich 1:1 eintragen)&lt;br /&gt;
#:* &#039;&#039;Redirect URLs&#039;&#039; - sollten vorbelegt sein&lt;br /&gt;
#:* &#039;&#039;Authorization Grant Type&#039;&#039; -&amp;gt; &#039;&#039;Auth Code Grant&#039;&#039; auswählen&lt;br /&gt;
#:* &#039;&#039;Access Token URI&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;https://api.amazon.com/auth/o2/token&amp;lt;/code&amp;gt;&lt;br /&gt;
#:* &#039;&#039;Client Secret&#039;&#039; -&amp;gt; &#039;&#039;Client Secret&#039;&#039; aus Abschnitt [[#Login_with_Amazon | Login with Amazon]], Punkt 1&lt;br /&gt;
#:* &#039;&#039;Client Authentication Scheme&#039;&#039; -&amp;gt; &#039;&#039;HTTP Basic&#039;&#039;&lt;br /&gt;
#:* &#039;&#039;Privacy Policy URL&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;https://www.amazon.com/gp/help/customer/display.html?nodeId=468496&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-21-alexa_-_alex_skills_kit_-_configuration.png|200px]] [[Datei:Developer.amazon.com-22-alexa_-_alex_skills_kit_-_test.png|200px]]&lt;br /&gt;
&lt;br /&gt;
===== Custom Skill anlegen =====&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Oben rechts &#039;&#039;Add a New Skill&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-18-alexa_-_alex_skills_kit_-_add_a_new_skill.png|200px]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Auf der folgenden Seite (&#039;&#039;Skill Information&#039;&#039;) die nachstehenden Daten eingeben und dann mit &#039;&#039;Next&#039;&#039; bestätigen:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Skill Type&#039;&#039; -&amp;gt; &#039;&#039;Custom Interaction Model&#039;&#039; &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Language&#039;&#039; -&amp;gt; &#039;&#039;German&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Name&#039;&#039; -&amp;gt; beliebiger Name, z.B. &amp;quot;MySmartHome Advanced&amp;quot;. Dieser wird in der Alexa App unter &amp;quot;Meine Skills&amp;quot; angezeigt.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Invocation Name&#039;&#039; -&amp;gt; Aufruf des Skills, unter dem dieser später gestartet wird. Z.B. &amp;quot;Alexa, starte James&amp;quot;&amp;lt;br /&amp;gt;[[Datei:CustomSkill_2.PNG|400px]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Auf der Seite &#039;&#039;Interaction Model&#039;&#039; folgende Eingaben tätigen und mit &#039;&#039;Next&#039;&#039; abschließen&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In einem separaten Browserfenster FHEM aufrufen, und für das bereits definierte Alexa-Gerät das Kommando &amp;lt;code&amp;gt;get MyAlexa interactionModel&amp;lt;/code&amp;gt; aufrufen. Es erscheint ein Popup-Fenster mit ziemlich vielen Zeilen.&lt;br /&gt;
&amp;lt;li&amp;gt;In die Box &#039;&#039;Intent Schema&#039;&#039; kopiert man den ersten Teil dieser FHEM-Ausgabe hinein, also:&amp;lt;br/&amp;gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
 { &lt;br /&gt;
   &amp;quot;intents&amp;quot; : [ &lt;br /&gt;
    &amp;lt;hier ziemlich viele Zeilen&amp;gt;  &lt;br /&gt;
   ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Nun die &#039;&#039;Custom Slot Types&#039;&#039; einrichten. Dazu muss aus dem zweiten Teil der FHEM-Ausgabe jeweils der Slot-Type (z.B. &amp;lt;code&amp;gt;FHEM_article&amp;lt;/code&amp;gt;) in das Feld &#039;&#039;TYPE&#039;&#039; eingetragen werden, das nach dem Anklicken von &#039;&#039;Add Slot Type&#039;&#039; erscheint. In das darunter liegende größere Textfeld kommen die möglichen Werte für diesen Slot, so wie sie aus der FHEM-Ausgabe abzulesen sind. Dann mit &#039;&#039;Save&#039;&#039; sichern. Als Custom Slot Type erscheint dann für diesen Beispiel-Slot&lt;br /&gt;
 FHEM_article 	der | die | das | den&lt;br /&gt;
d.h., die Zeilenumbrüche bei den möglichen Werten werden als &amp;quot;|&amp;quot; dargestellt.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Hier muss nun ein Bruch im Arbeitsfluss durchgeführt werden, denn bei der Erstellung des Custom Skills kommt es auf die Reihenfolge der Einträge an. Deshalb zunächst diese FHEM-Ausgabe schließen, und für dasselbe FHEM-Device &amp;lt;code&amp;gt;get MyAlexa customSlotTypes&amp;lt;/code&amp;gt; ausführen. Auch diese Ausgabe wird, wie oben beschriebeen, in Custom Slot Types eingetragen (erst der TYPE, dann die möglichen Werte)&lt;br /&gt;
&amp;lt;li&amp;gt;Anschließend erneut die FHEM-Ausgabe schließen und erneut  für das bereits definierte Alexa-Gerät das Kommando &amp;lt;code&amp;gt;get MyAlexa interactionModel&amp;lt;/code&amp;gt; aufrufen.&lt;br /&gt;
&amp;lt;li&amp;gt;Unter &#039;&#039;Sample Utterances&#039;&#039; nun den Text aus dem dritten Teil dieser FHEM-Ausgabe hineinkopieren&amp;lt;br /&amp;gt;[[Datei:CustomSkill_5.PNG|400px]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Auf der Seite &#039;&#039;Configuration&#039;&#039; Folgendes eingeben und mit &#039;&#039;Next&#039;&#039; bestätigen:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Service Endpoint Type&#039;&#039; -&amp;gt; &#039;&#039;AWS Lambda&#039;&#039; auswählen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Geographical Region&#039;&#039; -&amp;gt; &#039;&#039;Europe&#039;&#039; auswählen und im Textfeld den Wert aus Abschnitt [[#AWS_Lambda_Funktion_anlegen | AWS Lambda Funktion anlegen]] (Punkt 12) eintragen. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Do you allow users to create an account or link to an existing account with you?&#039;&#039; -&amp;gt; &#039;&#039;Yes&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Authorization URL&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;https://www.amazon.com/ap/oa&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Client ID&#039;&#039; -&amp;gt; &#039;&#039;Client ID&#039;&#039; aus Abschnitt [[#Login_with_Amazon | Login with Amazon]], Punkt 1&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Scope&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;profile:user_id&amp;lt;/code&amp;gt; (wörtlich 1:1 eintragen)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Redirect URLs&#039;&#039; - sollten vorbelegt sein&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Authorization Grant Type&#039;&#039; -&amp;gt; &#039;&#039;Auth Code Grant&#039;&#039; auswählen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Access Token URI&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;https://api.amazon.com/auth/o2/token&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Client Secret&#039;&#039; -&amp;gt; &#039;&#039;Client Secret&#039;&#039; aus Abschnitt [[#Login_with_Amazon | Login with Amazon]], Punkt 1&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Client Authentication Scheme&#039;&#039; -&amp;gt; &#039;&#039;HTTP Basic&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Privacy Policy URL&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;https://www.amazon.com/gp/help/customer/display.html?nodeId=468496&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Beim Sichern dieser Seite mit &#039;&#039;Next&#039;&#039; kann es zu einer Fehlermeldung kommen, wenn man seine Skill-Definitionen mit dem einfachen SmartHome-Skill begonnen hat. Deshalb muss noch der entsprechende Trigger für die [[#AWS_Lambda-Funktion | AWS Lambda Funktion]] nachgetragen werden, dies wird in Abschnitt [[#Trigger_f.C3.BCr_Custom_Skill_hinzuf.C3.BCgen | Trigger für Custom Skill hinzufügen]] beschrieben.&lt;br /&gt;
&amp;lt;br /&amp;gt;[[Datei:CustomSkill_6.PNG|400px]] [[Datei:CustomSkill_7.PNG|400px]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Testen ====&lt;br /&gt;
Hat man den Custom Skill angelegt, bietet dieser auch eine komfortable Testmöglichkeit. Dazu wählt man in der Übersichtsseite &#039;&#039;All Skills&#039;&#039; den Button &#039;&#039;Edit&#039;&#039; des Alexa Custom Skill aus. Auf der nachfolgenden Seite dann links &#039;&#039;Test&#039;&#039;. &lt;br /&gt;
Die Testseite enthält &lt;br /&gt;
* ein Feld &#039;&#039;Voice Simulator&#039;&#039;, mit dem man die Sprachsausgabe testen kann, &lt;br /&gt;
* ein Feld &#039;&#039;Service Simulator&#039;&#039;, mit dem die Verarbeitung von Alexa-Kommandois getestet werden kann. Hier kann man z.B. eintragen&lt;br /&gt;
 &amp;quot;Alexa, sage &amp;lt;Custom Skill Invocation Name&amp;gt;: Stelle Weckzeit auf Neunzehn Siebenundzwanzig Uhr&amp;quot;&lt;br /&gt;
 &amp;quot;Alexa, frage &amp;lt;Custom Skill Invocation Name&amp;gt; nach dem Status von Weckzeit&amp;quot;&lt;br /&gt;
Dabei ist natürlich der &#039;&#039;Custom Skill Invocation Name&#039;&#039; durch den Wert zu ersetzen, den man im Abschnitt [[#Custom_Skill_anlegen | Custom Skill Anlegen]] unter Punkt 2 eingetragen hat.&lt;br /&gt;
&lt;br /&gt;
==== Skill Id bestimmen ====&lt;br /&gt;
{{Randnotiz|RNTyp=[g|Info]|RNText=Hier wird beschrieben, wo die &#039;&#039;Alexa Skill Id&#039;&#039; zu finden ist}}&lt;br /&gt;
Für das [[#AWS_Lamba_Funktion_anlegen | Anlegen einer &#039;&#039;AWS Lambda Funktion&#039;&#039;]] bzw für die [[#Alexa-Fhem_konfigurieren | Konfiguration von Alexa-Fhem]] wird die &#039;&#039;Alexa Skill Id&#039;&#039; benötigt. An diese kommt man wie folgt:&lt;br /&gt;
# Anmelden wie unter [[#Alexa_Skills | Alexa Skills]] beschrieben.&lt;br /&gt;
# Menüpunkt &#039;&#039;ALEXA&#039;&#039; auswählen, wie [[#Skills_bearbeiten | Skills bearbeiten]] erklärt.&lt;br /&gt;
# Beim gewünschten Eintrag auf &#039;&#039;Edit&#039;&#039; klicken&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-23-alexa_-_alex_skills_kit_-_overview.png|200px]]&lt;br /&gt;
# Die Id, die nun oben angezeigt wird, ist die gesuchte. Sie hat typischerweise das Format &amp;lt;code&amp;gt;amzn1.ask.skill.[Zahlen und Bindestriche]&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-06-configure_triggers2.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== AWS Lambda Funktion ===&lt;br /&gt;
Für folgende Schritte muss man unter der Adresse http://aws.amazon.com angemeldet sein&lt;br /&gt;
# Anmeldung auswählen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-01-site.png|200px]]&lt;br /&gt;
# Anmeldedaten eingeben&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-02-login.png|200px]]&lt;br /&gt;
# Den Punkt &#039;&#039;Lambda&#039;&#039; links auf der Startseite auswählen, bzw. im Menü &#039;&#039;Services&#039;&#039; unter &#039;&#039;Compute&#039;&#039; den Menüpunkt &#039;&#039;Lambda&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-03-lambda.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==== AWS Lambda Funktion anlegen ====&lt;br /&gt;
# Für eine erste Lambda-Funktion den Punkt &#039;&#039;Get Started Now&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-04-get_started_now.png|200px]]&lt;br /&gt;
# Den Blueprint &#039;&#039;Blank function&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-05-select_blueprint.png|200px]]&lt;br /&gt;
# Im neuen Fenster dann auf den gestrichelten Kasten klicken und &#039;&#039;Alexa Smart Home&#039;&#039; auswählen und mit &#039;&#039;Next&#039;&#039; bestätigen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-06-configure_triggers1.png|200px]]&lt;br /&gt;
## Achtung, es ist möglich, dass dabei &#039;&#039;Alexa Smart Home&#039;&#039; überhaupt nicht angeboten wird. Dann bitte ganz rechts oben in der Ecke nachsehen, welche Region bzw. welches Land ausgewählt ist. Empfohlen wird, &#039;&#039;Ireland&#039;&#039; auszuwählen. Dann erscheint bei den Funktionen auch &#039;&#039;Alexa Smart Home&#039;&#039;.&lt;br /&gt;
# Bei &#039;&#039;Application Id&#039;&#039; den Wert eintragen, dessen Ermittlung im Abschnitt [[#Skill_Id_bestimmen | Skill Id bestimmen]] beschrieben wird, den Haken bei &#039;&#039;Enable trigger&#039;&#039; setzen und mit &#039;&#039;Next&#039;&#039; bestätigen &amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-06-configure_triggers3.png|200px]]&lt;br /&gt;
# Auf der Konfigurationsseite eingeben:&lt;br /&gt;
## &#039;&#039;Name&#039;&#039; -&amp;gt; &#039;&#039;FHEM&#039;&#039;&lt;br /&gt;
## &#039;&#039;Runtime&#039;&#039; -&amp;gt; Node.js 4.3. &lt;br /&gt;
## &#039;&#039;Role&#039;&#039; -&amp;gt; &#039;&#039;Choose an existing role&#039;&#039; &lt;br /&gt;
### Achtung: wenn es noch keine existing role gibt, zuerst &#039;&#039;Create a custom role&#039;&#039; -&amp;gt; in dem Popup dann &#039;&#039;lambda_basic_execution&#039;&#039; auswählen und auf &#039;&#039;Allow&#039;&#039; klicken sowie bei &#039;&#039;Existing role&#039;&#039; dann &#039;&#039;x&#039;&#039; wählen.&lt;br /&gt;
# Auf der Code-Seite ist im großen Textfeld dann der Code aus der Datei &#039;&#039;lambda.js&#039;&#039; im Paket [[#Alexa-Fhem_installieren | Alexa-Fhem]] vollständig einzufügen. Dabei muss der vorhandene Code im Texteil komplett gelöscht, der Teil aus der &#039;&#039;lamda.js&#039;&#039; eingefügt und noch der Hostname im Quellcode an den eigenen Hostnamen angepasst werden. &lt;br /&gt;
# Anschließend alles mit &#039;&#039;Next&#039;&#039; bestätigen.&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-07-configure_function.png|200px]]&lt;br /&gt;
# Auf der Übersichtsseite dann &#039;&#039;Create function&#039;&#039; anklicken&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-08-review.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==== Trigger für Custom Skill hinzufügen ====&lt;br /&gt;
Editiert man eine Lambda-Funktion, werden auf der Seite &#039;&#039;Triggers&#039;&#039; diejenigen Dienste angezeigt, die diese Funktion aufrufen.&lt;br /&gt;
* Hier taucht der Trigger &#039;&#039;Alexa Smart Home&#039;&#039; zusammen mit der &#039;&#039;Application Id&#039;&#039; auf, der bei der Einrichtung des SmartHome-Skills eingetragen wurde.&lt;br /&gt;
* Zur Verbindung mit dem Custom Skill ist es nötig, einen zweiten Trigger hinzuzufügen. Durch Anklicken von &#039;&#039;Add Trigger&#039;&#039; wird eine Auswahlseite eingeblendet. Im neuen Fenster dann auf den gestrichelten Kasten klicken und &#039;&#039;Alexa Skills Kit&#039; auswählen und mit &#039;&#039;Next&#039;&#039; bestätigen&lt;br /&gt;
&lt;br /&gt;
==== ARN der AWS Lambda Funktion bestimmen ====&lt;br /&gt;
# Auf der Übersichtsseite oben links den Menüpunkt &#039;&#039;Functions&#039;&#039; aúswählen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-09-go_overview.png|200px]]&lt;br /&gt;
# Anschließend den Radiobutton der angelegten Funktion &#039;&#039;FHEM&#039;&#039; markieren und im Menü &#039;&#039;Action&#039;&#039; den Punkt &#039;&#039;Show ARN&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-10-1-show_arn.png|200px]]&lt;br /&gt;
# Es wird nun eine ARN Adresse angezeigt, die für den Abschnitt [[#SmartHome_Skill_anlegen| SmartHome Skill anlegen]] benötigt wird&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-10-2-arn.png|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Absichern des Zugriffs ===&lt;br /&gt;
Natürlich muss der Zugriff auf den von Alexa-Fhem verwendeten Port (default: 3000, Bestandteil des Codes in der AWS Lambda-Funktion) durch die Firewall freigeschaltet werden (auf einer FritzBox unter &amp;quot;Portfreigaben&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
==== Absicherung direkt in Alexa-FHEM ====&lt;br /&gt;
Die Kommunikation zwischen Amazon AWS und Alexa-FHEM ist auf die folgenden Arten gesichert:&lt;br /&gt;
* Die Verbindung erfolgt per HTTPS&lt;br /&gt;
* Es werden nur Verbindung angenommen auf denen ein gültiges Alexa-Event gesendet wird. &lt;br /&gt;
* Es werden nur Verbindungen angenommen die ein gültiges und noch nicht abgelaufenes OAuth-Token enthalten. Jedes neue Token wird live bei Amazon auf Gültigkeit geprüft.    &lt;br /&gt;
* Es werden nur Verbindungen mit lokal konfigurierter Skill-ID angenommen.&lt;br /&gt;
* Es ist nicht möglich von außen beliebige FHEM Kommandos zu senden. Die FHEM Kommandos werden nur lokal erzeugt.&lt;br /&gt;
&lt;br /&gt;
Wer möchte kann Alexa-FHEM natürlich noch weiter absichern. Es gilt aber, dass nicht jedes zusätzliche Glied in der Kette die Sicherheit sondern unter Umständen nur die Angriffsfläche erhöht. Ein falsch konfigurierter und nach aussen offener Apache (oder anderer ReverseProxy) ist unter Umständen ein größeres Risiko als Alexa-FHEM alleine.&lt;br /&gt;
&lt;br /&gt;
==== Absicherung per ReverseProxy ====&lt;br /&gt;
&amp;lt;s&amp;gt;Die Kommunikation zwischen Amazon und FHEM ist wegen der Verwendung von SSL schon verschlüsselt - prinzipiell kann aber jeder von außen mit Alexa-Fhem kommunizieren. Man sollte sich deshalb im Klaren darüber sein, dass dies eine Sicherheitslücke darstellt:&amp;lt;/s&amp;gt; Jeder offene Port verleitet zu Angriffen, und mit zunehmender Verbreitung von Alexa steigt auch das Risiko. Es wird deshalb empfohlen, vor den eigentlichen Alexa-Server zur Absicherung einen Apache-Webserver als ReverseProxy zu setzen. Nicht nur ist der Apache eine hervorragend stabile und seit Jahrzehnten getestete Software, sondern die Konfiguration als ReverseProxy erlaubt auch, den Zugriff auf den Alexa-Fhem-Rechner auf die Amazon-Maschinen zu beschränken.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung: Dies ist keine allgemeine Anleitung in Sachen Computersicherheit.&#039;&#039;&#039; Im Folgenden gehen wir davon aus, dass &lt;br /&gt;
* Grundbegriffe wie Firewall, IP-Ports, SSL und Dynamic DNS vertraut sind&lt;br /&gt;
* Ein Apache Webserver (idealerweise auf einer zweiten Maschine) bereits installiert ist und die Konfiguration verstanden wurde (wenn nicht: Es gibt im Netz &#039;&#039;tausende&#039;&#039; von Anleitungen dafür...)&lt;br /&gt;
* Ein Servername von einem DynDNS-Anbieter - sagen wir &#039;&#039;myhome.is-my-castle.com&#039;&#039; - bereits von &#039;&#039;außen&#039;&#039; auf unser SmartHome zeigt.&lt;br /&gt;
* Alexa-Fhem in einer der oben beschriebenen Basiskonfigurationen läuft, d.h. der Zugriff auf &amp;lt;code&amp;gt;https://myhome.is-my-castle.com:3000&amp;lt;/code&amp;gt; ergibt, wie im Punkt [[#Alexa-Fhem_testen|Alexa-Fhem testen]] beschrieben, eine Antwort des Node.js Servers.&lt;br /&gt;
&lt;br /&gt;
Als erster Schritt zur Absicherung muss das ReverseProxy Modul für den Apache installiert und mit &amp;lt;code&amp;gt;a2enmod&amp;lt;/code&amp;gt; aktiviert werden, hierzu sei auf [https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-proxy-using-mod_proxy-extension diese Anleitung] verwiesen. Der zweite Schritt besteht darin, den SSL-Zugriff durch ein Passwort abzusichern. Dazu wird auf dem Apache-Rechner das Programm &lt;br /&gt;
 htpasswd &amp;lt;passwdfile&amp;gt; &amp;lt;username&amp;gt;&lt;br /&gt;
ausgeführt, das Programm fragt dann nach dem gewünschten Passwort. Wir nehmen im Folgenden an, dass das Passwortfile &#039;&#039;/etc/apache2/htpasswd&#039;&#039; ist, der gesetzte Username &#039;&#039;alexa&#039;&#039; lautet und das Passwort &#039;&#039;my_smarthome&#039;&#039; ist.&lt;br /&gt;
&lt;br /&gt;
Im dritten Schritt wird nun in das Apache-Konfigurationsfile die Weiterleitung auf den eigentlichen Alexa-Fhem-Rechner eingetragen. Dazu wählen wir, dass von außen der Standard-SSL-Port 443 benutzt werden soll, sowie als Verzeichnisname &#039;&#039;/alexa&#039;&#039;. &#039;&#039;&#039;Achtung:&#039;&#039;&#039; Dieser Code soll &#039;&#039;&#039;nicht&#039;&#039;&#039; in die Default-Konfiguration des Apache-Webservers. Sondern in eine separate Datei (Dateiname z.B. &amp;quot;fhem&amp;quot;), die ins Unterverzeichnis /etc/apache2/conf.d gestellt wird.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
  ServerName myhome.is-my-castle.com&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLProxyEngine on&lt;br /&gt;
  SSLProxyCheckPeerCN off&lt;br /&gt;
  SSLProxyCheckPeerName off&lt;br /&gt;
  SSLCertificateKeyFile /etc/apache2/mycert/server.key&lt;br /&gt;
  SSLCertificateFile /etc/apache2/mycert/server.crt&lt;br /&gt;
 &amp;lt;Location /alexa&amp;gt;&lt;br /&gt;
  AuthType Basic&lt;br /&gt;
  AuthName &amp;quot;Authentication Required&amp;quot;&lt;br /&gt;
  AuthUserFile &amp;quot;/etc/apache2/htpasswd&amp;quot;&lt;br /&gt;
  Require valid-user&lt;br /&gt;
  ProxyPass https://&amp;lt;hier IP-Adresse des Alexa-Fhem-Rechners&amp;gt;:3000/&lt;br /&gt;
  ProxyPassReverse https://&amp;lt;hier IP-Adresse des Alexa-Fhem-Rechners&amp;gt;:3000/&lt;br /&gt;
  Order deny,allow&lt;br /&gt;
  Allow from All&lt;br /&gt;
 &amp;lt;/Location&amp;gt;&lt;br /&gt;
 (... Hier eventuell weitere Umleitungen)&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
Nach einem Neustart des Apache-Servers, dem Schließen des Ports 3000 in der Firewall sowie dem Öffnen des Ports 443 ist der Alexa-Fhem-Rechner von außen nur noch erreichbar durch den Aufruf von &amp;lt;code&amp;gt;https://myhome.is-my-castle.com/alexa&amp;lt;/code&amp;gt; und verlangt unmittelbar die Eingabe von Username und Passwort.&lt;br /&gt;
&lt;br /&gt;
Der vierte Schritt ist nun, den Code der AWS Lambda-Funktion an fünf Stellen zu verändern&lt;br /&gt;
 &#039;&#039;&#039;const PORT=443;&#039;&#039;&#039;&lt;br /&gt;
 const HOST=&#039;myhome.is-my-castle.com&#039;;&lt;br /&gt;
 &#039;&#039;&#039;const PATH=&#039;/alexa&#039;;&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;const AUTH=&#039;alexa:my_smarthome&#039;;&#039;&#039;&#039;&lt;br /&gt;
 // entry&lt;br /&gt;
 exports.handler = function(event, context, callback) {&lt;br /&gt;
  console.log(`EVENT: ${event}`);&lt;br /&gt;
  console.log(`CONTEXT: ${context}`);  &lt;br /&gt;
  var post_data = JSON.stringify(event);&lt;br /&gt;
  var options = {&lt;br /&gt;
    hostname: HOST,&lt;br /&gt;
    port: PORT,&lt;br /&gt;
    //family: 6,&lt;br /&gt;
    &#039;&#039;&#039;path: PATH,&#039;&#039;&#039;&lt;br /&gt;
    method: &#039;POST&#039;,&lt;br /&gt;
    &#039;&#039;&#039;auth: AUTH,&#039;&#039;&#039;&lt;br /&gt;
    rejectUnauthorized: false, // accept self-signed&lt;br /&gt;
 (etc., Rest des Codes wie gehabt)&lt;br /&gt;
Natürlich muss der Zugriff getestet werden. Bei Beachtung aller dieser Schritte werden alle un-autorisierten Zugriffe von außen abgewehrt. Eine noch weiter gehende Sicherung ist möglich, dazu kann in der Serverkonfiguration der Zugriff auf die Amazon-Domains beschränkt werden. Das ganze Alexa-System ist aber noch in konstanter Weiterentwicklung, diese Domain-Namen können sich also noch ändern.&lt;br /&gt;
&lt;br /&gt;
== Einrichtung in der Alexa App==&lt;br /&gt;
Nachdem die Alexa Skills angelegt wurden, müssen diese noch in der Alexa App eingerichtet werden.&lt;br /&gt;
Dafür jeweils per Desktop-Browser auf [http://alexa.amazon.de alexa.amazon.de] anmelden, nicht die App unter iOS oder Android verwenden. Diese hat Probleme mit der OAuth Verknüpfung.&lt;br /&gt;
&lt;br /&gt;
=== Alexa Skill ===&lt;br /&gt;
# Auf &#039;&#039;Skills&#039;&#039; klicken&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-01-startseite.png|200px]]&lt;br /&gt;
# Oben rechts &#039;&#039;Meine Skills&#039;&#039;  bzw. &#039;&#039;Ihre Skills&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-03-meine_skills.png|200px]]&lt;br /&gt;
# In der Liste der Skills sollte das angelegte FHEM Skill angezeigt werden. Dieses anklicken&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-02-liste_skills.png|200px]]&lt;br /&gt;
# Oben Rechts in den Details des Skills auf &#039;&#039;Skill aktivieren&#039;&#039; klicken&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-04-skill_details.png|200px]]&lt;br /&gt;
# In dem neu geöffneten Fenster die Autorisierung bestätigen&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-05-amazon_auth.png|200px]]&lt;br /&gt;
# Anschließend sollte die Verbindung erfolgreich aufgebaut worden sein &amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-06-success.png|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Geräte ===&lt;br /&gt;
# Auf http://alexa.amazon.de anmelden&lt;br /&gt;
# Auf &#039;&#039;Smart Home&#039;&#039; klicken&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-01-startseite.png|200px]]&lt;br /&gt;
# Anschließend den Punkt &#039;&#039;Geräte suchen&#039;&#039; anklicken&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-07-Gerätesuche.png|200px]]&lt;br /&gt;
# Wurde soweit alles korrekt eingerichtet, werden nun die gefundenen Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
Tip: Es macht Sinn, unter &#039;&#039;Meine Gruppen&#039;&#039; Gruppen benannt nach den Räumen einzurichten. Hierdurch kann Alexa die Geräte besser auseinander halten, vor allem wenn die den gleichen Alias (z.B. &amp;quot;Licht&amp;quot;) haben.&lt;br /&gt;
&lt;br /&gt;
== Einrichtung unter FHEM ==&lt;br /&gt;
Im Folgenden werden exemplarisch ein paar Geräte beschrieben, die man nutzbringend mit FHEM einsetzen kann.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung des Custom Skills übersetzt die Kombination der Attribute &#039;&#039;alexaMapping&#039;&#039; und &#039;&#039;homebridgeMapping&#039;&#039; Sprachbefehle (&amp;quot;Intents&amp;quot;) in gerätespezifische Kommandos. &lt;br /&gt;
* Das Attribut alexaMapping wird am Alexa-Device gesetzt und dient dazu, erkannte Sprachkommandos in abstrakte Characteristiken zu überführen. Für den einfacheren SmartHome Skill hat darum das Attribut &#039;&#039;alexaMapping&#039;&#039; keine Bedeutung, sondern nur der &#039;&#039;genericDeviceType&#039;&#039; des zu steuernden Gerätes.&lt;br /&gt;
* Das Attribut homebridgeMapping wird für beide Skills am zu steuernden Gerät gesetzt und übersetzt diese Charakteristiken in die konkreten Befehle, die das Gerät versteht. Der inhalt des Attributs wird von links nach rechts ausgewertet und ist wie folgt aufgebaut:&lt;br /&gt;
** Das Attribut enthält eine durch Leerzeichen getrennte Liste aus Konfigurationen für jeweils eine Characteristik&lt;br /&gt;
** Jede einzelne der Characteristik-Konfigurationen besteht aus dem Namen der Characteristik, gefolgt von &amp;quot;=&amp;quot; und einer kommaseparierten Liste von Parametern.&lt;br /&gt;
  attr &amp;lt;device&amp;gt; homebridgeMapping &amp;lt;Characteristic1&amp;gt;=&amp;lt;param1.1&amp;gt;,&amp;lt;param1.2&amp;gt;,... &amp;lt;Characteristic2&amp;gt;=&amp;lt;param2.1&amp;gt;,&amp;lt;param2.2&amp;gt;,...&lt;br /&gt;
** Jeder Parameter besteht entweder aus&lt;br /&gt;
*** &amp;lt;code&amp;gt;&amp;lt;cmd&amp;gt;:&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;&amp;lt;/code&amp;gt;, hier können nicht verwendete Elemente von links nach rechts weg gelassen werden.&lt;br /&gt;
*** &amp;lt;code&amp;gt;&amp;lt;name&amp;gt;=&amp;lt;value&amp;gt;&amp;lt;/code&amp;gt;, hier kann &amp;lt;code&amp;gt;&amp;lt;value&amp;gt;&amp;lt;/code&amp;gt; entweder ein Wert oder semikolonseparierte Liste sein.&lt;br /&gt;
*** Oder dem schlüsselwort &amp;lt;code&amp;gt;clear&amp;lt;/code&amp;gt;, welches alle vorhandenen (default) Parameter dieser Characteristik löscht. &amp;lt;code&amp;gt;clear&amp;lt;/code&amp;gt; kann auch an Stelle einer ganzen Characteristik-Konfiguration stehen&lt;br /&gt;
Weiter führende Dokumentation zum homebridgeMapping findet sich unter https://forum.fhem.de/index.php/topic,48558.0.html&lt;br /&gt;
&lt;br /&gt;
=== Einfacher Schalter ===&lt;br /&gt;
* Ein einfacher Schalter, der die set-Kommandos &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; kennt, kann direkt mit Alexa-Fhem gekoppelt werden &lt;br /&gt;
* Für kompliziertere Aktionen, etwa das Übermitteln eines spezifischen Schaltbefehls an FHEM, ist die Einrichtung eines Dummies zu empfehlen. &lt;br /&gt;
Ob Dummy oder nicht, wichtig sind die drei fett gedruckten Zeilen&lt;br /&gt;
 define Alexa.Party dummy&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Party alexaName party&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Party alexaRoom alexaroom&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Party genericDeviceType switch&#039;&#039;&#039;&lt;br /&gt;
 attr Alexa.Party group AlexaGeräte&lt;br /&gt;
 attr Alexa.Party room AlexaRoom&lt;br /&gt;
 attr Alexa.Party setList on off&lt;br /&gt;
Selbstverständlich kann man diesen Dummy mit einem notify oder DOIF abfangen, um die gewünschte Schaltaktion auszuführen. &lt;br /&gt;
&lt;br /&gt;
Ein Alternative zum Dummy ist das Anlegen eines readingsProxy, dem die entsprechenden Attribute gegeben werden.&lt;br /&gt;
&lt;br /&gt;
Weil es sich hierbei um eines der einfachen Geräte handelt, die Alexa selbst im SmartHome Skill bearbeiten kann, ist auch der zweite Schritt bei der Einrichtung in der Alexa App sinnvoll: Der Schalter wird dann im Bereich Smart Home der Alexa App erkannt. Wer ihn auch mit dem Custon Skill bedienen möchte, muss natürlich Sorge tragen, dass der Alexa-Name &#039;&#039;party&#039;&#039; bei den FHEM_Devices auftaucht und die entsprechenden weiteren Slot Types und Example Utterances in der Konfiguration des Custom Skills vorhanden sind (siehe Abschnitt [[##Custom_Skill_anlegen | Custom Skill Anlegen]]).&lt;br /&gt;
&lt;br /&gt;
=== Wecker ===&lt;br /&gt;
Dieses Gerät kann man nur mit dem Custom Skill bedienen, es wird also &#039;&#039;&#039;nicht&#039;&#039;&#039; im Bereich Smart Home der Alexa App auftauchen. Wir richten einen Dummy ein, wichtig sind wieder die fett gedruckten Zeilen:&lt;br /&gt;
 define Alexa.Weckzeit dummy&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Weckzeit alexaName weckzeit&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Weckzeit alexaRoom alexaroom&#039;&#039;&#039;&lt;br /&gt;
 attr Alexa.Weckzeit genericDeviceType clock&lt;br /&gt;
 attr Alexa.Weckzeit group AlexaGeräte&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Weckzeit homebridgeMapping Weckzeit=state,cmd=+&#039;&#039;&#039;&lt;br /&gt;
 attr Alexa.Weckzeit room AlexaRoom&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Weckzeit setList Weckzeit:time&#039;&#039;&#039;&lt;br /&gt;
Das Attribut &#039;&#039;genericDeviceTye&#039;&#039; ist nicht wichtig, weil es ein generisches Device dieser Art gar nicht gibt. Wichtig hingegen ist das Attribut &#039;&#039;homebridgeMapping&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Für das Gerät &#039;&#039;MyAlexa&#039;&#039;, das in Abschnitt definiert wurde, muss im Attribut &#039;&#039;alexaMapping&#039;&#039; auftauchen&lt;br /&gt;
 Weckzeit=verb=stelle,valuePrefix=für;auf,values=AMAZON.TIME,valueSuffix=uhr&lt;br /&gt;
Darüber hinaus muss der Alexa-Name &#039;&#039;weckzeit&#039;&#039; bei den FHEM_Devices auftauchen und die entsprechenden weiteren Slot Types und Example Utterances in der Konfiguration des Custom Skills vorhanden sein (siehe Abschnitt [[#Custom_Skill_anlegen | Custom Skill Anlegen]]).&lt;br /&gt;
&lt;br /&gt;
Der Aufruf dieses Gerätes mit Alexa erfolgt dann z.B. mit den Sätzen&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;Alexa, sage &amp;lt;Custom Skill Invocation Name&amp;gt;: Stelle Weckzeit auf Neunzehn Uhr Siebenundzwanzig&amp;quot;&lt;br /&gt;
&amp;quot;Alexa, frage &amp;lt;Custom Skill Invocation Name&amp;gt; nach dem Status von Weckzeit&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dabei ist natürlich der &#039;&#039;Custom Skill Invocation Name&#039;&#039; durch den Wert zu ersetzen, den man im Abschnitt [[#Custom_Skill_anlegen | Custom Skill Anlegen]] unter Punkt 2 eingetragen hat.&lt;br /&gt;
&lt;br /&gt;
Zur weiteren Bearbeitung kann man jetzt mit einem DOIF Statusänderungen des Dummies abfangen und durch eine kleine Helperfunktion ins &amp;quot;echte&amp;quot; FHEM weiterleiten.&lt;br /&gt;
  define Alexa.Weckzeit.N DOIF ([&amp;quot;Alexa.Weckzeit:.*&amp;quot;])({AlexaHelper(&amp;quot;Alexa.Weckzeit&amp;quot;,&amp;quot;$EVENT&amp;quot;)}) &lt;br /&gt;
Die Helperfunktion (z.B. in 99_myUtils.pm) stellt aus der übergebenen Zeit (immer im Format dd:mm) eine sprachkompatible Nachricht $nc und einen mit den FHEM-Zeitangaben kompatiblen String $nt zusammen und reicht beide an eine Routine &#039;&#039;changeWakeTime&#039;&#039; weiter (dokumentiert in den [https://www.dpunkt.de/buecher/12387/9783960090120-smarthome-hacks.html Smart Home Hacks]).&lt;br /&gt;
 sub AlexaHelper($$){&lt;br /&gt;
  my ($name,$event)=@_;&lt;br /&gt;
  if( $name eq &amp;quot;Alexa.Weckzeit&amp;quot; ){ &lt;br /&gt;
    my ($nc,$nt);&lt;br /&gt;
    #-- volle Stunde----------------------------------------&lt;br /&gt;
    if( $event =~ /(\d+):00/ ){&lt;br /&gt;
      $nc=sprintf(&amp;quot;%d Uhr&amp;quot;,$1);&lt;br /&gt;
      $nt=sprintf(&amp;quot;%02d:00:00&amp;quot;,$1);&lt;br /&gt;
    #-- nicht volle Stunde---------------------------------&lt;br /&gt;
    }elsif( $event =~ /(\d+):(\d+)/ ){&lt;br /&gt;
      $nc=sprintf(&amp;quot;%d Uhr %d&amp;quot;,$1,$2);&lt;br /&gt;
      $nt=sprintf(&amp;quot;%02d:%02d:00&amp;quot;,$1,$2);&lt;br /&gt;
    }&lt;br /&gt;
    changeWakeTime(\&#039;GalaxyTab.EG\&#039;,\&#039;$nc\&#039;,\&#039;$nt\&#039;);&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lichtszene ===&lt;br /&gt;
Eine Lichtszene wird mit dem Modul LightScene angelegt. Wir gehen davon aus, dass in der Lichtszene die beiden Szenen Alle_An und Alle_Aus, sowie mindestens eine weitere Szene (hier: Sitzgruppe) definiert wurde.&lt;br /&gt;
* Nachfolgend wird ein Beispiel beschrieben, wie man eine Lichtszene mit dem einfachen SmartHome Skill steuern kann. Die verwendeten Kommandos sind dann&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Alexa, schalte (die) Beleuchtung an&amp;quot; -&amp;gt; LightScene Alle_An wird ausgewählt&lt;br /&gt;
&amp;quot;Alexa, schalte (die) Beleuchtungsitzgruppe an&amp;quot; -&amp;gt; LightScene Sitzgruppe wird ausgewählt&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;Alexa, schalte (die) Beleuchtung aus&amp;quot; -&amp;gt; LightScene Alle_Aus wird ausgewählt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Künftig wird man LightScene mit dem Custom Skill eventuell direkt steuern können - allerdings hat das einen geringeren WAF, als die Steuerung über den SmartHome Skill: Der Einschaltsatz muss dann mindestens lauten&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Alexa, sage &amp;lt;Custom Skill Invocation Name&amp;gt;: schalte (die) Beleuchtung an&amp;quot; -&amp;gt; LightScene Alle_An wird ausgewählt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dafür wird es aber auch möglich sein direkt die SzenenNamen im gesprochenen Kommando zu verwenden und so auf die Umwege über dummys und ähnliches zu verzichten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im ersten Schritt wird ein Dummy für die Gesamtbeleuchtung eingerichtet:&lt;br /&gt;
 define Alexa.Beleuchtung dummy &lt;br /&gt;
 attr Beleuchtung setList on off&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Beleuchtung alexaName beleuchtung&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Beleuchtung alexaRoom alexaroom&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Beleuchtung genericDeviceType switch&#039;&#039;&#039;&lt;br /&gt;
Anschließend wird für jede vorhandene Lichtszene (außer Alle_An und Alle_Aus) ein weiterer Dummy angelegt:&lt;br /&gt;
 define Alexa.Beleuchtung.Sitzgruppe dummy &lt;br /&gt;
 attr Beleuchtung setList on off&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Beleuchtung.Sitzgruppe alexaName beleuchtungsitzgruppe&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Beleuchtung.Sitzgruppe alexaRoom alexaroom&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Beleuchtung.Sitzgruppe genericDeviceType switch&#039;&#039;&#039; &lt;br /&gt;
Die eigentliche Steuerung übernimmt dann ein DOIF&lt;br /&gt;
 define Alexa.Beleuchtung.N DOIF&lt;br /&gt;
 ([&amp;quot;Alexa.Beleuchtung.Sitzgruppe:on&amp;quot;])&lt;br /&gt;
 (set &amp;lt;devicename der Lichtszene&amp;gt; scene Sitzgruppe,&lt;br /&gt;
  set Alexa.Beleuchtung off,&lt;br /&gt;
   ...&amp;lt;weitere dummies der anderen Szenen werden ebenfalls ausgeschaltet&amp;gt;&lt;br /&gt;
 )&lt;br /&gt;
 DOELSIF&lt;br /&gt;
 ... &amp;lt;weitere on-Events der anderen Szenen werden abgefangen&amp;gt;&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
 ([&amp;quot;Alexa.Beleuchtung:on&amp;quot;])&lt;br /&gt;
 (set &amp;lt;devicename der Lichtszene&amp;gt; scene Alle_An,&lt;br /&gt;
  set Alexa.Beleuchtung.Sitzgruppe off,&lt;br /&gt;
  ...&amp;lt;weitere dummies der anderen Szenen werden ebenfalls ausgeschaltet&amp;gt;&lt;br /&gt;
 )&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
 ([&amp;quot;Alexa.Beleuchtung:off&amp;quot;])&lt;br /&gt;
 (set &amp;lt;devicename der Lichtszene&amp;gt; scene Alle_Aus,&lt;br /&gt;
  set Alexa.Beleuchtung.Sitzgruppe off,&lt;br /&gt;
  ...&amp;lt;weitere dummies der anderen Szenen werden ebenfalls ausgeschaltet&amp;gt;&lt;br /&gt;
 )&lt;br /&gt;
Mit diesem DOIF wird ein Radiobutton simuliert, d.h. wie bei den Stationstasten vor Uralt-Radios sorgt die Auswahl einer Szene immer dafür, dass alle anderen Dummies ausgeschaltet werden.&lt;br /&gt;
Natürlich kann man das auch mit einem kleinen Perl-Programm erreichen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zwei andere Ansätze Lichtszenen zu schalten die ohne DOIF auskommen sind im Folgenden beschrieben:&lt;br /&gt;
&lt;br /&gt;
* Wenn es von Interesse ist die Steuerung mit einer Darstellung in FTUI zu verbinden: Statt der oben beschriebenen dummy Devices kann man readingsProxy Devices mit passenden setFn und valueFn analog zum  [[Harmony#Button_f.C3.BCr_eine_bestimmte_Activity_im_Frontend_und_Homekit_.C3.BCber_readingsProxy|diesem Beispiel für harmony aktivitäten]] verwenden.&lt;br /&gt;
&lt;br /&gt;
* Für jede zu schaltende Szene wird ein dummy angelegt dessen homebridgeMapping direkt auf das LightScene Device zeigt:&lt;br /&gt;
&lt;br /&gt;
 define &amp;lt;dummy&amp;gt; dummy&lt;br /&gt;
 attr &amp;lt;dummy&amp;gt; setList on off&lt;br /&gt;
 attr &amp;lt;dummy&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;dummy&amp;gt; homebridgeMapping On=&amp;lt;light scene&amp;gt;::state,valueOn=&amp;lt;szene&amp;gt;,cmdOn=scene+&amp;lt;szene&amp;gt;,cmdOff=scene+&amp;lt;szene aus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei der zweiten Variante wird davon ausgegangen das der aktuelle status nicht abgefragt oder angezeigt werden soll. Deshalb gibt es keine direkte RadioButton Funktionalität.&lt;br /&gt;
&lt;br /&gt;
=== Harmony Hub ===&lt;br /&gt;
Ein [https://forum.fhem.de/index.php/topic,60244.msg550298.html#msg550298 HowTo-Beitrag im Forum] beschreibt die Ansteuerung von Harmony-Aktionen über den Custom Skill, beispielsweise für eine Aktion &#039;&#039;ARD&#039;&#039;: „Alexa, sage FHEM stelle Anlage auf ARD“.&lt;br /&gt;
&lt;br /&gt;
== Nutzung ==&lt;br /&gt;
Um den Namen zu bestimmen, unter dem ein Gerät mit Alexa angesprochen wird, verwendet Alexa-Fhem mit absteigender Priorität:&lt;br /&gt;
* das alexaName Attribut&lt;br /&gt;
* das alias Attribut&lt;br /&gt;
* das NAME Internal&lt;br /&gt;
Damit Alexa ein Gerät eindeutig identifizieren kann, sollten eindeutige Gerätenamen verwendet werden, bestehed möglichst aus einem Wort und ohne Ziffern. Wenn Alexa einen Namen nicht versteht, kann man unter [http://alexa.amazon.de/spa/index.html] nachsehen was tatsächlich verstanden wurde und den Gerätenamen ggf. anpassen.&lt;br /&gt;
&lt;br /&gt;
=== SmartHome Skill ===&lt;br /&gt;
Gruppen (Räume) müssen in der Alexa App konfiguriert werden. Über das API lassen sich nur der Name und die Schalteigenschaften übergeben.&lt;br /&gt;
&lt;br /&gt;
Nach erfolgreicher Einrichtung des SmartHome Skills sollte Alexa mit den folgenden Befehlen nutzbar sein:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
“alexa, schalte &amp;lt;gerät/gruppe&amp;gt; ein”&lt;br /&gt;
“alexa, schalte &amp;lt;gerät/gruppe&amp;gt; aus”&lt;br /&gt;
“alexa, stelle &amp;lt;gerät/gruppe&amp;gt; auf &amp;lt;wert&amp;gt; prozent”&lt;br /&gt;
“alexa, stelle &amp;lt;gerät/gruppe&amp;gt; auf &amp;lt;anzahl&amp;gt; grad”&lt;br /&gt;
“alexa, erhöhe &amp;lt;gerät/gruppe&amp;gt; um &amp;lt;anzahl&amp;gt; prozent”&lt;br /&gt;
“alexa, reduziere &amp;lt;gerät/gruppe&amp;gt; um &amp;lt;anzahl&amp;gt; prozent”&lt;br /&gt;
“alexa, erhöhe &amp;lt;gerät/gruppe&amp;gt; um &amp;lt;anzahl&amp;gt; grad”&lt;br /&gt;
“alexa, reduziere &amp;lt;gerät/gruppe&amp;gt; um &amp;lt;anzahl&amp;gt; grad”&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Custom Skill ===&lt;br /&gt;
Der Custom Skill erlaubt im Gegensatz zum SmartHome Skill eine weitreichende Konfiguration der möglichen Kommandos.&lt;br /&gt;
&lt;br /&gt;
Das Prinzip der Kommandokonfiguration ist {{Link2Forum|Topic=60244|Message=532513|LinkText=im Forum}} beschrieben.&lt;br /&gt;
&lt;br /&gt;
TODO: Abfragen, Attribute (alexaMapping, alexaTypes, fhemIntents, articles, prepositions)&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
====Allgemeiner Hinweis====&lt;br /&gt;
Besonders wichtig ist, dass man sich sehr genau an diese Anleitung hält. Ein häufiger Fehler ist, dass die einfachen Anführungszeichen in der Anleitung unter &#039;&#039;&#039;AWS Lambda Funktion anlegen&#039;&#039;&#039; Punkt 8 einfach weggelassen werden. Diese sind zwingend notwendig. Es darf auch nur der reine Hostname eingetragen werden. Also kein &#039;&#039;http://&#039;&#039; davor. Entweder eine feste IP Adresse oder den Hostnamen, um den Rechner zu erreichen, den ihr über den Port 3000 freigegeben habt. Das sollte dann so aussehen:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
const PORT=3000;&lt;br /&gt;
const HOST=&#039;mein.host.name&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Freigabe von Port 3000====&lt;br /&gt;
{{Randnotiz|RNTyp=Fehl|RNText=Derzeit müsst ihr über einen echten IPv4 Anschluss verfügen, damit der Amazon Lambda-Server euch erreichen kann. DS-Lite Anschlüsse wie die von &amp;lt;b&amp;gt;UnityMedia&amp;lt;/b&amp;gt; z.B. funktionieren derzeit leider nicht. Eine möglicher &amp;quot;Workaround&amp;quot; wird hier beschrieben: https://forum.fhem.de/index.php/topic,60244.msg518276.html#msg518276}}&lt;br /&gt;
&lt;br /&gt;
Auf dem Router muss der Port 3000 Protokoll TCP freigegeben werden. D.h. von außen muss man wenn man den Port 3000 aufruft, auf dem intern laufenden node.js Alexa-Dienst zugreifen können.&lt;br /&gt;
Je nach Router gestaltet sich das Portforwarding bzw. die Portumleitung etwas schwieriger.&lt;br /&gt;
&lt;br /&gt;
Bei einem Speedport Router der Telekom beispielsweise, muss der Router komplett neu gestartet werden, wenn die Portfreigabe eingerichtet wurde. &lt;br /&gt;
&lt;br /&gt;
Bei der Fritz!Box ist das nicht nötig, bei dieser finden die Freigabe unter &#039;&#039;Internet -&amp;gt; Freigaben -&amp;gt; Portfreigaben&#039;&#039; statt. Dort wählt man dann den Rechner aus und richtet eine neue Freigabe ein. Wichtig hierbei ist, dass man Portfreigabe auswählt und nicht MyFRITZ!-Freigabe. Bei Port von bis trägt man 3000 ein, bei Port extern ebenfalls.&lt;br /&gt;
&lt;br /&gt;
Um die Portweiterleitung zu testen, solltet ihr euch auch nicht im gleichen Netz befinden. Viele Router blockieren den Netzaufruf aus dem gleichen Netz. Am besten testet ihr es, wenn ihr an eurem Mobiltelefon W-LAN deaktiviert und im Browser folgende Seite aufruft: &#039;&#039;https://mein.hostname:3000&#039;&#039;. Wenn ihr im Browser dann einen Quellcode von Alexa seht, funktioniert die Portumleitung.&lt;br /&gt;
&lt;br /&gt;
Wenn bis hier alles funktioniert und es läuft dennoch nicht rund, liegt das Problem woanders. Kommt z.B. bei der Gerätesuche kein Request rein (sichtbar auf dem Bildschirm, wenn bin/alexa gestartet wurden), kann evtl. der Lambda-Dienst falsch konfiguriert sein.&lt;br /&gt;
&lt;br /&gt;
====Probleme mit node.js - npm install====&lt;br /&gt;
&lt;br /&gt;
Falls eine Fehlermeldung auftritt, dass &amp;quot;npm&amp;quot; nicht gefunden werden kann, bitte NodeJS entsprechend der Anleitung im Homebridge-Artikel vorgehen: [[Homebridge_einrichten#NodeJS_installieren|NodeJS installieren]] sowie [[Homebridge_einrichten#Python.2C_g.2B.2B.2C_MDNS_installieren|Python, g++, MDNS installieren]], siehe auch folgenden Abschnitt.&lt;br /&gt;
&lt;br /&gt;
====Es kommen diverse Fehlermeldungen beim Starten von alexa-fhem und es beendet sich====&lt;br /&gt;
Wenn man auf der Konsole angemeldet ist, den Befehl&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;node -v&amp;lt;/syntaxhighlight&amp;gt;eingeben. Ist die Version niedriger als die geforderte 0.12, muss eine neuere installiert werden. Hier darf man dann im Wiki unter [[Homebridge_einrichten#NodeJS_installieren]] nachschauen. NodeJS V4 sollte hierbei schon ausreichen. Solange die node.js Version nicht passt, gar nicht groß rum experimentieren! Bitte beachtet, dass alle Voraussetzungen unter [[Alexa-Fhem#Voraussetzungen]] erfüllt sind! Keine Experimente mit Versionen die darunter liegen.&lt;br /&gt;
&lt;br /&gt;
====Fehlermeldung &#039;&#039;NAT-PMP failed: Error: timeout&#039;&#039; Fehler angezeigt beim Start von alexa-fhem====&lt;br /&gt;
Wenn ihr dann alexa-fhem über die Konsole startet und bekommt folgenden Fehler: &#039;&#039;NAT-PMP failed: Error: timeout&#039;&#039;, lasst euch davon nicht irritieren. Das bedeutet lediglich, dass der Port nicht automatich freigegeben wurde über uPNP. Alternativ prüft, ob die Funktion der Portfreigabe via uPNP auf eurem Router aktiviert ist.&lt;br /&gt;
&lt;br /&gt;
====Nach Start auf der Console beendet sich Alexa-FHEM sofort wieder====&lt;br /&gt;
Unmittelbar nach dem Start von Alexa-FHEM werden ein paar UPNP Fehlermeldungen ausgegeben. Unmittelbar danach beendet sich Alexa-FHEM wieder. &lt;br /&gt;
&lt;br /&gt;
Viele scheinen ein Problem mit UPNP auf dem Raspberry Pi zu haben. Wenn dieses Problem auftritt einfach in der &amp;lt;code&amp;gt;~/.alexa/config.json&amp;lt;/code&amp;gt; die folgenden Zeilen rauslöschen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;quot;nat-pmp&amp;quot;: &amp;quot;10.0.1.1&amp;quot;,&lt;br /&gt;
        &amp;quot;nat-upnp&amp;quot;: true,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt erneut Alexa-FHEM starten. Sollte nun laufen.&lt;br /&gt;
&lt;br /&gt;
====Was ist zu tun, wenn alexa-fhem keine Geräte findet?====&lt;br /&gt;
Zunächst müssen die Geräte, die angesprochen werden wollen, unter FHEM ein neues Attribut zugewiesen bekommen. Dazu das Gerät in FHEM öffnen und das Attribut &#039;&#039;genericDeviceType switch&#039;&#039; hinzufügen, wenn es ein Schalter mit der Funktiona AN/AUS sein soll. Wenn man will, kann man dem Gerät jetzt noch über das Attribut &#039;&#039;alias&#039;&#039; eine besseren Namen geben, mit dem Alexa das Gerät dann auch finden kann.&lt;br /&gt;
Anschließend muss alexa-fhem neu gestartet werden und die definierten Geräte sollten nun gefunden werden.&lt;br /&gt;
&lt;br /&gt;
====Was ist zu tun, wenn Alexa zwar Geräte findet, diese aber nicht angesprochen werden können?====&lt;br /&gt;
Zuerst die Informationen zum Datenfluss ganz oben ansehen. Dann am besten von hinten nach vorne vorgehen:&lt;br /&gt;
* wenn nichts bei alexa-fhem ankommt: port forwarding prüfen&lt;br /&gt;
* wenn lambda.js nichts los wird: im cloudwatch log nachsehen&lt;br /&gt;
* wenn bei lambda.js nichts ankommt: den trigger prüfen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte man sich unter &#039;&#039;http://aws.amazon.com&#039;&#039; das Logfile seiner erstellten Funktion anschauen. Ist überhaupt ein Logfile vorhanden? Falls nicht, liegt es vermutlich am Trigger.&lt;br /&gt;
Den solltet ihr überprüfen. Scheinbar kommt es hin und wieder vor, dass dieser nicht gesetzt ist. Dazu einfach auf &#039;&#039;Triggers&#039;&#039; klicken und mit &#039;&#039;Add trigger&#039;&#039; erneut einen anlegen. Hier muss, wie in der Anleitung unter &#039;&#039;&#039;AWS Lambda Funktion anlegen&#039;&#039;&#039; Punkt 7, die &#039;&#039;Application Id&#039;&#039; stehen und der Haken bei &#039;&#039;Enable trigger&#039;&#039; gesetzt sein. Dann alexa-fhem neu starten.&lt;br /&gt;
Wenn ihr Änderungen gemacht habt und den alexa-fhem Dienst noch nicht neu gestartet habt, wäre jetzt der richtige Zeitpunkt. Fürs Debugging empfiehlt es sich, alexa-fhem in einer Konsole laufen zu lassen, um eingehende Anfragen mitverfolgen zu können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es kann sein, dass immer noch keine Log im Cloudwatch ([http://docs.aws.amazon.com/de_de/lambda/latest/dg/monitoring-functions-logs.html]) zu sehen ist. In dem Fall hilft es, eine neue Role Policy anzulegen. &lt;br /&gt;
* in der AWS Console [https://console.aws.amazon.com] oben links auf Services klicken, und in der Gruppe &amp;quot;Security, Identity &amp;amp; Compliance&amp;quot; auf IAM klicken&lt;br /&gt;
* links auf Roles klicken&lt;br /&gt;
* Auf dem Knopf &amp;quot;Create Role&amp;quot; klicken&lt;br /&gt;
* AWS Services &amp;gt; Lambda auswählen, unten auf Next:Permissions klicken&lt;br /&gt;
* im Filter / Policy Type,  &amp;quot;log&amp;quot; eintragen (ohne quotes)&lt;br /&gt;
* CloudWatchLogsFullAccess hacken, auf Next:Review unten klicken&lt;br /&gt;
* Name vergeben und mit &amp;quot;Create role&amp;quot; bestätigen&lt;br /&gt;
* Oben links auf Services klicken, und in der Gruppe &amp;quot;Compute&amp;quot;, auf Lambda klicken&lt;br /&gt;
* auf den Name der Funktion klicken&lt;br /&gt;
* Reiter Configuration auswählen&lt;br /&gt;
* in Existing Role, den neukreierten Role auswählen&lt;br /&gt;
* oben auf Save (und Testen wenn gewünscht) klicken.&lt;br /&gt;
Schon sollte eine neue Gruppe im Cloudwatch sichtbar sein. Die Suche von den Devices in Alexa wiederholen, und die Logs analysieren&lt;br /&gt;
&lt;br /&gt;
====Was ist zu tun, wenn sich der Alexa-Service nicht starten lässt?====&lt;br /&gt;
{{Randnotiz|RNTyp=[g|Info]|RNText=Der User in der User= Directive von alexa.service muss Ausführungsrecht auf dem alexa binary haben (x), so wie auch mind. Lesezugriff auf dem Verzeichnis nach -U Option in der ExecStart= Directive und auch auf dem WorkingDirectory }}&lt;br /&gt;
Schaut bitte in das Unterverzeichnis [alexa-fhem (also dort, wo Ihr Alexa-FHEM instelliert habt]/bin. Die dort befindliche Datei &#039;&#039;alexa&#039;&#039; muss ausführbar sein. Also z.B. so:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;2755327 4 -rwxr-xr-x 1 pi pi  339 Nov 26 23:20 alexa&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Sollte dies nicht der Fall sein bitte mit:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;chmod +x alexa&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
die Datei ausführbar machen. Sofern der User &amp;quot;pi&amp;quot; Eigentümer ist, ist kein sudo erforderlich.&lt;br /&gt;
&lt;br /&gt;
Eine lauffähige Konfiguration ist {{Link2Forum|Topic=71612|Message=668383|LinkText=hier}} zu sehen.&lt;br /&gt;
&lt;br /&gt;
Ein Fehler in der Rechtekonfiguration führt in der Regel zu folgendem Ergebnis nach &amp;lt;code&amp;gt;sudo systemctl status alexa&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;   Loaded: loaded (/etc/systemd/system/alexa.service; enabled)&lt;br /&gt;
   Active: activating (auto-restart) (Result: exit-code) since mer. 2017-09-06 02:33:23 CEST; 3s ago&lt;br /&gt;
  Process: 18332 ExecStart=/opt/fhem/alexa-fhem/bin/alexa -U /home/alexa/.alexa (code=exited, status=217/USER)&lt;br /&gt;
 Main PID: 18332 (code=exited, status=217/USER)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wie kann ich via Alexa-FHEM auf FHEM zugreifen, wenn der Port mit Benutzername/Kennwort geschützt ist?====&lt;br /&gt;
&lt;br /&gt;
Hierzu muss die Datei &amp;lt;code&amp;gt;~/.alexa/config.json&amp;lt;/code&amp;gt; geöffnet werden und der Abschnitt &amp;quot;connections&amp;quot; um folgende Zeile ergänzt werden:&amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;quot;auth&amp;quot;: {&amp;quot;user&amp;quot;: &amp;quot;fhem&amp;quot;, &amp;quot;pass&amp;quot;: &amp;quot;fhempassword&amp;quot;},&amp;lt;/pre&amp;gt;&lt;br /&gt;
Bei Verwendung von SSL bei FHEM muss auch noch &amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;quot;ssl&amp;quot;: true,&amp;lt;/pre&amp;gt; hinzugefügt werden&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Sprachsteuerung]]&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Alexa-Fhem&amp;diff=23450</id>
		<title>Alexa-Fhem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Alexa-Fhem&amp;diff=23450"/>
		<updated>2017-12-03T21:36:31Z</updated>

		<summary type="html">&lt;p&gt;Benheim: /* Einrichtung unter FHEM */ Link auf Harmony-Hub-HowTo im Forum&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Alexa-Fhem&#039;&#039;&#039; ist eine in JavaScript geschriebene und auf NodeJS basierende Software, welche es ermöglicht, der digitalen Amazon Assistentin Alexa zusätzliche Skills für die Heimautomatisierung via FHEM beizubringen. Eine erste funktionierende Version wurde von [https://forum.fhem.de/index.php?action=profile;u=430 justme1968] im {{Link2Forum|Topic=60244|LinkText=Forum}} veröffentlicht.&lt;br /&gt;
Das ist eine erste Version der Dokumentation zur Installation und Einrichtung, eine Erweiterung wird sicherlich in nächster Zeit noch folgen.&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Anbindung von FHEM an Amazon Assistent Alexa&lt;br /&gt;
|ModType=x&lt;br /&gt;
|ModTechName=&lt;br /&gt;
|ModForumArea=Frontends/Sprachsteuerung&lt;br /&gt;
|ModOwner=justme1968&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Einführung==&lt;br /&gt;
===Glossar===&lt;br /&gt;
*Echo bzw. Echo Dot (im Folgenden maskulin bezeichnet) sind die derzeit verfügbaren Geräte des Alexa-Systems &#039;&#039;&#039;BILDER EINSTELLEN - Achtung Urheberrecht&#039;&#039;&#039;&lt;br /&gt;
*AVS ist der Amazon Voice Service, d.h. die Spracherkennungskomponente des Systems.{{Randnotiz|RNTyp=r|RNText=Für die Nutzung der Amazon AWS-Dienste müssen zwingend die Daten einer Kreditkarte angegeben werden. Nach gegenwärtigem Kenntnisstand sollen jedoch keine Kosten für die Nutzung der im Rahmen dieses How To beschriebenen Dienste anfallen, sofern diese in einem Rahmen genutzt werden, der selbst eine intensive private Nutzung nicht überschreitet. Der Benutzer sei an dieser Stelle auf die von Amazon veröffentlichten Preislisten verwiesen. Die Autoren dieser Anleitung und der darin beschriebenen Module übernehmen keine Haftung für eventuelle Kosten, die aus der Nutzung der AWS entstehen. }}&lt;br /&gt;
*AWS sind die Amazon Web Services, also per URL erreichbare Dienste zur Ausführung von Berechnungen etc. Im Rahmen von Alexa-Fhem wird bei AWS eine eigene JavaScript-Funktion hinterlegt, die zur Kommunikation mit dem FHEM-Server dient. Im Jargon von Amazon ist dies eine so genannte Lambda-Funktion &#039;&#039;&#039;WARUM ? Nachlesen bei Amazon&#039;&#039;&#039;.&lt;br /&gt;
*Card bezeichnet einen Eintrag in der Alexa-App, der die erkannte Sprachnachricht sowie weiter gehenden Informationen über die Reaktion von Alexa enzthält und Rückmeldung an Amazon erlaubt.&lt;br /&gt;
*Skill (engl. für Fähigkeit) ist die Bezeichnung für eine per Spracherkennung bediente Funktionalität des Alexa-Systems, z.B. zur Nachrichtenansage, zur Wettervorhersage oder zur Steuerung von FHEM&lt;br /&gt;
&lt;br /&gt;
===Arbeitsweise und Datenfluss===&lt;br /&gt;
[[Datei:2gpXyLN.jpg|200px|thumb|right|Grafische Darstellung der beteiligten Komponenten]]&lt;br /&gt;
Echo -&amp;gt; AVS -&amp;gt; AWS Lambda -&amp;gt; alexa-fhem -&amp;gt; AWS Lambda -&amp;gt; AVS -&amp;gt; Echo&lt;br /&gt;
 &lt;br /&gt;
*Der Echo (oder ein anderes Alexa/AVS fähiges Gerät)  nimmt Audiodaten auf und schickt diese an AVS  (Amazon Voice Service) zur Erkennung&lt;br /&gt;
*AVS führt die Spracherkennung durch und erzeugt ein Event mit Informationen zu den erkannten Daten&lt;br /&gt;
:*Beim Alexa SmartHome Skill sind die möglichen Sätze für die Spracherkennung relativ fest vorgegeben &lt;br /&gt;
:*Beim Alexa Custom Skill kommen die dazu nötigen Informationen aus dem &#039;&#039;Interaction Model&#039;&#039; der Alexa Skills Configuration&lt;br /&gt;
*Das Event wird an den unter &#039;&#039;Configuration&#039;&#039; in der Alexa Skills Configuration hinterlegten Endpoint geschickt&lt;br /&gt;
:*Beim Alexa SmartHome Skill ist das zwingend eine AWS Lambda Routine&lt;br /&gt;
:*Beim Alexa Custom Skill kann das im Prinzip auch ein eigener Web Service sein&lt;br /&gt;
*Das Event wird vom &amp;lt;code&amp;gt;lambda.js&amp;lt;/code&amp;gt; code an alexa-fhem weitergeleitet&lt;br /&gt;
*alexa-fhem steuert FHEM und sendet ein Antwort-Event zurück&lt;br /&gt;
*&amp;lt;code&amp;gt;lambda.js&amp;lt;/code&amp;gt; nimmt diese Antwort entgegen und gibt sie an AVS zurück&lt;br /&gt;
*AVS sogt dafür das der Echo &#039;antwortet&#039; und dass die Card in der Alexa App erscheint&lt;br /&gt;
&lt;br /&gt;
===Anmerkungen===&lt;br /&gt;
*Ein Skill hat keinen Zugriff auf die Audiodaten&lt;br /&gt;
*Mit dem Skill API kann ein Skill zu zu keiner Zeit von sich aus aktiv werden und &#039;einfach&#039; Daten an den Echo schicken oder ihn dazu bringen irgendetwas zu tun.&lt;br /&gt;
*Wenn man berücksichtigt welchen Weg die Daten insgesamt gehen, ist es erstaunlich, wie schnell die Reaktion auf einen gesprochenen Satz erfolgt.&lt;br /&gt;
&lt;br /&gt;
=== Abgrenzung des &#039;&#039;&#039;Alexa Smart Home Skills&#039;&#039;&#039; und des &#039;&#039;&#039;Alexa Custom Skills&#039;&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
Der [[Alexa-Fhem#Smart_Home|Alexa Smart Home Skill]] ist ein Amazon-Alexa-Standard-Skill, der wesentliche Basisfunktionalitäten bereitstellt. Zu diesen gehört im Wesentlichen die Funktionalität, durch Alexa-FHEM bereitgestellte Devices im Alexa-Account des Benutzers anzulegen. Der Alexa Smart Home Skill reagiert auf gesprochene Interaktion in einem beschränkten Umfang. Beispielsweise genügt ein &amp;quot;Alexa, schalte die Wohnzimmerlampe an&amp;quot; um eine Interaktion zwischen Alexa Smart Home Skill und FHEM-Alexa auszulösen. Nach erfolgreicher Einrichtung wird dieser Skill in der Alexa-App bzw. im Web in der Rubrik &amp;quot;Smart Home&amp;quot; als Skill angezeigt.&lt;br /&gt;
&lt;br /&gt;
Der [[Alexa-Fhem#Custom|Alexa Custom Skill]] ist kein Standard-Smart-Home-Skill, sondern ein individuell entwickelter Skill, so wie alle anderen Skills auch. Er wird daher auch nicht in der Alexa-App unter der Rubrik &amp;quot;Smart Home&amp;quot; angezeigt. Gesprochene Interaktion mit diesem Skill erfolgt dadurch, dass entweder der Skill explizit gestartet wird (z.B. &amp;quot;Alexa, starte [Name des Skills]&amp;quot;) oder direkt angesprochen wird (z.B. &amp;quot;Alexa, frage [Name des Skills] wie ist der Status von [Device] &amp;quot;). Der Alexa Custom Skill befindet sich in Entwicklung und wird hinsichtlich seiner Funktionalitäten laufend weiterentwickelt. Die Einrichtung dieses Skills ist grundsätzlich optional, jedoch werden anspruchsvollere Steuerungsmöglichkeiten nur mit diesem realisiert werden können.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
{{Randnotiz|RNTyp=[g|Info]|RNText=Da die einzelnen Schritte der Anleitung an verschiedenen Stellen unterbrochen und später fortgesetzt werden müssen, empfiehlt es sich, die Anleitung einmal vollständig gelesen zu haben. Während der Konfiguration sollten alle nachfolgenden Abschnitte parallel in gleichzeitig geöffneten Browserfenstern durchgeführt werden, die jeweils bis zum Abschluss geöffnet bleiben müssen. }}&lt;br /&gt;
Grundvoraussetzung für alle folgenden Schritte ist das Vorhandensein eines Amazon-Accounts. Es wird davon ausgegangen, dass die Konten für alle im Folgenden genutzten Amazon-Dienste eingerichtet wurden.&lt;br /&gt;
&lt;br /&gt;
===node.js installieren===&lt;br /&gt;
Zunächst wird das Betriebssystem (in diesem Falle Debian oder Ubuntu) auf den aktuellen Stand gebracht:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get upgrade&lt;br /&gt;
sudo apt-get install build-essential libssl-dev&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun muss NodeJS installiert werden. Leider ist die Version im Debian Repository deutlich zu alt, daher wird mit den folgenden Befehlen das Node Repository hinzugefügt und NodeJS (in der LTS Version) entsprechend installiert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -&lt;br /&gt;
sudo apt-get install -y nodejs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alexa-Fhem installieren ===&lt;br /&gt;
&#039;&#039;&#039;Aus gegebenem Anlass: Dies ist weder eine Einführung in Linux, noch eine Anfängerdokumentation für FHEM.&#039;&#039;&#039; Also erst die Grundlagen lernen, und dann mit Alexa beginnen !&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version ist jeweils  {{Link2Forum|Topic=60244|Message=540117|LinkText=hier}} zu finden.&lt;br /&gt;
&lt;br /&gt;
====Erstinstallation====&lt;br /&gt;
Hier wird die Erstinstallation von Alexa-Fhem beschrieben.&lt;br /&gt;
===== Linux =====&lt;br /&gt;
# Die tgz-Datei unter Linux im Hauptverzeichnis von FHEM (typischerweise &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;) entpacken (&#039;&#039;nicht&#039;&#039; unter Windows, das zerstört die Rechteeinstellungen).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;tar -xvzf dateiname.tgz&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Das dabei entstandene Verzeichnis &#039;&#039;package&#039;&#039; in &#039;&#039;alexa-fhem&#039;&#039; umbenennen &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;mv package alexa-fhem&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Durch &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;cd alexa-fhem&amp;lt;/syntaxhighlight&amp;gt; in das Verzeichnis wechseln&lt;br /&gt;
# Mit &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/syntaxhighlight&amp;gt; alle Abhängigkeiten installieren (kein sudo!).&lt;br /&gt;
# SSL Zertifikat erzeugen durch Aufruf von &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;./createKey.sh&amp;lt;/syntaxhighlight&amp;gt; (kein sudo!). Hierbei beachten, dass ein Kennwort vergeben werden muss, das mindestens aus 4 Zeichen besteht, dieses Kennwort bitte merken.&lt;br /&gt;
# Das Verzeichnis &#039;&#039;.alexa&#039;&#039; anlegen, &#039;&#039;und zwar im Home-Verzeichnis desjenigen Benutzers, unter dem Alexa-Fhem laufen soll.&#039;&#039; Insbesondere ist zu beachten, dass dieser Nutzer u.U. im Startskript explizit gesetzt wird. Mit dem untenstehenden Skript ist das &#039;&#039;nicht&#039;&#039; der User fhem, sondern der User &#039;&#039;pi&#039;&#039;. Das Symbol &#039;&#039;~/&#039;&#039; verweist auf das Home-Verzeichnis des Benutzers, der gerade die Installation vornimmt.&lt;br /&gt;
# Die Datei &#039;&#039;config-sample.json&#039;&#039; nach &#039;&#039;.alexa/config.json&#039;&#039; kopieren. Achtung: Installiert man alexa-fhem als root-user, zeigt das Symbol &#039;&#039;~/&#039;&#039; auf &#039;&#039;/root&#039;&#039; - und die Konfigurationsdatei wird ggf. bei einem manuellen Start von Alexa-Fhem nicht gefunden.&lt;br /&gt;
# Achtung: Ggf. müssen auch die Dateien key.pem und cert.pem ins entsprechende Verzeichnis kopiert werden.&lt;br /&gt;
===== Windows =====&lt;br /&gt;
&#039;&#039;Vor&#039;&#039; der Installation von Alexa-Fhem muss man folgende Anwendungen installieren:&lt;br /&gt;
* Node.js (die aktuelle Version findet man unter https://nodejs.org/en/download/)&lt;br /&gt;
* OpenSSL (http://slproweb.com/products/Win32OpenSSL.html oder https://www.heise.de/download/product/win32-openssl-47316/download)&lt;br /&gt;
Erst dann fängt man mit Alexa-Fhem an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Die tgz-Datei im Hauptverzeichnis von FHEM (z.B. &amp;lt;code&amp;gt;С:\Program Files (x86)\fhem&amp;lt;/code&amp;gt;) entpacken.&lt;br /&gt;
# Das dabei entstandene Verzeichnis &#039;&#039;package&#039;&#039; in &#039;&#039;alexa-fhem&#039;&#039; umbenennen&lt;br /&gt;
# Windows-Shell (Kommandozeile, Eingabeaufforderung usw.) öffnen. &amp;quot;Start&amp;quot; -&amp;gt; &amp;quot;Ausführen&amp;quot; (oder [Windows-Taste]+[R]) -&amp;gt; cmd -&amp;gt; Ok. Durch &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;cd &amp;quot;&amp;lt;FHEM-Hauptverzeichis&amp;gt;\alexa-fhem&amp;quot;&amp;lt;/syntaxhighlight&amp;gt; in das Verzeichnis wechseln. &amp;lt;br/&amp;gt;Dabei ist natürlich das &amp;lt;FHEM-Hauptverzeichis&amp;gt; durch den entsprechenden Pfad aus dem Schritt 1 zu ersetzen. Im o.g. Beispiel wäre es &amp;lt;code&amp;gt;cd &amp;quot;С:\Program Files (x86)\fhem\alexa-fhem&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Mit &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/syntaxhighlight&amp;gt; alle Abhängigkeiten installieren.&amp;lt;br/&amp;gt; Bei der Fehlermeldung wie &amp;quot;Der Befehl &amp;quot;npm&amp;quot; ist entweder falsch geschrieben oder konnte nicht gefunden werden.&amp;quot; ist die Installation von Node.js zu überprüfen.&lt;br /&gt;
# SSL Zertifikat erzeugen. Dafür muss man alle Befehle aus dem Skript &#039;&#039;createKey.sh&#039;&#039; nacheinander manuell ausführen. Hierbei beachten, dass ein Kennwort vergeben werden muss, das mindestens aus 4 Zeichen besteht, dieses Kennwort bitte merken. Der Windows-Welt unbekannter Befehl &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; ist durch &amp;lt;code&amp;gt;move /y&amp;lt;/code&amp;gt; zu ersetzen:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;openssl rsa -in key.pem -out newkey.pem&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;move /y newkey.pem key.pem&amp;lt;/syntaxhighlight&amp;gt; Eventuelle Fehlermeldung &amp;quot;can&#039;t open config file: /usr/local/ssl/openssl.cnf&amp;quot; o.Ä. lässt sich durch Befehl &amp;lt;code&amp;gt;set OPENSSL_CONF=&amp;lt;OpenSSL-Verzeichnis&amp;gt;\bin\openssl.cfg&amp;lt;/code&amp;gt; beheben, wobei &amp;lt;OpenSSL-Verzeichnis&amp;gt; durch den entsprechenden Installationspfad (typischerweise &amp;lt;code&amp;gt;c:\OpenSSL-Win32&amp;lt;/code&amp;gt;) zu ersetzen ist.&lt;br /&gt;
# Das Verzeichnis &#039;&#039;.alexa&#039;&#039; anlegen, &#039;&#039;und zwar im Benutzerverzeichnis desjenigen Benutzers, unter dem Alexa-Fhem laufen soll.&#039;&#039; In aktuellen Versionen von Windows (ab Windows 7 bzw. ab Windows Server 2008 R2) liegt das Verzeichnis unter &amp;lt;code&amp;gt;C:\Users\&amp;lt;Benutzername&amp;gt;&amp;lt;/code&amp;gt;, also z.B. für Benutzer &amp;quot;Administrator&amp;quot; - unter &amp;lt;code&amp;gt;C:\Users\Administrator&amp;lt;/code&amp;gt;.&amp;lt;br/&amp;gt;Falls Windows sich weigert das Verzichniss mit dem Punkt am Anfang zu erstellen, kann man das aus der Kommandozeile machen:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;cd &amp;quot;C:\Users\&amp;lt;Benutzername&amp;gt;&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
mkdir &amp;quot;.alexa&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Die Datei &#039;&#039;config-sample.json&#039;&#039; nach &#039;&#039;C:\Users\&amp;lt;Benutzername&amp;gt;\.alexa\config.json&#039;&#039; kopieren.&lt;br /&gt;
# Achtung: Ggf. müssen auch die Dateien key.pem und cert.pem ins entsprechende Verzeichnis (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;FHEM-Hauptverzeichis&amp;gt;\alexa-fhem\bin&amp;lt;/code&amp;gt;) kopiert werden.&lt;br /&gt;
&lt;br /&gt;
====Update====&lt;br /&gt;
Hier wir das Update auf eine neue Version von Alexa-Fhem beschrieben&lt;br /&gt;
===== Linux =====&lt;br /&gt;
# Das Verzeichnis &#039;&#039;alexa-fhem&#039;&#039; im Hauptverzeichnis von FHEM (typischerweise &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;) umbenennen in &#039;&#039;alexa-fhem.old&#039;&#039;.&lt;br /&gt;
# Die tgz-Datei der neuen Alexa-Fhem-Version unter Linux im Hauptverzeichnis von FHEM (typischerweise &amp;lt;code&amp;gt;/opt/fhem&amp;lt;/code&amp;gt;) entpacken (&#039;&#039;nicht&#039;&#039; unter Windows, das zerstört die Rechteeinstellungen).&lt;br /&gt;
# Das dabei entstandene Verzeichnis &#039;&#039;package&#039;&#039; in &#039;&#039;alexa-fhem&#039;&#039; umbenennen, in das Verzeichnis wechseln&lt;br /&gt;
# Mit &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/syntaxhighlight&amp;gt; alle Abhängigkeiten installieren (kein sudo!).&lt;br /&gt;
# Die Zertifikatsdateien key.pem und cert.pem aus dem alten Verzeichnis &#039;&#039;alexa-fhem.old&#039;&#039; ins neue Verzeichnis &#039;&#039;alexa-fhem&#039;&#039; kopieren.&lt;br /&gt;
Natürlich dann den Dienst neu starten, auch müssen selbstredend irgendwelche Modifikationen an der Datei server.js in der neuen Version nachgezogen werden. Wenn alles läuft, kann das alte Verzeichnis &#039;&#039;alexa-fhem.old&#039;&#039; gelöscht werden.&lt;br /&gt;
===== Windows =====&lt;br /&gt;
# Das Verzeichnis &#039;&#039;alexa-fhem&#039;&#039; im Hauptverzeichnis von FHEM (z.B. &amp;lt;code&amp;gt;С:\Program Files (x86)\fhem&amp;lt;/code&amp;gt;) umbenennen in &#039;&#039;alexa-fhem.old&#039;&#039;.&lt;br /&gt;
# Die tgz-Datei der neuen Alexa-Fhem-Version im Hauptverzeichnis von FHEM entpacken.&lt;br /&gt;
# Das dabei entstandene Verzeichnis &#039;&#039;package&#039;&#039; in &#039;&#039;alexa-fhem&#039;&#039; umbenennen&lt;br /&gt;
# Windows-Shell (Kommandozeile, Eingabeaufforderung usw.) öffnen. &amp;quot;Start&amp;quot; -&amp;gt; &amp;quot;Ausführen&amp;quot; (oder [Windows-Taste]+[R]) -&amp;gt; cmd -&amp;gt; Ok. Durch &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;cd &amp;quot;&amp;lt;FHEM-Hauptverzeichis&amp;gt;\alexa-fhem&amp;quot;&amp;lt;/syntaxhighlight&amp;gt; in das Verzeichnis wechseln. &amp;lt;br/&amp;gt;Dabei ist natürlich das &amp;lt;FHEM-Hauptverzeichis&amp;gt; durch den entsprechenden Pfad aus dem Schritt 1 zu ersetzen. Im o.g. Beispiel wäre es &amp;lt;code&amp;gt;cd &amp;quot;С:\Program Files (x86)\fhem\alexa-fhem&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Mit &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/syntaxhighlight&amp;gt; alle Abhängigkeiten installieren.&lt;br /&gt;
# Die Zertifikatsdateien key.pem und cert.pem aus dem alten Verzeichnis &#039;&#039;alexa-fhem.old&#039;&#039; ins neue Verzeichnis &#039;&#039;alexa-fhem&#039;&#039; kopieren.&lt;br /&gt;
Natürlich dann den Dienst neu starten, auch müssen selbstredend irgendwelche Modifikationen an der Datei server.js in der neuen Version nachgezogen werden. Wenn alles läuft, kann das alte Verzeichnis &#039;&#039;alexa-fhem.old&#039;&#039; gelöscht werden.&lt;br /&gt;
&lt;br /&gt;
==== Alexa-Fhem konfigurieren ====&lt;br /&gt;
Der Inhalt der Datei &#039;&#039;~/.alexa/config.json&#039;&#039; muss an die eigene Umgebung angepasst werden. &lt;br /&gt;
# &#039;&#039;nat-pmp&#039;&#039; -&amp;gt; wenn nat-pmp verwendet werden soll: die ip des eigenen routers,&lt;br /&gt;
# &#039;&#039;nat-upnp&#039;&#039; -&amp;gt; wenn nat-upnp verwendet werden soll: &#039;&#039;true&#039;&#039;,&lt;br /&gt;
# &#039;&#039;applicationId&#039;&#039; &lt;br /&gt;
#:* Wenn man nur den SmartHome-Skill verwenden möchte, kann dieser Eintrag leer bleiben.&lt;br /&gt;
#:* Ansonsten ist er mit der SkillID des Alexa Custom Skills zu belegen, siehe Abschnitt [[#Skill_Id_bestimmen | Skill Id bestimmen]]&lt;br /&gt;
# &#039;&#039;oauthClientID&#039;&#039; -&amp;gt; &#039;&#039;Client ID&#039;&#039; dem Abschnitt [[#Login_with_Amazon | Login with Amazon]], Punkt 1&lt;br /&gt;
# &#039;&#039;server&#039;&#039; -&amp;gt; IP-Adresse des eigenen FHEM-Servers&lt;br /&gt;
# &#039;&#039;port&#039;&#039; -&amp;gt; Portnummer des eigenen FHEM-Servers&lt;br /&gt;
Beispiel:&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;alexa&amp;quot;: {&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;Alexa TEST&amp;quot;,&lt;br /&gt;
        &amp;quot;keyFile&amp;quot;: &amp;quot;./key.pem&amp;quot;,&lt;br /&gt;
        &amp;quot;certFile&amp;quot;: &amp;quot;./cert.pem&amp;quot;,&lt;br /&gt;
        &amp;quot;applicationId&amp;quot;: &amp;quot;amzn1.ask.skill.xxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;quot;,&lt;br /&gt;
        &amp;quot;oauthClientID&amp;quot;: &amp;quot;amzn1.application-oa2-client.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;connections&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;name&amp;quot;: &amp;quot;FHEM&amp;quot;,&lt;br /&gt;
            &amp;quot;server&amp;quot;: &amp;quot;192.168.0.xxx.xxx&amp;quot;,&lt;br /&gt;
            &amp;quot;port&amp;quot;: &amp;quot;8083&amp;quot;,&lt;br /&gt;
            &amp;quot;filter&amp;quot;: &amp;quot;room=AlexaRoom&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Mehrere Custom Skills lassen sich mit der folgenden Syntax eintragen&lt;br /&gt;
         &amp;quot;applicationId&amp;quot;: [ &amp;quot;amzn1.ask.skill.1&amp;quot; , &amp;quot;amzn1.ask.skill.2&amp;quot; ],&lt;br /&gt;
         &amp;quot;oauthClientID&amp;quot;: [ &amp;quot;amzn1.application-oa2-client.1&amp;quot; , &amp;quot;amzn1.application-oa2-client.1&amp;quot; ]&lt;br /&gt;
&lt;br /&gt;
Danach durch Aufruf von &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;./bin/alexa&amp;lt;/syntaxhighlight&amp;gt; den Dienst starten (kein sudo!)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unter Windows startet man Alexa-Dienst durch &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;node alexa&amp;lt;/syntaxhighlight&amp;gt; aus der &amp;lt;code&amp;gt;alex-fhem/bin&amp;lt;/code&amp;gt; (also erst z.B. durch &amp;lt;code&amp;gt;cd &amp;quot;&amp;lt;FHEM-Hauptverzeichis&amp;gt;\alexa-fhem\bin&amp;quot;&amp;lt;/code&amp;gt; ins richtige Verzeichnis kommen)&lt;br /&gt;
&lt;br /&gt;
Der Start des Alexa-Dienstes auf der Console ist immer dann zu empfehlen, wenn man auf die Ausgaben des Dienstes angewiesen ist und beispielsweise sehen möchte, welche Devices durch den Dienst bereitgestellt werden oder ob Fehler auftreten. Beendet man die Console-Session wird auch der Dienst wieder beendet. Insofern ist die vorgenannte Vorgehensweise nur für ein Debugging zu empfehlen und nicht im Regelbetrieb. Nachfolgend ist beschrieben, wie man den Alexa-Dienst aus FHEM heraus starten / stoppen und neu starten kann.&lt;br /&gt;
&lt;br /&gt;
==== Alexa-Fhem aus FHEM heraus starten ====&lt;br /&gt;
Zunächst das Start-up-Skript aus diesem Post herunterladen {{Link2Forum|Topic=60244|Message=517271|LinkText=https://forum.fhem.de/index.php/topic,60244.msg517271.html#msg517271}} und unter /etc/init.d/alexa speichern.&lt;br /&gt;
&lt;br /&gt;
Das Script geht davon aus, das der alexa-fhem script unter /opt/fhem/alexa-fhem liegt, und die logfiles später unter /opt/fhem/log. Sollte das nicht der Fall sein, muss das Skript angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Nun folgende Kommandos ausführen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;sudo chmod 755 /etc/init.d/alexa&lt;br /&gt;
sudo update-rc.d alexa defaults&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Datei &amp;lt;code&amp;gt;/etc/sudoers&amp;lt;/code&amp;gt; den User fhem für die Nutzung von sudo zulassen (&amp;lt;code&amp;gt;sudo nano /etc/sudoers&amp;lt;/code&amp;gt;), z.B. durch Anfügen der nachfolgenden Zeile:&lt;br /&gt;
&amp;lt;code&amp;gt;fhem ALL=(ALL) NOPASSWD: ALL&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun folgende Devices anlegen (ggf. einem Raum zuordnen, z.B. AlexaControl):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:75%;&amp;quot;&amp;gt;define FHEM.Alexa.Status dummy&lt;br /&gt;
&lt;br /&gt;
define FHEM.Alexa dummy&lt;br /&gt;
attr FHEM.Alexa event-on-change-reading state&lt;br /&gt;
attr FHEM.Alexa webCmd status:start:stop:restart&lt;br /&gt;
&lt;br /&gt;
define FHEM.Alexa.DOIF DOIF ([FHEM.Alexa] eq &amp;quot;start&amp;quot;) &lt;br /&gt;
(set FHEM.Alexa on, {system (&amp;quot;sudo /etc/init.d/alexa start &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&amp;quot;)}) &lt;br /&gt;
DOELSEIF ([FHEM.Alexa] eq &amp;quot;stop&amp;quot;)&lt;br /&gt;
(set FHEM.Alexa on, {system (&amp;quot;sudo /etc/init.d/alexa stop &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&amp;quot;)}) &lt;br /&gt;
DOELSEIF ([FHEM.Alexa] eq &amp;quot;restart&amp;quot;) &lt;br /&gt;
(set FHEM.Alexa on, {system (&amp;quot;sudo /etc/init.d/alexa restart &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&amp;quot;)}) &lt;br /&gt;
DOELSEIF ([FHEM.Alexa] eq &amp;quot;status&amp;quot;) &lt;br /&gt;
(set FHEM.Alexa on, {system (&amp;quot;sudo /etc/init.d/alexa status &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&amp;quot;)})&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Alexa-Fhem als Service (systemd) installieren ====&lt;br /&gt;
Auf neueren Installationen (z.B. RPi Jessie) wird init.d durch systemd ersetzt. Folgend die Anleitung um alexa-fhem als Service zu installieren auf einem Raspberry Pi mit Jessie.&lt;br /&gt;
&lt;br /&gt;
Zunächst einen neuen Benutzer anlegen unter dem alexa-fhem laufen soll, falls man nicht möchtet dass alexa-fhem z.B. mit dem fhem User ausgeführt wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:75%;&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -M --system alexa&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentlich braucht der Benutzer keine Gruppen, aber man kann den Benutzer auch der Gruppe &amp;lt;code&amp;gt;dialout&amp;lt;/code&amp;gt; hinzufügen (&amp;lt;code&amp;gt;sudo usermod -a -G dialout alexa&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Datei &amp;quot;alexa.service&amp;quot; unter &amp;lt;code&amp;gt;/etc/systemd/system&amp;lt;/code&amp;gt; anlegen:&lt;br /&gt;
&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Node.js Alexa Server &lt;br /&gt;
 After=syslog.target network-online.target&lt;br /&gt;
 &lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=simple&lt;br /&gt;
 User=alexa &lt;br /&gt;
 WorkingDirectory=/opt/alexa/alexa-fhem&lt;br /&gt;
 ExecStart=/opt/fhem/alexa-fhem/bin/alexa -U /home/alexa/.alexa&lt;br /&gt;
 Restart=on-failure&lt;br /&gt;
 RestartSec=10&lt;br /&gt;
 KillMode=process&lt;br /&gt;
 &lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target &lt;br /&gt;
&lt;br /&gt;
Den Pfad &amp;lt;code&amp;gt;/home/alexa/.alexa&amp;lt;/code&amp;gt; an die Systemgegebenheiten anpassen. Letztendlich kann die config.json irgendwo liegen, hauptsache alexa-fhem weiß wo. &lt;br /&gt;
&lt;br /&gt;
Im WorkingDirectory wird der alexa Dienst die Zertifikate suchen.&lt;br /&gt;
&lt;br /&gt;
Achtung: Natürlich muss der Benutzer auch Zugriff sowohl auf das Verzeichnis mit der config als auch das alexa-fhem Verzeichnis und das WorkingDirectory haben.&lt;br /&gt;
&lt;br /&gt;
Um den Service zu aktiveren und zu starten helfen folgende Befehle:&lt;br /&gt;
 sudo systemctl daemon-reload&lt;br /&gt;
 sudo systemctl enable alexa&lt;br /&gt;
 sudo systemctl start alexa&lt;br /&gt;
&lt;br /&gt;
Status abfragen mit&lt;br /&gt;
 sudo systemctl status alexa&lt;br /&gt;
&lt;br /&gt;
Log einsehen?&lt;br /&gt;
 sudo journalctl -u alexa&lt;br /&gt;
&lt;br /&gt;
(mit &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt; kann man den follow Modus aktivieren, wie &amp;lt;code&amp;gt;tail -f&amp;lt;/code&amp;gt;).&lt;br /&gt;
Bei einen reboot startet alexa-fhem jetzt automatisch.&lt;br /&gt;
&lt;br /&gt;
==== Alexa-Fhem testen ====&lt;br /&gt;
Node.Js stellt einen Web-Server am Port 3000 bereit, das oben erzeugte Zertifikat sichert diesen Zugang per SSL ab. Durch Aufruf der Adresse&lt;br /&gt;
&amp;lt;code&amp;gt;https://&amp;lt;IP-Adresse des Servers&amp;gt;:3000&amp;lt;/code&amp;gt; kann man testen, ob der Alexa-Fhem Service läuft - der Seitenaufruf liefert eine Zeile JSON-Code, beginnend mit&lt;br /&gt;
&amp;lt;code&amp;gt;{&amp;quot;header&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;UnsupportedOperationError&amp;quot;...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alexa Device anlegen ===&lt;br /&gt;
Das Modul 39_alexa.pm stellt innerhalb von FHEM verschiedene Attribute z.B. alexaName oder alexaRoom zur Verfügung. Manche dieser Attribute (wie z.b. alexaName) werden in beiden Skills verwendet, andere werden ausschließlich bei einer Nutzung des Alexa Custom Skill verwendet.&lt;br /&gt;
&lt;br /&gt;
Die Einrichtung des Alexa Device geschieht durch die nachfolgende Definition:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;define MyAlexa alexa&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alexa Skills ===&lt;br /&gt;
Für folgende Schritte muss man unter der Adresse http://developer.amazon.com angemeldet sein&lt;br /&gt;
# Anmeldung auswählen&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-01-login2.png|200px]]&lt;br /&gt;
# Anmeldedaten eingeben&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-02-userpass2.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==== Security Profile anlegen ====&lt;br /&gt;
Die Erzeugung eines Sicherheitsprofils muss nur einmal erfolgen, es wird dann für alle weiteren Skills verwendet.&lt;br /&gt;
# Nach der Anmeldung Auswahl von &#039;&#039;APPS &amp;amp; SERVICES&#039;&#039;&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-03-apps_and_services.png|200px]]&lt;br /&gt;
# Anschließend auswählen &#039;&#039;Security Profiles&#039;&#039;&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-05-apps_and_services_-_security_profiles.png|200px]]&lt;br /&gt;
# Auswählen &#039;&#039;Create a New Security Profile&#039;&#039; aus&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-06-apps_and_services_-_create_a_new_security_profile.png|200px]]&lt;br /&gt;
# Dann einen Namen und eine Beschreibung für das Profil eingeben und mit &#039;&#039;Save&#039;&#039; bestätigen&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-07-apps_and_services_-_security_profile_management.png|200px]]&lt;br /&gt;
&lt;br /&gt;
===== Login with Amazon =====&lt;br /&gt;
{{Randnotiz|RNTyp=[g|Info]|RNText=Hier wird beschrieben, wo &#039;&#039;Client Id&#039;&#039; und &#039;&#039;Client Secret&#039;&#039; zu finden sind}}&lt;br /&gt;
# Oben rechts auf &#039;&#039;Login with Amazon&#039;&#039; klicken.&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-08-login_with_amazon.png|200px]]&lt;br /&gt;
# Auf der neu geladenen Seite auswählen &#039;&#039;Sign up&#039;&#039;&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-09-login_with_amazon_-_sign_up.png|200px]]&lt;br /&gt;
# Anschließend im Dropdown Menü das vorher angelegte Profil auswählen und mit &#039;&#039;Confirm&#039;&#039; bestätigen&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-10-login_with_amazon_-_create_new_profile.png|200px]] [[Datei:Developer.amazon.com-11-login_with_amazon_-_create_new_profile2.png|200px]]&lt;br /&gt;
# Im folgenden Fenster die Adresse [https://www.amazon.com/gp/help/customer/display.html?nodeId=468496 https://www.amazon.com/gp/help/customer/display.html?nodeId=468496] eingeben und mit &#039;&#039;Save&#039;&#039; bestätigen. &#039;&#039;&#039;Todo Erklärungsbedarf: WARUM diese Adresse&#039;&#039;&#039;&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-12-login_with_amazon_-_enter_consent_screen_information.png|200px]]&lt;br /&gt;
# Anschließend bei dem neu angelegten Eintrag auf der rechten Seite auf das Zahnrad klicken und &#039;&#039;Web Settings&#039;&#039; auswählen&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-13-login_with_amazon_-_web_settings.png|200px]]&lt;br /&gt;
# Im neu geladenen Fenster anklicken von &#039;&#039;Edit&#039;&#039;&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-14-login_with_amazon_-_edit.png|200px]]&lt;br /&gt;
# Anschließend bei &#039;&#039;Allowed Return URLs&#039;&#039; die folgenden drei Adressen eingeben. &#039;&#039;xxx&#039;&#039; muss hierbei durch den Wert ersetzt werden, der in den beiden Abschnitten [[#SmartHome_Skill_anlegen | SmartHome Skill anlegen]] bzw. [[#Custom_Skill_anlegen | Custom Skill anlegen]] jeweils unter Punkt 4 (Seite &#039;&#039;Configuration&#039;&#039;) bei &#039;&#039;Redirect Urls&#039;&#039; am Ende der URLs angezeigt wird&lt;br /&gt;
## [https://layla.amazon.co.uk/api/skill/link/xxx https://layla.amazon.co.uk/api/skill/link/xxx]&lt;br /&gt;
## [https://pitangui.amazon.com/api/skill/link/xxx https://pitangui.amazon.com/api/skill/link/xxx]&lt;br /&gt;
## [https://layla.amazon.com/api/skill/link/xxx https://layla.amazon.com/api/skill/link/xxx]&lt;br /&gt;
.&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-15-login_with_amazon_-_allowed_return_urls.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==== Skills bearbeiten ====&lt;br /&gt;
# Im Menü den Punkt &#039;&#039;ALEXA&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-03-apps_and_services.png|200px]]&lt;br /&gt;
# Anschließend im Feld &#039;&#039;Alexa Skills Kit&#039;&#039; auf &#039;&#039;Get started&#039;&#039; klicken&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-17-alexa_-_alex_skills_kit_-_get_started.png|200px]]&lt;br /&gt;
&lt;br /&gt;
===== SmartHome Skill anlegen =====&lt;br /&gt;
# Oben rechts &#039;&#039;Add a New Skill&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-18-alexa_-_alex_skills_kit_-_add_a_new_skill.png|200px]]&lt;br /&gt;
# Auf der folgenden Seite eingeben und dann mit &#039;&#039;Next&#039;&#039; bestätigen:&lt;br /&gt;
#:* &#039;&#039;Skill Type&#039;&#039; -&amp;gt; &#039;&#039;SmartHome Skill API&#039;&#039; &lt;br /&gt;
#:* &#039;&#039;Language&#039;&#039; -&amp;gt; &#039;&#039;German&#039;&#039;&lt;br /&gt;
#:* &#039;&#039;Name&#039;&#039; -&amp;gt; beliebiger Name, z.B. &amp;quot;MySmartHome Basic&amp;quot;)&lt;br /&gt;
#:* &#039;&#039;Payload Version&#039;&#039; -&amp;gt; &#039;&#039;v2 (other devices)&#039;&#039; &amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-19-alexa_-_alex_skills_kit_-_skill_information.png|200px]]&lt;br /&gt;
# Die folgende Seite einfach mit &#039;&#039;Next&#039;&#039; überspringen&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-20-alexa_-_alex_skills_kit_-_interaction_model.png|200px]]&lt;br /&gt;
# Auf der Seite &#039;&#039;Configuration&#039;&#039; Folgendes eingeben:&lt;br /&gt;
#:* &#039;&#039;Service Endpoint Type&#039;&#039; -&amp;gt; &#039;&#039;AWS Lambda&#039;&#039; ist vorausgewählt und kann nicht geändert werden.&lt;br /&gt;
#:* &#039;&#039;Geographical Region&#039;&#039; -&amp;gt; &#039;&#039;Europe&#039;&#039; auswählen und im Textfeld die ARN aus Abschnitt [[#ARN_der_AWS_Lambda_Funktion_bestimmen | AWS Lambda Funktion]] eintragen. &lt;br /&gt;
#:* &#039;&#039;Authorization URL&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;https://www.amazon.com/ap/oa&amp;lt;/code&amp;gt;&lt;br /&gt;
#:* &#039;&#039;Client ID&#039;&#039; -&amp;gt; &#039;&#039;Client ID&#039;&#039; aus Abschnitt [[#Login_with_Amazon | Login with Amazon]], Punkt 1&lt;br /&gt;
#:* &#039;&#039;Scope&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;profile:user_id&amp;lt;/code&amp;gt;    (wörtlich 1:1 eintragen)&lt;br /&gt;
#:* &#039;&#039;Redirect URLs&#039;&#039; - sollten vorbelegt sein&lt;br /&gt;
#:* &#039;&#039;Authorization Grant Type&#039;&#039; -&amp;gt; &#039;&#039;Auth Code Grant&#039;&#039; auswählen&lt;br /&gt;
#:* &#039;&#039;Access Token URI&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;https://api.amazon.com/auth/o2/token&amp;lt;/code&amp;gt;&lt;br /&gt;
#:* &#039;&#039;Client Secret&#039;&#039; -&amp;gt; &#039;&#039;Client Secret&#039;&#039; aus Abschnitt [[#Login_with_Amazon | Login with Amazon]], Punkt 1&lt;br /&gt;
#:* &#039;&#039;Client Authentication Scheme&#039;&#039; -&amp;gt; &#039;&#039;HTTP Basic&#039;&#039;&lt;br /&gt;
#:* &#039;&#039;Privacy Policy URL&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;https://www.amazon.com/gp/help/customer/display.html?nodeId=468496&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-21-alexa_-_alex_skills_kit_-_configuration.png|200px]] [[Datei:Developer.amazon.com-22-alexa_-_alex_skills_kit_-_test.png|200px]]&lt;br /&gt;
&lt;br /&gt;
===== Custom Skill anlegen =====&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Oben rechts &#039;&#039;Add a New Skill&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-18-alexa_-_alex_skills_kit_-_add_a_new_skill.png|200px]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Auf der folgenden Seite (&#039;&#039;Skill Information&#039;&#039;) die nachstehenden Daten eingeben und dann mit &#039;&#039;Next&#039;&#039; bestätigen:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Skill Type&#039;&#039; -&amp;gt; &#039;&#039;Custom Interaction Model&#039;&#039; &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Language&#039;&#039; -&amp;gt; &#039;&#039;German&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Name&#039;&#039; -&amp;gt; beliebiger Name, z.B. &amp;quot;MySmartHome Advanced&amp;quot;. Dieser wird in der Alexa App unter &amp;quot;Meine Skills&amp;quot; angezeigt.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Invocation Name&#039;&#039; -&amp;gt; Aufruf des Skills, unter dem dieser später gestartet wird. Z.B. &amp;quot;Alexa, starte James&amp;quot;&amp;lt;br /&amp;gt;[[Datei:CustomSkill_2.PNG|400px]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Auf der Seite &#039;&#039;Interaction Model&#039;&#039; folgende Eingaben tätigen und mit &#039;&#039;Next&#039;&#039; abschließen&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In einem separaten Browserfenster FHEM aufrufen, und für das bereits definierte Alexa-Gerät das Kommando &amp;lt;code&amp;gt;get MyAlexa interactionModel&amp;lt;/code&amp;gt; aufrufen. Es erscheint ein Popup-Fenster mit ziemlich vielen Zeilen.&lt;br /&gt;
&amp;lt;li&amp;gt;In die Box &#039;&#039;Intent Schema&#039;&#039; kopiert man den ersten Teil dieser FHEM-Ausgabe hinein, also:&amp;lt;br/&amp;gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
 { &lt;br /&gt;
   &amp;quot;intents&amp;quot; : [ &lt;br /&gt;
    &amp;lt;hier ziemlich viele Zeilen&amp;gt;  &lt;br /&gt;
   ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Nun die &#039;&#039;Custom Slot Types&#039;&#039; einrichten. Dazu muss aus dem zweiten Teil der FHEM-Ausgabe jeweils der Slot-Type (z.B. &amp;lt;code&amp;gt;FHEM_article&amp;lt;/code&amp;gt;) in das Feld &#039;&#039;TYPE&#039;&#039; eingetragen werden, das nach dem Anklicken von &#039;&#039;Add Slot Type&#039;&#039; erscheint. In das darunter liegende größere Textfeld kommen die möglichen Werte für diesen Slot, so wie sie aus der FHEM-Ausgabe abzulesen sind. Dann mit &#039;&#039;Save&#039;&#039; sichern. Als Custom Slot Type erscheint dann für diesen Beispiel-Slot&lt;br /&gt;
 FHEM_article 	der | die | das | den&lt;br /&gt;
d.h., die Zeilenumbrüche bei den möglichen Werten werden als &amp;quot;|&amp;quot; dargestellt.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Hier muss nun ein Bruch im Arbeitsfluss durchgeführt werden, denn bei der Erstellung des Custom Skills kommt es auf die Reihenfolge der Einträge an. Deshalb zunächst diese FHEM-Ausgabe schließen, und für dasselbe FHEM-Device &amp;lt;code&amp;gt;get MyAlexa customSlotTypes&amp;lt;/code&amp;gt; ausführen. Auch diese Ausgabe wird, wie oben beschriebeen, in Custom Slot Types eingetragen (erst der TYPE, dann die möglichen Werte)&lt;br /&gt;
&amp;lt;li&amp;gt;Anschließend erneut die FHEM-Ausgabe schließen und erneut  für das bereits definierte Alexa-Gerät das Kommando &amp;lt;code&amp;gt;get MyAlexa interactionModel&amp;lt;/code&amp;gt; aufrufen.&lt;br /&gt;
&amp;lt;li&amp;gt;Unter &#039;&#039;Sample Utterances&#039;&#039; nun den Text aus dem dritten Teil dieser FHEM-Ausgabe hineinkopieren&amp;lt;br /&amp;gt;[[Datei:CustomSkill_5.PNG|400px]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Auf der Seite &#039;&#039;Configuration&#039;&#039; Folgendes eingeben und mit &#039;&#039;Next&#039;&#039; bestätigen:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Service Endpoint Type&#039;&#039; -&amp;gt; &#039;&#039;AWS Lambda&#039;&#039; auswählen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Geographical Region&#039;&#039; -&amp;gt; &#039;&#039;Europe&#039;&#039; auswählen und im Textfeld den Wert aus Abschnitt [[#AWS_Lambda_Funktion_anlegen | AWS Lambda Funktion anlegen]] (Punkt 12) eintragen. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Do you allow users to create an account or link to an existing account with you?&#039;&#039; -&amp;gt; &#039;&#039;Yes&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Authorization URL&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;https://www.amazon.com/ap/oa&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Client ID&#039;&#039; -&amp;gt; &#039;&#039;Client ID&#039;&#039; aus Abschnitt [[#Login_with_Amazon | Login with Amazon]], Punkt 1&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Scope&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;profile:user_id&amp;lt;/code&amp;gt; (wörtlich 1:1 eintragen)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Redirect URLs&#039;&#039; - sollten vorbelegt sein&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Authorization Grant Type&#039;&#039; -&amp;gt; &#039;&#039;Auth Code Grant&#039;&#039; auswählen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Access Token URI&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;https://api.amazon.com/auth/o2/token&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Client Secret&#039;&#039; -&amp;gt; &#039;&#039;Client Secret&#039;&#039; aus Abschnitt [[#Login_with_Amazon | Login with Amazon]], Punkt 1&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Client Authentication Scheme&#039;&#039; -&amp;gt; &#039;&#039;HTTP Basic&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;Privacy Policy URL&#039;&#039; -&amp;gt; &amp;lt;code&amp;gt;https://www.amazon.com/gp/help/customer/display.html?nodeId=468496&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Beim Sichern dieser Seite mit &#039;&#039;Next&#039;&#039; kann es zu einer Fehlermeldung kommen, wenn man seine Skill-Definitionen mit dem einfachen SmartHome-Skill begonnen hat. Deshalb muss noch der entsprechende Trigger für die [[#AWS_Lambda-Funktion | AWS Lambda Funktion]] nachgetragen werden, dies wird in Abschnitt [[#Trigger_f.C3.BCr_Custom_Skill_hinzuf.C3.BCgen | Trigger für Custom Skill hinzufügen]] beschrieben.&lt;br /&gt;
&amp;lt;br /&amp;gt;[[Datei:CustomSkill_6.PNG|400px]] [[Datei:CustomSkill_7.PNG|400px]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Testen ====&lt;br /&gt;
Hat man den Custom Skill angelegt, bietet dieser auch eine komfortable Testmöglichkeit. Dazu wählt man in der Übersichtsseite &#039;&#039;All Skills&#039;&#039; den Button &#039;&#039;Edit&#039;&#039; des Alexa Custom Skill aus. Auf der nachfolgenden Seite dann links &#039;&#039;Test&#039;&#039;. &lt;br /&gt;
Die Testseite enthält &lt;br /&gt;
* ein Feld &#039;&#039;Voice Simulator&#039;&#039;, mit dem man die Sprachsausgabe testen kann, &lt;br /&gt;
* ein Feld &#039;&#039;Service Simulator&#039;&#039;, mit dem die Verarbeitung von Alexa-Kommandois getestet werden kann. Hier kann man z.B. eintragen&lt;br /&gt;
 &amp;quot;Alexa, sage &amp;lt;Custom Skill Invocation Name&amp;gt;: Stelle Weckzeit auf Neunzehn Siebenundzwanzig Uhr&amp;quot;&lt;br /&gt;
 &amp;quot;Alexa, frage &amp;lt;Custom Skill Invocation Name&amp;gt; nach dem Status von Weckzeit&amp;quot;&lt;br /&gt;
Dabei ist natürlich der &#039;&#039;Custom Skill Invocation Name&#039;&#039; durch den Wert zu ersetzen, den man im Abschnitt [[#Custom_Skill_anlegen | Custom Skill Anlegen]] unter Punkt 2 eingetragen hat.&lt;br /&gt;
&lt;br /&gt;
==== Skill Id bestimmen ====&lt;br /&gt;
{{Randnotiz|RNTyp=[g|Info]|RNText=Hier wird beschrieben, wo die &#039;&#039;Alexa Skill Id&#039;&#039; zu finden ist}}&lt;br /&gt;
Für das [[#AWS_Lamba_Funktion_anlegen | Anlegen einer &#039;&#039;AWS Lambda Funktion&#039;&#039;]] bzw für die [[#Alexa-Fhem_konfigurieren | Konfiguration von Alexa-Fhem]] wird die &#039;&#039;Alexa Skill Id&#039;&#039; benötigt. An diese kommt man wie folgt:&lt;br /&gt;
# Anmelden wie unter [[#Alexa_Skills | Alexa Skills]] beschrieben.&lt;br /&gt;
# Menüpunkt &#039;&#039;ALEXA&#039;&#039; auswählen, wie [[#Skills_bearbeiten | Skills bearbeiten]] erklärt.&lt;br /&gt;
# Beim gewünschten Eintrag auf &#039;&#039;Edit&#039;&#039; klicken&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-23-alexa_-_alex_skills_kit_-_overview.png|200px]]&lt;br /&gt;
# Die Id, die nun oben angezeigt wird, ist die gesuchte. Sie hat typischerweise das Format &amp;lt;code&amp;gt;amzn1.ask.skill.[Zahlen und Bindestriche]&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-06-configure_triggers2.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== AWS Lambda Funktion ===&lt;br /&gt;
Für folgende Schritte muss man unter der Adresse http://aws.amazon.com angemeldet sein&lt;br /&gt;
# Anmeldung auswählen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-01-site.png|200px]]&lt;br /&gt;
# Anmeldedaten eingeben&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-02-login.png|200px]]&lt;br /&gt;
# Den Punkt &#039;&#039;Lambda&#039;&#039; links auf der Startseite auswählen, bzw. im Menü &#039;&#039;Services&#039;&#039; unter &#039;&#039;Compute&#039;&#039; den Menüpunkt &#039;&#039;Lambda&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-03-lambda.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==== AWS Lambda Funktion anlegen ====&lt;br /&gt;
# Für eine erste Lambda-Funktion den Punkt &#039;&#039;Get Started Now&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-04-get_started_now.png|200px]]&lt;br /&gt;
# Den Blueprint &#039;&#039;Blank function&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-05-select_blueprint.png|200px]]&lt;br /&gt;
# Im neuen Fenster dann auf den gestrichelten Kasten klicken und &#039;&#039;Alexa Smart Home&#039;&#039; auswählen und mit &#039;&#039;Next&#039;&#039; bestätigen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-06-configure_triggers1.png|200px]]&lt;br /&gt;
## Achtung, es ist möglich, dass dabei &#039;&#039;Alexa Smart Home&#039;&#039; überhaupt nicht angeboten wird. Dann bitte ganz rechts oben in der Ecke nachsehen, welche Region bzw. welches Land ausgewählt ist. Empfohlen wird, &#039;&#039;Ireland&#039;&#039; auszuwählen. Dann erscheint bei den Funktionen auch &#039;&#039;Alexa Smart Home&#039;&#039;.&lt;br /&gt;
# Bei &#039;&#039;Application Id&#039;&#039; den Wert eintragen, dessen Ermittlung im Abschnitt [[#Skill_Id_bestimmen | Skill Id bestimmen]] beschrieben wird, den Haken bei &#039;&#039;Enable trigger&#039;&#039; setzen und mit &#039;&#039;Next&#039;&#039; bestätigen &amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-06-configure_triggers3.png|200px]]&lt;br /&gt;
# Auf der Konfigurationsseite eingeben:&lt;br /&gt;
## &#039;&#039;Name&#039;&#039; -&amp;gt; &#039;&#039;FHEM&#039;&#039;&lt;br /&gt;
## &#039;&#039;Runtime&#039;&#039; -&amp;gt; Node.js 4.3. &lt;br /&gt;
## &#039;&#039;Role&#039;&#039; -&amp;gt; &#039;&#039;Choose an existing role&#039;&#039; &lt;br /&gt;
### Achtung: wenn es noch keine existing role gibt, zuerst &#039;&#039;Create a custom role&#039;&#039; -&amp;gt; in dem Popup dann &#039;&#039;lambda_basic_execution&#039;&#039; auswählen und auf &#039;&#039;Allow&#039;&#039; klicken sowie bei &#039;&#039;Existing role&#039;&#039; dann &#039;&#039;x&#039;&#039; wählen.&lt;br /&gt;
# Auf der Code-Seite ist im großen Textfeld dann der Code aus der Datei &#039;&#039;lambda.js&#039;&#039; im Paket [[#Alexa-Fhem_installieren | Alexa-Fhem]] vollständig einzufügen. Dabei muss der vorhandene Code im Texteil komplett gelöscht, der Teil aus der &#039;&#039;lamda.js&#039;&#039; eingefügt und noch der Hostname im Quellcode an den eigenen Hostnamen angepasst werden. &lt;br /&gt;
# Anschließend alles mit &#039;&#039;Next&#039;&#039; bestätigen.&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-07-configure_function.png|200px]]&lt;br /&gt;
# Auf der Übersichtsseite dann &#039;&#039;Create function&#039;&#039; anklicken&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-08-review.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==== Trigger für Custom Skill hinzufügen ====&lt;br /&gt;
Editiert man eine Lambda-Funktion, werden auf der Seite &#039;&#039;Triggers&#039;&#039; diejenigen Dienste angezeigt, die diese Funktion aufrufen.&lt;br /&gt;
* Hier taucht der Trigger &#039;&#039;Alexa Smart Home&#039;&#039; zusammen mit der &#039;&#039;Application Id&#039;&#039; auf, der bei der Einrichtung des SmartHome-Skills eingetragen wurde.&lt;br /&gt;
* Zur Verbindung mit dem Custom Skill ist es nötig, einen zweiten Trigger hinzuzufügen. Durch Anklicken von &#039;&#039;Add Trigger&#039;&#039; wird eine Auswahlseite eingeblendet. Im neuen Fenster dann auf den gestrichelten Kasten klicken und &#039;&#039;Alexa Skills Kit&#039; auswählen und mit &#039;&#039;Next&#039;&#039; bestätigen&lt;br /&gt;
&lt;br /&gt;
==== ARN der AWS Lambda Funktion bestimmen ====&lt;br /&gt;
# Auf der Übersichtsseite oben links den Menüpunkt &#039;&#039;Functions&#039;&#039; aúswählen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-09-go_overview.png|200px]]&lt;br /&gt;
# Anschließend den Radiobutton der angelegten Funktion &#039;&#039;FHEM&#039;&#039; markieren und im Menü &#039;&#039;Action&#039;&#039; den Punkt &#039;&#039;Show ARN&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-10-1-show_arn.png|200px]]&lt;br /&gt;
# Es wird nun eine ARN Adresse angezeigt, die für den Abschnitt [[#SmartHome_Skill_anlegen| SmartHome Skill anlegen]] benötigt wird&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-10-2-arn.png|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Absichern des Zugriffs ===&lt;br /&gt;
Natürlich muss der Zugriff auf den von Alexa-Fhem verwendeten Port (default: 3000, Bestandteil des Codes in der AWS Lambda-Funktion) durch die Firewall freigeschaltet werden (auf einer FritzBox unter &amp;quot;Portfreigaben&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
==== Absicherung direkt in Alexa-FHEM ====&lt;br /&gt;
Die Kommunikation zwischen Amazon AWS und Alexa-FHEM ist auf die folgenden Arten gesichert:&lt;br /&gt;
* Die Verbindung erfolgt per HTTPS&lt;br /&gt;
* Es werden nur Verbindung angenommen auf denen ein gültiges Alexa-Event gesendet wird. &lt;br /&gt;
* Es werden nur Verbindungen angenommen die ein gültiges und noch nicht abgelaufenes OAuth-Token enthalten. Jedes neue Token wird live bei Amazon auf Gültigkeit geprüft.    &lt;br /&gt;
* Es werden nur Verbindungen mit lokal konfigurierter Skill-ID angenommen.&lt;br /&gt;
* Es ist nicht möglich von außen beliebige FHEM Kommandos zu senden. Die FHEM Kommandos werden nur lokal erzeugt.&lt;br /&gt;
&lt;br /&gt;
Wer möchte kann Alexa-FHEM natürlich noch weiter absichern. Es gilt aber, dass nicht jedes zusätzliche Glied in der Kette die Sicherheit sondern unter Umständen nur die Angriffsfläche erhöht. Ein falsch konfigurierter und nach aussen offener Apache (oder anderer ReverseProxy) ist unter Umständen ein größeres Risiko als Alexa-FHEM alleine.&lt;br /&gt;
&lt;br /&gt;
==== Absicherung per ReverseProxy ====&lt;br /&gt;
&amp;lt;s&amp;gt;Die Kommunikation zwischen Amazon und FHEM ist wegen der Verwendung von SSL schon verschlüsselt - prinzipiell kann aber jeder von außen mit Alexa-Fhem kommunizieren. Man sollte sich deshalb im Klaren darüber sein, dass dies eine Sicherheitslücke darstellt:&amp;lt;/s&amp;gt; Jeder offene Port verleitet zu Angriffen, und mit zunehmender Verbreitung von Alexa steigt auch das Risiko. Es wird deshalb empfohlen, vor den eigentlichen Alexa-Server zur Absicherung einen Apache-Webserver als ReverseProxy zu setzen. Nicht nur ist der Apache eine hervorragend stabile und seit Jahrzehnten getestete Software, sondern die Konfiguration als ReverseProxy erlaubt auch, den Zugriff auf den Alexa-Fhem-Rechner auf die Amazon-Maschinen zu beschränken.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung: Dies ist keine allgemeine Anleitung in Sachen Computersicherheit.&#039;&#039;&#039; Im Folgenden gehen wir davon aus, dass &lt;br /&gt;
* Grundbegriffe wie Firewall, IP-Ports, SSL und Dynamic DNS vertraut sind&lt;br /&gt;
* Ein Apache Webserver (idealerweise auf einer zweiten Maschine) bereits installiert ist und die Konfiguration verstanden wurde (wenn nicht: Es gibt im Netz &#039;&#039;tausende&#039;&#039; von Anleitungen dafür...)&lt;br /&gt;
* Ein Servername von einem DynDNS-Anbieter - sagen wir &#039;&#039;myhome.is-my-castle.com&#039;&#039; - bereits von &#039;&#039;außen&#039;&#039; auf unser SmartHome zeigt.&lt;br /&gt;
* Alexa-Fhem in einer der oben beschriebenen Basiskonfigurationen läuft, d.h. der Zugriff auf &amp;lt;code&amp;gt;https://myhome.is-my-castle.com:3000&amp;lt;/code&amp;gt; ergibt, wie im Punkt [[#Alexa-Fhem_testen|Alexa-Fhem testen]] beschrieben, eine Antwort des Node.js Servers.&lt;br /&gt;
&lt;br /&gt;
Als erster Schritt zur Absicherung muss das ReverseProxy Modul für den Apache installiert und mit &amp;lt;code&amp;gt;a2enmod&amp;lt;/code&amp;gt; aktiviert werden, hierzu sei auf [https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-proxy-using-mod_proxy-extension diese Anleitung] verwiesen. Der zweite Schritt besteht darin, den SSL-Zugriff durch ein Passwort abzusichern. Dazu wird auf dem Apache-Rechner das Programm &lt;br /&gt;
 htpasswd &amp;lt;passwdfile&amp;gt; &amp;lt;username&amp;gt;&lt;br /&gt;
ausgeführt, das Programm fragt dann nach dem gewünschten Passwort. Wir nehmen im Folgenden an, dass das Passwortfile &#039;&#039;/etc/apache2/htpasswd&#039;&#039; ist, der gesetzte Username &#039;&#039;alexa&#039;&#039; lautet und das Passwort &#039;&#039;my_smarthome&#039;&#039; ist.&lt;br /&gt;
&lt;br /&gt;
Im dritten Schritt wird nun in das Apache-Konfigurationsfile die Weiterleitung auf den eigentlichen Alexa-Fhem-Rechner eingetragen. Dazu wählen wir, dass von außen der Standard-SSL-Port 443 benutzt werden soll, sowie als Verzeichnisname &#039;&#039;/alexa&#039;&#039;. &#039;&#039;&#039;Achtung:&#039;&#039;&#039; Dieser Code soll &#039;&#039;&#039;nicht&#039;&#039;&#039; in die Default-Konfiguration des Apache-Webservers. Sondern in eine separate Datei (Dateiname z.B. &amp;quot;fhem&amp;quot;), die ins Unterverzeichnis /etc/apache2/conf.d gestellt wird.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
  ServerName myhome.is-my-castle.com&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLProxyEngine on&lt;br /&gt;
  SSLProxyCheckPeerCN off&lt;br /&gt;
  SSLProxyCheckPeerName off&lt;br /&gt;
  SSLCertificateKeyFile /etc/apache2/mycert/server.key&lt;br /&gt;
  SSLCertificateFile /etc/apache2/mycert/server.crt&lt;br /&gt;
 &amp;lt;Location /alexa&amp;gt;&lt;br /&gt;
  AuthType Basic&lt;br /&gt;
  AuthName &amp;quot;Authentication Required&amp;quot;&lt;br /&gt;
  AuthUserFile &amp;quot;/etc/apache2/htpasswd&amp;quot;&lt;br /&gt;
  Require valid-user&lt;br /&gt;
  ProxyPass https://&amp;lt;hier IP-Adresse des Alexa-Fhem-Rechners&amp;gt;:3000/&lt;br /&gt;
  ProxyPassReverse https://&amp;lt;hier IP-Adresse des Alexa-Fhem-Rechners&amp;gt;:3000/&lt;br /&gt;
  Order deny,allow&lt;br /&gt;
  Allow from All&lt;br /&gt;
 &amp;lt;/Location&amp;gt;&lt;br /&gt;
 (... Hier eventuell weitere Umleitungen)&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
Nach einem Neustart des Apache-Servers, dem Schließen des Ports 3000 in der Firewall sowie dem Öffnen des Ports 443 ist der Alexa-Fhem-Rechner von außen nur noch erreichbar durch den Aufruf von &amp;lt;code&amp;gt;https://myhome.is-my-castle.com/alexa&amp;lt;/code&amp;gt; und verlangt unmittelbar die Eingabe von Username und Passwort.&lt;br /&gt;
&lt;br /&gt;
Der vierte Schritt ist nun, den Code der AWS Lambda-Funktion an fünf Stellen zu verändern&lt;br /&gt;
 &#039;&#039;&#039;const PORT=443;&#039;&#039;&#039;&lt;br /&gt;
 const HOST=&#039;myhome.is-my-castle.com&#039;;&lt;br /&gt;
 &#039;&#039;&#039;const PATH=&#039;/alexa&#039;;&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;const AUTH=&#039;alexa:my_smarthome&#039;;&#039;&#039;&#039;&lt;br /&gt;
 // entry&lt;br /&gt;
 exports.handler = function(event, context, callback) {&lt;br /&gt;
  console.log(`EVENT: ${event}`);&lt;br /&gt;
  console.log(`CONTEXT: ${context}`);  &lt;br /&gt;
  var post_data = JSON.stringify(event);&lt;br /&gt;
  var options = {&lt;br /&gt;
    hostname: HOST,&lt;br /&gt;
    port: PORT,&lt;br /&gt;
    //family: 6,&lt;br /&gt;
    &#039;&#039;&#039;path: PATH,&#039;&#039;&#039;&lt;br /&gt;
    method: &#039;POST&#039;,&lt;br /&gt;
    &#039;&#039;&#039;auth: AUTH,&#039;&#039;&#039;&lt;br /&gt;
    rejectUnauthorized: false, // accept self-signed&lt;br /&gt;
 (etc., Rest des Codes wie gehabt)&lt;br /&gt;
Natürlich muss der Zugriff getestet werden. Bei Beachtung aller dieser Schritte werden alle un-autorisierten Zugriffe von außen abgewehrt. Eine noch weiter gehende Sicherung ist möglich, dazu kann in der Serverkonfiguration der Zugriff auf die Amazon-Domains beschränkt werden. Das ganze Alexa-System ist aber noch in konstanter Weiterentwicklung, diese Domain-Namen können sich also noch ändern.&lt;br /&gt;
&lt;br /&gt;
== Einrichtung in der Alexa App==&lt;br /&gt;
Nachdem die Alexa Skills angelegt wurden, müssen diese noch in der Alexa App eingerichtet werden.&lt;br /&gt;
Dafür jeweils per Desktop-Browser auf [http://alexa.amazon.de alexa.amazon.de] anmelden, nicht die App unter iOS oder Android verwenden. Diese hat Probleme mit der OAuth Verknüpfung.&lt;br /&gt;
&lt;br /&gt;
=== Alexa Skill ===&lt;br /&gt;
# Auf &#039;&#039;Skills&#039;&#039; klicken&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-01-startseite.png|200px]]&lt;br /&gt;
# Oben rechts &#039;&#039;Meine Skills&#039;&#039;  bzw. &#039;&#039;Ihre Skills&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-03-meine_skills.png|200px]]&lt;br /&gt;
# In der Liste der Skills sollte das angelegte FHEM Skill angezeigt werden. Dieses anklicken&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-02-liste_skills.png|200px]]&lt;br /&gt;
# Oben Rechts in den Details des Skills auf &#039;&#039;Skill aktivieren&#039;&#039; klicken&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-04-skill_details.png|200px]]&lt;br /&gt;
# In dem neu geöffneten Fenster die Autorisierung bestätigen&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-05-amazon_auth.png|200px]]&lt;br /&gt;
# Anschließend sollte die Verbindung erfolgreich aufgebaut worden sein &amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-06-success.png|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Geräte ===&lt;br /&gt;
# Auf http://alexa.amazon.de anmelden&lt;br /&gt;
# Auf &#039;&#039;Smart Home&#039;&#039; klicken&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-01-startseite.png|200px]]&lt;br /&gt;
# Anschließend den Punkt &#039;&#039;Geräte suchen&#039;&#039; anklicken&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-07-Gerätesuche.png|200px]]&lt;br /&gt;
# Wurde soweit alles korrekt eingerichtet, werden nun die gefundenen Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
Tip: Es macht Sinn, unter &#039;&#039;Meine Gruppen&#039;&#039; Gruppen benannt nach den Räumen einzurichten. Hierdurch kann Alexa die Geräte besser auseinander halten, vor allem wenn die den gleichen Alias (z.B. &amp;quot;Licht&amp;quot;) haben.&lt;br /&gt;
&lt;br /&gt;
== Einrichtung unter FHEM ==&lt;br /&gt;
Im Folgenden werden exemplarisch ein paar Geräte beschrieben, die man nutzbringend mit FHEM einsetzen kann.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung des Custom Skills übersetzt die Kombination der Attribute &#039;&#039;alexaMapping&#039;&#039; und &#039;&#039;homebridgeMapping&#039;&#039; Sprachbefehle (&amp;quot;Intents&amp;quot;) in gerätespezifische Kommandos. &lt;br /&gt;
* Das Attribut alexaMapping wird am Alexa-Device gesetzt und dient dazu, erkannte Sprachkommandos in abstrakte Characteristiken zu überführen. Für den einfacheren SmartHome Skill hat darum das Attribut &#039;&#039;alexaMapping&#039;&#039; keine Bedeutung, sondern nur der &#039;&#039;genericDeviceType&#039;&#039; des zu steuernden Gerätes.&lt;br /&gt;
* Das Attribut homebridgeMapping wird für beide Skills am zu steuernden Gerät gesetzt und übersetzt diese Charakteristiken in die konkreten Befehle, die das Gerät versteht. Der inhalt des Attributs wird von links nach rechts ausgewertet und ist wie folgt aufgebaut:&lt;br /&gt;
** Das Attribut enthält eine durch Leerzeichen getrennte Liste aus Konfigurationen für jeweils eine Characteristik&lt;br /&gt;
** Jede einzelne der Characteristik-Konfigurationen besteht aus dem Namen der Characteristik, gefolgt von &amp;quot;=&amp;quot; und einer kommaseparierten Liste von Parametern.&lt;br /&gt;
  attr &amp;lt;device&amp;gt; homebridgeMapping &amp;lt;Characteristic1&amp;gt;=&amp;lt;param1.1&amp;gt;,&amp;lt;param1.2&amp;gt;,... &amp;lt;Characteristic2&amp;gt;=&amp;lt;param2.1&amp;gt;,&amp;lt;param2.2&amp;gt;,...&lt;br /&gt;
** Jeder Parameter besteht entweder aus&lt;br /&gt;
*** &amp;lt;code&amp;gt;&amp;lt;cmd&amp;gt;:&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;&amp;lt;/code&amp;gt;, hier können nicht verwendete Elemente von links nach rechts weg gelassen werden.&lt;br /&gt;
*** &amp;lt;code&amp;gt;&amp;lt;name&amp;gt;=&amp;lt;value&amp;gt;&amp;lt;/code&amp;gt;, hier kann &amp;lt;code&amp;gt;&amp;lt;value&amp;gt;&amp;lt;/code&amp;gt; entweder ein Wert oder semikolonseparierte Liste sein.&lt;br /&gt;
*** Oder dem schlüsselwort &amp;lt;code&amp;gt;clear&amp;lt;/code&amp;gt;, welches alle vorhandenen (default) Parameter dieser Characteristik löscht. &amp;lt;code&amp;gt;clear&amp;lt;/code&amp;gt; kann auch an Stelle einer ganzen Characteristik-Konfiguration stehen&lt;br /&gt;
Weiter führende Dokumentation zum homebridgeMapping findet sich unter https://forum.fhem.de/index.php/topic,48558.0.html&lt;br /&gt;
&lt;br /&gt;
=== Einfacher Schalter ===&lt;br /&gt;
* Ein einfacher Schalter, der die set-Kommandos &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; kennt, kann direkt mit Alexa-Fhem gekoppelt werden &lt;br /&gt;
* Für kompliziertere Aktionen, etwa das Übermitteln eines spezifischen Schaltbefehls an FHEM, ist die Einrichtung eines Dummies zu empfehlen. &lt;br /&gt;
Ob Dummy oder nicht, wichtig sind die drei fett gedruckten Zeilen&lt;br /&gt;
 define Alexa.Party dummy&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Party alexaName party&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Party alexaRoom alexaroom&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Party genericDeviceType switch&#039;&#039;&#039;&lt;br /&gt;
 attr Alexa.Party group AlexaGeräte&lt;br /&gt;
 attr Alexa.Party room AlexaRoom&lt;br /&gt;
 attr Alexa.Party setList on off&lt;br /&gt;
Selbstverständlich kann man diesen Dummy mit einem notify oder DOIF abfangen, um die gewünschte Schaltaktion auszuführen. &lt;br /&gt;
&lt;br /&gt;
Ein Alternative zum Dummy ist das Anlegen eines readingsProxy, dem die entsprechenden Attribute gegeben werden.&lt;br /&gt;
&lt;br /&gt;
Weil es sich hierbei um eines der einfachen Geräte handelt, die Alexa selbst im SmartHome Skill bearbeiten kann, ist auch der zweite Schritt bei der Einrichtung in der Alexa App sinnvoll: Der Schalter wird dann im Bereich Smart Home der Alexa App erkannt. Wer ihn auch mit dem Custon Skill bedienen möchte, muss natürlich Sorge tragen, dass der Alexa-Name &#039;&#039;party&#039;&#039; bei den FHEM_Devices auftaucht und die entsprechenden weiteren Slot Types und Example Utterances in der Konfiguration des Custom Skills vorhanden sind (siehe Abschnitt [[##Custom_Skill_anlegen | Custom Skill Anlegen]]).&lt;br /&gt;
&lt;br /&gt;
=== Wecker ===&lt;br /&gt;
Dieses Gerät kann man nur mit dem Custom Skill bedienen, es wird also &#039;&#039;&#039;nicht&#039;&#039;&#039; im Bereich Smart Home der Alexa App auftauchen. Wir richten einen Dummy ein, wichtig sind wieder die fett gedruckten Zeilen:&lt;br /&gt;
 define Alexa.Weckzeit dummy&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Weckzeit alexaName weckzeit&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Weckzeit alexaRoom alexaroom&#039;&#039;&#039;&lt;br /&gt;
 attr Alexa.Weckzeit genericDeviceType clock&lt;br /&gt;
 attr Alexa.Weckzeit group AlexaGeräte&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Weckzeit homebridgeMapping Weckzeit=state,cmd=+&#039;&#039;&#039;&lt;br /&gt;
 attr Alexa.Weckzeit room AlexaRoom&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Weckzeit setList Weckzeit:time&#039;&#039;&#039;&lt;br /&gt;
Das Attribut &#039;&#039;genericDeviceTye&#039;&#039; ist nicht wichtig, weil es ein generisches Device dieser Art gar nicht gibt. Wichtig hingegen ist das Attribut &#039;&#039;homebridgeMapping&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Für das Gerät &#039;&#039;MyAlexa&#039;&#039;, das in Abschnitt definiert wurde, muss im Attribut &#039;&#039;alexaMapping&#039;&#039; auftauchen&lt;br /&gt;
 Weckzeit=verb=stelle,valuePrefix=für;auf,values=AMAZON.TIME,valueSuffix=uhr&lt;br /&gt;
Darüber hinaus muss der Alexa-Name &#039;&#039;weckzeit&#039;&#039; bei den FHEM_Devices auftauchen und die entsprechenden weiteren Slot Types und Example Utterances in der Konfiguration des Custom Skills vorhanden sein (siehe Abschnitt [[#Custom_Skill_anlegen | Custom Skill Anlegen]]).&lt;br /&gt;
&lt;br /&gt;
Der Aufruf dieses Gerätes mit Alexa erfolgt dann z.B. mit den Sätzen&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;Alexa, sage &amp;lt;Custom Skill Invocation Name&amp;gt;: Stelle Weckzeit auf Neunzehn Uhr Siebenundzwanzig&amp;quot;&lt;br /&gt;
&amp;quot;Alexa, frage &amp;lt;Custom Skill Invocation Name&amp;gt; nach dem Status von Weckzeit&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dabei ist natürlich der &#039;&#039;Custom Skill Invocation Name&#039;&#039; durch den Wert zu ersetzen, den man im Abschnitt [[#Custom_Skill_anlegen | Custom Skill Anlegen]] unter Punkt 2 eingetragen hat.&lt;br /&gt;
&lt;br /&gt;
Zur weiteren Bearbeitung kann man jetzt mit einem DOIF Statusänderungen des Dummies abfangen und durch eine kleine Helperfunktion ins &amp;quot;echte&amp;quot; FHEM weiterleiten.&lt;br /&gt;
  define Alexa.Weckzeit.N DOIF ([&amp;quot;Alexa.Weckzeit:.*&amp;quot;])({AlexaHelper(&amp;quot;Alexa.Weckzeit&amp;quot;,&amp;quot;$EVENT&amp;quot;)}) &lt;br /&gt;
Die Helperfunktion (z.B. in 99_myUtils.pm) stellt aus der übergebenen Zeit (immer im Format dd:mm) eine sprachkompatible Nachricht $nc und einen mit den FHEM-Zeitangaben kompatiblen String $nt zusammen und reicht beide an eine Routine &#039;&#039;changeWakeTime&#039;&#039; weiter (dokumentiert in den [https://www.dpunkt.de/buecher/12387/9783960090120-smarthome-hacks.html Smart Home Hacks]).&lt;br /&gt;
 sub AlexaHelper($$){&lt;br /&gt;
  my ($name,$event)=@_;&lt;br /&gt;
  if( $name eq &amp;quot;Alexa.Weckzeit&amp;quot; ){ &lt;br /&gt;
    my ($nc,$nt);&lt;br /&gt;
    #-- volle Stunde----------------------------------------&lt;br /&gt;
    if( $event =~ /(\d+):00/ ){&lt;br /&gt;
      $nc=sprintf(&amp;quot;%d Uhr&amp;quot;,$1);&lt;br /&gt;
      $nt=sprintf(&amp;quot;%02d:00:00&amp;quot;,$1);&lt;br /&gt;
    #-- nicht volle Stunde---------------------------------&lt;br /&gt;
    }elsif( $event =~ /(\d+):(\d+)/ ){&lt;br /&gt;
      $nc=sprintf(&amp;quot;%d Uhr %d&amp;quot;,$1,$2);&lt;br /&gt;
      $nt=sprintf(&amp;quot;%02d:%02d:00&amp;quot;,$1,$2);&lt;br /&gt;
    }&lt;br /&gt;
    changeWakeTime(\&#039;GalaxyTab.EG\&#039;,\&#039;$nc\&#039;,\&#039;$nt\&#039;);&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lichtszene ===&lt;br /&gt;
Eine Lichtszene wird mit dem Modul LightScene angelegt. Wir gehen davon aus, dass in der Lichtszene die beiden Szenen Alle_An und Alle_Aus, sowie mindestens eine weitere Szene (hier: Sitzgruppe) definiert wurde.&lt;br /&gt;
* Nachfolgend wird ein Beispiel beschrieben, wie man eine Lichtszene mit dem einfachen SmartHome Skill steuern kann. Die verwendeten Kommandos sind dann&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Alexa, schalte (die) Beleuchtung an&amp;quot; -&amp;gt; LightScene Alle_An wird ausgewählt&lt;br /&gt;
&amp;quot;Alexa, schalte (die) Beleuchtungsitzgruppe an&amp;quot; -&amp;gt; LightScene Sitzgruppe wird ausgewählt&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;Alexa, schalte (die) Beleuchtung aus&amp;quot; -&amp;gt; LightScene Alle_Aus wird ausgewählt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Künftig wird man LightScene mit dem Custom Skill eventuell direkt steuern können - allerdings hat das einen geringeren WAF, als die Steuerung über den SmartHome Skill: Der Einschaltsatz muss dann mindestens lauten&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Alexa, sage &amp;lt;Custom Skill Invocation Name&amp;gt;: schalte (die) Beleuchtung an&amp;quot; -&amp;gt; LightScene Alle_An wird ausgewählt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dafür wird es aber auch möglich sein direkt die SzenenNamen im gesprochenen Kommando zu verwenden und so auf die Umwege über dummys und ähnliches zu verzichten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im ersten Schritt wird ein Dummy für die Gesamtbeleuchtung eingerichtet:&lt;br /&gt;
 define Alexa.Beleuchtung dummy &lt;br /&gt;
 attr Beleuchtung setList on off&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Beleuchtung alexaName beleuchtung&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Beleuchtung alexaRoom alexaroom&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Beleuchtung genericDeviceType switch&#039;&#039;&#039;&lt;br /&gt;
Anschließend wird für jede vorhandene Lichtszene (außer Alle_An und Alle_Aus) ein weiterer Dummy angelegt:&lt;br /&gt;
 define Alexa.Beleuchtung.Sitzgruppe dummy &lt;br /&gt;
 attr Beleuchtung setList on off&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Beleuchtung.Sitzgruppe alexaName beleuchtungsitzgruppe&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Beleuchtung.Sitzgruppe alexaRoom alexaroom&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;attr Alexa.Beleuchtung.Sitzgruppe genericDeviceType switch&#039;&#039;&#039; &lt;br /&gt;
Die eigentliche Steuerung übernimmt dann ein DOIF&lt;br /&gt;
 define Alexa.Beleuchtung.N DOIF&lt;br /&gt;
 ([&amp;quot;Alexa.Beleuchtung.Sitzgruppe:on&amp;quot;])&lt;br /&gt;
 (set &amp;lt;devicename der Lichtszene&amp;gt; scene Sitzgruppe,&lt;br /&gt;
  set Alexa.Beleuchtung off,&lt;br /&gt;
   ...&amp;lt;weitere dummies der anderen Szenen werden ebenfalls ausgeschaltet&amp;gt;&lt;br /&gt;
 )&lt;br /&gt;
 DOELSIF&lt;br /&gt;
 ... &amp;lt;weitere on-Events der anderen Szenen werden abgefangen&amp;gt;&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
 ([&amp;quot;Alexa.Beleuchtung:on&amp;quot;])&lt;br /&gt;
 (set &amp;lt;devicename der Lichtszene&amp;gt; scene Alle_An,&lt;br /&gt;
  set Alexa.Beleuchtung.Sitzgruppe off,&lt;br /&gt;
  ...&amp;lt;weitere dummies der anderen Szenen werden ebenfalls ausgeschaltet&amp;gt;&lt;br /&gt;
 )&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
 ([&amp;quot;Alexa.Beleuchtung:off&amp;quot;])&lt;br /&gt;
 (set &amp;lt;devicename der Lichtszene&amp;gt; scene Alle_Aus,&lt;br /&gt;
  set Alexa.Beleuchtung.Sitzgruppe off,&lt;br /&gt;
  ...&amp;lt;weitere dummies der anderen Szenen werden ebenfalls ausgeschaltet&amp;gt;&lt;br /&gt;
 )&lt;br /&gt;
Mit diesem DOIF wird ein Radiobutton simuliert, d.h. wie bei den Stationstasten vor Uralt-Radios sorgt die Auswahl einer Szene immer dafür, dass alle anderen Dummies ausgeschaltet werden.&lt;br /&gt;
Natürlich kann man das auch mit einem kleinen Perl-Programm erreichen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zwei andere Ansätze Lichtszenen zu schalten die ohne DOIF auskommen sind im Folgenden beschrieben:&lt;br /&gt;
&lt;br /&gt;
* Wenn es von Interesse ist die Steuerung mit einer Darstellung in FTUI zu verbinden: Statt der oben beschriebenen dummy Devices kann man readingsProxy Devices mit passenden setFn und valueFn analog zum  [[Harmony#Button_f.C3.BCr_eine_bestimmte_Activity_im_Frontend_und_Homekit_.C3.BCber_readingsProxy|diesem Beispiel für harmony aktivitäten]] verwenden.&lt;br /&gt;
&lt;br /&gt;
* Für jede zu schaltende Szene wird ein dummy angelegt dessen homebridgeMapping direkt auf das LightScene Device zeigt:&lt;br /&gt;
&lt;br /&gt;
 define &amp;lt;dummy&amp;gt; dummy&lt;br /&gt;
 attr &amp;lt;dummy&amp;gt; setList on off&lt;br /&gt;
 attr &amp;lt;dummy&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;dummy&amp;gt; homebridgeMapping On=&amp;lt;light scene&amp;gt;::state,valueOn=&amp;lt;szene&amp;gt;,cmdOn=scene+&amp;lt;szene&amp;gt;,cmdOff=scene+&amp;lt;szene aus&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei der zweiten Variante wird davon ausgegangen das der aktuelle status nicht abgefragt oder angezeigt werden soll. Deshalb gibt es keine direkte RadioButton Funktionalität.&lt;br /&gt;
&lt;br /&gt;
=== Harmony Hub ===&lt;br /&gt;
Ein [https://forum.fhem.de/index.php/topic,60244.msg550298.html#msg550298 HowTo-Beitrag im Forum] beschreibt die Ansteuerung von Harmony-Aktionen über den Custom Skill, beispielsweise für eine Aktion &#039;&#039;ARD&#039;&#039;: „Alexa, sage FHEM stelle Anlage auf ARD“.&lt;br /&gt;
&lt;br /&gt;
== Nutzung ==&lt;br /&gt;
Um den Namen zu bestimmen, unter dem ein Gerät mit Alexa angesprochen wird, verwendet Alexa-Fhem mit absteigender Priorität:&lt;br /&gt;
* das alexaName Attribut&lt;br /&gt;
* das alias Attribut&lt;br /&gt;
* das NAME Internal&lt;br /&gt;
Damit Alexa ein Gerät eindeutig identifizieren kann, sollten eindeutige Gerätenamen verwendet werden, bestehed möglichst aus einem Wort und ohne Ziffern. Wenn Alexa einen Namen nicht versteht, kann man unter [http://alexa.amazon.de/spa/index.html] nachsehen was tatsächlich verstanden wurde und den Gerätenamen ggf. anpassen.&lt;br /&gt;
&lt;br /&gt;
=== SmartHome Skill ===&lt;br /&gt;
Gruppen (Räume) müssen in der Alexa App konfiguriert werden. Über das API lassen sich nur der Name und die Schalteigenschaften übergeben.&lt;br /&gt;
&lt;br /&gt;
Nach erfolgreicher Einrichtung des SmartHome Skills sollte Alexa mit den folgenden Befehlen nutzbar sein:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
“alexa, schalte &amp;lt;gerät/gruppe&amp;gt; ein”&lt;br /&gt;
“alexa, schalte &amp;lt;gerät/gruppe&amp;gt; aus”&lt;br /&gt;
“alexa, stelle &amp;lt;gerät/gruppe&amp;gt; auf &amp;lt;wert&amp;gt; prozent”&lt;br /&gt;
“alexa, stelle &amp;lt;gerät/gruppe&amp;gt; auf &amp;lt;anzahl&amp;gt; grad”&lt;br /&gt;
“alexa, erhöhe &amp;lt;gerät/gruppe&amp;gt; um &amp;lt;anzahl&amp;gt; prozent”&lt;br /&gt;
“alexa, reduziere &amp;lt;gerät/gruppe&amp;gt; um &amp;lt;anzahl&amp;gt; prozent”&lt;br /&gt;
“alexa, erhöhe &amp;lt;gerät/gruppe&amp;gt; um &amp;lt;anzahl&amp;gt; grad”&lt;br /&gt;
“alexa, reduziere &amp;lt;gerät/gruppe&amp;gt; um &amp;lt;anzahl&amp;gt; grad”&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Custom Skill ===&lt;br /&gt;
Der Custom Skill erlaubt im Gegensatz zum SmartHome Skill eine weitreichende Konfiguration der möglichen Kommandos.&lt;br /&gt;
&lt;br /&gt;
Das Prinzip der Kommandokonfiguration ist {{Link2Forum|Topic=60244|Message=532513|LinkText=im Forum}} beschrieben.&lt;br /&gt;
&lt;br /&gt;
TODO: Abfragen, Attribute (alexaMapping, alexaTypes, fhemIntents, articles, prepositions)&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
====Allgemeiner Hinweis====&lt;br /&gt;
Besonders wichtig ist, dass man sich sehr genau an diese Anleitung hält. Ein häufiger Fehler ist, dass die einfachen Anführungszeichen in der Anleitung unter &#039;&#039;&#039;AWS Lambda Funktion anlegen&#039;&#039;&#039; Punkt 8 einfach weggelassen werden. Diese sind zwingend notwendig. Es darf auch nur der reine Hostname eingetragen werden. Also kein &#039;&#039;http://&#039;&#039; davor. Entweder eine feste IP Adresse oder den Hostnamen, um den Rechner zu erreichen, den ihr über den Port 3000 freigegeben habt. Das sollte dann so aussehen:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
const PORT=3000;&lt;br /&gt;
const HOST=&#039;mein.host.name&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Freigabe von Port 3000====&lt;br /&gt;
{{Randnotiz|RNTyp=Fehl|RNText=Derzeit müsst ihr über einen echten IPv4 Anschluss verfügen, damit der Amazon Lambda-Server euch erreichen kann. DS-Lite Anschlüsse wie die von &amp;lt;b&amp;gt;UnityMedia&amp;lt;/b&amp;gt; z.B. funktionieren derzeit leider nicht. Eine möglicher &amp;quot;Workaround&amp;quot; wird hier beschrieben: https://forum.fhem.de/index.php/topic,60244.msg518276.html#msg518276}}&lt;br /&gt;
&lt;br /&gt;
Auf dem Router muss der Port 3000 Protokoll TCP freigegeben werden. D.h. von außen muss man wenn man den Port 3000 aufruft, auf dem intern laufenden node.js Alexa-Dienst zugreifen können.&lt;br /&gt;
Je nach Router gestaltet sich das Portforwarding bzw. die Portumleitung etwas schwieriger.&lt;br /&gt;
&lt;br /&gt;
Bei einem Speedport Router der Telekom beispielsweise, muss der Router komplett neu gestartet werden, wenn die Portfreigabe eingerichtet wurde. &lt;br /&gt;
&lt;br /&gt;
Bei der Fritz!Box ist das nicht nötig, bei dieser finden die Freigabe unter &#039;&#039;Internet -&amp;gt; Freigaben -&amp;gt; Portfreigaben&#039;&#039; statt. Dort wählt man dann den Rechner aus und richtet eine neue Freigabe ein. Wichtig hierbei ist, dass man Portfreigabe auswählt und nicht MyFRITZ!-Freigabe. Bei Port von bis trägt man 3000 ein, bei Port extern ebenfalls.&lt;br /&gt;
&lt;br /&gt;
Um die Portweiterleitung zu testen, solltet ihr euch auch nicht im gleichen Netz befinden. Viele Router blockieren den Netzaufruf aus dem gleichen Netz. Am besten testet ihr es, wenn ihr an eurem Mobiltelefon W-LAN deaktiviert und im Browser folgende Seite aufruft: &#039;&#039;https://mein.hostname:3000&#039;&#039;. Wenn ihr im Browser dann einen Quellcode von Alexa seht, funktioniert die Portumleitung.&lt;br /&gt;
&lt;br /&gt;
Wenn bis hier alles funktioniert und es läuft dennoch nicht rund, liegt das Problem woanders. Kommt z.B. bei der Gerätesuche kein Request rein (sichtbar auf dem Bildschirm, wenn bin/alexa gestartet wurden), kann evtl. der Lambda-Dienst falsch konfiguriert sein.&lt;br /&gt;
&lt;br /&gt;
====Probleme mit node.js - npm install====&lt;br /&gt;
&lt;br /&gt;
Falls eine Fehlermeldung auftritt, dass &amp;quot;npm&amp;quot; nicht gefunden werden kann, bitte NodeJS entsprechend der Anleitung im Homebridge-Artikel vorgehen: [[Homebridge_einrichten#NodeJS_installieren|NodeJS installieren]] sowie [[Homebridge_einrichten#Python.2C_g.2B.2B.2C_MDNS_installieren|Python, g++, MDNS installieren]], siehe auch folgenden Abschnitt.&lt;br /&gt;
&lt;br /&gt;
====Es kommen diverse Fehlermeldungen beim Starten von alexa-fhem und es beendet sich====&lt;br /&gt;
Wenn man auf der Konsole angemeldet ist, den Befehl&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;node -v&amp;lt;/syntaxhighlight&amp;gt;eingeben. Ist die Version niedriger als die geforderte 0.12, muss eine neuere installiert werden. Hier darf man dann im Wiki unter [[Homebridge_einrichten#NodeJS_installieren]] nachschauen. NodeJS V4 sollte hierbei schon ausreichen. Solange die node.js Version nicht passt, gar nicht groß rum experimentieren! Bitte beachtet, dass alle Voraussetzungen unter [[Alexa-Fhem#Voraussetzungen]] erfüllt sind! Keine Experimente mit Versionen die darunter liegen.&lt;br /&gt;
&lt;br /&gt;
====Fehlermeldung &#039;&#039;NAT-PMP failed: Error: timeout&#039;&#039; Fehler angezeigt beim Start von alexa-fhem====&lt;br /&gt;
Wenn ihr dann alexa-fhem über die Konsole startet und bekommt folgenden Fehler: &#039;&#039;NAT-PMP failed: Error: timeout&#039;&#039;, lasst euch davon nicht irritieren. Das bedeutet lediglich, dass der Port nicht automatich freigegeben wurde über uPNP. Alternativ prüft, ob die Funktion der Portfreigabe via uPNP auf eurem Router aktiviert ist.&lt;br /&gt;
&lt;br /&gt;
====Nach Start auf der Console beendet sich Alexa-FHEM sofort wieder====&lt;br /&gt;
Unmittelbar nach dem Start von Alexa-FHEM werden ein paar UPNP Fehlermeldungen ausgegeben. Unmittelbar danach beendet sich Alexa-FHEM wieder. &lt;br /&gt;
&lt;br /&gt;
Viele scheinen ein Problem mit UPNP auf dem Raspberry Pi zu haben. Wenn dieses Problem auftritt einfach in der &amp;lt;code&amp;gt;~/.alexa/config.json&amp;lt;/code&amp;gt; die folgenden Zeilen rauslöschen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;quot;nat-pmp&amp;quot;: &amp;quot;10.0.1.1&amp;quot;,&lt;br /&gt;
        &amp;quot;nat-upnp&amp;quot;: true,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt erneut Alexa-FHEM starten. Sollte nun laufen.&lt;br /&gt;
&lt;br /&gt;
====Was ist zu tun, wenn alexa-fhem keine Geräte findet?====&lt;br /&gt;
Zunächst müssen die Geräte, die angesprochen werden wollen, unter FHEM ein neues Attribut zugewiesen bekommen. Dazu das Gerät in FHEM öffnen und das Attribut &#039;&#039;genericDeviceType switch&#039;&#039; hinzufügen, wenn es ein Schalter mit der Funktiona AN/AUS sein soll. Wenn man will, kann man dem Gerät jetzt noch über das Attribut &#039;&#039;alias&#039;&#039; eine besseren Namen geben, mit dem Alexa das Gerät dann auch finden kann.&lt;br /&gt;
Anschließend muss alexa-fhem neu gestartet werden und die definierten Geräte sollten nun gefunden werden.&lt;br /&gt;
&lt;br /&gt;
====Was ist zu tun, wenn Alexa zwar Geräte findet, diese aber nicht angesprochen werden können?====&lt;br /&gt;
Zuerst die Informationen zum Datenfluss ganz oben ansehen. Dann am besten von hinten nach vorne vorgehen:&lt;br /&gt;
* wenn nichts bei alexa-fhem ankommt: port forwarding prüfen&lt;br /&gt;
* wenn lambda.js nichts los wird: im cloudwatch log nachsehen&lt;br /&gt;
* wenn bei lambda.js nichts ankommt: den trigger prüfen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte man sich unter &#039;&#039;http://aws.amazon.com&#039;&#039; das Logfile seiner erstellten Funktion anschauen. Ist überhaupt ein Logfile vorhanden? Falls nicht, liegt es vermutlich am Trigger.&lt;br /&gt;
Den solltet ihr überprüfen. Scheinbar kommt es hin und wieder vor, dass dieser nicht gesetzt ist. Dazu einfach auf &#039;&#039;Triggers&#039;&#039; klicken und mit &#039;&#039;Add trigger&#039;&#039; erneut einen anlegen. Hier muss, wie in der Anleitung unter &#039;&#039;&#039;AWS Lambda Funktion anlegen&#039;&#039;&#039; Punkt 7, die &#039;&#039;Application Id&#039;&#039; stehen und der Haken bei &#039;&#039;Enable trigger&#039;&#039; gesetzt sein. Dann alexa-fhem neu starten.&lt;br /&gt;
Wenn ihr Änderugen gemacht habt und den alexa-fhem Dienst noch nicht neu gestartet habt, wäre jetzt der richtige Zeitpunkt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es kann sein, dass immer noch keine Log im Cloudwatch ([http://docs.aws.amazon.com/de_de/lambda/latest/dg/monitoring-functions-logs.html]) zu sehen ist. In dem Fall hilft es, eine neue Role Policy anzulegen. &lt;br /&gt;
* in der AWS Console [https://console.aws.amazon.com] oben links auf Services klicken, und in der Gruppe &amp;quot;Security, Identity &amp;amp; Compliance&amp;quot; auf IAM klicken&lt;br /&gt;
* links auf Roles klicken&lt;br /&gt;
* Auf dem Knopf &amp;quot;Create Role&amp;quot; klicken&lt;br /&gt;
* AWS Services &amp;gt; Lambda auswählen, unten auf Next:Permissions klicken&lt;br /&gt;
* im Filter / Policy Type,  &amp;quot;log&amp;quot; eintragen (ohne quotes)&lt;br /&gt;
* CloudWatchLogsFullAccess hacken, auf Next:Review unten klicken&lt;br /&gt;
* Name vergeben und mit &amp;quot;Create role&amp;quot; bestätigen&lt;br /&gt;
* Oben links auf Services klicken, und in der Gruppe &amp;quot;Compute&amp;quot;, auf Lambda klicken&lt;br /&gt;
* auf den Name der Funktion klicken&lt;br /&gt;
* Reiter Configuration auswählen&lt;br /&gt;
* in Existing Role, den neukreierten Role auswählen&lt;br /&gt;
* oben auf Save (und Testen wenn gewünscht) klicken.&lt;br /&gt;
Schon sollte eine neue Gruppe im Cloudwatch sichtbar sein. Die Suche von den Devices in Alexa wiederholen, und die Logs analysieren&lt;br /&gt;
&lt;br /&gt;
====Was ist zu tun, wenn sich der Alexa-Service nicht starten lässt?====&lt;br /&gt;
{{Randnotiz|RNTyp=[g|Info]|RNText=Der User in der User= Directive von alexa.service muss Ausführungsrecht auf dem alexa binary haben (x), so wie auch mind. Lesezugriff auf dem Verzeichnis nach -U Option in der ExecStart= Directive und auch auf dem WorkingDirectory }}&lt;br /&gt;
Schaut bitte in das Unterverzeichnis [alexa-fhem (also dort, wo Ihr Alexa-FHEM instelliert habt]/bin. Die dort befindliche Datei &#039;&#039;alexa&#039;&#039; muss ausführbar sein. Also z.B. so:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;2755327 4 -rwxr-xr-x 1 pi pi  339 Nov 26 23:20 alexa&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Sollte dies nicht der Fall sein bitte mit:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;chmod +x alexa&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
die Datei ausführbar machen. Sofern der User &amp;quot;pi&amp;quot; Eigentümer ist, ist kein sudo erforderlich.&lt;br /&gt;
&lt;br /&gt;
Eine lauffähige Konfiguration ist {{Link2Forum|Topic=71612|Message=668383|LinkText=hier}} zu sehen.&lt;br /&gt;
&lt;br /&gt;
Ein Fehler in der Rechtekonfiguration führt in der Regel zu folgendem Ergebnis nach &amp;lt;code&amp;gt;sudo systemctl status alexa&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;   Loaded: loaded (/etc/systemd/system/alexa.service; enabled)&lt;br /&gt;
   Active: activating (auto-restart) (Result: exit-code) since mer. 2017-09-06 02:33:23 CEST; 3s ago&lt;br /&gt;
  Process: 18332 ExecStart=/opt/fhem/alexa-fhem/bin/alexa -U /home/alexa/.alexa (code=exited, status=217/USER)&lt;br /&gt;
 Main PID: 18332 (code=exited, status=217/USER)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wie kann ich via Alexa-FHEM auf FHEM zugreifen, wenn der Port mit Benutzername/Kennwort geschützt ist?====&lt;br /&gt;
&lt;br /&gt;
Hierzu muss die Datei &amp;lt;code&amp;gt;~/.alexa/config.json&amp;lt;/code&amp;gt; geöffnet werden und der Abschnitt &amp;quot;connections&amp;quot; um folgende Zeile ergänzt werden:&amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;quot;auth&amp;quot;: {&amp;quot;user&amp;quot;: &amp;quot;fhem&amp;quot;, &amp;quot;pass&amp;quot;: &amp;quot;fhempassword&amp;quot;},&amp;lt;/pre&amp;gt;&lt;br /&gt;
Bei Verwendung von SSL bei FHEM muss auch noch &amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;quot;ssl&amp;quot;: true,&amp;lt;/pre&amp;gt; hinzugefügt werden&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Sprachsteuerung]]&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Alexa_und_Mappings&amp;diff=23350</id>
		<title>Alexa und Mappings</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Alexa_und_Mappings&amp;diff=23350"/>
		<updated>2017-11-27T20:44:19Z</updated>

		<summary type="html">&lt;p&gt;Benheim: /* Characteristics */ Typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Auf dieser Seite soll das Zusammenwirken zwischen Sensoren/Aktoren in FHEM, dem Programm Alexa-Fhem und den Amazon Web Services erläutern.&lt;br /&gt;
&lt;br /&gt;
== Glossar==&lt;br /&gt;
* &#039;&#039;&#039;Aspekte&#039;&#039;&#039;: Die Sensoren/Aktoren von FHEM haben aus der Sichweise von Alexa bestimmte Eigenschaften - diese können &amp;quot;read only&amp;quot; sein,(z.b. die aktuell gemessene Temperatur) oder durch den Benutzer veränderbar (z.b. die gewünschte Raumtemperatur). Um die Mehrdeutigkeit des Begriffs &amp;quot;Eigenschaften&amp;quot; zu vermeiden, werden sie auf dieser Wiki-Seite als &#039;&#039;Aspekte&#039;&#039; bezeichnet.&lt;br /&gt;
* &#039;&#039;&#039;Characteristic&#039;&#039;&#039;: Dieser Begriff ist der Homekit-Software entlehnt, er bezeichnet einen abfragbaren oder setzbaren &#039;&#039;Aspekt&#039;&#039; eines Sensors/Aktors - allerdings in einer abstrakten Sichtweise, die nicht mit der sehr gerätespezifischen Sichtweise von FHEM übereinstimmt. &#039;&#039;Characteristics&#039;&#039; sind typischerweise auch mit einem entsprechenden &#039;&#039;Service&#039;&#039; verbunden.&lt;br /&gt;
* &#039;&#039;&#039;Service&#039;&#039;&#039;: Eine Zusammenfassung mehrerer &#039;&#039;Characteristics&#039;&#039; zu einer logischen Gesamtheit, die z.B. mit einem bestimmten abstrakten Gerätetyp verbunden ist. Beispielsweise ist der Service &amp;quot;Door&amp;quot; eine Zusammenfassung der &#039;&#039;Characteristics&#039;&#039; &amp;quot;CurrentPosition&amp;quot;,&amp;quot;PositionState&amp;quot;,&amp;quot;TargetPosition&amp;quot; sowie optional &amp;quot;HoldPosition&amp;quot;,&amp;quot;ObstructionDetected&amp;quot;,&amp;quot;Name&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Attribute der Sensoren/Aktoren ==&lt;br /&gt;
Über zwei Attribute wird die sehr variable Welt von FHEM in einer eher abstrakte und semantisch eindeutigere Zwischenschicht (die &#039;&#039;Characteristics&#039;&#039;) überführt und dann mit der Sprachsteuerung verbunden. Dabei wird versucht, dem Benutzer so viel Arbeit wie möglich abzunehmen und die häufigsten Devices so automatisch wie möglich zu erkennen. Erst wo dies nicht ausreicht, ist eine komplett freie Konfiguration möglich. Auf Grund dieses Vorgehens ist die automatische Zuordnung von &#039;&#039;Characteristics&#039;&#039; sehr komplex, weil sie je nach Gerät auf Grund von unterschiedlichen Kriterien getroffen wird. Dabei kann es sich handeln um&lt;br /&gt;
* das Attribut &#039;&#039;genericDeviceType&#039;&#039;&lt;br /&gt;
* das INTERNAL &#039;&#039;TYPE&#039;&#039;, z.B.&lt;br /&gt;
** &#039;&#039;TYPE&#039;&#039; = &amp;quot;harmony&amp;quot; -&amp;gt; als &#039;&#039;genericDeviceType&#039;&#039; wird automatisch &amp;quot;switch&amp;quot; ausgewählt.&lt;br /&gt;
* das Reading &#039;&#039;temperature&#039;&#039; bzw. &#039;&#039;measured-temp&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===genericDeviceType===&lt;br /&gt;
Dieses Attribut dient dazu, ohne spezielle Angaben einen bestimmten &#039;&#039;Service&#039;&#039; (und somit auch bestimmte &#039;&#039;Characteristics&#039;&#039;) auszuwählen und somit Konfigurationsaufwand zu sparen.&lt;br /&gt;
Das Attribute kennt standardmäßig nur wenige Werte, die per Drop-Down-Liste ausgewählt werden können.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! &#039;&#039;Service&#039;&#039; !! &#039;&#039;Characteristic&#039;&#039;  &lt;br /&gt;
|-&lt;br /&gt;
| security&lt;br /&gt;
|-&lt;br /&gt;
| ignore&lt;br /&gt;
|-&lt;br /&gt;
| switch&lt;br /&gt;
|-&lt;br /&gt;
| outlet&lt;br /&gt;
|-&lt;br /&gt;
| light&lt;br /&gt;
|-&lt;br /&gt;
| blind&lt;br /&gt;
|-&lt;br /&gt;
| thermometer&lt;br /&gt;
|-&lt;br /&gt;
| thermostat&lt;br /&gt;
|-&lt;br /&gt;
| contact&lt;br /&gt;
|-&lt;br /&gt;
| garage&lt;br /&gt;
|-&lt;br /&gt;
| window&lt;br /&gt;
|-&lt;br /&gt;
| lock || lock || LockCurrentState/LockTargetState&lt;br /&gt;
|}&lt;br /&gt;
Andere Werte müssen über das Befehlsfeld zugewiesen werden:&lt;br /&gt;
&amp;lt;code&amp;gt;attr meinSensor genericDeviceType &amp;lt;meinDeviceType&amp;gt;&amp;lt;/code&amp;gt; &#039;&#039;&#039;TODO:&#039;&#039;&#039; Macht eher wenig Sinn, weil diese iN Alxea-Fhem nicht ausgewertet werden ???&lt;br /&gt;
&lt;br /&gt;
===homebridgeMapping===&lt;br /&gt;
Das Attribut homebridgeMapping gibt an, welches konkrete FHEM-Reading und bzw. FHEM-Kommando dieses Gerätes mit welchem &#039;&#039;Aspekt&#039;&#039; (= abstrakte Eigenschaft) verknüpft ist.&lt;br /&gt;
&lt;br /&gt;
Das Konzept des homebridgeMapping ist hier: https://forum.fhem.de/index.php/topic,48558.msg402024.html#msg402024 und hier: https://github.com/justme-1968/homebridge-fhem/blob/master/README.md beschrieben.&lt;br /&gt;
&lt;br /&gt;
Dieses Attribut beinhaltet eine durch Leerzeichen getrennte Liste von Datenpaaren, in der einfachsten Form&lt;br /&gt;
 attr &amp;lt;meinSensor&amp;gt; homebridgeMapping [clear] &amp;lt;Characteristic1&amp;gt;=&amp;lt;FHEM-reading1&amp;gt; &amp;lt;Characteristic2&amp;gt;=&amp;lt;FHEM-reading2&amp;gt; &amp;lt;Characteristic3&amp;gt;=&amp;lt;FHEM-reading3&amp;gt; ...&lt;br /&gt;
*Das optionale Schlüsselwort &amp;lt;code&amp;gt;clear&amp;lt;/code&amp;gt; hat eine besondere Bedeutung: Es löscht Standardmappings - das wird meist nicht notwendig sein, schadet aber nichts&lt;br /&gt;
*Siehe hierzu die einleitende Bemerkung über &#039;&#039;Characteristics&#039;&#039;. &amp;lt;code&amp;gt;&amp;lt;Characteristic1&amp;gt;=&amp;lt;FHEM-reading1&amp;gt;&amp;lt;/code&amp;gt; verbindet diesen logischen Kanal (linke Seite) mit einem &#039;&#039;reading&#039;&#039; des Sensors/Aktors aus FHEM (rechte Seite). Die Liste der vordefinierten &#039;&#039;Characteristics&#039;&#039; findet man in Abschnitt [[#Characteristics|Characteristics]], und ein &amp;lt;FHEM-reading&amp;gt; kann die komplexere Struktur &amp;lt;code&amp;gt;&amp;lt;command&amp;gt;:&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;&amp;lt;/code&amp;gt; haben.&lt;br /&gt;
*An den Wert des &amp;lt;FHEM-readings&amp;gt; kann eine Liste von Parameter-Wert-Paaren angehängt werden. Dabei sind die einzelnen Paare durch Komma getrennt, mehrere Werte eines Parameters durch ein Semikolon voneinander abgegrenzt. Beispielsweise lässt sich mit dem values-Parameter eine direkte Entsprechung zwischen Werten aus FHEM und Werten aus dem Homekit realisieren. Die Liste der vordefinierten Parameter findet man in Abschnitt [[#Parameter|Parameter]],&lt;br /&gt;
&lt;br /&gt;
==Attribute des Alexa-Devices==&lt;br /&gt;
Im Gegensatz zu Homekit, das die Daten aus den &#039;&#039;Characteristics&#039;&#039; bei der Sprachanalyse verwendet, muss dies für Alexa-Fhem im Custom Skill selbst implementiert werden. Hier kommt das Attribut alexaMapping ins Spiel, mit dem festgelegt wird, welches gesprochene Kommando Auswirkung auf welche &#039;&#039;Characteristic&#039;&#039; hat.&lt;br /&gt;
&lt;br /&gt;
Im Attribut alexaMapping lassen sich auch zusätzliche &#039;&#039;Characteristics&#039;&#039; unterbringen, wenn die bereits definierten nicht ausreichen. &lt;br /&gt;
&lt;br /&gt;
===alexaMapping===&lt;br /&gt;
In diesem Attribut finden wir also die abstrakten &#039;&#039;Characteristics&#039;&#039; in Verbindung mit sprachlichen Parametern wieder - und zwar in der allgemeinen Form&lt;br /&gt;
 Characteristic=&amp;lt;name1&amp;gt;=&amp;lt;value11&amp;gt;[;&amp;lt;value12&amp;gt;]*[,&amp;lt;name2&amp;gt;=&amp;lt;value21&amp;gt;[;&amp;lt;value22&amp;gt;]*]*&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;namex&amp;gt;&amp;lt;/code&amp;gt; ist der Name eines Parameters, z.B. &#039;&#039;verb&#039;&#039;&lt;br /&gt;
*Es folgt eine durch Semikolon getrennte Liste von möglichen Werten. Für &#039;&#039;verb&#039;&#039; könnte diese z.B. sein &amp;lt;code&amp;gt;verb=stelle;setze&amp;lt;/code&amp;gt;&lt;br /&gt;
*Weitere Parameter/Wert-Listen werden durch ein Komma getrennt angehängt, z.B. &amp;lt;code&amp;gt;verb=stelle;setze,valueOn=an;ein,valueOff=aus&amp;lt;/code&amp;gt;&lt;br /&gt;
Jede &#039;&#039;Characteristic&#039;&#039; kann mehrfach auftauchen - nämlich für jede Aussprachemöglichkeit dieser &#039;&#039;Characteristic&#039;&#039;. Beispiele:&lt;br /&gt;
 On=verb=schalte,valueOn=an;ein,valueOff=aus,valueToggle=um&lt;br /&gt;
 Hue=verb=stelle,valuePrefix=auf,values=rot:0;grün:128;blau:200&lt;br /&gt;
 Hue=verb=färbe,values=rot:0;grün:120;blau:220&lt;br /&gt;
&lt;br /&gt;
==Liste der unterstützten &#039;&#039;Characteristics&#039;&#039; und ihrer Parameter==&lt;br /&gt;
Viele Namen für die &#039;&#039;Aspekte&#039;&#039; und &#039;&#039;Characteristics&#039;&#039; eines Gerätes entstammen dem Apple Homekit API. &lt;br /&gt;
Welche Services mit welchen Characteristics es dort gibt ist hier zu finden: https://github.com/KhaosT/HAP-NodeJS/blob/master/lib/gen/HomeKitTypes.js&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;Characteristics&#039;&#039;===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Typ !! Parameter und Werte !! Standardmapping&lt;br /&gt;
|-&lt;br /&gt;
| On || Boolean || valueOn, valueOff, cmdOn, cmdOff || &lt;br /&gt;
* state,valueOff:/off&amp;amp;#x007C;A0&amp;amp;#x007C;000000/, cmdOn:on,cmdOff:off&lt;br /&gt;
* Wenn es sich um einen Dummy handelt, bei dem das Attribut &#039;&#039;setList&#039;&#039; den Wert &amp;quot;&amp;lt;cmd0&amp;gt; &amp;lt;cmd1&amp;gt;&amp;quot; hat: &amp;lt;br/&amp;gt;state,valueOn:&amp;lt;cmd0&amp;gt;,cmdOn:&amp;lt;cmd0&amp;gt;,cmdOff:&amp;lt;cmd1&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ContactSensorState || Integer || CONTACT_DETECTED=0,CONTACT_NOT_DETECTED=1 || value,values=???:CONTACT_DETECTED,???:CONTACT_NOT_DETECTED &lt;br /&gt;
|-&lt;br /&gt;
| Brightness&lt;br /&gt;
|-&lt;br /&gt;
| Hue&lt;br /&gt;
|-&lt;br /&gt;
| Saturation&lt;br /&gt;
|-&lt;br /&gt;
| CurrentTemperature&lt;br /&gt;
|-&lt;br /&gt;
| TargetTemperature&lt;br /&gt;
|-&lt;br /&gt;
| CurrentRelativeHumidity&lt;br /&gt;
|-&lt;br /&gt;
| CurrentAmbientLightLevel&lt;br /&gt;
|-&lt;br /&gt;
| AirQuality&lt;br /&gt;
|-&lt;br /&gt;
| CurrentDoorState || Integer || OPEN=0, CLOSED=1, OPENING=2, CLOSING=3, STOPPED=4|| Mehrere Mappings möglich:&lt;br /&gt;
* doorState,values=/^opening/:OPENING,/^closing/:CLOSING,/^open/:OPEN,/^closed/:CLOSED,/.*/:STOPPED&lt;br /&gt;
* state,values=/^Closed/:CLOSED,/.*/:OPEN&lt;br /&gt;
* Window,values=/^Closed/:CLOSED,/.*/:OPEN&lt;br /&gt;
* contact,values=/^closed/:CLOSED,/.*/:OPEN  &lt;br /&gt;
|-&lt;br /&gt;
| TargetDoorState || Integer || OPEN=0, CLOSED=1|| &lt;br /&gt;
* state,values=???:OPEN,???:CLOSED &lt;br /&gt;
* Wenn es sich um eine KeyMatic handelt, also das Attribut &#039;&#039;model&#039;&#039; den Wert HM-SEC-KEY hat, oder &#039;&#039;genericDeviceType&#039;&#039; den Wert &amp;quot;lock&amp;quot; hat:&amp;lt;br/&amp;gt;???,default:CLOSED,timeout:500,cmds=OPEN:open&lt;br /&gt;
|-&lt;br /&gt;
| LockCurrentState || Integer || UNSECURED=0, SECURED=1, JAMMED = 2, UNKNOWN = 3|| lock,values=/uncertain/:UNKNOWN,/^locked/:SECURED,/.*/:UNSECURED&amp;lt;br/&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| LockTargetState || Integer || UNSECURED=0, SECURED=1|| &lt;br /&gt;
* Wenn es sich um eine KeyMatic handelt, also das Attribut &#039;&#039;model&#039;&#039; den Wert HM-SEC-KEY hat:&amp;lt;br/&amp;gt;state,values=/^locked/:SECURED,/.*/:UNSECURED,cmds=SECURED:lock;UNSECURED:unlock&lt;br /&gt;
* Wenn &#039;&#039;genericDeviceType&#039;&#039; den Wert &amp;quot;lock&amp;quot; hat:&amp;lt;br/&amp;gt;state,values=/^locked/:SECURED,/.*/:UNSECURED,cmds=SECURED:lock+locked,UNSECURED:lock+unlocked&lt;br /&gt;
|-&lt;br /&gt;
| OccupancyDetected&lt;br /&gt;
|-&lt;br /&gt;
| StatusLowBattery&lt;br /&gt;
|-&lt;br /&gt;
| SecuritySystemCurrentState&lt;br /&gt;
|-&lt;br /&gt;
| SecuritySystemTargetState&lt;br /&gt;
|-&lt;br /&gt;
|  FirmwareRevision&lt;br /&gt;
|-&lt;br /&gt;
| alle anderen Homebridge Characteristic  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Parameter===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Typ !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| values || Dieser Parameter enthält eine durch Semikolon getrennte Liste von Entsprechungen der Form &amp;lt;code&amp;gt;FHEM-Wert:Homekit-Wert&amp;lt;/code&amp;gt;. Jeder FHEM-Wert kann ein Literal (String) sein, oder ein Regulärer Ausdruck der Form /regex/. Jeder Homekit-Wert kann ein Literal (String) sein, oder ein für diese &#039;&#039;Characteristic&#039;&#039; definierter Term.  Wenn als Homekit-Wert ein &amp;quot;#&amp;quot; steht, wird es gleich dem aktuellen Wert gesetzt (Heißt was ???).&#039;&#039;&#039;Achtung&#039;&#039;&#039;: Wegen der nicht konsistenten Vertauschung der Seitenbezüge links-rechts ist das eine sehr gewöhnungsbedürftige Notation.&lt;br /&gt;
|-&lt;br /&gt;
| valueOn, valueOff || Dies sind die FHEM-Werte für boolesche &#039;&#039;readings&#039;&#039;, die auf die Homekit-Werte true/false bzw. on/off states gemappt werden. Abkürzung: Wenn nur einer der beiden Werte angegeben wird, werden alle anderen automatisch auf den anderen gemappt.&lt;br /&gt;
|-&lt;br /&gt;
| timeout || Timeout in ms, nach dem der Homekit-Wert auf den Default-Wert zurückgesetzt wird, verwendet zur Simulation von Tastenkontakten&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
&lt;br /&gt;
=== Harmony Hub Fernbedienung ===&lt;br /&gt;
Im Harmony Hub System von Logitech steuert die Fernbedienung Geräte normalerweise nicht direkt per IR, sondern sendet per Funk einen Befehl an den &amp;quot;Harmony Hub&amp;quot;, der dies in ein Infrarotsignal umsetzt. Via TCP/IP lässt sich der Hub auch direkt von FHEM aus steuern. Das relevante Reading des &amp;quot;Harmony Hub&amp;quot; trägt die Bezeichnung &#039;&#039;activity&#039;&#039;, setzbar sind z.B. die Werte &#039;&#039;activity&#039;&#039; und &#039;&#039;channel&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Fenstersensor ===&lt;br /&gt;
Ein Fenstersensor liefert für sein &#039;&#039;reading&#039;&#039; state die Werte open oder closed. Homekit unterstützt einen Service &amp;quot;ContactSensor&amp;quot;, der allerdings andere Datenwerte kennt. Das Mapping lautet in diesem Fall &lt;br /&gt;
 attr &amp;lt;meinSensor&amp;gt; homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED&lt;br /&gt;
&lt;br /&gt;
=== Temperatur- und Feuchtesensor ===&lt;br /&gt;
Kombinierte Temperatur-Feuchtesensoren haben in der Regel &#039;&#039;readings&#039;&#039; &amp;quot;humidity&amp;quot; und &amp;quot;temperature&amp;quot;. Homekit unterstützt einen Service &amp;quot;HumiditySensor&amp;quot;. Dieser ist in homebridge-fhem nicht standardmäßig vorhanden (kann also nicht aus dem dropdown ausgewählt werden, sondern muss über das Befehlsfeld zugewiesen werden):&lt;br /&gt;
&amp;lt;code&amp;gt;attr meinSensor genericDeviceType HumiditySensor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden die Readings gemappt:&lt;br /&gt;
 attr &amp;lt;meinSensor&amp;gt; homebridgeMapping clear CurrentRelativeHumidity=humidity CurrentTemperature=temperature&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Sprachsteuerung]]&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Chart&amp;diff=21005</id>
		<title>FTUI Widget Chart</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Chart&amp;diff=21005"/>
		<updated>2017-03-22T11:46:49Z</updated>

		<summary type="html">&lt;p&gt;Benheim: data-yticks_prio: Beispiel nutzte data-yticks ohne &amp;#039;_prio&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Chart Widget]] ist ein Widget für [[FHEM Tablet UI]], mit dem sich verschiedenste Diagramme darstellen lassen. Die Aneinanderreihung mehrerer Werte eines Device-Readings zu einem zeitlichen Verlauf wird dabei als Graph bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Es können beliebige Werte dargestellt und entsprechend der Sinnhaftigkeit, oder persönlichem Geschmack, formatiert werden. Farbe und Form der Linien sind je Graph einstellbar, auch wenn mehrere gleichzeitig in einem Diagramm angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Jedes Diagramm kann zwei Y-Achsen besitzen. Die primäre Y-Achse (primary) wird auf der linken Seite angezeigt, die sekundäre Y-Achse (secondary) auf der rechten Seite. Beide Achsen können unterschiedlich formatiert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Chart_tabletUI.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:150px&amp;quot;|Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||Name des FHEM-Device, das die Aktualisierung des Charts triggert||||data-device=&amp;quot;WohnzimmerHeizung&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Reading, das das Update des Diagramms triggert||&#039;STATE&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-logdevice&#039;&#039;&#039;||Name des Log-Device, das dargestellt werden soll, oder ein Array, um mehrere Werte in einem Diagramm darzustellen||||data-logdevice=&amp;quot;FileLog_WohnzimmerHeizung&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-logfile&#039;&#039;&#039;|| Name des Log-Files, aus dem die Daten entnommen werden sollen (oder Array)||&#039;-&#039; = aktuelle Datei||data-logfile=&amp;quot;WohnzimmerHeizung-2015.log&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-columnspec&#039;&#039;&#039;||Ermittelt den Wert aus dem Log-File, der angezeigt werden soll (oder Array)||||data-columnspec=&amp;quot;4:meas.*&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-style&#039;&#039;&#039;||Stil, wie die Graph-Linien dargestellt werden sollen (z.B. &#039;SVGplot l0&#039; oder &#039;ftui l0dash&#039;), oder ein Array, wenn mehrere Linien unterschiedlich dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ptype&#039;&#039;&#039;||Form, wie die Graphen dargestellt werden sollen (z.B. &#039;lines&#039;, &#039;cubic&#039; oder &#039;fa-cog&#039;), oder ein Array||&#039;lines&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-uaxis&#039;&#039;&#039;||Name der Achse, die verwendet werden soll (&#039;primary&#039; = links, oder &#039;secondary&#039; = rechts), oder ein Array||&#039;primary&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-legend&#039;&#039;&#039;||Bezeichnung des Graphen (wird in Legende und am Cursor angezeigt), oder ein Array||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-minvalue&#039;&#039;&#039;||Minimaler Wert, der auf der linken Y-Achse (&#039;primary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;10&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-maxvalue&#039;&#039;&#039;||Maximaler Wert, der auf der linken Y-Achse (&#039;primary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;30&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-minvalue_sec&#039;&#039;&#039;||Minimaler Wert, der auf der rechten Y-Achse (&#039;secondary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;auto&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-maxvalue_sec&#039;&#039;&#039;||Maximaler Wert, der auf der rechten Y-Achse (&#039;secondary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;auto&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-xticks&#039;&#039;&#039;||Abstand zwischen den vertikalen Hilfslinien (bezogen auf die X-Achse) in Minuten. &#039;auto&#039; = automatische Berechnung||&#039;auto&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks&#039;&#039;&#039;||Abstand zwischen den horizontalen Hilfslinien (bezogen auf die linke Y-Achse). Kann auch ein Array mit Werte-Paaren enthalten, um die Linien mit Text zu beschriften.||&#039;auto&#039;||data-yticks=&#039;[[0,&amp;quot;open&amp;quot;],[1,&amp;quot;closed&amp;quot;]]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_sec&#039;&#039;&#039;||Abstand zwischen den horizontalen Hilfslinien (bezogen auf die rechte Y-Achse). Kann auch ein Array mit Werte-Paaren enthalten, um die Linien mit Text zu beschriften.||&#039;auto&#039;||data-yticks=&#039;[[0,&amp;quot;open&amp;quot;],[1,&amp;quot;closed&amp;quot;]]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_prio&#039;&#039;&#039;||Legt fest, ob die horizontalen Hilfslinien der linken (primary) oder der rechten (secondary) Y-Achse zugeordnet werden sollen||||data-yticks_prio=&#039;secondary&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysago_start&#039;&#039;&#039;||Anzahl der vergangenen Tage, wo das Diagramm beginnen soll. &#039;0&#039; = Beginn heute 0:00 Uhr. Es kann auch ein fixes Datum (z.B. &#039;2013-10-23&#039;) angegeben werden. Uhrzeitangaben werden nur berücksichtigt, wenn &#039;&#039;&#039;data-nofulldays=&#039;true&#039; &#039;&#039;&#039; verwendet wird.||&#039;0&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysago_end&#039;&#039;&#039;||Anzahl der vergangenen Tage, wo das Diagramm enden soll. &#039;-1&#039; = Ende heute 24:00 Uhr. Es kann auch ein fixes Datum (z.B. &#039;2013-10-24&#039;) angegeben werden. Uhrzeitangaben werden nur berücksichtigt, wenn &#039;&#039;&#039;data-nofulldays=&#039;true&#039; &#039;&#039;&#039; verwendet wird.||&#039;-1&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-nofulldays&#039;&#039;&#039;||Aktiviert/deaktiviert die Rundung der X-Achse auf ganze Tage. Binärwert (&#039;true&#039; oder &#039;false&#039;)||&#039;false&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeformat&#039;&#039;&#039;||Zeitformat für die Anzeige an der X-Achse (siehe Hinweise)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytext&#039;&#039;&#039;||Text, der neben der linken Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytext_sec&#039;&#039;&#039;||Text, der neben der rechten Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yunit&#039;&#039;&#039;||Einheit, die an der linken Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yunit_sec&#039;&#039;&#039;||Einheit, die an der rechten Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-crosshair&#039;&#039;&#039;||Aktiviert/deaktiviert den Fadenkreuz-Cursor. Binärwert (&#039;true&#039; oder &#039;false&#039;)||&#039;false&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-cursorgroup&#039;&#039;&#039;||Zahl zur Gruppierung der Werte am Fadenkreuz-Cursor (siehe Hinweise)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-scrollgroup&#039;&#039;&#039;||Zahl zur Gruppierung der Graphen beim Bewegen und Zoomen. Alle Linien mit der selben Zahl werden miteinander gekoppelt und bewegen sich gemeinsam.||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showlegend&#039;&#039;&#039;||Aktiviert/deaktiviert die Anzeige der Legene. Binärwert (&#039;true&#039; oder &#039;false&#039;)||&#039;false&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-legendpos&#039;&#039;&#039;||Array von zwei Werten, die die horizontale und vertikale Position der Legende festlegen (siehe Hinweise)||&#039;[&amp;quot;top&amp;quot;,&amp;quot;right&amp;quot;]&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-width&#039;&#039;&#039;||Breite des Diagramms (in % oder px)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-height&#039;&#039;&#039;||Höhe des Diagramms (in % oder px)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-graphsshown&#039;&#039;&#039;||Aktiviert/deaktiviert die initiale Anzeige von Graphen. Binärwert (&#039;true&#039; oder &#039;false&#039;). Array, wenn mehrere Linien angezeigt werden sollen.||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ddd&#039;&#039;&#039;||Einstellung für die 3D-Drehung (siehe Hinweise)||||data-ddd=&#039;[&amp;quot;40&amp;quot;,&amp;quot;60&amp;quot;,&amp;quot;0&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dddspace&#039;&#039;&#039;||Abstand zwischen zwei Graphen, wenn die 3D-Anzeige aktiviert wurde (px)||&#039;15&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dddwidth&#039;&#039;&#039;||Breite, bzw. Tiefe der Graphen, wenn diese 3-dimensional angezeigt werden (px)||&#039;10&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-title&#039;&#039;&#039;||Titel, der über dem Diagramm angezeigt werden soll. Der Inhalt kann auch dynamisch erzeugt werden (siehe Hinweise)||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==CSS Klassen==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|fullsize}}{{FTUI Klasse|noticks}}{{FTUI Klasse|nobuttons}}{{FTUI Klasse|small}}{{FTUI Klasse|normal}}{{FTUI Klasse|big}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende Widget-spezifsche Klassen können zusätzlich in einer eigenen CSS-Datei definiert werden:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;chart-background&#039;&#039;&#039;||Hintergrundfarbe des Diagramms&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;buttons&#039;&#039;&#039;||Größe und Farbe der Buttons&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;text.axes&#039;&#039;&#039;||Generelle Schriftart und Farbe der Achsen&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;gridlines&#039;&#039;&#039;||Generelle Farbe und Größe der Gitternetzlinien&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;xaxis&#039;&#039;&#039;||Schriftart, Größe und Farbe der X-Achse&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;yaxis&#039;&#039;&#039;||Schriftart, Größe und Farbe der Y-Achse&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;xticks&#039;&#039;&#039;||Schriftart, Größe und Farbe der X-Achse (Zwischenlinien)&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;yticks&#039;&#039;&#039;||Schriftart, Größe und Farbe der Y-Achse (Zwischenlinien)&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;crosshair&#039;&#039;&#039;||Schriftart, Größe und Vordergrund/Hintergrundfarbe der Momentanwerte am Fadenkreuzcursor&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;caption&#039;&#039;&#039;||Schriftart, Größe und Farbe der Text-Buttons für Legende und Cursor&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;legend&#039;&#039;&#039;||Schriftart, Größe und Farbe der Legende&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Standardwerte sind in der Datei &amp;lt;code&amp;gt;css/ftui_chart.css&amp;lt;/code&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
==Datenquellen==&lt;br /&gt;
Beim Chart-Widget können die gleichen Datenquellen genutzt werden, die auch für SVG-Plots verwendet werden können:&lt;br /&gt;
# [[FileLog]]: Verlaufsdaten einer Textdatei entnehmen&lt;br /&gt;
# [[DbLog]]: Verlaufsdaten einer Datenbank entnehmen&lt;br /&gt;
# [[LogProxy]]: Daten dynamisch berechnet&lt;br /&gt;
&lt;br /&gt;
===FileLog===&lt;br /&gt;
Um [[FileLog]] zu nutzen, wird als &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; das FHEM-Device für das FileLog angegeben. In der Regel entstehen hier im Laufe der Zeit mehrere Log-Dateien. Name und Anzahl sind von der Definition abhängig - meist wird jeden Monat oder jedes Jahr eine neue Datei angelegt. Die gewünschte Datei kann mit &#039;&#039;&#039;data-logfile&#039;&#039;&#039; ausgewählt werden. Möchte man stets die aktuelle Datei verwenden (macht vor allem dann Sinn, wenn man die neusten Daten anzeigen will), kann das Attribut weggelassen, oder explizit &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; eingetragen werden. Zuletzt wird &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; benötigt, um die gewünschten Daten zu in der Logdatei zu identifizieren. Hier wird die Spalte, in der die Daten stehen, gefolgt von Doppelpunkt und Readingname angegeben.&lt;br /&gt;
&lt;br /&gt;
Für ein Heizungsthermostat von Homematic mit dem Namen &#039;&#039;DG.wz.HZ.Heizungsventil&#039;&#039; ergibt sich somit beispielhaft folgende Definition, um gemessene Temperatur, Sollwert und Ventilstellung im Diagramm darzustellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logdevice=&amp;quot;FileLog_DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logfile=&amp;quot;-&amp;quot;&lt;br /&gt;
	 data-columnspec=&#039;[&amp;quot;4:measured-temp&amp;quot;,&amp;quot;4:desired-temp&amp;quot;,&amp;quot;4:actuator&amp;quot;]&#039;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen Daten von unterschiedlichen Geräten in einem Diagramm angezeigt werden, muss &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; als Array nach dem Schema &amp;lt;code&amp;gt;data-logdevice=&#039;[&amp;quot;&amp;lt;Logdatei_1&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Logdatei_2&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Logdatei_3&amp;gt;&amp;quot;]&#039;&amp;lt;/code&amp;gt; definiert werden. Für jeden Eintrag in &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; muss es auch den passenden Eintrag in &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; geben (auch die Reihenfolge ist relevant).&lt;br /&gt;
&lt;br /&gt;
===DbLog===&lt;br /&gt;
Um die Daten aus [[DbLog]] anzeigen zu können, werden die gleichen Attribute verwendet und mit für die Datenbank angepassten Werten beschrieben. Bei &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; das FHEM-Device für die Datenbank angegeben. Im nachfolgenden Beispiel heißt diese &amp;lt;code&amp;gt;logdb&amp;lt;/code&amp;gt; und besitzt wie üblich zwei Tabellen: &amp;lt;code&amp;gt;current&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;history&amp;lt;/code&amp;gt; (der zeitliche Verlauf liegt in letzterer). Der Tabellenname wird bei &#039;&#039;&#039;data-logfile&#039;&#039;&#039; eingetragen. Da die Daten in der Datenbank etwas anders abgelegt werden, muss auch &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; entsprechend angepasst werden. Statt der Spalte wird hier das FHEM-Device, gefolgt von Doppelpunkt und Readingname angegeben.&lt;br /&gt;
&lt;br /&gt;
Für das oben beschriebene Homematic-Heizungsthermostat ergibt sich dann folgende Definition, um die gleichen Daten aus einer Datenbank, statt einem LogFile zu lesen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logdevice=&amp;quot;logdb&amp;quot;&lt;br /&gt;
	 data-logfile=&amp;quot;HISTORY&amp;quot;&lt;br /&gt;
	 data-columnspec=&#039;[&amp;quot;DG.wz.HZ.Heizungsventil:measured-temp&amp;quot;,&amp;quot;DG.wz.HZ.Heizungsventil:desired-temp&amp;quot;,&amp;quot;DG.wz.HZ.Heizungsventil:actuator&amp;quot;]&#039;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Anzeige von unterschiedlichen Geräten in einem Diagramm, muss nur &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; entsprechend angepasst werden, solange sich alle Daten in der Datenbank befinden.&lt;br /&gt;
&lt;br /&gt;
===LogProxy===&lt;br /&gt;
Um die Daten mittels [[LogProxy]] berechnen und anzeigen zu können, muss in FHEM ein LogProxy-Device definiert sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define myLogProxy logProxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Einstellungen am LogProxy sind nicht nötig, die bloße Existenz reicht.&lt;br /&gt;
&lt;br /&gt;
Bei &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; wird das FHEM-Device für den LogProxy angegeben. Im nachfolgenden Beispiel heißt dieses &amp;lt;code&amp;gt;myLogProxy&amp;lt;/code&amp;gt;. Das Attribut &#039;&#039;&#039;data-logfile&#039;&#039;&#039; wird für LogProxy nicht benötigt. Befinden sich nur LogProxy-Werte im Diagramm kann das Attribut komplett entfallen. Sollen weitere Werte angezeigt werden, bleibt die Definition im Array einfach leer.&lt;br /&gt;
&lt;br /&gt;
Im Attribut &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; wird eine Formel angegeben, wie die Werte berechnet werden sollen. Hier können die Formeln 1:1 von einem eventuell vorhandenen SVG-Plot übernommen werden. &#039;&#039;&#039;Dabei gibt es jedoch folgendes zu beachten:&#039;&#039;&#039; Befindet sich die Formel in einem Array, dürfen die Formeln keine Anführungszeichen (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;) beinhalten. Stattdessen müssen sie als escapter Ascii-Code (&amp;lt;code&amp;gt;\\x22&amp;lt;/code&amp;gt;) eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
Das nachfolgende Beispiel zeigt, wie Vorhersagewerte aus einem FHEM-Device vom Typ Proplanta (Name hier &amp;lt;code&amp;gt;AU.xx.WE.Proplanta&amp;lt;/code&amp;gt;) angezeigt werden können.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;AU.xx.WE.Proplanta&amp;quot;&lt;br /&gt;
	 data-logdevice=&#039;[&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;&lt;br /&gt;
					]&#039;&lt;br /&gt;
	 data-columnspec=&#039;[&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22temp_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22rain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22chOfRain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22cloud_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;&lt;br /&gt;
					]&#039;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auch alle anderen Funktionen, die [[LogProxy]] bietet, können hier angewendet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
===Aktualisierung des Charts===&lt;br /&gt;
Damit der Refresh des Charts funktioniert, muss auch ein Device angegeben werden, der das Refresh triggert. Das Diagramm wird immer dann aktualisiert, wenn sich der Inhalt von &#039;&#039;&#039;data-get&#039;&#039;&#039; ändert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-device=&amp;quot;WohnzimmerHeizung&amp;quot;&lt;br /&gt;
	data-logdevice=&amp;quot;FileLog_WohnzimmerHeizung&amp;quot;&lt;br /&gt;
	...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aussehen der Linien===&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-style&#039;&#039;&#039; kann das Aussehen der Linien des jeweiligen Graphen verändert werden. Hierfür können die Standard-FHEM-Styles verwendet werden. Dazu wird das Attribut mit &amp;lt;code&amp;gt;SVGplot&amp;lt;/code&amp;gt;, gefolgt von einem Leerzeichen und der gewünschten Farbe/Stil befüllt. Es existieren jedoch auch noch weitere, an FTUI angepasste Styles, zu finden in der CSS-Datei &amp;lt;code&amp;gt;css/ftui_chart.css&amp;lt;/code&amp;gt;. Um diese zu verwenden, wird das Attribut mit &amp;lt;code&amp;gt;ftui&amp;lt;/code&amp;gt;, gefolgt von einem Leerzeichen und der gewünschten Farbe/Stil befüllt. Eigene Styles können zum Beispiel in der Datei &amp;lt;code&amp;gt;css/fhem-table-ui-user.css&amp;lt;/code&amp;gt; definiert werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Übersicht zeigt die im Standard verfügbaren &#039;&#039;&#039;Farben&#039;&#039;&#039;, alle Abbildungen sind mit im FTUI-Style entstanden:&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f0.png|thumb|none|150px|Farbe &amp;quot;l0&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f1.png|thumb|none|150px|Farbe &amp;quot;l1&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f2.png|thumb|none|150px|Farbe &amp;quot;l2&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f3.png|thumb|none|150px|Farbe &amp;quot;l3&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f4.png|thumb|none|150px|Farbe &amp;quot;l4&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f5.png|thumb|none|150px|Farbe &amp;quot;l5&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f6.png|thumb|none|150px|Farbe &amp;quot;l6&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Angabe zur Farbe kann dann mit der Linienart kombiniert werden. Dazu stehen folgende &#039;&#039;&#039;Stile&#039;&#039;&#039; zur Verfügung:&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-normal.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;normal&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-dot.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;dot&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-dash.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;dash&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-fill.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;fill&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-sym.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;sym&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-normal.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;normal&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-dot.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;dot&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-dash.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;dash&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-fill.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;fill&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-sym.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;sym&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Farbe und Stil werden kombiniert (zusammengeschrieben) beim Attribut &#039;&#039;&#039;data-style&#039;&#039;&#039; angegeben, sodass sich beispielsweise für eine graue Punktlinie folgendes ergibt: &amp;lt;code&amp;gt;data-style=&amp;quot;ftui l1dot&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
Um die Darstellung als normale Linie zu erhalten, darf im Gegensatz zu den anderen Linienformen der Stil &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt; nicht angegeben werden. Für eine einfache graue Linie ist also die Angabe &amp;lt;code&amp;gt;data-style=&amp;quot;ftui l1&amp;quot;&amp;lt;/code&amp;gt; korrekt, wohingegen &amp;lt;code&amp;gt;data-style=&amp;quot;ftui l1normal&amp;quot;&amp;lt;/code&amp;gt; zu einer fehlerhaften Anzeige führt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Der Stil &#039;&#039;sym&#039;&#039; ist speziell dafür geeignet, Symbole statt Linien zu zeichnen. Dazu kann beim Attribut &#039;&#039;&#039;data-ptype&#039;&#039;&#039; als Linienform ein beliebiges Font-Awsome-, oder Open Automation-Icon angegeben werden. Alle in diesem Abschnitt enthaltenen Abbildungen sind mit &amp;lt;code&amp;gt;data-ptype=&amp;quot;lines&amp;quot;&amp;lt;/code&amp;gt; entstanden.&lt;br /&gt;
&lt;br /&gt;
===Form der Linien===&lt;br /&gt;
Das Attribut &#039;&#039;&#039;data-ptype&#039;&#039;&#039; beeinflusst die Form der Linien. Hier sind folgende Werte möglich:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lines&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;steps&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fsteps&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;histeps&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bars&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ibars&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cubic&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;quadratic&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;quadraticSmooth&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich ist es möglich, Symbole anzeigen zu lassen. Unterstützt werden Font-Awesome (&#039;fa-...&#039;), Open Automation (&#039;oa-...&#039;) und FHEM-Symbole (&#039;fs-...&#039;)). Damit die Symbole korrekt angezeigt werden, muss  im Attribut &#039;&#039;&#039;data-style&#039;&#039;&#039; der Stil &amp;lt;code&amp;gt;sym&amp;lt;/code&amp;gt; gewählt werden, da sonst nur Punkte, statt der Symbole gezeichnet werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logdevice=&amp;quot;FileLog_DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 ...&lt;br /&gt;
	 data-style=&amp;quot;ftui l1sym&amp;quot;&lt;br /&gt;
	 data-ptype=&amp;quot;fa-cog&amp;quot;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Größe der Symbole ist in der Datei &amp;lt;code&amp;gt;css/ftui_chart.css&amp;lt;/code&amp;gt; auf 12px festgelegt. Dieser Wert kann in einer eigenen CSS-Datei durch Anpassung von &amp;lt;code&amp;gt;stroke-width&amp;lt;/code&amp;gt; überschrieben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.ftui.l0sym		{ stroke:#DDA400; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l1sym		{ stroke:#BBBBBB; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l2sym		{ stroke:#CC0000; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l3sym		{ stroke:#CCCC00; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l4sym		{ stroke:#33CC33; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l5sym		{ stroke:#33CCCC; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l6sym		{ stroke:#3333CC; stroke-width:12px; fill:none; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;data-ptype&#039;&#039;&#039; kann auch Inhalt im Format &amp;lt;code&amp;gt;&#039;icon:1&#039;&amp;lt;/code&amp;gt; verarbeiten. Dann muss der zugehörige Wert in &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; den Pfad zu einem Icon (z.B. für Wettervorhersagen) beinhalten. Der Y-Wert wird dann vom ersten Graphen übernommen. Weitere Ausführungen hierzu im Beispiel [[#Darstellung der Wetter Icons im Diagramm]]&lt;br /&gt;
&lt;br /&gt;
===Zeitformat der X-Achse===&lt;br /&gt;
Die Zeitanzeige auf der X-Achse kann sehr flexibel eingestellt werden. Dafür stehen verschiedene Platzhalter zur Verfügung, die durch spezielle Zeichen (&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt; &amp;lt;/code&amp;gt; (Leerzeichen), &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;) getrennt werden. Alle Zeichen werden trotz Escape-Zeichen (&amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;) in der Ausgabe angezeigt.&lt;br /&gt;
&lt;br /&gt;
Folgende Platzhalter werden unterstützt:&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;mm&#039;&amp;lt;/code&amp;gt;: Minuten als zweistellige Zahl&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;hh&#039;&amp;lt;/code&amp;gt;: Stunden als zweistellige Zahl&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;dd&#039;&amp;lt;/code&amp;gt;: Tag als zweistellige Zahl (Kalenderdatum)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;MM&#039;&amp;lt;/code&amp;gt;: Monat als zweistellige Zahl (z.B. 02 für Februar)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;MMM&#039;&amp;lt;/code&amp;gt;: Monat als dreistellige Abkürzung (z.B. Dec für Dezember)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;MMMM&#039;&amp;lt;/code&amp;gt;: Langname des Monats (z.B. March)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;ee&#039;&amp;lt;/code&amp;gt;: Wochentag als zweistellige Zahl (z.B. 00 für Sonntag)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;eee&#039;&amp;lt;/code&amp;gt;: Wochentag als dreistellige Abkürzung (z.B. Mon für Montag)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;eeee&#039;&amp;lt;/code&amp;gt;: Langname des Wochentags (z.B. Tuesday)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;yy&#039;&amp;lt;/code&amp;gt;: Jahr als zweistellige Zahl (z.B. 16 für 2016)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;yyyy&#039;&amp;lt;/code&amp;gt;: Jahr als vierstellige Zahl (z.B. 2016)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;LF&#039;&amp;lt;/code&amp;gt;: Fügt einen Zeilenumbruch hinzu&lt;br /&gt;
&lt;br /&gt;
Beispiel: Der String &amp;lt;code&amp;gt;&#039;MMM\LF\yyyy&#039;&amp;lt;/code&amp;gt; zeigt &amp;lt;code&amp;gt;&#039;Jan&#039;&amp;lt;/code&amp;gt; in der ersten, und &amp;lt;code&amp;gt;&#039;2016&#039;&amp;lt;/code&amp;gt; in der zweiten Zeile. &amp;lt;code&amp;gt;&#039;MM.dd 2016&#039;&amp;lt;/code&amp;gt; wird zu &amp;lt;code&amp;gt;&#039;03.05 2016&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Fadenkreuz-Cursor===&lt;br /&gt;
Der Fadenkreuz-Cursor zeigt die Momentanwerte, indem man ihn über die Graphen bewegt. In Desktop-Browsern reicht einfaches Bewegen des Maus. Unter iOS und Android kann der Cursor wird der Cursor durch einfaches Tippen auf die neue Position bewegt.&lt;br /&gt;
&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-cursorgroup&#039;&#039;&#039; können Graphen gruppiert werden. Am Cursor werden dann die Momentanwerte aller Graphen gleichzeitig angezeigt, die die selbe Zahl besitzen, sobald man die Maus über einen aus der Gruppe bewegt.&lt;br /&gt;
&lt;br /&gt;
===Legende===&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-legendpos&#039;&#039;&#039; kann die Position der Legende innerhalb des Diagramms festgelegt werden. Die Position wird mit einem Array, bestehend aus zwei Werten im Format &amp;lt;code&amp;gt;&#039;[&amp;quot;&amp;lt;horizontal&amp;gt;&amp;quot;,&amp;quot;&amp;lt;vertikal&amp;gt;&amp;quot;]&#039;&amp;lt;/code&amp;gt; angegeben. Für die horizontale Positionierung sind &amp;lt;code&amp;gt;&#039;left&#039;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&#039;right&#039;&amp;lt;/code&amp;gt;, die vertikale Positionierung &amp;lt;code&amp;gt;&#039;top&#039;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&#039;bottom&#039;&amp;lt;/code&amp;gt; erlaubt. Alternativ können auch Zahlen verwendet werden, die die Position in Prozent angeben. Durch verschieben mit der Maus oder durch verschieben mit dem Finger oder Stift auf Touch Devices kann die Legende auch an eine andere Position verschoben werden.&lt;br /&gt;
&lt;br /&gt;
Wenn die Legende eingeblendet ist, kann mittels Klick auf einen Legendeneintrag der zugehörige Graph ein- und ausgeblendet werden.&lt;br /&gt;
&lt;br /&gt;
===3-dimensionale Drehung===&lt;br /&gt;
&#039;&#039;&#039;data-ddd&#039;&#039;&#039; ermöglicht, den Graphen 3-dimensional zu drehen. Als Wert wird ein Array mit den 3 Winkeln für x, y und z erwartet, wobei z selbst bisher nicht unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;data-ddd=&#039;[&amp;quot;40&amp;quot;,&amp;quot;60&amp;quot;,&amp;quot;0&amp;quot;]&#039;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wenn der 3D Modus aktiv ist (&#039;&#039;&#039;data-ddd&#039;&#039;&#039; gesetzt) sind 2 zusätzliche Parameter verfügbar um das Aussehen der Graphen zu beeinflussen. &#039;&#039;&#039;data-dddspace&#039;&#039;&#039; gibt an, wie viele pixel der Raum zwischen den einzelnen in z-Richtung hintereinander angeordneten Graphen betragen soll.&lt;br /&gt;
&#039;&#039;&#039;data-dddwidth&#039;&#039;&#039; legt fest, wie viele pixel die einzelnen Graphen tief (oder dick) sein sollen.&lt;br /&gt;
&lt;br /&gt;
Wenn das Array angegeben wird, erscheinen zwei zusätzliche Buttons im Diagramm, mit denen die Drehung in X- und Y-Richtung verändert werden kann.&lt;br /&gt;
&lt;br /&gt;
===Diagrammtitel===&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-title&#039;&#039;&#039; kann dem Diagramm, ähnlich wie in FHEM-SVG-Plots, ein Titel hinzugefügt werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Platzhalter werden unterstützt:&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;min1&#039;&amp;lt;/code&amp;gt;: Minimaler Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;max1&#039;&amp;lt;/code&amp;gt;: Maximaler Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;avg1&#039;&amp;lt;/code&amp;gt;: Mittlerer Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;cnt1&#039;&amp;lt;/code&amp;gt;: Anzahl der dargestellten Einzelwerte im ersten Graph&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;currval1&#039;&amp;lt;/code&amp;gt;: Letzter, bzw. aktuellster Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;mindate1&#039;&amp;lt;/code&amp;gt;: Niedrigster Wert auf der X-Achse des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;maxdate1&#039;&amp;lt;/code&amp;gt;: Höchster Wert auf der X-Achse vom ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;currdate1&#039;&amp;lt;/code&amp;gt;: Letzter, bzw. aktuellster Wert auf der X-Achse des ersten Graphs&lt;br /&gt;
&lt;br /&gt;
Durch Einsetzen einer anderen Zahl statt &#039;1&#039; können auch die Werte der anderen Graphen angezeigt werden. Das Weglassen der Zahl bewirkt, dass der jeweils zutreffende Wert automatisch ermittelt wird. Bedeutet: &amp;lt;code&amp;gt;max&amp;lt;/code&amp;gt; führt dazu, dass der höchste Wert aller angezeigter Graphen verwendet wird.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;data-title=&amp;quot;Min: $data{mindate4}, Max: $data{maxdate4}, Last: $data{currdate4}&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Buttons im Diagramm===&lt;br /&gt;
Es gibt mehrere Buttons, mit denen sich die Anzeige des Diagramms verändern lässt. &amp;lt;code&amp;gt;&amp;lt;-&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;-&amp;gt;&amp;lt;/code&amp;gt; bewegen die Graphen nach links und rechts. &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; zoomen die Anzeige. &amp;lt;code&amp;gt;legend&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;cursor&amp;lt;/code&amp;gt; schalten die zugehörigen Anzeigen ein und aus.&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Einfaches Diagramm===&lt;br /&gt;
Das Beispiel zeigt ein einfaches Diagramm mit 4 unterschiedlich formatierten Graphen, Legende und Momentanwerten am Fadenkreuz-Cursor.&lt;br /&gt;
&lt;br /&gt;
[[File:Chart_tabletUI.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-logdevice=&#039;[&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Predicted&amp;quot;]&#039;&lt;br /&gt;
	data-columnspec=&#039;[&amp;quot;4:Garden.T:15:&amp;quot;,&amp;quot;10:Garden.T:0:delta-h&amp;quot;,&amp;quot;10:Garden.T:0:delta-d&amp;quot;,&amp;quot;4:predicted.*:15:&amp;quot;]&#039;&lt;br /&gt;
	data-style=&#039;[&amp;quot;ftui l0fill&amp;quot;,&amp;quot;ftui l1fill&amp;quot;,&amp;quot;ftui l2&amp;quot;,&amp;quot;ftui l3dot&amp;quot;]&#039;&lt;br /&gt;
	data-ptype=&#039;[&amp;quot;lines&amp;quot;,&amp;quot;histeps&amp;quot;,&amp;quot;histeps&amp;quot;,&amp;quot;cubic&amp;quot;]&#039;&lt;br /&gt;
	data-uaxis=&#039;[&amp;quot;primary&amp;quot;,&amp;quot;secondary&amp;quot;,&amp;quot;secondary&amp;quot;,&amp;quot;primary&amp;quot;]&#039;&lt;br /&gt;
	data-legend=&#039;[&amp;quot;Temperature&amp;quot;,&amp;quot;Rain/hour&amp;quot;,&amp;quot;Rain/day&amp;quot;,&amp;quot;Predicted Temp.&amp;quot;]&#039;&lt;br /&gt;
	data-yunit=&amp;quot;°C&amp;quot;&lt;br /&gt;
	data-ytext=&amp;quot;Temperature&amp;quot;&lt;br /&gt;
	data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-yunit_sec=&amp;quot;mm&amp;quot;&lt;br /&gt;
	data-ytext_sec=&amp;quot;Rain (mm)&amp;quot;&lt;br /&gt;
	data-height=&amp;quot;250&amp;quot;&lt;br /&gt;
	data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
	data-daysago_start=&amp;quot;2013-08-13T00:00:00&amp;quot;&lt;br /&gt;
	data-daysago_end=&amp;quot;2013-08-14T00:00:00&amp;quot;&lt;br /&gt;
	data-cursorgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-scrollgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-xticks=&amp;quot;auto&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===7-Tage-Wettervorhersage mit Proplanta===&lt;br /&gt;
In diesem Beispiel wird gezeigt, wie die Vorhersagewerte von [[PROPLANTA]] in einem Diagramm dargestellt werden können. Da die Werte nicht in einer Datenbank oder einem FileLog vorliegen, müssen sie über [[LogProxy]] verarbeitet werden. Dafür sind einige Vorbereitungen in FHEM nötig.&lt;br /&gt;
&lt;br /&gt;
[[File:FTUI_Widget_Chart-fc-Proplanta.png|941px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; Ein LogProxy-Device muss vorhanden sein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define myLogProxy logProxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; In der Datei &amp;lt;code&amp;gt;99_myUtils.pm&amp;lt;/code&amp;gt; muss folgende Routine hinzugefügt werden, die die Daten bereitstellt:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
# Proplanta LogProxy-Funktion&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
sub logProxy_proplanta2Plot($$$$;$$) {&lt;br /&gt;
	my ($device, $fcValue, $from, $to, $fcHour, $expMode) = @_;&lt;br /&gt;
    my $regex;&lt;br /&gt;
    my @rl;&lt;br /&gt;
    &lt;br /&gt;
	return undef if(!$device);&lt;br /&gt;
    &lt;br /&gt;
    if($fcValue =~ s/_$//) {&lt;br /&gt;
        $regex = &amp;quot;^fc[\\d]+_&amp;quot;.$fcValue.&amp;quot;[\\d]{2}\$&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        $regex = &amp;quot;^fc[\\d]+_&amp;quot;.$fcValue.&amp;quot;\$&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    $fcHour = 12 if(!defined $fcHour);&lt;br /&gt;
    $expMode = &amp;quot;point&amp;quot; if(!defined $expMode);&lt;br /&gt;
&lt;br /&gt;
	if( defined($defs{$device}) ) {&lt;br /&gt;
		if( $defs{$device}{TYPE} eq &amp;quot;PROPLANTA&amp;quot; ) {&lt;br /&gt;
            @rl = sort{&lt;br /&gt;
                my ($an) = ($a =~ m/fc(\d+)_.*/);&lt;br /&gt;
                my ($bn) = ($b =~ m/fc(\d+)_.*/);&lt;br /&gt;
                $an &amp;lt;=&amp;gt; $bn or $a cmp $b;&lt;br /&gt;
                }( grep /${regex}/,keys %{$defs{$device}{READINGS}} );&lt;br /&gt;
			return undef if( !@rl );&lt;br /&gt;
		} else {&lt;br /&gt;
			Log3 undef, 2, &amp;quot;logProxy_proplanta2Plot: $device is not a PROPLANTA device&amp;quot;;&lt;br /&gt;
			return undef;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	my $fromsec = SVG_time_to_sec($from);&lt;br /&gt;
	my $tosec   = SVG_time_to_sec($to);&lt;br /&gt;
	my $sec = $fromsec;&lt;br /&gt;
	my ($h,$fcDay,$mday,$mon,$year);&lt;br /&gt;
	my $timestamp;&lt;br /&gt;
    &lt;br /&gt;
	my $reading;&lt;br /&gt;
	my $value;&lt;br /&gt;
	my $prev_value;&lt;br /&gt;
	my $min = 999999;&lt;br /&gt;
	my $max = -999999;&lt;br /&gt;
	my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	# while not end of plot range reached&lt;br /&gt;
	while(($sec &amp;lt; $tosec) &amp;amp;&amp;amp; @rl) {&lt;br /&gt;
		#remember previous value for start of plot range&lt;br /&gt;
		$prev_value = $value;&lt;br /&gt;
&lt;br /&gt;
		$reading = shift @rl;&lt;br /&gt;
        ($fcDay) = $reading =~ m/^fc(\d+).*/;&lt;br /&gt;
   		$h = ($reading =~ m/.*(\d\d)$/)?$1:$fcHour;&lt;br /&gt;
		$value = ReadingsVal($device,$reading,undef);&lt;br /&gt;
        &lt;br /&gt;
		($mday,$mon,$year) = split(&#039;\.&#039;,ReadingsVal($device,&amp;quot;fc&amp;quot;.$fcDay.&amp;quot;_date&amp;quot;,undef));&lt;br /&gt;
		$timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, $h, 0, 0);&lt;br /&gt;
		$sec = SVG_time_to_sec($timestamp);&lt;br /&gt;
        &lt;br /&gt;
		# skip all values before start of plot range&lt;br /&gt;
		next if( SVG_time_to_sec($timestamp) &amp;lt; $fromsec );&lt;br /&gt;
&lt;br /&gt;
		# add first value at start of plot range&lt;br /&gt;
		if( !$ret &amp;amp;&amp;amp; $prev_value ) {&lt;br /&gt;
		$min = $prev_value if( $prev_value &amp;lt; $min );&lt;br /&gt;
		$max = $prev_value if( $prev_value &amp;gt; $max );&lt;br /&gt;
		$ret .= &amp;quot;$from $prev_value\n&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		# done if after end of plot range&lt;br /&gt;
		last if($sec &amp;gt; $tosec);&lt;br /&gt;
&lt;br /&gt;
		$min = $value if( $value &amp;lt; $min );&lt;br /&gt;
		$max = $value if( $value &amp;gt; $max );&lt;br /&gt;
&lt;br /&gt;
		# add actual controll point&lt;br /&gt;
		$ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#		Log 1, &amp;quot;$timestamp $value -0- $reading&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
    if(($sec &amp;lt; $tosec) &amp;amp;&amp;amp; !@rl &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;)) {&lt;br /&gt;
    	$timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, 23, 59, 59);&lt;br /&gt;
    	if(SVG_time_to_sec($timestamp) &amp;lt; $tosec) {&lt;br /&gt;
        	$ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
			$ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    elsif(($sec &amp;gt; $tosec) &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;)) {&lt;br /&gt;
       	$value = $prev_value + ($value - $prev_value)*(86400 + ($tosec - $sec))/86400;&lt;br /&gt;
       	$ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
	return ($ret,$min,$max,$prev_value);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend können die Daten im Chart-Widget angezeigt werden. Der Device-Name von Proplanta heißt hier im Beispiel &amp;lt;code&amp;gt;AU.xx.WE.Proplanta&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;AU.xx.WE.Proplanta&amp;quot;&lt;br /&gt;
	 data-logdevice=&#039;[&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-columnspec=&#039;[&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22rain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22chOfRain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22cloud_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-style=&#039;[&lt;br /&gt;
	 					&amp;quot;ftui l6fill&amp;quot;,&lt;br /&gt;
	 					&amp;quot;ftui l5fill&amp;quot;,&lt;br /&gt;
	 					&amp;quot;ftui l1fill&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-ptype=&#039;[&lt;br /&gt;
	 					&amp;quot;steps&amp;quot;,&lt;br /&gt;
	 					&amp;quot;quadraticSmooth&amp;quot;,&lt;br /&gt;
	 					&amp;quot;quadraticSmooth&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-uaxis=&#039;[&lt;br /&gt;
	 					&amp;quot;primary&amp;quot;,&lt;br /&gt;
	 					&amp;quot;secondary&amp;quot;,&lt;br /&gt;
	 					&amp;quot;secondary&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-legend=&#039;[&lt;br /&gt;
	 					&amp;quot;Regen&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Regenwahrscheinlichkeit&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Wolken&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-yunit=&amp;quot;mm&amp;quot;&lt;br /&gt;
	 data-ytext=&amp;quot;Regen&amp;quot;&lt;br /&gt;
	 data-yunit_sec=&amp;quot;%&amp;quot;&lt;br /&gt;
	 data-ytext_sec=&amp;quot;Chance auf Regen / Wolken&amp;quot;&lt;br /&gt;
	 data-timeformat=&amp;quot;eeee&amp;quot;&lt;br /&gt;
	 data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-daysago_start = &amp;quot;0&amp;quot;&lt;br /&gt;
	 data-daysago_end = &amp;quot;-7&amp;quot;&lt;br /&gt;
	 data-xticks=&amp;quot;1440&amp;quot;&lt;br /&gt;
	 data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-title=&amp;quot;7-Tage-Wettervorhersage&amp;quot;&lt;br /&gt;
	 data-showlegend=&amp;quot;true&amp;quot;&lt;br /&gt;
	 class=&amp;quot;nobuttons fullsize&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hilfreiche Links und Quellen zu diesem Beispiel:&#039;&#039;&#039;&lt;br /&gt;
*[[LogProxy|LogProxy im FHEM-Wiki]]&lt;br /&gt;
*{{Link2Forum|Topic=22967|Message=246973|LinkText=Stundengenaue Wettervorhersage (#1) im FHEM-Forum}}&lt;br /&gt;
*{{Link2Forum|Topic=22967|Message=334713|LinkText=Stundengenaue Wettervorhersage (#2) im FHEM-Forum}}&lt;br /&gt;
&lt;br /&gt;
===Darstellung der Wetter Icons im Diagramm===&lt;br /&gt;
&lt;br /&gt;
[[File:Wetterchart2.png]]&lt;br /&gt;
&lt;br /&gt;
Wie oben bereits beschrieben, gibt es beim Chart grundsätzlich die Möglichkeit, Icons, welche in Form von URLs in den Logs abgelegt sind oder welche per logProxy generiert werden, darzustellen. Die Icons werden auf genau dem gleichen Weg von FHEM gelesen, wie alle anderen Datenpunkte. Im Folgenden wird ein Beispiel gezeigt, mit dem die im Proplanta Modul als Readings abgelegten Icons per logProxy Funktion gelesen und in ein Chart eingebaut werden könnnen.&lt;br /&gt;
Da es beim Proplanta Modul für die ersten 7 Tage nicht das Reading &amp;lt;code&amp;gt;fc#_weatherIcon&amp;lt;/code&amp;gt; gibt, sondern mehrere Readings für unterschiedliche Tageszeiten wogegen für die zweiten 7 Tage ausschließlich das Reading &amp;lt;code&amp;gt;fc#_weatherIcon&amp;lt;/code&amp;gt; vorhanden ist, sollte per &amp;lt;code&amp;gt;attr device userReading&amp;lt;/code&amp;gt; mit folgendem Eintrag dafür gesorgt werden, dass für alle Tage ein Reading &amp;lt;code&amp;gt;fc#_weatherIcon&amp;lt;/code&amp;gt; vorhanden ist (alternativ könnten auch 2 Graphen gezeichnet werden, wobei der erste dann nur die ersten 7 Tage enthält und der zweite die letzen 7 Tage, will man nur die ersten 7 Tage darstellen braucht man das userReading nicht unbedingt).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
fc0_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc0_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc1_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc1_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc2_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc2_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc3_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc3_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc4_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc4_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc5_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc5_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc6_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc6_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Um die Icons darzustellen muss ein zusätzlicher Graph definiert werden. Dieser nutzt neben der Columnspec, die die URLs abruft den Parameter &amp;lt;code&amp;gt;data-ptype=&amp;quot;icons:#&amp;quot;&amp;lt;/code&amp;gt; (# ist eine Zahl und steht für die Nummer, beginnend bei 0 des Graphen, welcher für die y-Position der Icons verwendet werden soll) und den Stil &amp;lt;code&amp;gt;sym&amp;lt;/code&amp;gt;. Der Wert für die Symbolgröße sollte z.B. durch eine zusätzliche Definition im File fhem-tablet-ui-user.css in der Form:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* icon lines */&lt;br /&gt;
.ftui.l99icon	{ stroke:#DDA400; stroke-width:48px; fill:none; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Im folgenden ein Beispiel, welches eine Linie für die Maximale Tagestemperatur zeichnet und auf dieser Linie die Wetter Icons darstellt.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;AU.xx.WE.Proplanta&amp;quot;&lt;br /&gt;
	 data-logdevice=&#039;[&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-columnspec=&#039;[&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22weatherIcon\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22tempMax\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-style=&#039;[&lt;br /&gt;
	 					&amp;quot;ftui l99icon&amp;quot;,&lt;br /&gt;
	 					&amp;quot;ftui l1fill&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-ptype=&#039;[&lt;br /&gt;
	 					&amp;quot;icons:1&amp;quot;,&lt;br /&gt;
	 					&amp;quot;quadraticSmooth&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-uaxis=&#039;[&lt;br /&gt;
	 					&amp;quot;primary&amp;quot;,&lt;br /&gt;
	 					&amp;quot;primary&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-legend=&#039;[&lt;br /&gt;
	 					&amp;quot;Wetterbedingung&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Max. Temperature&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-yunit=&amp;quot;°C&amp;quot;&lt;br /&gt;
	 data-ytext=&amp;quot;Temperature (°C)&amp;quot;&lt;br /&gt;
	 data-timeformat=&amp;quot;ee\LF\dd.MM&amp;quot;&lt;br /&gt;
	 data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-daysago_start=&amp;quot;-1w&amp;quot;&lt;br /&gt;
	 data-y_margin=&amp;quot;20&amp;quot;&lt;br /&gt;
	 data-daysago_end=&amp;quot;-3w&amp;quot;&lt;br /&gt;
	 data-xticks=&amp;quot;1440&amp;quot;&lt;br /&gt;
	 data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-title=&amp;quot;14-Tage-Wettervorhersage&amp;quot;&lt;br /&gt;
	 data-showlegend=&amp;quot;true&amp;quot;&lt;br /&gt;
	 class=&amp;quot;nobuttons fullsize&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fensterstatus offen/geschlossen===&lt;br /&gt;
Dieses Beispiel zeigt, wie ein Fensterkontakt, dessen Reading die Werte &amp;lt;code&amp;gt;closed&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt; einnimmt, als Graph gezeichnet werden kann. Technisch gesehen werden hier die Werte &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; gezeichnet, indem über das Attribut &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; dem Zustand &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt; der Wert &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; und allen anderen Zuständen der Wert &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; zugeordnet wird. Über das Attribut &#039;&#039;&#039;data-yticks&#039;&#039;&#039; wird die Beschriftung an der Y-Achse (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;) gegen einen frei definierbaren Text ausgetauscht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-device=&amp;quot;wz_fensterstatus&amp;quot;&lt;br /&gt;
	data-logdevice=&#039;[&amp;quot;myDbLog&amp;quot;]&#039;&lt;br /&gt;
	data-logfile=&#039;[&amp;quot;HISTORY&amp;quot;]&#039;&lt;br /&gt;
	data-columnspec=&#039;[&amp;quot;wz_fensterstatus:state:0::$val=($val=~\\x22open\\x22?1:0)&amp;quot;]&#039;&lt;br /&gt;
	data-style=&#039;[&amp;quot;ftui l4fill&amp;quot;]&#039;&lt;br /&gt;
	data-ptype=&#039;[&amp;quot;steps&amp;quot;]&#039;&lt;br /&gt;
	data-height=&amp;quot;290&amp;quot;&lt;br /&gt;
	data-yticks=&#039;[[0,&amp;quot;geschlossen&amp;quot;],[1,&amp;quot;offen&amp;quot;]]&#039;&lt;br /&gt;
	data-minvalue=&amp;quot;0&amp;quot;&lt;br /&gt;
	data-maxvalue=&amp;quot;1.1&amp;quot;&lt;br /&gt;
	data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
	data-daysago_start=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-daysago_end=&amp;quot;-1&amp;quot;&lt;br /&gt;
	data-cursorgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-scrollgroup=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
{{Link2Forum|Topic= 48450 |Message=401006|LinkText=Thread im FHEM-Forum}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI]]&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Chart&amp;diff=21004</id>
		<title>FTUI Widget Chart</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Chart&amp;diff=21004"/>
		<updated>2017-03-22T11:06:36Z</updated>

		<summary type="html">&lt;p&gt;Benheim: Tippfehler korrigiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Chart Widget]] ist ein Widget für [[FHEM Tablet UI]], mit dem sich verschiedenste Diagramme darstellen lassen. Die Aneinanderreihung mehrerer Werte eines Device-Readings zu einem zeitlichen Verlauf wird dabei als Graph bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Es können beliebige Werte dargestellt und entsprechend der Sinnhaftigkeit, oder persönlichem Geschmack, formatiert werden. Farbe und Form der Linien sind je Graph einstellbar, auch wenn mehrere gleichzeitig in einem Diagramm angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Jedes Diagramm kann zwei Y-Achsen besitzen. Die primäre Y-Achse (primary) wird auf der linken Seite angezeigt, die sekundäre Y-Achse (secondary) auf der rechten Seite. Beide Achsen können unterschiedlich formatiert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Chart_tabletUI.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:150px&amp;quot;|Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||Name des FHEM-Device, das die Aktualisierung des Charts triggert||||data-device=&amp;quot;WohnzimmerHeizung&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Reading, das das Update des Diagramms triggert||&#039;STATE&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-logdevice&#039;&#039;&#039;||Name des Log-Device, das dargestellt werden soll, oder ein Array, um mehrere Werte in einem Diagramm darzustellen||||data-logdevice=&amp;quot;FileLog_WohnzimmerHeizung&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-logfile&#039;&#039;&#039;|| Name des Log-Files, aus dem die Daten entnommen werden sollen (oder Array)||&#039;-&#039; = aktuelle Datei||data-logfile=&amp;quot;WohnzimmerHeizung-2015.log&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-columnspec&#039;&#039;&#039;||Ermittelt den Wert aus dem Log-File, der angezeigt werden soll (oder Array)||||data-columnspec=&amp;quot;4:meas.*&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-style&#039;&#039;&#039;||Stil, wie die Graph-Linien dargestellt werden sollen (z.B. &#039;SVGplot l0&#039; oder &#039;ftui l0dash&#039;), oder ein Array, wenn mehrere Linien unterschiedlich dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ptype&#039;&#039;&#039;||Form, wie die Graphen dargestellt werden sollen (z.B. &#039;lines&#039;, &#039;cubic&#039; oder &#039;fa-cog&#039;), oder ein Array||&#039;lines&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-uaxis&#039;&#039;&#039;||Name der Achse, die verwendet werden soll (&#039;primary&#039; = links, oder &#039;secondary&#039; = rechts), oder ein Array||&#039;primary&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-legend&#039;&#039;&#039;||Bezeichnung des Graphen (wird in Legende und am Cursor angezeigt), oder ein Array||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-minvalue&#039;&#039;&#039;||Minimaler Wert, der auf der linken Y-Achse (&#039;primary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;10&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-maxvalue&#039;&#039;&#039;||Maximaler Wert, der auf der linken Y-Achse (&#039;primary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;30&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-minvalue_sec&#039;&#039;&#039;||Minimaler Wert, der auf der rechten Y-Achse (&#039;secondary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;auto&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-maxvalue_sec&#039;&#039;&#039;||Maximaler Wert, der auf der rechten Y-Achse (&#039;secondary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;auto&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-xticks&#039;&#039;&#039;||Abstand zwischen den vertikalen Hilfslinien (bezogen auf die X-Achse) in Minuten. &#039;auto&#039; = automatische Berechnung||&#039;auto&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks&#039;&#039;&#039;||Abstand zwischen den horizontalen Hilfslinien (bezogen auf die linke Y-Achse). Kann auch ein Array mit Werte-Paaren enthalten, um die Linien mit Text zu beschriften.||&#039;auto&#039;||data-yticks=&#039;[[0,&amp;quot;open&amp;quot;],[1,&amp;quot;closed&amp;quot;]]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_sec&#039;&#039;&#039;||Abstand zwischen den horizontalen Hilfslinien (bezogen auf die rechte Y-Achse). Kann auch ein Array mit Werte-Paaren enthalten, um die Linien mit Text zu beschriften.||&#039;auto&#039;||data-yticks=&#039;[[0,&amp;quot;open&amp;quot;],[1,&amp;quot;closed&amp;quot;]]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_prio&#039;&#039;&#039;||Legt fest, ob die horizontalen Hilfslinien der linken (primary) oder der rechten (secondary) Y-Achse zugeordnet werden sollen||||data-yticks=&#039;secondary&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysago_start&#039;&#039;&#039;||Anzahl der vergangenen Tage, wo das Diagramm beginnen soll. &#039;0&#039; = Beginn heute 0:00 Uhr. Es kann auch ein fixes Datum (z.B. &#039;2013-10-23&#039;) angegeben werden. Uhrzeitangaben werden nur berücksichtigt, wenn &#039;&#039;&#039;data-nofulldays=&#039;true&#039; &#039;&#039;&#039; verwendet wird.||&#039;0&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysago_end&#039;&#039;&#039;||Anzahl der vergangenen Tage, wo das Diagramm enden soll. &#039;-1&#039; = Ende heute 24:00 Uhr. Es kann auch ein fixes Datum (z.B. &#039;2013-10-24&#039;) angegeben werden. Uhrzeitangaben werden nur berücksichtigt, wenn &#039;&#039;&#039;data-nofulldays=&#039;true&#039; &#039;&#039;&#039; verwendet wird.||&#039;-1&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-nofulldays&#039;&#039;&#039;||Aktiviert/deaktiviert die Rundung der X-Achse auf ganze Tage. Binärwert (&#039;true&#039; oder &#039;false&#039;)||&#039;false&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeformat&#039;&#039;&#039;||Zeitformat für die Anzeige an der X-Achse (siehe Hinweise)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytext&#039;&#039;&#039;||Text, der neben der linken Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytext_sec&#039;&#039;&#039;||Text, der neben der rechten Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yunit&#039;&#039;&#039;||Einheit, die an der linken Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yunit_sec&#039;&#039;&#039;||Einheit, die an der rechten Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-crosshair&#039;&#039;&#039;||Aktiviert/deaktiviert den Fadenkreuz-Cursor. Binärwert (&#039;true&#039; oder &#039;false&#039;)||&#039;false&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-cursorgroup&#039;&#039;&#039;||Zahl zur Gruppierung der Werte am Fadenkreuz-Cursor (siehe Hinweise)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-scrollgroup&#039;&#039;&#039;||Zahl zur Gruppierung der Graphen beim Bewegen und Zoomen. Alle Linien mit der selben Zahl werden miteinander gekoppelt und bewegen sich gemeinsam.||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showlegend&#039;&#039;&#039;||Aktiviert/deaktiviert die Anzeige der Legene. Binärwert (&#039;true&#039; oder &#039;false&#039;)||&#039;false&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-legendpos&#039;&#039;&#039;||Array von zwei Werten, die die horizontale und vertikale Position der Legende festlegen (siehe Hinweise)||&#039;[&amp;quot;top&amp;quot;,&amp;quot;right&amp;quot;]&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-width&#039;&#039;&#039;||Breite des Diagramms (in % oder px)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-height&#039;&#039;&#039;||Höhe des Diagramms (in % oder px)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-graphsshown&#039;&#039;&#039;||Aktiviert/deaktiviert die initiale Anzeige von Graphen. Binärwert (&#039;true&#039; oder &#039;false&#039;). Array, wenn mehrere Linien angezeigt werden sollen.||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ddd&#039;&#039;&#039;||Einstellung für die 3D-Drehung (siehe Hinweise)||||data-ddd=&#039;[&amp;quot;40&amp;quot;,&amp;quot;60&amp;quot;,&amp;quot;0&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dddspace&#039;&#039;&#039;||Abstand zwischen zwei Graphen, wenn die 3D-Anzeige aktiviert wurde (px)||&#039;15&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dddwidth&#039;&#039;&#039;||Breite, bzw. Tiefe der Graphen, wenn diese 3-dimensional angezeigt werden (px)||&#039;10&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-title&#039;&#039;&#039;||Titel, der über dem Diagramm angezeigt werden soll. Der Inhalt kann auch dynamisch erzeugt werden (siehe Hinweise)||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==CSS Klassen==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|fullsize}}{{FTUI Klasse|noticks}}{{FTUI Klasse|nobuttons}}{{FTUI Klasse|small}}{{FTUI Klasse|normal}}{{FTUI Klasse|big}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende Widget-spezifsche Klassen können zusätzlich in einer eigenen CSS-Datei definiert werden:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;chart-background&#039;&#039;&#039;||Hintergrundfarbe des Diagramms&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;buttons&#039;&#039;&#039;||Größe und Farbe der Buttons&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;text.axes&#039;&#039;&#039;||Generelle Schriftart und Farbe der Achsen&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;gridlines&#039;&#039;&#039;||Generelle Farbe und Größe der Gitternetzlinien&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;xaxis&#039;&#039;&#039;||Schriftart, Größe und Farbe der X-Achse&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;yaxis&#039;&#039;&#039;||Schriftart, Größe und Farbe der Y-Achse&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;xticks&#039;&#039;&#039;||Schriftart, Größe und Farbe der X-Achse (Zwischenlinien)&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;yticks&#039;&#039;&#039;||Schriftart, Größe und Farbe der Y-Achse (Zwischenlinien)&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;crosshair&#039;&#039;&#039;||Schriftart, Größe und Vordergrund/Hintergrundfarbe der Momentanwerte am Fadenkreuzcursor&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;caption&#039;&#039;&#039;||Schriftart, Größe und Farbe der Text-Buttons für Legende und Cursor&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;legend&#039;&#039;&#039;||Schriftart, Größe und Farbe der Legende&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Standardwerte sind in der Datei &amp;lt;code&amp;gt;css/ftui_chart.css&amp;lt;/code&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
==Datenquellen==&lt;br /&gt;
Beim Chart-Widget können die gleichen Datenquellen genutzt werden, die auch für SVG-Plots verwendet werden können:&lt;br /&gt;
# [[FileLog]]: Verlaufsdaten einer Textdatei entnehmen&lt;br /&gt;
# [[DbLog]]: Verlaufsdaten einer Datenbank entnehmen&lt;br /&gt;
# [[LogProxy]]: Daten dynamisch berechnet&lt;br /&gt;
&lt;br /&gt;
===FileLog===&lt;br /&gt;
Um [[FileLog]] zu nutzen, wird als &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; das FHEM-Device für das FileLog angegeben. In der Regel entstehen hier im Laufe der Zeit mehrere Log-Dateien. Name und Anzahl sind von der Definition abhängig - meist wird jeden Monat oder jedes Jahr eine neue Datei angelegt. Die gewünschte Datei kann mit &#039;&#039;&#039;data-logfile&#039;&#039;&#039; ausgewählt werden. Möchte man stets die aktuelle Datei verwenden (macht vor allem dann Sinn, wenn man die neusten Daten anzeigen will), kann das Attribut weggelassen, oder explizit &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; eingetragen werden. Zuletzt wird &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; benötigt, um die gewünschten Daten zu in der Logdatei zu identifizieren. Hier wird die Spalte, in der die Daten stehen, gefolgt von Doppelpunkt und Readingname angegeben.&lt;br /&gt;
&lt;br /&gt;
Für ein Heizungsthermostat von Homematic mit dem Namen &#039;&#039;DG.wz.HZ.Heizungsventil&#039;&#039; ergibt sich somit beispielhaft folgende Definition, um gemessene Temperatur, Sollwert und Ventilstellung im Diagramm darzustellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logdevice=&amp;quot;FileLog_DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logfile=&amp;quot;-&amp;quot;&lt;br /&gt;
	 data-columnspec=&#039;[&amp;quot;4:measured-temp&amp;quot;,&amp;quot;4:desired-temp&amp;quot;,&amp;quot;4:actuator&amp;quot;]&#039;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen Daten von unterschiedlichen Geräten in einem Diagramm angezeigt werden, muss &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; als Array nach dem Schema &amp;lt;code&amp;gt;data-logdevice=&#039;[&amp;quot;&amp;lt;Logdatei_1&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Logdatei_2&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Logdatei_3&amp;gt;&amp;quot;]&#039;&amp;lt;/code&amp;gt; definiert werden. Für jeden Eintrag in &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; muss es auch den passenden Eintrag in &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; geben (auch die Reihenfolge ist relevant).&lt;br /&gt;
&lt;br /&gt;
===DbLog===&lt;br /&gt;
Um die Daten aus [[DbLog]] anzeigen zu können, werden die gleichen Attribute verwendet und mit für die Datenbank angepassten Werten beschrieben. Bei &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; das FHEM-Device für die Datenbank angegeben. Im nachfolgenden Beispiel heißt diese &amp;lt;code&amp;gt;logdb&amp;lt;/code&amp;gt; und besitzt wie üblich zwei Tabellen: &amp;lt;code&amp;gt;current&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;history&amp;lt;/code&amp;gt; (der zeitliche Verlauf liegt in letzterer). Der Tabellenname wird bei &#039;&#039;&#039;data-logfile&#039;&#039;&#039; eingetragen. Da die Daten in der Datenbank etwas anders abgelegt werden, muss auch &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; entsprechend angepasst werden. Statt der Spalte wird hier das FHEM-Device, gefolgt von Doppelpunkt und Readingname angegeben.&lt;br /&gt;
&lt;br /&gt;
Für das oben beschriebene Homematic-Heizungsthermostat ergibt sich dann folgende Definition, um die gleichen Daten aus einer Datenbank, statt einem LogFile zu lesen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logdevice=&amp;quot;logdb&amp;quot;&lt;br /&gt;
	 data-logfile=&amp;quot;HISTORY&amp;quot;&lt;br /&gt;
	 data-columnspec=&#039;[&amp;quot;DG.wz.HZ.Heizungsventil:measured-temp&amp;quot;,&amp;quot;DG.wz.HZ.Heizungsventil:desired-temp&amp;quot;,&amp;quot;DG.wz.HZ.Heizungsventil:actuator&amp;quot;]&#039;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Anzeige von unterschiedlichen Geräten in einem Diagramm, muss nur &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; entsprechend angepasst werden, solange sich alle Daten in der Datenbank befinden.&lt;br /&gt;
&lt;br /&gt;
===LogProxy===&lt;br /&gt;
Um die Daten mittels [[LogProxy]] berechnen und anzeigen zu können, muss in FHEM ein LogProxy-Device definiert sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define myLogProxy logProxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Einstellungen am LogProxy sind nicht nötig, die bloße Existenz reicht.&lt;br /&gt;
&lt;br /&gt;
Bei &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; wird das FHEM-Device für den LogProxy angegeben. Im nachfolgenden Beispiel heißt dieses &amp;lt;code&amp;gt;myLogProxy&amp;lt;/code&amp;gt;. Das Attribut &#039;&#039;&#039;data-logfile&#039;&#039;&#039; wird für LogProxy nicht benötigt. Befinden sich nur LogProxy-Werte im Diagramm kann das Attribut komplett entfallen. Sollen weitere Werte angezeigt werden, bleibt die Definition im Array einfach leer.&lt;br /&gt;
&lt;br /&gt;
Im Attribut &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; wird eine Formel angegeben, wie die Werte berechnet werden sollen. Hier können die Formeln 1:1 von einem eventuell vorhandenen SVG-Plot übernommen werden. &#039;&#039;&#039;Dabei gibt es jedoch folgendes zu beachten:&#039;&#039;&#039; Befindet sich die Formel in einem Array, dürfen die Formeln keine Anführungszeichen (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;) beinhalten. Stattdessen müssen sie als escapter Ascii-Code (&amp;lt;code&amp;gt;\\x22&amp;lt;/code&amp;gt;) eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
Das nachfolgende Beispiel zeigt, wie Vorhersagewerte aus einem FHEM-Device vom Typ Proplanta (Name hier &amp;lt;code&amp;gt;AU.xx.WE.Proplanta&amp;lt;/code&amp;gt;) angezeigt werden können.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;AU.xx.WE.Proplanta&amp;quot;&lt;br /&gt;
	 data-logdevice=&#039;[&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;&lt;br /&gt;
					]&#039;&lt;br /&gt;
	 data-columnspec=&#039;[&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22temp_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22rain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22chOfRain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22cloud_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;&lt;br /&gt;
					]&#039;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auch alle anderen Funktionen, die [[LogProxy]] bietet, können hier angewendet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
===Aktualisierung des Charts===&lt;br /&gt;
Damit der Refresh des Charts funktioniert, muss auch ein Device angegeben werden, der das Refresh triggert. Das Diagramm wird immer dann aktualisiert, wenn sich der Inhalt von &#039;&#039;&#039;data-get&#039;&#039;&#039; ändert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-device=&amp;quot;WohnzimmerHeizung&amp;quot;&lt;br /&gt;
	data-logdevice=&amp;quot;FileLog_WohnzimmerHeizung&amp;quot;&lt;br /&gt;
	...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aussehen der Linien===&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-style&#039;&#039;&#039; kann das Aussehen der Linien des jeweiligen Graphen verändert werden. Hierfür können die Standard-FHEM-Styles verwendet werden. Dazu wird das Attribut mit &amp;lt;code&amp;gt;SVGplot&amp;lt;/code&amp;gt;, gefolgt von einem Leerzeichen und der gewünschten Farbe/Stil befüllt. Es existieren jedoch auch noch weitere, an FTUI angepasste Styles, zu finden in der CSS-Datei &amp;lt;code&amp;gt;css/ftui_chart.css&amp;lt;/code&amp;gt;. Um diese zu verwenden, wird das Attribut mit &amp;lt;code&amp;gt;ftui&amp;lt;/code&amp;gt;, gefolgt von einem Leerzeichen und der gewünschten Farbe/Stil befüllt. Eigene Styles können zum Beispiel in der Datei &amp;lt;code&amp;gt;css/fhem-table-ui-user.css&amp;lt;/code&amp;gt; definiert werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Übersicht zeigt die im Standard verfügbaren &#039;&#039;&#039;Farben&#039;&#039;&#039;, alle Abbildungen sind mit im FTUI-Style entstanden:&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f0.png|thumb|none|150px|Farbe &amp;quot;l0&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f1.png|thumb|none|150px|Farbe &amp;quot;l1&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f2.png|thumb|none|150px|Farbe &amp;quot;l2&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f3.png|thumb|none|150px|Farbe &amp;quot;l3&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f4.png|thumb|none|150px|Farbe &amp;quot;l4&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f5.png|thumb|none|150px|Farbe &amp;quot;l5&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f6.png|thumb|none|150px|Farbe &amp;quot;l6&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Angabe zur Farbe kann dann mit der Linienart kombiniert werden. Dazu stehen folgende &#039;&#039;&#039;Stile&#039;&#039;&#039; zur Verfügung:&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-normal.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;normal&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-dot.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;dot&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-dash.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;dash&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-fill.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;fill&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-sym.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;sym&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-normal.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;normal&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-dot.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;dot&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-dash.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;dash&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-fill.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;fill&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-sym.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;sym&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Farbe und Stil werden kombiniert (zusammengeschrieben) beim Attribut &#039;&#039;&#039;data-style&#039;&#039;&#039; angegeben, sodass sich beispielsweise für eine graue Punktlinie folgendes ergibt: &amp;lt;code&amp;gt;data-style=&amp;quot;ftui l1dot&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
Um die Darstellung als normale Linie zu erhalten, darf im Gegensatz zu den anderen Linienformen der Stil &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt; nicht angegeben werden. Für eine einfache graue Linie ist also die Angabe &amp;lt;code&amp;gt;data-style=&amp;quot;ftui l1&amp;quot;&amp;lt;/code&amp;gt; korrekt, wohingegen &amp;lt;code&amp;gt;data-style=&amp;quot;ftui l1normal&amp;quot;&amp;lt;/code&amp;gt; zu einer fehlerhaften Anzeige führt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Der Stil &#039;&#039;sym&#039;&#039; ist speziell dafür geeignet, Symbole statt Linien zu zeichnen. Dazu kann beim Attribut &#039;&#039;&#039;data-ptype&#039;&#039;&#039; als Linienform ein beliebiges Font-Awsome-, oder Open Automation-Icon angegeben werden. Alle in diesem Abschnitt enthaltenen Abbildungen sind mit &amp;lt;code&amp;gt;data-ptype=&amp;quot;lines&amp;quot;&amp;lt;/code&amp;gt; entstanden.&lt;br /&gt;
&lt;br /&gt;
===Form der Linien===&lt;br /&gt;
Das Attribut &#039;&#039;&#039;data-ptype&#039;&#039;&#039; beeinflusst die Form der Linien. Hier sind folgende Werte möglich:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lines&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;steps&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fsteps&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;histeps&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bars&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ibars&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cubic&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;quadratic&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;quadraticSmooth&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich ist es möglich, Symbole anzeigen zu lassen. Unterstützt werden Font-Awesome (&#039;fa-...&#039;), Open Automation (&#039;oa-...&#039;) und FHEM-Symbole (&#039;fs-...&#039;)). Damit die Symbole korrekt angezeigt werden, muss  im Attribut &#039;&#039;&#039;data-style&#039;&#039;&#039; der Stil &amp;lt;code&amp;gt;sym&amp;lt;/code&amp;gt; gewählt werden, da sonst nur Punkte, statt der Symbole gezeichnet werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logdevice=&amp;quot;FileLog_DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 ...&lt;br /&gt;
	 data-style=&amp;quot;ftui l1sym&amp;quot;&lt;br /&gt;
	 data-ptype=&amp;quot;fa-cog&amp;quot;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Größe der Symbole ist in der Datei &amp;lt;code&amp;gt;css/ftui_chart.css&amp;lt;/code&amp;gt; auf 12px festgelegt. Dieser Wert kann in einer eigenen CSS-Datei durch Anpassung von &amp;lt;code&amp;gt;stroke-width&amp;lt;/code&amp;gt; überschrieben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.ftui.l0sym		{ stroke:#DDA400; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l1sym		{ stroke:#BBBBBB; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l2sym		{ stroke:#CC0000; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l3sym		{ stroke:#CCCC00; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l4sym		{ stroke:#33CC33; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l5sym		{ stroke:#33CCCC; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l6sym		{ stroke:#3333CC; stroke-width:12px; fill:none; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;data-ptype&#039;&#039;&#039; kann auch Inhalt im Format &amp;lt;code&amp;gt;&#039;icon:1&#039;&amp;lt;/code&amp;gt; verarbeiten. Dann muss der zugehörige Wert in &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; den Pfad zu einem Icon (z.B. für Wettervorhersagen) beinhalten. Der Y-Wert wird dann vom ersten Graphen übernommen. Weitere Ausführungen hierzu im Beispiel [[#Darstellung der Wetter Icons im Diagramm]]&lt;br /&gt;
&lt;br /&gt;
===Zeitformat der X-Achse===&lt;br /&gt;
Die Zeitanzeige auf der X-Achse kann sehr flexibel eingestellt werden. Dafür stehen verschiedene Platzhalter zur Verfügung, die durch spezielle Zeichen (&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt; &amp;lt;/code&amp;gt; (Leerzeichen), &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;) getrennt werden. Alle Zeichen werden trotz Escape-Zeichen (&amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;) in der Ausgabe angezeigt.&lt;br /&gt;
&lt;br /&gt;
Folgende Platzhalter werden unterstützt:&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;mm&#039;&amp;lt;/code&amp;gt;: Minuten als zweistellige Zahl&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;hh&#039;&amp;lt;/code&amp;gt;: Stunden als zweistellige Zahl&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;dd&#039;&amp;lt;/code&amp;gt;: Tag als zweistellige Zahl (Kalenderdatum)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;MM&#039;&amp;lt;/code&amp;gt;: Monat als zweistellige Zahl (z.B. 02 für Februar)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;MMM&#039;&amp;lt;/code&amp;gt;: Monat als dreistellige Abkürzung (z.B. Dec für Dezember)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;MMMM&#039;&amp;lt;/code&amp;gt;: Langname des Monats (z.B. March)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;ee&#039;&amp;lt;/code&amp;gt;: Wochentag als zweistellige Zahl (z.B. 00 für Sonntag)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;eee&#039;&amp;lt;/code&amp;gt;: Wochentag als dreistellige Abkürzung (z.B. Mon für Montag)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;eeee&#039;&amp;lt;/code&amp;gt;: Langname des Wochentags (z.B. Tuesday)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;yy&#039;&amp;lt;/code&amp;gt;: Jahr als zweistellige Zahl (z.B. 16 für 2016)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;yyyy&#039;&amp;lt;/code&amp;gt;: Jahr als vierstellige Zahl (z.B. 2016)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;LF&#039;&amp;lt;/code&amp;gt;: Fügt einen Zeilenumbruch hinzu&lt;br /&gt;
&lt;br /&gt;
Beispiel: Der String &amp;lt;code&amp;gt;&#039;MMM\LF\yyyy&#039;&amp;lt;/code&amp;gt; zeigt &amp;lt;code&amp;gt;&#039;Jan&#039;&amp;lt;/code&amp;gt; in der ersten, und &amp;lt;code&amp;gt;&#039;2016&#039;&amp;lt;/code&amp;gt; in der zweiten Zeile. &amp;lt;code&amp;gt;&#039;MM.dd 2016&#039;&amp;lt;/code&amp;gt; wird zu &amp;lt;code&amp;gt;&#039;03.05 2016&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Fadenkreuz-Cursor===&lt;br /&gt;
Der Fadenkreuz-Cursor zeigt die Momentanwerte, indem man ihn über die Graphen bewegt. In Desktop-Browsern reicht einfaches Bewegen des Maus. Unter iOS und Android kann der Cursor wird der Cursor durch einfaches Tippen auf die neue Position bewegt.&lt;br /&gt;
&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-cursorgroup&#039;&#039;&#039; können Graphen gruppiert werden. Am Cursor werden dann die Momentanwerte aller Graphen gleichzeitig angezeigt, die die selbe Zahl besitzen, sobald man die Maus über einen aus der Gruppe bewegt.&lt;br /&gt;
&lt;br /&gt;
===Legende===&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-legendpos&#039;&#039;&#039; kann die Position der Legende innerhalb des Diagramms festgelegt werden. Die Position wird mit einem Array, bestehend aus zwei Werten im Format &amp;lt;code&amp;gt;&#039;[&amp;quot;&amp;lt;horizontal&amp;gt;&amp;quot;,&amp;quot;&amp;lt;vertikal&amp;gt;&amp;quot;]&#039;&amp;lt;/code&amp;gt; angegeben. Für die horizontale Positionierung sind &amp;lt;code&amp;gt;&#039;left&#039;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&#039;right&#039;&amp;lt;/code&amp;gt;, die vertikale Positionierung &amp;lt;code&amp;gt;&#039;top&#039;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&#039;bottom&#039;&amp;lt;/code&amp;gt; erlaubt. Alternativ können auch Zahlen verwendet werden, die die Position in Prozent angeben. Durch verschieben mit der Maus oder durch verschieben mit dem Finger oder Stift auf Touch Devices kann die Legende auch an eine andere Position verschoben werden.&lt;br /&gt;
&lt;br /&gt;
Wenn die Legende eingeblendet ist, kann mittels Klick auf einen Legendeneintrag der zugehörige Graph ein- und ausgeblendet werden.&lt;br /&gt;
&lt;br /&gt;
===3-dimensionale Drehung===&lt;br /&gt;
&#039;&#039;&#039;data-ddd&#039;&#039;&#039; ermöglicht, den Graphen 3-dimensional zu drehen. Als Wert wird ein Array mit den 3 Winkeln für x, y und z erwartet, wobei z selbst bisher nicht unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;data-ddd=&#039;[&amp;quot;40&amp;quot;,&amp;quot;60&amp;quot;,&amp;quot;0&amp;quot;]&#039;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wenn der 3D Modus aktiv ist (&#039;&#039;&#039;data-ddd&#039;&#039;&#039; gesetzt) sind 2 zusätzliche Parameter verfügbar um das Aussehen der Graphen zu beeinflussen. &#039;&#039;&#039;data-dddspace&#039;&#039;&#039; gibt an, wie viele pixel der Raum zwischen den einzelnen in z-Richtung hintereinander angeordneten Graphen betragen soll.&lt;br /&gt;
&#039;&#039;&#039;data-dddwidth&#039;&#039;&#039; legt fest, wie viele pixel die einzelnen Graphen tief (oder dick) sein sollen.&lt;br /&gt;
&lt;br /&gt;
Wenn das Array angegeben wird, erscheinen zwei zusätzliche Buttons im Diagramm, mit denen die Drehung in X- und Y-Richtung verändert werden kann.&lt;br /&gt;
&lt;br /&gt;
===Diagrammtitel===&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-title&#039;&#039;&#039; kann dem Diagramm, ähnlich wie in FHEM-SVG-Plots, ein Titel hinzugefügt werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Platzhalter werden unterstützt:&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;min1&#039;&amp;lt;/code&amp;gt;: Minimaler Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;max1&#039;&amp;lt;/code&amp;gt;: Maximaler Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;avg1&#039;&amp;lt;/code&amp;gt;: Mittlerer Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;cnt1&#039;&amp;lt;/code&amp;gt;: Anzahl der dargestellten Einzelwerte im ersten Graph&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;currval1&#039;&amp;lt;/code&amp;gt;: Letzter, bzw. aktuellster Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;mindate1&#039;&amp;lt;/code&amp;gt;: Niedrigster Wert auf der X-Achse des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;maxdate1&#039;&amp;lt;/code&amp;gt;: Höchster Wert auf der X-Achse vom ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;currdate1&#039;&amp;lt;/code&amp;gt;: Letzter, bzw. aktuellster Wert auf der X-Achse des ersten Graphs&lt;br /&gt;
&lt;br /&gt;
Durch Einsetzen einer anderen Zahl statt &#039;1&#039; können auch die Werte der anderen Graphen angezeigt werden. Das Weglassen der Zahl bewirkt, dass der jeweils zutreffende Wert automatisch ermittelt wird. Bedeutet: &amp;lt;code&amp;gt;max&amp;lt;/code&amp;gt; führt dazu, dass der höchste Wert aller angezeigter Graphen verwendet wird.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;data-title=&amp;quot;Min: $data{mindate4}, Max: $data{maxdate4}, Last: $data{currdate4}&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Buttons im Diagramm===&lt;br /&gt;
Es gibt mehrere Buttons, mit denen sich die Anzeige des Diagramms verändern lässt. &amp;lt;code&amp;gt;&amp;lt;-&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;-&amp;gt;&amp;lt;/code&amp;gt; bewegen die Graphen nach links und rechts. &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; zoomen die Anzeige. &amp;lt;code&amp;gt;legend&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;cursor&amp;lt;/code&amp;gt; schalten die zugehörigen Anzeigen ein und aus.&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Einfaches Diagramm===&lt;br /&gt;
Das Beispiel zeigt ein einfaches Diagramm mit 4 unterschiedlich formatierten Graphen, Legende und Momentanwerten am Fadenkreuz-Cursor.&lt;br /&gt;
&lt;br /&gt;
[[File:Chart_tabletUI.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-logdevice=&#039;[&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Predicted&amp;quot;]&#039;&lt;br /&gt;
	data-columnspec=&#039;[&amp;quot;4:Garden.T:15:&amp;quot;,&amp;quot;10:Garden.T:0:delta-h&amp;quot;,&amp;quot;10:Garden.T:0:delta-d&amp;quot;,&amp;quot;4:predicted.*:15:&amp;quot;]&#039;&lt;br /&gt;
	data-style=&#039;[&amp;quot;ftui l0fill&amp;quot;,&amp;quot;ftui l1fill&amp;quot;,&amp;quot;ftui l2&amp;quot;,&amp;quot;ftui l3dot&amp;quot;]&#039;&lt;br /&gt;
	data-ptype=&#039;[&amp;quot;lines&amp;quot;,&amp;quot;histeps&amp;quot;,&amp;quot;histeps&amp;quot;,&amp;quot;cubic&amp;quot;]&#039;&lt;br /&gt;
	data-uaxis=&#039;[&amp;quot;primary&amp;quot;,&amp;quot;secondary&amp;quot;,&amp;quot;secondary&amp;quot;,&amp;quot;primary&amp;quot;]&#039;&lt;br /&gt;
	data-legend=&#039;[&amp;quot;Temperature&amp;quot;,&amp;quot;Rain/hour&amp;quot;,&amp;quot;Rain/day&amp;quot;,&amp;quot;Predicted Temp.&amp;quot;]&#039;&lt;br /&gt;
	data-yunit=&amp;quot;°C&amp;quot;&lt;br /&gt;
	data-ytext=&amp;quot;Temperature&amp;quot;&lt;br /&gt;
	data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-yunit_sec=&amp;quot;mm&amp;quot;&lt;br /&gt;
	data-ytext_sec=&amp;quot;Rain (mm)&amp;quot;&lt;br /&gt;
	data-height=&amp;quot;250&amp;quot;&lt;br /&gt;
	data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
	data-daysago_start=&amp;quot;2013-08-13T00:00:00&amp;quot;&lt;br /&gt;
	data-daysago_end=&amp;quot;2013-08-14T00:00:00&amp;quot;&lt;br /&gt;
	data-cursorgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-scrollgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-xticks=&amp;quot;auto&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===7-Tage-Wettervorhersage mit Proplanta===&lt;br /&gt;
In diesem Beispiel wird gezeigt, wie die Vorhersagewerte von [[PROPLANTA]] in einem Diagramm dargestellt werden können. Da die Werte nicht in einer Datenbank oder einem FileLog vorliegen, müssen sie über [[LogProxy]] verarbeitet werden. Dafür sind einige Vorbereitungen in FHEM nötig.&lt;br /&gt;
&lt;br /&gt;
[[File:FTUI_Widget_Chart-fc-Proplanta.png|941px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; Ein LogProxy-Device muss vorhanden sein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define myLogProxy logProxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; In der Datei &amp;lt;code&amp;gt;99_myUtils.pm&amp;lt;/code&amp;gt; muss folgende Routine hinzugefügt werden, die die Daten bereitstellt:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
# Proplanta LogProxy-Funktion&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
sub logProxy_proplanta2Plot($$$$;$$) {&lt;br /&gt;
	my ($device, $fcValue, $from, $to, $fcHour, $expMode) = @_;&lt;br /&gt;
    my $regex;&lt;br /&gt;
    my @rl;&lt;br /&gt;
    &lt;br /&gt;
	return undef if(!$device);&lt;br /&gt;
    &lt;br /&gt;
    if($fcValue =~ s/_$//) {&lt;br /&gt;
        $regex = &amp;quot;^fc[\\d]+_&amp;quot;.$fcValue.&amp;quot;[\\d]{2}\$&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        $regex = &amp;quot;^fc[\\d]+_&amp;quot;.$fcValue.&amp;quot;\$&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    $fcHour = 12 if(!defined $fcHour);&lt;br /&gt;
    $expMode = &amp;quot;point&amp;quot; if(!defined $expMode);&lt;br /&gt;
&lt;br /&gt;
	if( defined($defs{$device}) ) {&lt;br /&gt;
		if( $defs{$device}{TYPE} eq &amp;quot;PROPLANTA&amp;quot; ) {&lt;br /&gt;
            @rl = sort{&lt;br /&gt;
                my ($an) = ($a =~ m/fc(\d+)_.*/);&lt;br /&gt;
                my ($bn) = ($b =~ m/fc(\d+)_.*/);&lt;br /&gt;
                $an &amp;lt;=&amp;gt; $bn or $a cmp $b;&lt;br /&gt;
                }( grep /${regex}/,keys %{$defs{$device}{READINGS}} );&lt;br /&gt;
			return undef if( !@rl );&lt;br /&gt;
		} else {&lt;br /&gt;
			Log3 undef, 2, &amp;quot;logProxy_proplanta2Plot: $device is not a PROPLANTA device&amp;quot;;&lt;br /&gt;
			return undef;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	my $fromsec = SVG_time_to_sec($from);&lt;br /&gt;
	my $tosec   = SVG_time_to_sec($to);&lt;br /&gt;
	my $sec = $fromsec;&lt;br /&gt;
	my ($h,$fcDay,$mday,$mon,$year);&lt;br /&gt;
	my $timestamp;&lt;br /&gt;
    &lt;br /&gt;
	my $reading;&lt;br /&gt;
	my $value;&lt;br /&gt;
	my $prev_value;&lt;br /&gt;
	my $min = 999999;&lt;br /&gt;
	my $max = -999999;&lt;br /&gt;
	my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	# while not end of plot range reached&lt;br /&gt;
	while(($sec &amp;lt; $tosec) &amp;amp;&amp;amp; @rl) {&lt;br /&gt;
		#remember previous value for start of plot range&lt;br /&gt;
		$prev_value = $value;&lt;br /&gt;
&lt;br /&gt;
		$reading = shift @rl;&lt;br /&gt;
        ($fcDay) = $reading =~ m/^fc(\d+).*/;&lt;br /&gt;
   		$h = ($reading =~ m/.*(\d\d)$/)?$1:$fcHour;&lt;br /&gt;
		$value = ReadingsVal($device,$reading,undef);&lt;br /&gt;
        &lt;br /&gt;
		($mday,$mon,$year) = split(&#039;\.&#039;,ReadingsVal($device,&amp;quot;fc&amp;quot;.$fcDay.&amp;quot;_date&amp;quot;,undef));&lt;br /&gt;
		$timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, $h, 0, 0);&lt;br /&gt;
		$sec = SVG_time_to_sec($timestamp);&lt;br /&gt;
        &lt;br /&gt;
		# skip all values before start of plot range&lt;br /&gt;
		next if( SVG_time_to_sec($timestamp) &amp;lt; $fromsec );&lt;br /&gt;
&lt;br /&gt;
		# add first value at start of plot range&lt;br /&gt;
		if( !$ret &amp;amp;&amp;amp; $prev_value ) {&lt;br /&gt;
		$min = $prev_value if( $prev_value &amp;lt; $min );&lt;br /&gt;
		$max = $prev_value if( $prev_value &amp;gt; $max );&lt;br /&gt;
		$ret .= &amp;quot;$from $prev_value\n&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		# done if after end of plot range&lt;br /&gt;
		last if($sec &amp;gt; $tosec);&lt;br /&gt;
&lt;br /&gt;
		$min = $value if( $value &amp;lt; $min );&lt;br /&gt;
		$max = $value if( $value &amp;gt; $max );&lt;br /&gt;
&lt;br /&gt;
		# add actual controll point&lt;br /&gt;
		$ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#		Log 1, &amp;quot;$timestamp $value -0- $reading&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
    if(($sec &amp;lt; $tosec) &amp;amp;&amp;amp; !@rl &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;)) {&lt;br /&gt;
    	$timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, 23, 59, 59);&lt;br /&gt;
    	if(SVG_time_to_sec($timestamp) &amp;lt; $tosec) {&lt;br /&gt;
        	$ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
			$ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    elsif(($sec &amp;gt; $tosec) &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;)) {&lt;br /&gt;
       	$value = $prev_value + ($value - $prev_value)*(86400 + ($tosec - $sec))/86400;&lt;br /&gt;
       	$ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
	return ($ret,$min,$max,$prev_value);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend können die Daten im Chart-Widget angezeigt werden. Der Device-Name von Proplanta heißt hier im Beispiel &amp;lt;code&amp;gt;AU.xx.WE.Proplanta&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;AU.xx.WE.Proplanta&amp;quot;&lt;br /&gt;
	 data-logdevice=&#039;[&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-columnspec=&#039;[&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22rain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22chOfRain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22cloud_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-style=&#039;[&lt;br /&gt;
	 					&amp;quot;ftui l6fill&amp;quot;,&lt;br /&gt;
	 					&amp;quot;ftui l5fill&amp;quot;,&lt;br /&gt;
	 					&amp;quot;ftui l1fill&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-ptype=&#039;[&lt;br /&gt;
	 					&amp;quot;steps&amp;quot;,&lt;br /&gt;
	 					&amp;quot;quadraticSmooth&amp;quot;,&lt;br /&gt;
	 					&amp;quot;quadraticSmooth&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-uaxis=&#039;[&lt;br /&gt;
	 					&amp;quot;primary&amp;quot;,&lt;br /&gt;
	 					&amp;quot;secondary&amp;quot;,&lt;br /&gt;
	 					&amp;quot;secondary&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-legend=&#039;[&lt;br /&gt;
	 					&amp;quot;Regen&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Regenwahrscheinlichkeit&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Wolken&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-yunit=&amp;quot;mm&amp;quot;&lt;br /&gt;
	 data-ytext=&amp;quot;Regen&amp;quot;&lt;br /&gt;
	 data-yunit_sec=&amp;quot;%&amp;quot;&lt;br /&gt;
	 data-ytext_sec=&amp;quot;Chance auf Regen / Wolken&amp;quot;&lt;br /&gt;
	 data-timeformat=&amp;quot;eeee&amp;quot;&lt;br /&gt;
	 data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-daysago_start = &amp;quot;0&amp;quot;&lt;br /&gt;
	 data-daysago_end = &amp;quot;-7&amp;quot;&lt;br /&gt;
	 data-xticks=&amp;quot;1440&amp;quot;&lt;br /&gt;
	 data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-title=&amp;quot;7-Tage-Wettervorhersage&amp;quot;&lt;br /&gt;
	 data-showlegend=&amp;quot;true&amp;quot;&lt;br /&gt;
	 class=&amp;quot;nobuttons fullsize&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hilfreiche Links und Quellen zu diesem Beispiel:&#039;&#039;&#039;&lt;br /&gt;
*[[LogProxy|LogProxy im FHEM-Wiki]]&lt;br /&gt;
*{{Link2Forum|Topic=22967|Message=246973|LinkText=Stundengenaue Wettervorhersage (#1) im FHEM-Forum}}&lt;br /&gt;
*{{Link2Forum|Topic=22967|Message=334713|LinkText=Stundengenaue Wettervorhersage (#2) im FHEM-Forum}}&lt;br /&gt;
&lt;br /&gt;
===Darstellung der Wetter Icons im Diagramm===&lt;br /&gt;
&lt;br /&gt;
[[File:Wetterchart2.png]]&lt;br /&gt;
&lt;br /&gt;
Wie oben bereits beschrieben, gibt es beim Chart grundsätzlich die Möglichkeit, Icons, welche in Form von URLs in den Logs abgelegt sind oder welche per logProxy generiert werden, darzustellen. Die Icons werden auf genau dem gleichen Weg von FHEM gelesen, wie alle anderen Datenpunkte. Im Folgenden wird ein Beispiel gezeigt, mit dem die im Proplanta Modul als Readings abgelegten Icons per logProxy Funktion gelesen und in ein Chart eingebaut werden könnnen.&lt;br /&gt;
Da es beim Proplanta Modul für die ersten 7 Tage nicht das Reading &amp;lt;code&amp;gt;fc#_weatherIcon&amp;lt;/code&amp;gt; gibt, sondern mehrere Readings für unterschiedliche Tageszeiten wogegen für die zweiten 7 Tage ausschließlich das Reading &amp;lt;code&amp;gt;fc#_weatherIcon&amp;lt;/code&amp;gt; vorhanden ist, sollte per &amp;lt;code&amp;gt;attr device userReading&amp;lt;/code&amp;gt; mit folgendem Eintrag dafür gesorgt werden, dass für alle Tage ein Reading &amp;lt;code&amp;gt;fc#_weatherIcon&amp;lt;/code&amp;gt; vorhanden ist (alternativ könnten auch 2 Graphen gezeichnet werden, wobei der erste dann nur die ersten 7 Tage enthält und der zweite die letzen 7 Tage, will man nur die ersten 7 Tage darstellen braucht man das userReading nicht unbedingt).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
fc0_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc0_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc1_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc1_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc2_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc2_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc3_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc3_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc4_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc4_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc5_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc5_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc6_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc6_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Um die Icons darzustellen muss ein zusätzlicher Graph definiert werden. Dieser nutzt neben der Columnspec, die die URLs abruft den Parameter &amp;lt;code&amp;gt;data-ptype=&amp;quot;icons:#&amp;quot;&amp;lt;/code&amp;gt; (# ist eine Zahl und steht für die Nummer, beginnend bei 0 des Graphen, welcher für die y-Position der Icons verwendet werden soll) und den Stil &amp;lt;code&amp;gt;sym&amp;lt;/code&amp;gt;. Der Wert für die Symbolgröße sollte z.B. durch eine zusätzliche Definition im File fhem-tablet-ui-user.css in der Form:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* icon lines */&lt;br /&gt;
.ftui.l99icon	{ stroke:#DDA400; stroke-width:48px; fill:none; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Im folgenden ein Beispiel, welches eine Linie für die Maximale Tagestemperatur zeichnet und auf dieser Linie die Wetter Icons darstellt.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;AU.xx.WE.Proplanta&amp;quot;&lt;br /&gt;
	 data-logdevice=&#039;[&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-columnspec=&#039;[&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22weatherIcon\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22tempMax\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-style=&#039;[&lt;br /&gt;
	 					&amp;quot;ftui l99icon&amp;quot;,&lt;br /&gt;
	 					&amp;quot;ftui l1fill&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-ptype=&#039;[&lt;br /&gt;
	 					&amp;quot;icons:1&amp;quot;,&lt;br /&gt;
	 					&amp;quot;quadraticSmooth&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-uaxis=&#039;[&lt;br /&gt;
	 					&amp;quot;primary&amp;quot;,&lt;br /&gt;
	 					&amp;quot;primary&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-legend=&#039;[&lt;br /&gt;
	 					&amp;quot;Wetterbedingung&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Max. Temperature&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-yunit=&amp;quot;°C&amp;quot;&lt;br /&gt;
	 data-ytext=&amp;quot;Temperature (°C)&amp;quot;&lt;br /&gt;
	 data-timeformat=&amp;quot;ee\LF\dd.MM&amp;quot;&lt;br /&gt;
	 data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-daysago_start=&amp;quot;-1w&amp;quot;&lt;br /&gt;
	 data-y_margin=&amp;quot;20&amp;quot;&lt;br /&gt;
	 data-daysago_end=&amp;quot;-3w&amp;quot;&lt;br /&gt;
	 data-xticks=&amp;quot;1440&amp;quot;&lt;br /&gt;
	 data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-title=&amp;quot;14-Tage-Wettervorhersage&amp;quot;&lt;br /&gt;
	 data-showlegend=&amp;quot;true&amp;quot;&lt;br /&gt;
	 class=&amp;quot;nobuttons fullsize&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fensterstatus offen/geschlossen===&lt;br /&gt;
Dieses Beispiel zeigt, wie ein Fensterkontakt, dessen Reading die Werte &amp;lt;code&amp;gt;closed&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt; einnimmt, als Graph gezeichnet werden kann. Technisch gesehen werden hier die Werte &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; gezeichnet, indem über das Attribut &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; dem Zustand &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt; der Wert &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; und allen anderen Zuständen der Wert &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; zugeordnet wird. Über das Attribut &#039;&#039;&#039;data-yticks&#039;&#039;&#039; wird die Beschriftung an der Y-Achse (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;) gegen einen frei definierbaren Text ausgetauscht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-device=&amp;quot;wz_fensterstatus&amp;quot;&lt;br /&gt;
	data-logdevice=&#039;[&amp;quot;myDbLog&amp;quot;]&#039;&lt;br /&gt;
	data-logfile=&#039;[&amp;quot;HISTORY&amp;quot;]&#039;&lt;br /&gt;
	data-columnspec=&#039;[&amp;quot;wz_fensterstatus:state:0::$val=($val=~\\x22open\\x22?1:0)&amp;quot;]&#039;&lt;br /&gt;
	data-style=&#039;[&amp;quot;ftui l4fill&amp;quot;]&#039;&lt;br /&gt;
	data-ptype=&#039;[&amp;quot;steps&amp;quot;]&#039;&lt;br /&gt;
	data-height=&amp;quot;290&amp;quot;&lt;br /&gt;
	data-yticks=&#039;[[0,&amp;quot;geschlossen&amp;quot;],[1,&amp;quot;offen&amp;quot;]]&#039;&lt;br /&gt;
	data-minvalue=&amp;quot;0&amp;quot;&lt;br /&gt;
	data-maxvalue=&amp;quot;1.1&amp;quot;&lt;br /&gt;
	data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
	data-daysago_start=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-daysago_end=&amp;quot;-1&amp;quot;&lt;br /&gt;
	data-cursorgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-scrollgroup=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
{{Link2Forum|Topic= 48450 |Message=401006|LinkText=Thread im FHEM-Forum}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI]]&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Label&amp;diff=20648</id>
		<title>FTUI Widget Label</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Label&amp;diff=20648"/>
		<updated>2017-03-08T19:41:23Z</updated>

		<summary type="html">&lt;p&gt;Benheim: Beispiel für data-hide hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Label Widget]] ist ein Widget für [[FHEM Tablet UI]], mit dem ein Reading eines FHEM-Devices in Textform angezeigt werden kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:FTUI_Widget_Label_01.png&lt;br /&gt;
File:FTUI_Widget_Label_02.png&lt;br /&gt;
File:FTUI_Widget_Label_03.png&lt;br /&gt;
File:FTUI_Widget_Label_04.png&lt;br /&gt;
File:FTUI_Widget_Label_05.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Name des Readings, dessen Wert angezeigt werden soll||||data-get=&amp;quot;measured-temp&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-part&#039;&#039;&#039;||[[Regulärer Ausdruck|RegEx]] oder Nummer des Wortes, nach welcher der angezeigte Text gefiltert werden soll||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-fix&#039;&#039;&#039;||Angegebene Anzahl an Dezimalstellen einhalten||(-1 -&amp;gt; nicht numerisch)||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-color&#039;&#039;&#039;||Fester Wert oder Reading eines Devices für die Label-Farbe||||data-color=&amp;quot;red&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-colors&#039;&#039;&#039;||Ein Array von Farben. Welche Farbe für das Label verwendet wird, wird durch das &#039;&#039;data-limits&#039;&#039;-Attribut bestimmt||||data-colors=&#039;[&amp;quot;red&amp;quot;,&amp;quot;yellow&amp;quot;,&amp;quot;green&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-classes&#039;&#039;&#039;||Ein Array von CSS-Klassen. Welche Klasse verwendet wird, hängt vom zutreffenden Wert im &#039;&#039;data-limits&#039;&#039;-Attribut ab||||data-classes=&#039;[&amp;quot;bg-red&amp;quot;,&amp;quot;bg-yellow&amp;quot;,&amp;quot;bg-green&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-limits&#039;&#039;&#039;||Ein Array numerischer oder RegEx Werte für den Vergleich mit dem aktuellen Wert||||data-limits=&#039;[1,15,30]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-limits-get&#039;&#039;&#039;||Name des Readings, von dem die Werte für den Vergleich mit dem data-limits-Array geholt werden||data-get||data-limit-get=&amp;quot;Dummy01:Limits&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-limits-part&#039;&#039;&#039;||Filtern nach Wert, Position eines Wertes in einer Leerzeichen-getrennte Liste oder RegEx|&#039;-1&#039; -&amp;gt; alle||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-unit&#039;&#039;&#039;||Einheit nach Zahl hinzufügen||||data-unit=&amp;quot;%B0C%0A&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-substitution&#039;&#039;&#039;||Verschiedene Funktionen, um den empfangenen Wert durch etwas anderes zu ersetzen||||siehe [[#Hinweise]]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-pre-text&#039;&#039;&#039;||Text, der vor dem empfangenen Wert stehen soll||||data-pre-text=&amp;quot;Es ist &amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-post-text&#039;&#039;&#039;||Text, der nach dem empfangenen Wert sehen soll||||data-post-text=&amp;quot; Grad warm&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-hide&#039;&#039;&#039;||Name des Readings, nach dessen Wert das Widget angezeigt werden soll oder nicht||STATE||data-hide=&amp;quot;power-on&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-hide-on&#039;&#039;&#039;||Wert, bei dem das Widget versteckt wird||true,1,on||data-hide-on=&amp;quot;on&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-hide-off&#039;&#039;&#039;||Wert, bei dem das Widget angezeigt wird||!on||data-hide-off=&amp;quot;!on&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-hideparents&#039;&#039;&#039;||jQuery-Selector, um auch die Eltern-Elemente zu verstecken||||data-hideparents=&amp;quot;#Name&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-refresh&#039;&#039;&#039;||Anzahl Sekunden, nach denen das Widget aktualisiert werden soll||0 -&amp;gt; kein Auto-Refresh||data-refresh=&amp;quot;10&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==CSS Klassen==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|small}}{{FTUI Klasse|large}}{{FTUI Klasse|big}}{{FTUI Klasse|bigger}}{{FTUI Klasse|thin}}{{FTUI Klasse|red}}{{FTUI Klasse|green}}{{FTUI Klasse|blue}}{{FTUI Klasse|orange}}{{FTUI Klasse|darker}}{{FTUI Klasse|timestamp}}{{FTUI Klasse|w1x}}{{FTUI Klasse|w2x}}{{FTUI Klasse|w3x}}{{FTUI Klasse|circleborder}}{{FTUI Klasse|squareborder}}{{FTUI Klasse|bg-limit}}{{FTUI Klasse|icon square}}{{FTUI Klasse|icon round}}{{FTUI Klasse|truncate}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
* Es kann nur entweder &#039;&#039;data-color&#039;&#039; verwendet werden, oder &#039;&#039;data-colors&#039;&#039; + &#039;&#039;data-limits&#039;&#039;, nicht beides gleichzeitig&lt;br /&gt;
* Mit der Klasse &#039;&#039;bg-limit&#039;&#039; wird die Hintergrund- statt der Vordergrundfarbe abhängig von den Werten in &#039;&#039;data-limits&#039;&#039; geändert&lt;br /&gt;
* Die Klassen &#039;&#039;icon square&#039;&#039; und &#039;&#039;icon round&#039;&#039; formatieren das Label mit einer fixen Breite und Höhe im Icon-Stil&lt;br /&gt;
* Wird die Klasse &#039;&#039;timestamp&#039;&#039; zusammen mit &#039;&#039;data-substitution=&amp;quot;toDate().ago()&amp;quot;&#039;&#039; verwendet, sollte eine automatische Aktualisierung (&#039;&#039;data-refresh=&amp;quot;xx&amp;quot;&#039;&#039;) eingestellt werden für den Fall, dass die Aktualisierungsrate des Readings zu gering ist.&lt;br /&gt;
* Ein benutzerdefiniertes Layout kann durch Hinzufügen der folgenden Klassen in die fhem-tablet-ui-user.css erreicht werden:&lt;br /&gt;
** .label-precomma&lt;br /&gt;
** .label-comma&lt;br /&gt;
** .label-aftercomma&lt;br /&gt;
** .label-unit&lt;br /&gt;
** z.B.: &amp;lt;code&amp;gt;.label-aftercomma{ font-size:40%; left: 4px; top: -25px; position: relative; }&amp;lt;/code&amp;gt;&lt;br /&gt;
* Bis zur Version 2.6.2 wurde data-unit mit 50% Schriftgröße auf der Baseline des Wertes positioniert, danach wird die Unit auf superscript angehoben. Dies kann mit einem Eintrag in fhem-tablet-ui-user.css wieder überschrieben werden.&lt;br /&gt;
** &amp;lt;Code&amp;gt;.label-unit{ font-size: 50%; vertical-align: baseline; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Funktionsweise(n) von &#039;&#039;data-substitution&#039;&#039;:&lt;br /&gt;
* Ein Array an Ersetzungen: &amp;lt;code&amp;gt;data-substitution=&#039;[&amp;quot;on&amp;quot;,&amp;quot;Lampe ist an&amp;quot;,&amp;quot;off&amp;quot;,&amp;quot;Lampe ist aus&amp;quot;]&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
* [[Regulärer Ausdruck|RegEx]], die auf dem Wert angewandt werden soll. Standard RegEx-Schreibweise wird erwartet (s/regex/subst/modifier): &amp;lt;code&amp;gt;data-substitution=&amp;quot;s/no soundplayer active//g&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;data-substitution=&amp;quot;weekdayshort&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* Mit JavaScript- und RegEx-Funktionen den Wert umwandeln in:&lt;br /&gt;
** Tag:Monat: &amp;lt;code&amp;gt;data-substitution=&amp;quot;toDate().ddmm()&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** Stunden:Minuten: &amp;lt;code&amp;gt;data-substitution=&amp;quot;toDate().hhmm()&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** Stunden:Minuten:Sekunden: &amp;lt;code&amp;gt;data-substitution=&amp;quot;toDate().hhmmss()&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** den Namen des Wochentages: &amp;lt;code&amp;gt;data-substitution=&amp;quot;toDate().eeee()&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** einen Zeitraum (langes Format): &amp;lt;code&amp;gt;data-substitution=&amp;quot;toDate().ago()&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** einen Zeitraum (kurzes Format):&amp;lt;code&amp;gt;data-substitution=&amp;quot;toDate().ago(&#039;hh:mm:ss&#039;)&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** einen Zeitraum (Minuten ohne führende Nullen):&amp;lt;code&amp;gt;data-substitution=&amp;quot;toDate().ago(&#039;m&#039;)&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** 20:15 statt 20:15:00: &amp;lt;code&amp;gt;data-substitution=&amp;quot;s/(:00)$//g&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Einfaches Auslesen des STATE eines Devices===&lt;br /&gt;
Ein ganz einfaches Beispiel, welches den &#039;&#039;STATE&#039;&#039; eines FHEM-Devices (in diesem Fall ein Heizkörperthermostat) ausliest und anzeigt.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;HM_367B39_Climate&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[File:FTUI_Widget_Label_01.png]]&lt;br /&gt;
&lt;br /&gt;
===Anzeige bestimmter Werte eines Devices===&lt;br /&gt;
In diesem Beispiel werden Temperatur und Luftfeuchtigkeit eines Heizkörperthermostates ausgelesen und untereinander angezeigt.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;Temperatur&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;HM_367B21_Climate&amp;quot; &lt;br /&gt;
     data-get=&amp;quot;measured-temp&amp;quot;&lt;br /&gt;
     data-unit=&amp;quot;&amp;amp;deg;C&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;Luftfeuchte&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;HM_367B21_Climate&amp;quot; &lt;br /&gt;
     data-get=&amp;quot;humidity&amp;quot;&lt;br /&gt;
     data-unit=&amp;quot;%&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[File:FTUI_Widget_Label_02.png]]&lt;br /&gt;
&lt;br /&gt;
===Textfarbe bei bestimmten Grenzwerten ändern===&lt;br /&gt;
Mit dem Label-Widget kann die Textfarbe je nach bestimmten Grenzwerten geändert werden. In diesem Beispiel ist die Farbe blau, sobald die Temperatur gleich oder kleiner 18° ist, grün ab 20° und rot ab 23°.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot; &lt;br /&gt;
     data-device=&amp;quot;dDummy&amp;quot;&lt;br /&gt;
     data-limits=&#039;[18,20,23]&#039; &lt;br /&gt;
     data-colors=&#039;[&amp;quot;blue&amp;quot;,&amp;quot;green&amp;quot;,&amp;quot;#FF0000&amp;quot;]&#039; &lt;br /&gt;
     data-unit=&amp;quot;&amp;amp;deg;C&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[File:FTUI_Widget_Label_03.png]]&lt;br /&gt;
[[Kategorie:FHEM Tablet UI]]&lt;br /&gt;
&lt;br /&gt;
===Zwei Labels in einer Textzeile===&lt;br /&gt;
Mit der Klasse &#039;&#039;inline&#039;&#039; (kein Zeilenumbruch) können mehrere Label-Widgets in der selben Textzeile platziert werden.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;dDummy&amp;quot; class=&amp;quot;inline&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; bis&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;dDummy2&amp;quot; class=&amp;quot;inline&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[File:FTUI_Widget_Label_04.png]]&lt;br /&gt;
&lt;br /&gt;
===Kombination von Label- mit anderen Widgets===&lt;br /&gt;
Das Label-Widget kann sehr gut verwendet werden, um einen Beschreibungstext für andere Widgets bereitzustellen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;switch&amp;quot; data-device=&amp;quot;EnO_0193F070&amp;quot; data-icon=&amp;quot;mi-power_settings_new&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot;&amp;gt;Nexus7&amp;lt;/div&amp;gt;&lt;br /&gt;
(&amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;Nexus7&amp;quot; data-get=&amp;quot;powerLevel&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;%)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[File:FTUI_Widget_Label_05.png]]&lt;br /&gt;
&lt;br /&gt;
===Statisches Label mit Symbol===&lt;br /&gt;
Möchte man einen statischen Text darstellen, muss hierfür nicht unbedingt das Label-Widget verwendet werden. Das nachfolgende Beispiel zeigt genau dies und fügt links noch ein Symbol ein. Der Teil für das Symbol kann auch für richtige Labels verwendet werden.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;i class=&amp;quot;fa fa-cloud fa-2x inline&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;div class=&amp;quot;inline big&amp;quot;&amp;gt;WETTER&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[File:FTUI_Widget_label_symbol.png]]&lt;br /&gt;
&lt;br /&gt;
===Label- und Symbol-Widget kombiniert===&lt;br /&gt;
Dieses Beispiel zeigt, wie man ein Label- innerhalb eines [[FTUI Widget Symbol|Symbol]]-Widgets anzeigen kann. Dazu wird einfach das Label-Widget im &amp;amp;lt;DIV&amp;amp;gt;-Container des Symbols platziert.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
    &amp;lt;div data-type=&amp;quot;symbol&amp;quot;&lt;br /&gt;
         data-device=&amp;quot;dDummy3&amp;quot;&lt;br /&gt;
         data-icon=&amp;quot;none&amp;quot;&lt;br /&gt;
         data-color=&#039;none&#039;&lt;br /&gt;
         data-background-icon=&amp;quot;fa-circle&amp;quot;&lt;br /&gt;
         data-background-colors=&#039;[&amp;quot;red&amp;quot;,&amp;quot;blue&amp;quot;]&#039;&lt;br /&gt;
         data-limits=&#039;[&amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;]&#039;&amp;gt;&lt;br /&gt;
         &amp;lt;div data-type=&amp;quot;label&amp;quot;&lt;br /&gt;
              data-device=&amp;quot;dDummy3&amp;quot;&lt;br /&gt;
              data-color=&amp;quot;white&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[File:FTUI_Widget_Label_06.png]]&lt;br /&gt;
&lt;br /&gt;
===Unterdrücken der Anzeige===&lt;br /&gt;
Die Argumente für &#039;&#039;data-hide-on&#039;&#039; und &#039;&#039;data-hide-off&#039;&#039; sind reguläre Ausdrücke. Um die Anzeige zu aktivieren, wenn eine Bedingung nicht zutrifft, ist für &#039;&#039;data-hide-off&#039;&#039; ein Schema &amp;lt;code&amp;gt;(?!.*MUSTER).*&amp;lt;/code&amp;gt; zu verwenden, resp. &amp;lt;code&amp;gt;(?!.*MUSTER1|MUSTER2).*&amp;lt;/code&amp;gt;, wenn mehrere Bedinungen zutreffen können; für &#039;&#039;data-hide-on&#039;&#039; entsprechend &amp;lt;code&amp;gt;MUSTER&amp;lt;/code&amp;gt; resp. &amp;lt;code&amp;gt;MUSTER1|MUSTER2&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Im folgenden Beispiel wird ein Eintrag eines [[CALVIEW|CALVIEW-Objekts]] &#039;&#039;Abfalldaten&#039;&#039; nur dann angezeigt, wenn er heute oder morgen aktuell ist, ausgeblendet wird die ganze Gruppe von Widgets über die ID des Elternelements:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;Abfall1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;inline&amp;quot; &lt;br /&gt;
             data-type=&amp;quot;label&amp;quot; &lt;br /&gt;
             data-device=&amp;quot;Abfalldaten&amp;quot; &lt;br /&gt;
             data-get=&amp;quot;t_001_bdate&amp;quot; &lt;br /&gt;
             data-hide=&amp;quot;t_001_daysleftLong&amp;quot; &lt;br /&gt;
             data-hide-on=&amp;quot;(?!.*heute|morgen).*&amp;quot; &lt;br /&gt;
             data-hide-off=&amp;quot;heute|morgen&amp;quot; &lt;br /&gt;
             data-hideparents=&amp;quot;#Abfall1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;inline&amp;quot; &lt;br /&gt;
             data-type=&amp;quot;label&amp;quot; &lt;br /&gt;
             data-device=&amp;quot;Abfalldaten&amp;quot; &lt;br /&gt;
             data-get=&amp;quot;t_001_summary&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-WDS100-C6-O_Funk-Kombi-Sensor_OC3&amp;diff=15368</id>
		<title>HM-WDS100-C6-O Funk-Kombi-Sensor OC3</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-WDS100-C6-O_Funk-Kombi-Sensor_OC3&amp;diff=15368"/>
		<updated>2016-05-18T18:16:40Z</updated>

		<summary type="html">&lt;p&gt;Benheim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Infobox muss noch ergänzt werden. Hilfe unter [[Vorlage:Infobox Hardware]] --&amp;gt;&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=HM-WDS100-C6-O.jpg&lt;br /&gt;
|Bildbeschreibung=Montierter Funk-Kombi-Sensor OC3&lt;br /&gt;
|HWProtocol=[[HomeMatic]]&lt;br /&gt;
|HWType=[[HomeMatic Type THSensor|THSensor]]&lt;br /&gt;
|HWCategory=[[:Kategorie:Wetterstationen|Wetterstationen]] [[:Kategorie:Feuchtesensoren|Feuchtesensoren]] [[:Kategorie:Temperatursensoren|Temperatursensoren]] [[:Kategorie:Regensensor|Regensensor]] [[:Kategorie:Lichtsensoren|Lichtsensoren]]&lt;br /&gt;
|HWComm=868,35 MHz&lt;br /&gt;
|HWChannels=&lt;br /&gt;
|HWVoltage=4,5 V&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=3x LR6/Mignon/AA&lt;br /&gt;
|HWSize=700 x 400 x 150 mm&lt;br /&gt;
|HWDeviceFHEM=[[CUL_HM]]&lt;br /&gt;
|HWManufacturer=ELV / eQ-3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;&#039;Funk-Kombi-Sensor OC3 (HM-WDS100-C6-O)&#039;&#039;&#039; ist eine [[HomeMatic]] Funk-Wetterstation für den Außeneinsatz zur  Messung von Temperatur, relativer Luftfeuchte, Windrichtung, Windstärke, Regenmenge und Helligkeit.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
* Batteriebetrieb (3 x Mignon/LR6/AA)&lt;br /&gt;
* Funkfrequenz 868,3 MHz&lt;br /&gt;
* Temperaturmessbereich -29,9°C bis 79,9°C (± 0,8°C)&lt;br /&gt;
* Relative Luftfeuchte 1 % bis 99 % (±5 %)&lt;br /&gt;
* Windgeschwindigkeit 1 km/h bis 199,9 km/h&lt;br /&gt;
* Windrichtungsmesser 0° bis 355° (±5°)&lt;br /&gt;
* Schwankung der Windrichtung 0°/22,5°/45°/67,5°&lt;br /&gt;
* Regenmengenmesser 0 mm bis 999 mm&lt;br /&gt;
* Regen-Soforterkennung&lt;br /&gt;
* Sturm-Soforterkennung&lt;br /&gt;
* Helligkeit gemessen über Photodiode mit einheitenlosen Wert 1-255&lt;br /&gt;
* Sonnenschein-Dauer gezählt als Minuten oberhalb der Helligkeitsschwelle von 30 (Default)&lt;br /&gt;
* Datenübermittlung alle 120 bis 180 Sekunden&lt;br /&gt;
* Übermittlung des Batteriestatus&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit Fhem ==&lt;br /&gt;
Das Pairing sollte wie unter [[HomeMatic Devices pairen]] beschrieben durchgeführt werden. Hierfür muss die von außen erreichbare Anlerntaste betätigt werden.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration (fhem.cfg) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;define Wetterstation CUL_HM 338893&lt;br /&gt;
attr Wetterstation IODev CUL_HM&lt;br /&gt;
attr Wetterstation autoReadReg 5_readMissing&lt;br /&gt;
attr Wetterstation expert 2_full&lt;br /&gt;
attr Wetterstation firmware 1.4&lt;br /&gt;
attr Wetterstation model HM-WDS100-C6-O&lt;br /&gt;
attr Wetterstation serialNr LEQ1442799&lt;br /&gt;
attr Wetterstation stateFormat Temperatur: temperature °C, Feuchtigkeit: humidity %, Helligkeit: brightness, Regen: rain mm/qm, Wind: windSpeed km/h,  Richtung: windDirection&lt;br /&gt;
attr Wetterstation subType THSensor&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Event-Monitor ===&lt;br /&gt;
&lt;br /&gt;
 Wetterstation T: 17.5 H: 82 W: 0 R: 553.715 IR: 0 WD: 10 WDR: 67.5 S: 106 B: 16&lt;br /&gt;
 Wetterstation temperature: 17.5&lt;br /&gt;
 Wetterstation humidity: 82&lt;br /&gt;
 Wetterstation windSpeed: 0&lt;br /&gt;
 Wetterstation windDirection: 10&lt;br /&gt;
 Wetterstation windDirRange: 67.5&lt;br /&gt;
 Wetterstation rain: 553.715&lt;br /&gt;
 Wetterstation isRaining: 0&lt;br /&gt;
 Wetterstation sunshine: 106&lt;br /&gt;
&lt;br /&gt;
=== Parameterliste ===&lt;br /&gt;
 &#039;&#039;&#039;list:      register | range              | peer     | description&#039;&#039;&#039;&lt;br /&gt;
 0: intKeyVisib      |   literal          |          | visibility of internal channel options:visib,invisib&lt;br /&gt;
 0: pairCentral      |   0 to 16777215    |          | pairing to central&lt;br /&gt;
 1: stormLowThresh   |   0 to 255         |          | Storm lower threshold&lt;br /&gt;
 1: stormUpThresh    |   0 to 255         |          | Storm upper threshold&lt;br /&gt;
&lt;br /&gt;
=== Log-Einträge ===&lt;br /&gt;
&amp;lt;pre&amp;gt;2015-08-13_12:47:18 Wetterstation T: 28.6 H: 57 W: 7 R: 145.14 IR: 0 WD: 80 WDR: 67.5 S: 8 B: 140&lt;br /&gt;
2015-08-13_12:47:18 Wetterstation brightness: 140&lt;br /&gt;
2015-08-13_12:47:18 Wetterstation humidity: 57&lt;br /&gt;
2015-08-13_12:47:18 Wetterstation isRaining: 0&lt;br /&gt;
2015-08-13_12:47:18 Wetterstation rain: 145.14&lt;br /&gt;
2015-08-13_12:47:18 Wetterstation sunshine: 8&lt;br /&gt;
2015-08-13_12:47:18 Wetterstation temperature: 28.6&lt;br /&gt;
2015-08-13_12:47:18 Wetterstation windDirRange: 67.5&lt;br /&gt;
2015-08-13_12:47:18 Wetterstation windDirection: 80&lt;br /&gt;
2015-08-13_12:47:18 Wetterstation windSpeed: 70&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Anwendungsbeispiele ===&lt;br /&gt;
==== Anbindung an OpenWeathermap ====&lt;br /&gt;
Das hier verwendete &amp;quot;inoffizielle&amp;quot; 98_openweathermap.pm-Modul muss manuell aus dem [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/ Contrib]-Verzeichnis des Fhem-SVN heruntergeladen und in das Modulverzeichnis der eigenen Fhem-Installation kopiert werden.&lt;br /&gt;
&lt;br /&gt;
Zunächst eine Funktion zur Berechnung der Differenz der gemessenen Regenmengen in 99_myUtils anlegen (abgeleitet von einer Funktion zur [[Gleitende Mittelwerte berechnen und loggen|Mittelwertberechnung]]):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;# myDiff&lt;br /&gt;
# berechnet die Differenz aus der ersten Zeile eines LogFiles und der letzten Zeile eines LogFiles über einen Zeitraum zwischen einem Zeitpunkt in der Vergangenheit und dem Zeitpunkt des Aufrufs&lt;br /&gt;
sub&lt;br /&gt;
myDiff($$$)&lt;br /&gt;
{&lt;br /&gt;
 my ($offset,$logfile,$cspec) = @_;&lt;br /&gt;
 my $period_s = strftime &amp;quot;%Y-%m-%d\x5f%H:%M:%S&amp;quot;, localtime(time-$offset);&lt;br /&gt;
 my $period_e = strftime &amp;quot;%Y-%m-%d\x5f%H:%M:%S&amp;quot;, localtime;&lt;br /&gt;
 my $oll = $attr{global}{verbose};&lt;br /&gt;
 $attr{global}{verbose} = 0; &lt;br /&gt;
 my @logdata = split(&amp;quot;\n&amp;quot;, fhem(&amp;quot;get $logfile - - $period_s $period_e $cspec&amp;quot;));&lt;br /&gt;
 $attr{global}{verbose} = $oll; &lt;br /&gt;
 my ($cnt, $first, $last, $diff) = (0)x4;&lt;br /&gt;
 foreach (@logdata){&lt;br /&gt;
  my @line = split(&amp;quot; &amp;quot;, $_);&lt;br /&gt;
  if(defined $line[1] &amp;amp;&amp;amp; &amp;quot;$line[1]&amp;quot; ne &amp;quot;&amp;quot;){&lt;br /&gt;
   $cnt += 1;&lt;br /&gt;
    if ($cnt == 1) {&lt;br /&gt;
     $first = $line[1];&lt;br /&gt;
    }&lt;br /&gt;
   $last = $line[1];&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
$diff = $last - $first;&lt;br /&gt;
Log 4, (&amp;quot;myDiff: File: $logfile, Field: $cspec, Period: $period_s bis $period_e, First: $first, Last: $last, Diff: $diff&amp;quot;);&lt;br /&gt;
return $diff;&lt;br /&gt;
} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach in der fhem.cfg folgendes hinzufügen (inklusive Umrechnung der Windmesswerte von km/h in m/s):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;define RegenmengeOffset dummy&lt;br /&gt;
define RegenmengeTag dummy&lt;br /&gt;
define RegenmengeLast1Hours dummy&lt;br /&gt;
define RegenmengeLast3Hours dummy&lt;br /&gt;
define RegenmengeLast24Hours dummy&lt;br /&gt;
define WindSpeed_mps dummy&lt;br /&gt;
&lt;br /&gt;
define RegenmengeNotify notify OC3:rain.* {\&lt;br /&gt;
  my $menge = (ReadingsVal(&amp;quot;OC3&amp;quot;, &amp;quot;rain&amp;quot;, 0) - ReadingsVal(&amp;quot;RegenmengeOffset&amp;quot;, &amp;quot;state&amp;quot;, 0));;\&lt;br /&gt;
  my $last1hours = myDiff(&amp;quot;3600&amp;quot;, &amp;quot;FileLog_OC3&amp;quot;, &amp;quot;10:::&amp;quot;);;\&lt;br /&gt;
  my $last3hours = myDiff(&amp;quot;10800&amp;quot;, &amp;quot;FileLog_OC3&amp;quot;, &amp;quot;10:::&amp;quot;);;\&lt;br /&gt;
  my $last24hours = myDiff(&amp;quot;86400&amp;quot;, &amp;quot;FileLog_OC3&amp;quot;, &amp;quot;10:::&amp;quot;);;\&lt;br /&gt;
  fhem(&amp;quot;set RegenmengeTag $menge&amp;quot;);;\&lt;br /&gt;
  fhem(&amp;quot;set RegenmengeLast1Hours $last1hours&amp;quot;);;\&lt;br /&gt;
  fhem(&amp;quot;set RegenmengeLast3Hours $last3hours&amp;quot;);;\&lt;br /&gt;
  fhem(&amp;quot;set RegenmengeLast24Hours $last24hours&amp;quot;);;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
define RegenmengeOffsetReset at *00:00:00 {\&lt;br /&gt;
  my $offset = ReadingsVal(&amp;quot;OC3&amp;quot;, &amp;quot;rain&amp;quot;, 0);;\&lt;br /&gt;
  fhem(&amp;quot;set RegenmengeOffset $offset&amp;quot;);; \&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
define WindSpeedNotify notify OC3:windSpeed.* {\&lt;br /&gt;
  my $windspeed = (ReadingsVal(&amp;quot;OC3&amp;quot;, &amp;quot;windSpeed&amp;quot;, 0) / 3.6);;\&lt;br /&gt;
  $windspeed = int(100 * $windspeed + 0.5) / 100;;\&lt;br /&gt;
  fhem(&amp;quot;set WindSpeed_mps $windspeed&amp;quot;) \&lt;br /&gt;
} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann können die Werte mit dem 98_openweathermap.pm - Modul aus [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/ Contrib] übertragen werden:&lt;br /&gt;
 &amp;lt;pre&amp;gt;...&lt;br /&gt;
attr owo owoSrc03 rain_today:RegenmengeTag:state&lt;br /&gt;
attr owo owoSrc04 wind_speed:WindSpeed_mps:state&lt;br /&gt;
attr owo owoSrc05 rain_1h:RegenmengeLast1Hours:state&lt;br /&gt;
attr owo owoSrc06 rain_24h:RegenmengeLast24Hours:state&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anbindung an wetter.com ====&lt;br /&gt;
&lt;br /&gt;
Die Anbindung an wetter.com benötigt zusätzlich zu den bereits vorhandenen Readings des Funk-Kombi-Sensors OC3 folgende Readings:&lt;br /&gt;
* RegenmengeLast1Hours&lt;br /&gt;
* WindSpeed_mps&lt;br /&gt;
&lt;br /&gt;
Diese Readings können wie unter [[HM-WDS100-C6-O_Funk-Kombi-Sensor_OC3#Anbindung an OpenWeathermap|Anbindung an OpenWeathermap]] beschrieben erzeugt werden.&lt;br /&gt;
&lt;br /&gt;
Dann können die Werte mit dem 55_weco.pm - Modul übertragen werden:&lt;br /&gt;
 &amp;lt;pre&amp;gt;...&lt;br /&gt;
attr Wetter_com wecopa RegenmengeLast1Hours:state&lt;br /&gt;
attr Wetter_com wecows WindSpeed_mps:state&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sturmerkennung ====&lt;br /&gt;
Die Sensor-interne Sturmerkennung hat den Vorteil, dass bei Über-/Unterschreiten von konfigurierbaren Schwellwerten sofort ein Event generiert wird bzw. ein gepeerter Aktor sofort getriggert wird und somit eine Sturmerkennung nicht nachgelagert über das Reading &amp;quot;windSpeed&amp;quot; erfolgen muss (der Sensor sendet seine Werte sonst nur ca. alle 2-3 Minuten).&lt;br /&gt;
&lt;br /&gt;
Folgende Schritte zur Nutzung und Anpassung der internen Sturmerkennung sind durchzuführen:&lt;br /&gt;
&lt;br /&gt;
1. Peeren des Kanal 1 des Sensors (WGEG_SENW) mit einem Aktor (VCCU_Chan03, in diesem Beispiel also der virtuelle Kanal 3 einer VCCU):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;set WGEG_SENW peerChan 1 VCCU_Chan03 single set&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit werden neben der Peerkonfiguration auch folgende Readings im Sensor-Device erzeugt&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;R-VCCU_Chan03-stormLowThresh 5&lt;br /&gt;
R-VCCU_Chan03-stormUpThresh 25&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Diese Schwellwerte können nun mit z.B.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;set WGEG_SENW regSet stormUpThresh 15 VCCU_Chan03&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
angepaßt werden (s. Commandref zu [http://fhem.de/commandref.html#CUL_HMregSet regSet]).&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Der Zähler sunshine läuft nach gut 4 Stunden über, an Sonnentagen läuft dieser Zähler u.U. sogar mehr als einmal über.&lt;br /&gt;
&lt;br /&gt;
Fhem hat bislang (noch) nicht die Möglichkeit implementiert, die Mengenmessung zu justieren. In Einzelfällen sind im Werksauslieferungszustand konstante Messabweichungen von 10% beobachtet worden.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/pdf_produkte/HM-WDS100-C6-O-UM-eQ-3-GE-150415-web.pdf Montage- und Bedienungsanleitung]&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/pdf_produkte/Funk-Kombisensor-OC-3_83346_Produktdatenblatt.pdf Produktdatenblatt]&lt;br /&gt;
* {{Link2Forum|Area= |Topic=6106|Message=24524|LinkText=Thread}} im Forum&lt;br /&gt;
* wetter.com Anbindung: {{Link2Forum|Area= |Topic=22020|Message= |LinkText=Thread}} im Forum&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Feuchtesensoren]]&lt;br /&gt;
[[Kategorie:Temperatursensoren]]&lt;br /&gt;
[[Kategorie:Wetterstationen]]&lt;br /&gt;
[[Kategorie:Regensensor]]&lt;br /&gt;
[[Kategorie:Lichtsensoren]]&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-WDS100-C6-O_Funk-Kombi-Sensor_OC3&amp;diff=15367</id>
		<title>HM-WDS100-C6-O Funk-Kombi-Sensor OC3</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-WDS100-C6-O_Funk-Kombi-Sensor_OC3&amp;diff=15367"/>
		<updated>2016-05-18T18:13:54Z</updated>

		<summary type="html">&lt;p&gt;Benheim: Fotografie hochgeladen und eingefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Infobox muss noch ergänzt werden. Hilfe unter [[Vorlage:Infobox Hardware]] --&amp;gt;&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=HM-WDS100-C6-O.jpg&lt;br /&gt;
|Bildbeschreibung=Bild und Daten müssen noch ergänzt werden&lt;br /&gt;
|HWProtocol=[[HomeMatic]]&lt;br /&gt;
|HWType=[[HomeMatic Type THSensor|THSensor]]&lt;br /&gt;
|HWCategory=[[:Kategorie:Wetterstationen|Wetterstationen]] [[:Kategorie:Feuchtesensoren|Feuchtesensoren]] [[:Kategorie:Temperatursensoren|Temperatursensoren]] [[:Kategorie:Regensensor|Regensensor]] [[:Kategorie:Lichtsensoren|Lichtsensoren]]&lt;br /&gt;
|HWComm=868,35 MHz&lt;br /&gt;
|HWChannels=&lt;br /&gt;
|HWVoltage=4,5 V&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=3x LR6/Mignon/AA&lt;br /&gt;
|HWSize=700 x 400 x 150 mm&lt;br /&gt;
|HWDeviceFHEM=[[CUL_HM]]&lt;br /&gt;
|HWManufacturer=ELV / eQ-3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;&#039;Funk-Kombi-Sensor OC3 (HM-WDS100-C6-O)&#039;&#039;&#039; ist eine [[HomeMatic]] Funk-Wetterstation für den Außeneinsatz zur  Messung von Temperatur, relativer Luftfeuchte, Windrichtung, Windstärke, Regenmenge und Helligkeit.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
* Batteriebetrieb (3 x Mignon/LR6/AA)&lt;br /&gt;
* Funkfrequenz 868,3 MHz&lt;br /&gt;
* Temperaturmessbereich -29,9°C bis 79,9°C (± 0,8°C)&lt;br /&gt;
* Relative Luftfeuchte 1 % bis 99 % (±5 %)&lt;br /&gt;
* Windgeschwindigkeit 1 km/h bis 199,9 km/h&lt;br /&gt;
* Windrichtungsmesser 0° bis 355° (±5°)&lt;br /&gt;
* Schwankung der Windrichtung 0°/22,5°/45°/67,5°&lt;br /&gt;
* Regenmengenmesser 0 mm bis 999 mm&lt;br /&gt;
* Regen-Soforterkennung&lt;br /&gt;
* Sturm-Soforterkennung&lt;br /&gt;
* Helligkeit gemessen über Photodiode mit einheitenlosen Wert 1-255&lt;br /&gt;
* Sonnenschein-Dauer gezählt als Minuten oberhalb der Helligkeitsschwelle von 30 (Default)&lt;br /&gt;
* Datenübermittlung alle 120 bis 180 Sekunden&lt;br /&gt;
* Übermittlung des Batteriestatus&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit Fhem ==&lt;br /&gt;
Das Pairing sollte wie unter [[HomeMatic Devices pairen]] beschrieben durchgeführt werden. Hierfür muss die von außen erreichbare Anlerntaste betätigt werden.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration (fhem.cfg) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;define Wetterstation CUL_HM 338893&lt;br /&gt;
attr Wetterstation IODev CUL_HM&lt;br /&gt;
attr Wetterstation autoReadReg 5_readMissing&lt;br /&gt;
attr Wetterstation expert 2_full&lt;br /&gt;
attr Wetterstation firmware 1.4&lt;br /&gt;
attr Wetterstation model HM-WDS100-C6-O&lt;br /&gt;
attr Wetterstation serialNr LEQ1442799&lt;br /&gt;
attr Wetterstation stateFormat Temperatur: temperature °C, Feuchtigkeit: humidity %, Helligkeit: brightness, Regen: rain mm/qm, Wind: windSpeed km/h,  Richtung: windDirection&lt;br /&gt;
attr Wetterstation subType THSensor&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Event-Monitor ===&lt;br /&gt;
&lt;br /&gt;
 Wetterstation T: 17.5 H: 82 W: 0 R: 553.715 IR: 0 WD: 10 WDR: 67.5 S: 106 B: 16&lt;br /&gt;
 Wetterstation temperature: 17.5&lt;br /&gt;
 Wetterstation humidity: 82&lt;br /&gt;
 Wetterstation windSpeed: 0&lt;br /&gt;
 Wetterstation windDirection: 10&lt;br /&gt;
 Wetterstation windDirRange: 67.5&lt;br /&gt;
 Wetterstation rain: 553.715&lt;br /&gt;
 Wetterstation isRaining: 0&lt;br /&gt;
 Wetterstation sunshine: 106&lt;br /&gt;
&lt;br /&gt;
=== Parameterliste ===&lt;br /&gt;
 &#039;&#039;&#039;list:      register | range              | peer     | description&#039;&#039;&#039;&lt;br /&gt;
 0: intKeyVisib      |   literal          |          | visibility of internal channel options:visib,invisib&lt;br /&gt;
 0: pairCentral      |   0 to 16777215    |          | pairing to central&lt;br /&gt;
 1: stormLowThresh   |   0 to 255         |          | Storm lower threshold&lt;br /&gt;
 1: stormUpThresh    |   0 to 255         |          | Storm upper threshold&lt;br /&gt;
&lt;br /&gt;
=== Log-Einträge ===&lt;br /&gt;
&amp;lt;pre&amp;gt;2015-08-13_12:47:18 Wetterstation T: 28.6 H: 57 W: 7 R: 145.14 IR: 0 WD: 80 WDR: 67.5 S: 8 B: 140&lt;br /&gt;
2015-08-13_12:47:18 Wetterstation brightness: 140&lt;br /&gt;
2015-08-13_12:47:18 Wetterstation humidity: 57&lt;br /&gt;
2015-08-13_12:47:18 Wetterstation isRaining: 0&lt;br /&gt;
2015-08-13_12:47:18 Wetterstation rain: 145.14&lt;br /&gt;
2015-08-13_12:47:18 Wetterstation sunshine: 8&lt;br /&gt;
2015-08-13_12:47:18 Wetterstation temperature: 28.6&lt;br /&gt;
2015-08-13_12:47:18 Wetterstation windDirRange: 67.5&lt;br /&gt;
2015-08-13_12:47:18 Wetterstation windDirection: 80&lt;br /&gt;
2015-08-13_12:47:18 Wetterstation windSpeed: 70&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Anwendungsbeispiele ===&lt;br /&gt;
==== Anbindung an OpenWeathermap ====&lt;br /&gt;
Das hier verwendete &amp;quot;inoffizielle&amp;quot; 98_openweathermap.pm-Modul muss manuell aus dem [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/ Contrib]-Verzeichnis des Fhem-SVN heruntergeladen und in das Modulverzeichnis der eigenen Fhem-Installation kopiert werden.&lt;br /&gt;
&lt;br /&gt;
Zunächst eine Funktion zur Berechnung der Differenz der gemessenen Regenmengen in 99_myUtils anlegen (abgeleitet von einer Funktion zur [[Gleitende Mittelwerte berechnen und loggen|Mittelwertberechnung]]):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;# myDiff&lt;br /&gt;
# berechnet die Differenz aus der ersten Zeile eines LogFiles und der letzten Zeile eines LogFiles über einen Zeitraum zwischen einem Zeitpunkt in der Vergangenheit und dem Zeitpunkt des Aufrufs&lt;br /&gt;
sub&lt;br /&gt;
myDiff($$$)&lt;br /&gt;
{&lt;br /&gt;
 my ($offset,$logfile,$cspec) = @_;&lt;br /&gt;
 my $period_s = strftime &amp;quot;%Y-%m-%d\x5f%H:%M:%S&amp;quot;, localtime(time-$offset);&lt;br /&gt;
 my $period_e = strftime &amp;quot;%Y-%m-%d\x5f%H:%M:%S&amp;quot;, localtime;&lt;br /&gt;
 my $oll = $attr{global}{verbose};&lt;br /&gt;
 $attr{global}{verbose} = 0; &lt;br /&gt;
 my @logdata = split(&amp;quot;\n&amp;quot;, fhem(&amp;quot;get $logfile - - $period_s $period_e $cspec&amp;quot;));&lt;br /&gt;
 $attr{global}{verbose} = $oll; &lt;br /&gt;
 my ($cnt, $first, $last, $diff) = (0)x4;&lt;br /&gt;
 foreach (@logdata){&lt;br /&gt;
  my @line = split(&amp;quot; &amp;quot;, $_);&lt;br /&gt;
  if(defined $line[1] &amp;amp;&amp;amp; &amp;quot;$line[1]&amp;quot; ne &amp;quot;&amp;quot;){&lt;br /&gt;
   $cnt += 1;&lt;br /&gt;
    if ($cnt == 1) {&lt;br /&gt;
     $first = $line[1];&lt;br /&gt;
    }&lt;br /&gt;
   $last = $line[1];&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
$diff = $last - $first;&lt;br /&gt;
Log 4, (&amp;quot;myDiff: File: $logfile, Field: $cspec, Period: $period_s bis $period_e, First: $first, Last: $last, Diff: $diff&amp;quot;);&lt;br /&gt;
return $diff;&lt;br /&gt;
} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach in der fhem.cfg folgendes hinzufügen (inklusive Umrechnung der Windmesswerte von km/h in m/s):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;define RegenmengeOffset dummy&lt;br /&gt;
define RegenmengeTag dummy&lt;br /&gt;
define RegenmengeLast1Hours dummy&lt;br /&gt;
define RegenmengeLast3Hours dummy&lt;br /&gt;
define RegenmengeLast24Hours dummy&lt;br /&gt;
define WindSpeed_mps dummy&lt;br /&gt;
&lt;br /&gt;
define RegenmengeNotify notify OC3:rain.* {\&lt;br /&gt;
  my $menge = (ReadingsVal(&amp;quot;OC3&amp;quot;, &amp;quot;rain&amp;quot;, 0) - ReadingsVal(&amp;quot;RegenmengeOffset&amp;quot;, &amp;quot;state&amp;quot;, 0));;\&lt;br /&gt;
  my $last1hours = myDiff(&amp;quot;3600&amp;quot;, &amp;quot;FileLog_OC3&amp;quot;, &amp;quot;10:::&amp;quot;);;\&lt;br /&gt;
  my $last3hours = myDiff(&amp;quot;10800&amp;quot;, &amp;quot;FileLog_OC3&amp;quot;, &amp;quot;10:::&amp;quot;);;\&lt;br /&gt;
  my $last24hours = myDiff(&amp;quot;86400&amp;quot;, &amp;quot;FileLog_OC3&amp;quot;, &amp;quot;10:::&amp;quot;);;\&lt;br /&gt;
  fhem(&amp;quot;set RegenmengeTag $menge&amp;quot;);;\&lt;br /&gt;
  fhem(&amp;quot;set RegenmengeLast1Hours $last1hours&amp;quot;);;\&lt;br /&gt;
  fhem(&amp;quot;set RegenmengeLast3Hours $last3hours&amp;quot;);;\&lt;br /&gt;
  fhem(&amp;quot;set RegenmengeLast24Hours $last24hours&amp;quot;);;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
define RegenmengeOffsetReset at *00:00:00 {\&lt;br /&gt;
  my $offset = ReadingsVal(&amp;quot;OC3&amp;quot;, &amp;quot;rain&amp;quot;, 0);;\&lt;br /&gt;
  fhem(&amp;quot;set RegenmengeOffset $offset&amp;quot;);; \&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
define WindSpeedNotify notify OC3:windSpeed.* {\&lt;br /&gt;
  my $windspeed = (ReadingsVal(&amp;quot;OC3&amp;quot;, &amp;quot;windSpeed&amp;quot;, 0) / 3.6);;\&lt;br /&gt;
  $windspeed = int(100 * $windspeed + 0.5) / 100;;\&lt;br /&gt;
  fhem(&amp;quot;set WindSpeed_mps $windspeed&amp;quot;) \&lt;br /&gt;
} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann können die Werte mit dem 98_openweathermap.pm - Modul aus [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/ Contrib] übertragen werden:&lt;br /&gt;
 &amp;lt;pre&amp;gt;...&lt;br /&gt;
attr owo owoSrc03 rain_today:RegenmengeTag:state&lt;br /&gt;
attr owo owoSrc04 wind_speed:WindSpeed_mps:state&lt;br /&gt;
attr owo owoSrc05 rain_1h:RegenmengeLast1Hours:state&lt;br /&gt;
attr owo owoSrc06 rain_24h:RegenmengeLast24Hours:state&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Anbindung an wetter.com ====&lt;br /&gt;
&lt;br /&gt;
Die Anbindung an wetter.com benötigt zusätzlich zu den bereits vorhandenen Readings des Funk-Kombi-Sensors OC3 folgende Readings:&lt;br /&gt;
* RegenmengeLast1Hours&lt;br /&gt;
* WindSpeed_mps&lt;br /&gt;
&lt;br /&gt;
Diese Readings können wie unter [[HM-WDS100-C6-O_Funk-Kombi-Sensor_OC3#Anbindung an OpenWeathermap|Anbindung an OpenWeathermap]] beschrieben erzeugt werden.&lt;br /&gt;
&lt;br /&gt;
Dann können die Werte mit dem 55_weco.pm - Modul übertragen werden:&lt;br /&gt;
 &amp;lt;pre&amp;gt;...&lt;br /&gt;
attr Wetter_com wecopa RegenmengeLast1Hours:state&lt;br /&gt;
attr Wetter_com wecows WindSpeed_mps:state&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sturmerkennung ====&lt;br /&gt;
Die Sensor-interne Sturmerkennung hat den Vorteil, dass bei Über-/Unterschreiten von konfigurierbaren Schwellwerten sofort ein Event generiert wird bzw. ein gepeerter Aktor sofort getriggert wird und somit eine Sturmerkennung nicht nachgelagert über das Reading &amp;quot;windSpeed&amp;quot; erfolgen muss (der Sensor sendet seine Werte sonst nur ca. alle 2-3 Minuten).&lt;br /&gt;
&lt;br /&gt;
Folgende Schritte zur Nutzung und Anpassung der internen Sturmerkennung sind durchzuführen:&lt;br /&gt;
&lt;br /&gt;
1. Peeren des Kanal 1 des Sensors (WGEG_SENW) mit einem Aktor (VCCU_Chan03, in diesem Beispiel also der virtuelle Kanal 3 einer VCCU):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;set WGEG_SENW peerChan 1 VCCU_Chan03 single set&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit werden neben der Peerkonfiguration auch folgende Readings im Sensor-Device erzeugt&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;R-VCCU_Chan03-stormLowThresh 5&lt;br /&gt;
R-VCCU_Chan03-stormUpThresh 25&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Diese Schwellwerte können nun mit z.B.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;set WGEG_SENW regSet stormUpThresh 15 VCCU_Chan03&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
angepaßt werden (s. Commandref zu [http://fhem.de/commandref.html#CUL_HMregSet regSet]).&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Der Zähler sunshine läuft nach gut 4 Stunden über, an Sonnentagen läuft dieser Zähler u.U. sogar mehr als einmal über.&lt;br /&gt;
&lt;br /&gt;
Fhem hat bislang (noch) nicht die Möglichkeit implementiert, die Mengenmessung zu justieren. In Einzelfällen sind im Werksauslieferungszustand konstante Messabweichungen von 10% beobachtet worden.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/pdf_produkte/HM-WDS100-C6-O-UM-eQ-3-GE-150415-web.pdf Montage- und Bedienungsanleitung]&lt;br /&gt;
* [http://www.eq-3.de/Downloads/eq3/pdf_produkte/Funk-Kombisensor-OC-3_83346_Produktdatenblatt.pdf Produktdatenblatt]&lt;br /&gt;
* {{Link2Forum|Area= |Topic=6106|Message=24524|LinkText=Thread}} im Forum&lt;br /&gt;
* wetter.com Anbindung: {{Link2Forum|Area= |Topic=22020|Message= |LinkText=Thread}} im Forum&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Feuchtesensoren]]&lt;br /&gt;
[[Kategorie:Temperatursensoren]]&lt;br /&gt;
[[Kategorie:Wetterstationen]]&lt;br /&gt;
[[Kategorie:Regensensor]]&lt;br /&gt;
[[Kategorie:Lichtsensoren]]&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:HM-WDS100-C6-O.jpg&amp;diff=15366</id>
		<title>Datei:HM-WDS100-C6-O.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:HM-WDS100-C6-O.jpg&amp;diff=15366"/>
		<updated>2016-05-18T18:11:08Z</updated>

		<summary type="html">&lt;p&gt;Benheim: Eigene Aufnahme&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eigene Aufnahme&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Vorlage:EnOceanSubTypeTable&amp;diff=15289</id>
		<title>Vorlage:EnOceanSubTypeTable</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Vorlage:EnOceanSubTypeTable&amp;diff=15289"/>
		<updated>2016-05-04T11:22:14Z</updated>

		<summary type="html">&lt;p&gt;Benheim: blindsCtrl.00 hinzugefügt (Omnio UPJ230/12)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
{{News|&#039;&#039;&#039;subType&#039;&#039;&#039;        |&#039;&#039;&#039;Wiki-Seite&#039;&#039;&#039;}}&lt;br /&gt;
{{News|tempSensor.XX  | }}&lt;br /&gt;
{{News|roomSensorControl.01 | }}&lt;br /&gt;
{{News|tempHumiSensor.02 |[[EnOcean-FBH65TFB-Funk-Bewegungs- Helligkeits- Temperatur- und Feuchte-Sensor]] }}&lt;br /&gt;
{{News|lightSensor.XX |[[EnOcean-FAH60-Au%C3%9Fen-Helligkeitssensor]] }}&lt;br /&gt;
{{News|occupSensor.XX | }}&lt;br /&gt;
{{News|lightTempOccupSensor.XX |[[EnOcean-FBH65S-Funk-Bewegungs- Helligkeitssensor]] }}&lt;br /&gt;
{{News||[[EnOcean-FBH65TFB-Funk-Bewegungs- Helligkeits- Temperatur- und Feuchte-Sensor]] }}&lt;br /&gt;
{{News|COSensor.01 | }}&lt;br /&gt;
{{News|tempHumiCO2Sensor.XX | }}&lt;br /&gt;
{{News|vocSensor.01 | }}&lt;br /&gt;
{{News|radonSensor.01 | }}&lt;br /&gt;
{{News|particlesSensor.01 | }}&lt;br /&gt;
{{News|roomSensorControl.XX  | }}&lt;br /&gt;
{{News|tempCtrlState.01 | }}&lt;br /&gt;
{{News|shutterCtrlState.01 |[[EnOcean-D-452-FU-EBIM-JR-Aktor-Beschattungselemente-Rollladen]]}}&lt;br /&gt;
{{News|blindsCtrl.00 |[[EnOcean-UPJ230_12-Jalousieaktor]]}}&lt;br /&gt;
{{News|lightCtrlState.XX |[[EnOcean-D-452-FU-EBIM-Aktor-2fach]] }}&lt;br /&gt;
{{News|autoMeterReading.XX |[[EnOcean-FSR61VA-10A-Stromstoß-Schaltrelais mit Strommessung]] }}&lt;br /&gt;
{{News|environmentApp |[[EnOcean-FWS61-24V-DC-Funk-Wetterdaten-Sendemodul]] }}&lt;br /&gt;
{{News|multiFuncSensor | }}&lt;br /&gt;
{{News|hvac.XX |[[EnOcean-MD15-Kleinstellantrieb]] }}&lt;br /&gt;
{{News|digitalInput.XX | }}&lt;br /&gt;
{{News|gateway; gwCmd switching|[[EnOcean-FSR14-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromstoß-Schaltrelais]] }}&lt;br /&gt;
{{News|gateway; gwCmd dimming|[[EnOcean-FUD12NPN-RS485-Bus-Universal-Dimmaktor]] }}&lt;br /&gt;
{{News||[[EnOcean-FUD14-RS485-Bus-Universal-Dimmaktor]] }}&lt;br /&gt;
{{News||[[EnOcean-FUD61NPN-Funk-Universal-Dimmaktor]] }}&lt;br /&gt;
{{News||[[EnOcean-FUD61NPN-Funk-Universal-Dimmaktor-unidirektional]] }}&lt;br /&gt;
{{News|gateway; gwCmd blindCmd|[[EnOcean-D-452-FU-EBIM-JR-Aktor-Beschattungselemente-Rollladen]] }}&lt;br /&gt;
{{News||[[EnOcean-D-452-FU-EBI-JR-Aktor-Beschattungselemente-Rollladen]] }}&lt;br /&gt;
{{News|manufProfile |[[EnOcean-FSB12-RS485-Bus-Schaltaktor-2-Kanal-Beschattungselemente-Rollladen]] }}&lt;br /&gt;
{{News||[[EnOcean-FSB14-RS485-Bus-Schaltaktor-2-Kanal-Beschattungselemente-Rollladen]]}}&lt;br /&gt;
{{News||[[EnOcean-FSB61-Aktor-Beschattungselemente-Rollladen]]}}&lt;br /&gt;
{{News|actuator.01 |[[EnOcean-D-452-FU-EBIM-Aktor-2fach]] }}&lt;br /&gt;
{{News||[[EnOcean-PSC234-Zwischenstecker]] }}&lt;br /&gt;
{{News|switch.XX |[[EnOcean-PTM-210-Taster]] }}&lt;br /&gt;
{{News||[[EnOcean-FBH65TFB-Funk-Bewegungs- Helligkeits- Temperatur- und Feuchte-Sensor]]}}&lt;br /&gt;
{{News||[[EnOcean-FSR12-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromstoß-Schaltrelais]]}}&lt;br /&gt;
{{News||[[EnOcean-FMS61NP-2-Kanal-Multifunktions-Stromstoßschalter]]}}&lt;br /&gt;
{{News||[[EnOcean-FSR61VA-10A-Stromstoß-Schaltrelais mit Strommessung]]}}&lt;br /&gt;
{{News||[[EnOcean-SecuSignal-Fenstergriff]]}}&lt;br /&gt;
{{News|roomCtrlPanel.00 | }}&lt;br /&gt;
{{News|contact |[[EnOcean_Starter_Guide#Kontakte]] }}&lt;br /&gt;
{{News||[[EnOcean-STM-250-Fenster-Türkontakt]]}}&lt;br /&gt;
{{News|keycard.xx | }}&lt;br /&gt;
{{News|windowHandle.XX |[[EnOcean-SecuSignal-Fenstergriff]]}}&lt;br /&gt;
{{News|sensor | }}&lt;br /&gt;
{{News|FRW |[[EnOcean-FRW-Rauchmelder]]}}&lt;br /&gt;
{{News|PM101|[[EnOcean_Starter_Guide#Profilloses_4BS-Teach-In]] }}&lt;br /&gt;
{{News|raw | }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Die Endung .XX bei einem subType bedeutet, dass es mehrere subType-Untervarianten gibt, die sich aber nur in Kleinigkeiten -zumeist Skalierung- unterscheiden.&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=EnOcean-UPJ230_12-Jalousieaktor&amp;diff=15272</id>
		<title>EnOcean-UPJ230 12-Jalousieaktor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=EnOcean-UPJ230_12-Jalousieaktor&amp;diff=15272"/>
		<updated>2016-05-02T21:15:58Z</updated>

		<summary type="html">&lt;p&gt;Benheim: readingsProxy nach Test ersetzt durch widgetOverride&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=Omnio_UPJ230.jpg&lt;br /&gt;
|Bildbeschreibung=UPJ230/12 UP Multifunktions-Jalousieaktor 1-Kanal&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor, Empfänger, Sensor, Repeater&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=230V~&lt;br /&gt;
|HWPowerConsumption=Eigenverbrauch 0,4W&lt;br /&gt;
|HWPoweredBy=230V&lt;br /&gt;
|HWSize=45x50x25mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=[http://www.awag.ch/ AWAG Elektrotechnik AG]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-UPJ230/12-Jalousieaktor&#039;&#039;&#039; ist ein Aktor&lt;br /&gt;
* für&lt;br /&gt;
** Unterputzmontage&lt;br /&gt;
* für&lt;br /&gt;
** Steuerung von Rollladen, Beschattungselementen und elektrisch betriebenen Fenstern&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Aktor für Beschattungselemente, Rolladen und elektrisch betriebene Fenster, mit Repeater-Funktion.&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
Der Aktor kann, wenn der [[EnOcean Starter Guide|EnOcean]]-Empfänger in den Anlernmodus geschaltet wurde, automatisch per [[autocreate]] in Fhem angelegt werden. Für die Auswertung und Einstellung der Lamellenposition muss danach manuell ein &amp;lt;code&amp;gt;readingsProxy&amp;lt;/code&amp;gt; definiert werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Schritte sind vorzunehmen:&lt;br /&gt;
* Fhem Eingabefeld: &amp;lt;code&amp;gt;set TCM_ESP3_0 teach 300&amp;lt;/code&amp;gt; (Lernmodus für 5 Minuten)&lt;br /&gt;
* Drehschalter am Aktor auf Stellung 13&lt;br /&gt;
* Taste LRN am Aktor für 2 Sekunden drücken&lt;br /&gt;
* Drehschalter am Aktor auf Stellung 11&lt;br /&gt;
* Taste LRN am Aktor drücken&lt;br /&gt;
&lt;br /&gt;
Die Definition des Aktors wird nun erstellt.&lt;br /&gt;
&lt;br /&gt;
Um Zwischenpositionen und Lamellenstellungen anfahren zu können, muss direkt am Aktor die Laufzeit gemäss beiliegender Anleitung erfasst werden (siehe Anleitung S. 4).&lt;br /&gt;
&lt;br /&gt;
=== Fhem Config-Auszug ===&lt;br /&gt;
Ein exemplarischer Auszug aus der [[Konfiguration|fhem.cfg]]:&lt;br /&gt;
&lt;br /&gt;
 define Jal_01 EnOcean 0185D7E8&lt;br /&gt;
 attr Jal_01 IODev TCM_ESP3_0&lt;br /&gt;
 attr Jal_01 comMode biDir&lt;br /&gt;
 attr Jal_01 devChannel 0&lt;br /&gt;
 attr Jal_01 eep D2-05-00&lt;br /&gt;
 attr Jal_01 manufID 005&lt;br /&gt;
 attr Jal_01 subDef FFEFF301&lt;br /&gt;
 attr Jal_01 subType blindsCtrl.00&lt;br /&gt;
 attr Jal_01 teachMethod UTE&lt;br /&gt;
 attr Jal_01 webCmd opens:stop:closes:position&lt;br /&gt;
 attr Jal_01 widgetOverride angle:slider,1,1,100&lt;br /&gt;
&lt;br /&gt;
Der &amp;lt;code&amp;gt;widgetOverride&amp;lt;/code&amp;gt; dient der Lamellensteuerung. Diese Definition sollte auch für die Steuerung von Fenstern vorgenommen werden. Andernfalls übernimmt der Aktor diese Steuerung, dabei stellt er die Lamellen nach dem Schliessen standardmässig auf &amp;quot;Auf&amp;quot;. Dadurch öffnet sich ein Fenster nach dem Schliessen wieder ein wenig. Ist die Winkelstellung in FHEM eingerichtet, wird das Verhalten des Aktors übersteuert und dauernd auf &amp;quot;Zu&amp;quot; gehalten, das Fenster bleibt nach dem Schliessen geschlossen.&lt;br /&gt;
&lt;br /&gt;
== Einsatzbeispiel ==&lt;br /&gt;
Siehe Beispiele hier: [[EnOcean-FSB61-Aktor-Beschattungselemente-Rollladen]].&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Anleitung: [http://www.awag.ch/ekat/page_de/upload_insta/UPJ230_12_Bd.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Rollladensteuerung]]&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Diskussion:EnOcean-UPJ230_12-Jalousieaktor&amp;diff=15238</id>
		<title>Diskussion:EnOcean-UPJ230 12-Jalousieaktor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Diskussion:EnOcean-UPJ230_12-Jalousieaktor&amp;diff=15238"/>
		<updated>2016-04-28T20:18:16Z</updated>

		<summary type="html">&lt;p&gt;Benheim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Alternative zur readingProxy-Definition ==&lt;br /&gt;
Hallo!&lt;br /&gt;
&lt;br /&gt;
Hat es einen bestimmten Grund, warum der Weg über ein separates readingsProxy-Device für die Slider-Darstellung gewählt wurde, statt das einfach über &amp;quot;widgetOverride angle:slider,1,1,100&amp;quot; beim EnO-Device zu lösen?&lt;br /&gt;
&lt;br /&gt;
Danke und Gruß, --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 10:56, 26. Apr. 2016 (CEST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
Hallo Christian&lt;br /&gt;
&lt;br /&gt;
ich habe die Angaben vom zuständigen Abteilungsleiter beim Hersteller AWAG erhalten, der mir die Konfiguration so beschrieben hat. Mir fehlen aber (noch) die Skills, zu beurteilen ob es eine bessere Lösung gibt. Ich kann das aber gerne versuchen, nächste Woche sollte ich genug Zeit haben. &lt;br /&gt;
&lt;br /&gt;
Gruss, --[[Benutzer:Benheim|Bengt]] ([[Benutzer Diskussion:Benheim|Diskussion]]) 22:05, 28. Apr. 2016 (CEST)&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Benutzer:Benheim/Startscript_systemd&amp;diff=15237</id>
		<title>Benutzer:Benheim/Startscript systemd</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Benutzer:Benheim/Startscript_systemd&amp;diff=15237"/>
		<updated>2016-04-28T20:07:57Z</updated>

		<summary type="html">&lt;p&gt;Benheim: Die Seite wurde neu angelegt: „== Startscript für FHEM ==  Für Linux-Versionen, die als Startsystem &amp;lt;code&amp;gt;systemd&amp;lt;/code&amp;gt; einsetzen, kann folgende Unit (systemd-Bezeichnung für Startscript…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Startscript für FHEM ==&lt;br /&gt;
&lt;br /&gt;
Für Linux-Versionen, die als Startsystem &amp;lt;code&amp;gt;systemd&amp;lt;/code&amp;gt; einsetzen, kann folgende Unit (systemd-Bezeichnung für Startscripts) verwendet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=FHEM service&lt;br /&gt;
After=network.target&lt;br /&gt;
Wants=hmland.service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=fhem&lt;br /&gt;
Group=dialout&lt;br /&gt;
WorkingDirectory=/opt/fhem&lt;br /&gt;
ExecStart=/usr/bin/perl fhem.pl fhem.cfg&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da der FHEM-Prozess sich nach dem Starten vom Eingabe-Terminal löst und im Hintergrund läuft, muss der Typ mit &amp;lt;code&amp;gt;Type=forking&amp;lt;/code&amp;gt; angegeben werden werden.&lt;br /&gt;
&lt;br /&gt;
== Startscript für einen unterstützenden Dienst ==&lt;br /&gt;
&lt;br /&gt;
Für das Starten des HomeMatic-Daemons &amp;lt;code&amp;gt;hmland&amp;lt;/code&amp;gt; ist ein ähnliches Unit verantwortlich:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&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=/usr/local/bin/hmland -p 1234&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;hmland&amp;lt;/code&amp;gt; gibt den Prompt nach dem Starten nicht wieder frei, wenn die Option -d nicht gesetzt ist. In diesem Fall kann eine Angabe von &amp;lt;code&amp;gt;Type=&amp;lt;/code&amp;gt; entfallen. &lt;br /&gt;
&lt;br /&gt;
== Installation und Aktivierung ==&lt;br /&gt;
&lt;br /&gt;
Die Dateien kommen ins Verzeichnis &amp;lt;code&amp;gt;/etc/systemd/system&amp;lt;/code&amp;gt;. Sie sollten nicht ausführbar gemacht werden. Der Start klappt auch mit ausführbaren Dateien, aber im Log (&amp;lt;code&amp;gt;journalctl&amp;lt;/code&amp;gt;) lösen ausführbare Dateien eine Warnung aus. &lt;br /&gt;
&lt;br /&gt;
Nun muss einmalig der Befehl &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;systemctl daemon-reload&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
eingegeben werden, damit die neuen Dateien eingelesen werden. Mit dem Befehl &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;systemctl enable fhem.service&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
wird dafür gesorgt, dass bei einem Systemstart FHEM automatisch gestartet wird (ein symbolischer Link im mit &amp;lt;code&amp;gt;WantedBy=&amp;lt;/code&amp;gt; wird erstellt). Der automatische Start lässt sich mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;systemctl disable fhem.service&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
wieder deaktivieren.&lt;br /&gt;
&lt;br /&gt;
== Starten, Stoppen und Statusabfrage ==&lt;br /&gt;
&lt;br /&gt;
Erfolgt ähnlich wie beim klassischen SysV-Init:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;systemctl start fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;systemctl stop fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;systemctl status fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Abhängigkeiten ==&lt;br /&gt;
&lt;br /&gt;
Durch den Eintrag in der Unit für FHEM &amp;lt;code&amp;gt;Wants=hmland.service&amp;lt;/code&amp;gt; wird dafür gesorgt, dass &#039;&#039;vor&#039;&#039; dem Start von FHEM der Daemon für den HomeMatic-Stick gestartet wird. Es können mehrere Dienste aufgelistet werden, die vorher gestartet werden müssen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Wants=hmland.service knxd.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Units müssen darum nicht für den automatischen Start &amp;quot;enabled&amp;quot; werden. Sollte einer dieser Dienste nicht gestartet werden können, wird FHEM trotzdem gestartet.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
Systemd-Dokumentation: &lt;br /&gt;
&lt;br /&gt;
* [https://www.freedesktop.org/software/systemd/man/systemd.unit.html|Optionen für Units allgemein]&lt;br /&gt;
* [https://www.freedesktop.org/software/systemd/man/systemd.exec.html|Optionen für den Start von Prozessen]&lt;br /&gt;
* [https://www.freedesktop.org/software/systemd/man/systemd.service.html|Optionen für Units vom Typ service]&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Diskussion:EnOcean-UPJ230_12-Jalousieaktor&amp;diff=15236</id>
		<title>Diskussion:EnOcean-UPJ230 12-Jalousieaktor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Diskussion:EnOcean-UPJ230_12-Jalousieaktor&amp;diff=15236"/>
		<updated>2016-04-28T20:05:47Z</updated>

		<summary type="html">&lt;p&gt;Benheim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Alternative zur readingProxy-Definition ==&lt;br /&gt;
Hallo!&lt;br /&gt;
&lt;br /&gt;
Hat es einen bestimmten Grund, warum der Weg über ein separates readingsProxy-Device für die Slider-Darstellung gewählt wurde, statt das einfach über &amp;quot;widgetOverride angle:slider,1,1,100&amp;quot; beim EnO-Device zu lösen?&lt;br /&gt;
&lt;br /&gt;
Danke und Gruß, --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 10:56, 26. Apr. 2016 (CEST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
Hallo Christian&lt;br /&gt;
&lt;br /&gt;
ich habe die Angaben vom zuständigen Abteilungsleiter beim Hersteller AWAG erhalten, der mir die Konfiguration so beschrieben hat. Mir fehlen aber (noch) die Skills, zu beurteilen ob es eine bessere Lösung gibt. Ich kann das aber gerne versuchen, nächste Woche sollte ich genug Zeit haben. &lt;br /&gt;
&lt;br /&gt;
Gruss, --[[Benutzer:Benheim|Benheim]] ([[Benutzer Diskussion:Benheim|Diskussion]]) 22:05, 28. Apr. 2016 (CEST)&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Benutzer:Benheim&amp;diff=15234</id>
		<title>Benutzer:Benheim</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Benutzer:Benheim&amp;diff=15234"/>
		<updated>2016-04-28T18:03:36Z</updated>

		<summary type="html">&lt;p&gt;Benheim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In Bearbeitung [[/Startscript systemd|Startscript für systemd]]&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=EnOcean_Starter_Guide&amp;diff=15229</id>
		<title>EnOcean Starter Guide</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=EnOcean_Starter_Guide&amp;diff=15229"/>
		<updated>2016-04-27T18:54:02Z</updated>

		<summary type="html">&lt;p&gt;Benheim: /* Teach-In als Tasteremulation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Todo|Noch einzuarbeitetende Moduländerungen :: http://forum.fhem.de/index.php/topic,36237.msg285274.html#msg285274: Vereinfachte Anlage von FHEM-EnOcean-Devices gemäß 18 und 19 einarbeiten, Anlage Liste von nicht offiziellen EEPs und Zuordnung zu Geräten, bessere Einbindung von getNextId ++++ http://forum.fhem.de/index.php/topic,42354.0.html: Plot-Anlage einbinden ++++ http://forum.fhem.de/index.php/topic,45810.0.html: RLT}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right&amp;quot;&amp;gt;&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|Name=TCM&lt;br /&gt;
|ModPurpose=Einbindung EnOcean-Gateway&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=TCM&lt;br /&gt;
|ModForumArea=EnOcean&lt;br /&gt;
|ModTechName=00_TCM.pm &lt;br /&gt;
|ModOwner=klaus.schauer ([http://forum.fhem.de/index.php?action=profile;u=293 Forum] / [[Benutzer Diskussion:Klaus.schauer|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|Name=EnOcean&lt;br /&gt;
|ModPurpose=Ansteuerung EnOcean-Geräte über TCM&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=EnOcean&lt;br /&gt;
|ModForumArea=EnOcean&lt;br /&gt;
|ModTechName=10_EnOcean.pm &lt;br /&gt;
|ModOwner=klaus.schauer ([http://forum.fhem.de/index.php?action=profile;u=293 Forum] / [[Benutzer Diskussion:Klaus.schauer|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== EnOcean ==&lt;br /&gt;
[http://www.enocean.com/de/ EnOcean] ist &lt;br /&gt;
* ein [http://www.enocean.com/de/enocean-wireless-standard/ ISO ratifizierter Funkstandard], ausgelegt für Funksensoren und Funksensornetze mit besonders niedrigem Energieverbrauch&lt;br /&gt;
* ein Anbieter batterieloser Funksensoren&lt;br /&gt;
EnOcean-Endgeräte mit dem von der EnOcean Alliance zur Verfügung gestellten EnOcean-Funkprotokoll werden von [http://www.enocean-alliance.org/de/hiererhaeltlich/ zahlreichen Hardware-Herstellern] angeboten. &lt;br /&gt;
&lt;br /&gt;
=== EnOcean Equipment Profile ===&lt;br /&gt;
Abhängig von den Funktionen des EnOcean-Endgerätes werden bestimmte veröffentlichte Anwendungs-Profile/Funk-Telegramme, die sogenannten EnOcean Equipment Profiles (EEPs), zur Funkkommunikation genutzt. Technische Details zum EnOcean-Funkprotokoll und insbesondere zu den [http://www.enocean-alliance.org/eep/ EnOcean Equipment Profiles (EEPs)] sind auf der Internetseite der [http://www.enocean-alliance.org EnOcean Alliance] zu finden.&lt;br /&gt;
&lt;br /&gt;
==== Manufacturer Specific Communication ====&lt;br /&gt;
EnOcean bietet - neben den veröffentlichten Standard-Enocean-Profilen - die Möglichkeit für die Nutzung von herstellerspezifischen Anwendungs-Profilen/Funk-Telegrammen (MSC = Manufacturer Specific Communication). Falls die Herstellerfirmen den Inhalt dieser MSC-Telegramme nicht veröffentlichen, ist eine Unterstützung durch FHEM grundsätzlich nicht möglich. Teilweise werden die Produkte sowohl mit MSC- als auch mit Standard-Enocean-Profilen vertrieben [http://forum.fhem.de/index.php/topic,19544.msg132240.html#msg132240]. Angaben zu den verwendeten Profilen/Telegrammen sind den Bedienungsanleitungen der Produkte zu entnehmen.&lt;br /&gt;
&lt;br /&gt;
=== uni- versus bidirektional ===&lt;br /&gt;
EnOcean-Endgeräte gibt es sowohl in uni- als auch in bidirektionalen Ausführungen. Bei &#039;&#039;&#039;unidirektionalen Endgeräten&#039;&#039;&#039; erfolgt die Funk-Kommunikation nur in eine Richtung. Einem Aktor, der Licht schaltet, kann zwar der Befehl zum An- bzw. Ausschalten gegeben werden, er liefert aber keine Rückinformation über die erfolgreiche Ausführung des Befehls. Bei &#039;&#039;&#039;bidirektionalen Endgeräten&#039;&#039;&#039; erfolgt die Funk-Kommunikation hingegen in zwei Richtungen: sie bieten &lt;br /&gt;
# Sende- und &lt;br /&gt;
# Empfangsmöglichkeiten. &lt;br /&gt;
Der bidirektionale Aktor kann somit unter anderem die erfolgreiche Ausführung eines empfangenen Befehls zurückmelden.&lt;br /&gt;
&lt;br /&gt;
=== SenderID ===&lt;br /&gt;
Damit EnOcean Funk-Aktoren (z.B. Relais, Dimmer, Heizungsventil) auf EnOcean Sensoren (z.B. Taster, Temperatursensor, Fensterkontakt, Energieverbrauchsmesser) reagieren können, werden die Sensoren bei den Aktoren eingelernt (Teach-in). So wird festgelegt, dass z.B. &amp;quot;Funktaster 1&amp;quot; den &amp;quot;Dimmer 1&amp;quot; steuert. &lt;br /&gt;
Alle EnOcean Geräte mit Sendefunktion haben mindestens eine eindeutige, unabänderliche 8-stellige Hex-SenderID (z.B. ffc54500; teilweise auch dargestellt mit Punkten oder Doppelpunkten dazwischen). Die SenderID ist meist auf den EnOcean Geräten aufgedruckt oder liegt der Verpackung des Endgerätes bei. Beim Anlernvorgang wird die eindeutige SenderID des Sensors in der Empfängertabelle des Aktors gespeichert.&lt;br /&gt;
 &lt;br /&gt;
== EnOcean 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_EnOcean-Forum_enthalten.3F|Anfragen im Forum]] die Aktualität von FHEM überprüfen.&lt;br /&gt;
&lt;br /&gt;
Die Nutzung von EnOcean in FHEM ist für den Anfänger nur mit der standardmäßig eingeschalteten [http://fhem.de/commandref.html#autocreate autocreate-Funktion] einfach umsetzbar. 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 EnOcean behandeln, so werden doch wesentliche Punkte für ein Verständnis von FHEM vermittelt.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden und auf den [[:Kategorie:EnOcean 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 SenderIDs der EnOcean-Geräte haben eine zentrale Bedeutung in FHEM. Sie sind eindeutiges Unterscheidungsmerkmal, werden von FHEM im Rahmen der Funkkommunikation genutzt und in der Definition der Geräte bzw. den Attributen des Geräte hinterlegt. Auch wenn FHEM die SenderIDs des Gateways regelmäßig automatisch vergeben kann, ist für einen Überblick über die SenderIDs hilfreich eine Tabelle mit folgender oder ähnlicher Struktur aufzubauen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt; A&lt;br /&gt;
&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt; B&lt;br /&gt;
&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt; C&lt;br /&gt;
&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt; D&lt;br /&gt;
&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt; E&lt;br /&gt;
&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt; Nr.&lt;br /&gt;
&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt; Name EnOcean&lt;br /&gt;
&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt; Name in FHEM&lt;br /&gt;
&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt; HEX (Sender-ID)&lt;br /&gt;
&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt; Zimmer&lt;br /&gt;
&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;amp;lt;Name Hardwareschalter&amp;amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;amp;lt;Name in FHEM&amp;amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;amp;lt;HEX Code&amp;amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;amp;lt;Raumname&amp;amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; TCM_ESP3_0&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; TCM_ESP3_0&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; AABBCC00&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 1&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; EnO_switch_123456&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; eg_fl_Licht&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; AABBCC01&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; EG_Flur&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; ...&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 128&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Definition von TCM / Gateway ==&lt;br /&gt;
FHEM kann mit einem Funkgateway, das auf einem TCM-Modul basiert, EnOcean-Funk empfangen und senden. &lt;br /&gt;
Bisher gibt es zwei Transceiver Chips von EnOcean: &lt;br /&gt;
* TCM120 (ausgelaufen)&lt;br /&gt;
** für den USB-Port: [https://embedded-intelligence.de/de/products/hardware/bsc-bor.html BSC BOR] &lt;br /&gt;
* TCM310 &lt;br /&gt;
** als USB-Stick: [http://www.enocean.com/de/enocean_module/usb-300-oem/ USB 300] und [http://busware.de/tiki-index.php?page=EUL Busware EUL (End-Of-Life)]&lt;br /&gt;
** als Aufsteckmodul für Raspberry Pi: [http://www.enocean.com/de/enocean-pi/ EnOceanPi]&amp;lt;BR&amp;gt; &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;
::* Die seriellen Schnittstelle /dev/ttyAMA0 muss am Raspberry Pi freigeschaltet werden, damit das EnOceanPi-Modul funktionsfähig ist. Zur Vorgehensweise siehe: {{Link2Forum|Topic=14814|Message=95265}}&lt;br /&gt;
&lt;br /&gt;
Zudem existiert eine [http://forum.fhem.de/index.php/topic,22635.msg160582.html#msg160582 Lösung zur kabelgebundenen Anbindung] des FHEM-Rechners mittels Eltako FGW14 an den [[EnOcean-Eltako-RS485-Bus|Eltako RS485-Bus]], über die sowohl Busaktoren als auch EnOcean-Funkaktoren gesteuert werden können und auch EnOcean-Funktelegramme über das [[EnOcean-Eltako-RS485-Bus|FAM14 Funkantennenmodul]] am RS485-Bus empfangen werden können.&lt;br /&gt;
&lt;br /&gt;
Das TCM-basierte Gateway wird unter Linux nach Anschluss an den FHEM-Rechner beim FHEM-Start oder ohne FHEM-Neustart durch Aufruf des Befehls &amp;lt;code&amp;gt;usb scan&amp;lt;/code&amp;gt; zumeist automatisch erkannt und grundlegend durch entsprechende Einträge in der Konfiguration definiert. Ein manuelles Anlegen des TCM-Moduls oder Eingriffe in die Konfiguration sind normalerweise nicht notwendig und auch nicht ratsam. Unter Windows ist ein manuelles Anlegen der Definition des TCM-Gateways wegen fehlender Unterstützung des Befehls &amp;lt;code&amp;gt;usb scan&amp;lt;/code&amp;gt; notwendig. &lt;br /&gt;
&lt;br /&gt;
Bei RS485-basierte Gateways (bspw. FGW14) muss in der [[Konfiguration]] zusätzlich manuell das Attribut &amp;lt;code&amp;gt;comType&amp;lt;/code&amp;gt; auf &amp;lt;code&amp;gt;RS485&amp;lt;/code&amp;gt; gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
Beispiele der automatisch erzeugten define-Zeile in der Konfiguration:&lt;br /&gt;
&lt;br /&gt;
EnOceanPi an Raspberry Pi:&lt;br /&gt;
 define TCM_ESP3_0 TCM ESP3 /dev/ttyAMA0@57600&lt;br /&gt;
&lt;br /&gt;
TCM310/USB300 an Fritzbox oder Raspberry Pi:&lt;br /&gt;
 define TCM_ESP3_0 TCM ESP3 /dev/ttyUSB0@57600&lt;br /&gt;
&lt;br /&gt;
Hier folgt ein Beispiel der define-Zeile in der Konfiguration für kabelgebundene Anbindung mit FGW14 über serielle Schnittstelle&lt;br /&gt;
 define TCM_ESP2_0 TCM ESP2 /dev/ttyS3@57600&lt;br /&gt;
 attr TCM_ESP2_0 comType RS485                    &amp;lt;---- Manuell zu setzen&lt;br /&gt;
&lt;br /&gt;
Nach erfolgreicher Definition ist das Gateway im Raum &amp;quot;Everything&amp;quot; in der Gruppe &amp;quot;TCM&amp;quot; zu finden. Wenn neben dem Gatewaynamen &amp;quot;initialized&amp;quot; oder &amp;quot;opened&amp;quot; angezeigt wird, ist FHEM in der Lage mit den EnOcean-Geräten zu kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Wie im [[#SenderID|Einführungsabschnitt]] bereits erläutert hat jedes sendende EnOcean-Endgerät mindestens eine eindeutige SenderID. Diese SenderID kann aus Sicherheitsgründen nicht vom EnOcean-Gateway simuliert werden. Vielmehr hat das Gateway eigene SenderIDs, die separat in die Endgeräte/Aktoren angelernt werden müssen. Das Gateway stellt 128 verschiedene SenderIDs zur Verfügung. Ausgehend von der baseID, die bei jedem Gateway grundsätzlich anders ist, werden die SenderIDs fortlaufend hexadezimal hochgezählt:&lt;br /&gt;
* FHEM stehen 127 fortlaufende eigene SenderID zur Verfügung&lt;br /&gt;
* beginnend mit der baseID des TCM + 1&lt;br /&gt;
&lt;br /&gt;
Die baseID des TCM erhält man durch Eingabe von&lt;br /&gt;
 get TCM_ESP3_0 baseID &lt;br /&gt;
in das Befehl-Eingabefeld (TCM_ESP3_0 gegebenenfalls durch den eigenen Gatewaynamen ersetzen) oder duch Auswahl dieses Befehls in den Objektdetails des FHEM-Gateway-Device.&lt;br /&gt;
&lt;br /&gt;
Das Webfrontend zeigt dann beispielsweise:&lt;br /&gt;
 BaseID=AABBCC00,RemainingWriteCycles=0A&lt;br /&gt;
Die niedrigste SenderID in diesem Beispiel ist AABBCC0&#039;&#039;&#039;1&#039;&#039;&#039; (BaseID=AABBCC00 +1 HEX!!!), die nächste AABBCC0&#039;&#039;&#039;2&#039;&#039;&#039; usw.&lt;br /&gt;
&lt;br /&gt;
Nach der Definition des Gateways und Ermittlung der baseID des Gateways kann nun der nächste Schritt, die Definition der EnOcean-Geräte in FHEM, erfolgen.&lt;br /&gt;
&lt;br /&gt;
== Definition von Geräten ==&lt;br /&gt;
=== Definition / Anlernvorgang (Teach-In) ===&lt;br /&gt;
Damit FHEM und EnOcean-Geräte miteinander kommunizieren können, müssen sie miteinander bekannt gemacht werden. Dies geschieht durch Definition des Gerätes in FHEM und den Anlernvorgang. Dazu muss sich FHEM im [http://fhem.de/commandref.html#TCM_learningMode learningMode] befinden. Viele Geräte werden von FHEM während des Anlernvorgangs automatisch erkannt und definiert. Dennoch ist ein grundlegendes Verständnis der Anlernvorgänge und Unterscheidungsprinzipen in FHEM und EnOcean notwendig. Sofern das Gerät Bestätigungstelegramme verschicken kann, sind diese zwingend &#039;&#039;&#039;vorher&#039;&#039;&#039; am Gerät einzuschalten (u.a. Eltako). &lt;br /&gt;
&lt;br /&gt;
FHEM entnimmt die Angaben, wie ein Funk-Telegramm für ein bestimmtes Gerät aufgebaut ist, im Wesentlichen den folgenden Attributen der Definition des Gerätes:&lt;br /&gt;
*&amp;lt;code&amp;gt;subtype&amp;lt;/code&amp;gt;: FHEM-Profilname, der als Klartextname das genutzte EEP des Gerätes (EEP steht meist in der Bedienungsanleitung des Gerätes) repräsentiert . Einige FHEM-Profile z. B. &amp;quot;roomSensorControl.01&amp;quot; bedienen mehrere ähnliche EEP gleichzeitig.&lt;br /&gt;
*&amp;lt;code&amp;gt;manufID&amp;lt;/code&amp;gt;: Code für den Hersteller des Gerätes (Übersetzungstabelle Code zu Name ist in der [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/FHEM/10_EnOcean.pm 10_EnOcean.pm] unter %EnO_manuf)&lt;br /&gt;
*&amp;lt;code&amp;gt;model&amp;lt;/code&amp;gt;: Modell des Gerätes&lt;br /&gt;
*&amp;lt;code&amp;gt;eep&amp;lt;/code&amp;gt;: EEP des Gerätes. Unter anderem werden die Informationen zur automatischen Anlage von [[FileLog]], [[SVG]] und des Attributs &amp;lt;code&amp;gt;webCmd&amp;lt;/code&amp;gt; anhand des EEPs ermittelt.&lt;br /&gt;
Während des Anlernvorgangs werden diese Angaben von FHEM soweit wie möglich automatisch in der Definition vorbelegt. Hinweise zu den Besonderheiten von bestimmten Geräten und EEP finden sich oft in der [http://fhem.de/commandref.html#EnOcean commandref] zu EnOcean. Darum bitte immer in der commandref zunächst nach dem speziellen Gerät (Modellbezeichnung) suchen, wenn dies keinen Treffer liefert nach dem verwendeten EEP suchen. Die gegebenen Hinweise und Erläuterungen dort beachten.&lt;br /&gt;
 &lt;br /&gt;
Die Definition und der Anlernvorgang unterscheiden sich je nach Gerätetyp:&lt;br /&gt;
* Sensoren:&lt;br /&gt;
** [[#Schalter/Switch|Schalter (EEP RPS)]]: werden automatisch beim ersten empfangenen Funktelegramm in FHEM mit den notwendigen Attributen angelegt.&lt;br /&gt;
** [[#Kontakte|Kontakte (EEP 1BS)]]: werden automatisch beim ersten empfangenen Funktelegramm in FHEM mit den notwendigen Attributen angelegt.&lt;br /&gt;
** [[#Sonstige_Sensoren|Sonstige Sensoren (EEP 4BS)]]: Durch Versand eines speziellen Anlern-Funktelegramms können sie in FHEM automatisch mit den notwendigen Attributen angelegt werden. Im Anlerntelegramm übermittelt der Sensor FHEM die EEP-Profilangabe und die Hersteller-ID. Aufgrund dieser Angaben kann FHEM das Gerät eindeutig erkennen und die richtigen Attribute in FHEM setzen. Einige wenige Sensoren verschicken leider ein Anlerntelegramm ohne EEP-Profilangabe und/oder Herstellerangabe (Bsp: Omnio Ratio eagle-PM101). Bei diesen Sensoren müssen die Attribute subType, manufID und/oder model manuell in FHEM gesetzt werden, damit eine richtige Auswertung der Funktelegramme erfolgt.&lt;br /&gt;
* Aktoren (4BS, VLD, UTE, MSC): Bei den Aktoren gibt es je nach Gerätetyp verschiedene Anlernvorgänge, die unterschiedlich in FHEM ausgeführt werden. Einige Aktoren unterstützen auch mehrere Anlernvorgänge. Grundsätzlich muss wegen abweichender Vorgehensweise in FHEM unterschieden werden zwischen&lt;br /&gt;
** [[#uni- versus bidirektional|unidirektionalen]] Aktoren und&lt;br /&gt;
*** [[#Teach-In_als_Tasteremulation|Teach-In als Tasteremulation]]&lt;br /&gt;
*** [[#Teach-In_als_Gateway.2FPC-Steuerung|Teach-In als Gateway/PC-Steuerung]]&lt;br /&gt;
** [[#uni- versus bidirektional|bidirektionalen]] Aktoren&lt;br /&gt;
*** [[#Teach-In_als_Tasteremulation_2|Teach-In als Tasteremulation]]&lt;br /&gt;
*** [[#Unidirektionales_4BS-Teach-In|Unidirektionales 4BS-Teach-In]]&lt;br /&gt;
*** [[#Bidirektionales_4BS-Teach-In|Bidirektionales 4BS-Teach-In]]&lt;br /&gt;
*** [[#UTE-Teach-In|UTE-Teach-In]]&lt;br /&gt;
&lt;br /&gt;
In den nachfolgenden Gliederungspunkten wird beispielhaft für je ein Gerät aus den obigen Gerätetypen die Einbindung in FHEM erläutert.&lt;br /&gt;
&lt;br /&gt;
Grundlegend gilt immer:&lt;br /&gt;
FHEM legt sendende, noch nicht definierte EnOcean Geräte selbst an, wenn&lt;br /&gt;
* in Konfiguration autocreate aktiviert ist:&lt;br /&gt;
** &amp;lt;code&amp;gt;[http://fhem.de/commandref_DE.html#autocreate define autocreate autocreate]&amp;lt;/code&amp;gt;&lt;br /&gt;
* FHEM/das TCM-Modul sich im &amp;lt;code&amp;gt;learningMode&amp;lt;/code&amp;gt; befindet und&lt;br /&gt;
* FHEM eine Nachricht vom noch nicht definierten EnOcean Gerät empfängt&lt;br /&gt;
Im Webfrontend werden automatisch angelegte neue Geräte im Raum &amp;quot;EnOcean&amp;quot; angezeigt.&lt;br /&gt;
&lt;br /&gt;
=== Sensoren ===&lt;br /&gt;
&#039;&#039;&#039;Sensoren Beispiele:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Schalter/Switch ====&lt;br /&gt;
[[EnOcean-PTM-210-Taster|PTM 210 - Schaltermodul]] ([http://www.enocean.com/de/enocean_module/ptm-210-data-sheet-pdf/ Datenblatt])&lt;br /&gt;
&lt;br /&gt;
EEP: F6-02-xx&lt;br /&gt;
&lt;br /&gt;
FHEM in den learningMode (&amp;lt;code&amp;gt;set &amp;lt;nowiki&amp;gt;&amp;lt;IODev&amp;gt; teach &amp;lt;time/s&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;) versetzen, dazu im Befehl-Eingabefeld eingeben:&lt;br /&gt;
 set TCM_ESP3_0 teach 600&lt;br /&gt;
&lt;br /&gt;
Dann einen beliebigen Taster des Moduls drücken (und loslassen). Beim Drücken des Tasters wird vom Taster eine Nachricht ausgesendet, die von FHEM empfangen wird. Daraufhin definiert FHEM automatisch den Taster und der Taster ist in FHEM angelernt. FHEM fügt dazu folgenden Code zur Konfiguration hinzu:&lt;br /&gt;
* exemplarischer Auszug aus Konfiguration&lt;br /&gt;
 define EnO_switch_FFC54500 EnOcean FFC54500                    &amp;lt;-- &amp;quot;FFC54500&amp;quot; ist die 8-stellige Hex-SenderID des Tasters&lt;br /&gt;
 attr EnO_switch_FFC54500 IODev TCM_ESP3_0&lt;br /&gt;
 attr EnO_switch_FFC54500 room EnOcean&lt;br /&gt;
 attr EnO_switch_FFC54500 subType switch                        &amp;lt;-- handelt sich um einen Schalter&lt;br /&gt;
 # attr EnO_switch_FFC54500 eventMap AI:off A0:on BI:an B0:aus  &amp;lt;-- bei Bedarf ... die gemapten Werte (hier: off, on, an, aus) sollen eindeutig sein&lt;br /&gt;
 define FileLog_EnO_switch_FFC54500 FileLog ./log/EnO_switch_FFC54500-%Y.log EnO_switch_FFC54500&lt;br /&gt;
 attr FileLog_EnO_switch_FFC54500 logtype text&lt;br /&gt;
&lt;br /&gt;
Ein Schalter (hier: FT55) hat vier Taster:&lt;br /&gt;
{|&lt;br /&gt;
| &#039;&#039;&#039;Taster&#039;&#039;&#039; || &#039;&#039;&#039;in FHEM&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| links oben || A0&lt;br /&gt;
|-&lt;br /&gt;
| links unten || AI (nicht &amp;quot;eins&amp;quot; sondern &amp;quot;i&amp;quot;!)&lt;br /&gt;
|-&lt;br /&gt;
| rechts oben || B0&lt;br /&gt;
|-&lt;br /&gt;
| rechts unten || BI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das Log FileLog_EnO_switch_FFC54500 zeichnet beim einmaligen Drücken des linken unteren Tasters (&amp;quot;AI&amp;quot;) folgendes auf:&lt;br /&gt;
 2014-01-01_07:00:01 EnO_switch_FFC54500 buttons: pressed&lt;br /&gt;
 2014-01-01_07:00:01 EnO_switch_FFC54500 channelA: AI&lt;br /&gt;
 2014-01-01_07:00:01 EnO_switch_FFC54500 AI&lt;br /&gt;
 2014-01-01_07:00:02 EnO_switch_FFC54500 buttons: released&lt;br /&gt;
&lt;br /&gt;
Der angelegte Sensor repräsentiert im Webfrontend den physischen Schalter (bspw. an der Wand). Ein Druck auf den physischen Taster ändert den Zustand im Webfrontend. Jedoch führt ein Schalten des Repräsentanten im Webfrontend nicht zu einer Schaltung des Aktors.&lt;br /&gt;
&lt;br /&gt;
FHEM kann sich &#039;&#039;&#039;nicht&#039;&#039;&#039; als einer der vorhandenen (automatisch angelegten) physischen Sensoren ausgeben (um z.B. das Licht zu schalten), sondern verwendet eigene SenderIDs. Diese FHEM-eigenen SenderIDs können in EnOcean-Aktoren eingelernt werden, damit die Aktoren auf FHEM reagieren [[#Aktoren|siehe unten]].&lt;br /&gt;
&lt;br /&gt;
==== Kontakte ====&lt;br /&gt;
[[EnOcean-STM-250-Fenster-T%C3%BCrkontakt|STM 320 Batterieloses Magnetkontakt-Funkmodul]] ([http://www.enocean.com/de/enocean_module/stm-320-data-sheet-pdf/ Datenblatt])&lt;br /&gt;
&lt;br /&gt;
EEP: D5-00-01&lt;br /&gt;
&lt;br /&gt;
FHEM in den learningMode versetzen, dazu im Befehl-Eingabefeld eingeben:&lt;br /&gt;
 set TCM_ESP3_0 teach 600&lt;br /&gt;
&lt;br /&gt;
Anlerntelegramm laut Anleitung verschicken oder Magnetkontakt öffnen und schließen.&lt;br /&gt;
&lt;br /&gt;
Der Kontakt wird automatisch in FHEM definiert und ist angelernt.&lt;br /&gt;
&lt;br /&gt;
* exemplarischer Auszug aus Konfiguration&lt;br /&gt;
 define EnO_contact_0000FF53 EnOcean 0000FF53&lt;br /&gt;
 attr EnO_contact_0000FF53 IODev TCM_ESP3_0&lt;br /&gt;
 attr EnO_contact_0000FF53 room EnOcean&lt;br /&gt;
 attr EnO_contact_0000FF53 subType contact&lt;br /&gt;
 define FileLog_EnO_contact_0000FF53 FileLog ./log/EnO_contact_0000FF53-%Y.log EnO_contact_0000FF53&lt;br /&gt;
 attr FileLog_EnO_contact_0000FF53 logtype text&lt;br /&gt;
 attr FileLog_EnO_contact_0000FF53 room EnOcean&lt;br /&gt;
&lt;br /&gt;
==== Sonstige Sensoren ====&lt;br /&gt;
===== 4BS-Teach-In =====&lt;br /&gt;
FHEM in den learningMode versetzen, dazu im Befehl-Eingabefeld eingeben:&lt;br /&gt;
 set TCM_ESP3_0 teach 600&lt;br /&gt;
Dann das Anlerntelegramm laut Bedienungsanleitung am Sensor auslösen. Der Sensor wird dann automatisch in FHEM definiert und ist angelernt.&lt;br /&gt;
&lt;br /&gt;
===== Profilloses 4BS-Teach-In =====&lt;br /&gt;
Omnio Ratio eagle-PM101 Licht- und Anwesenheitssensor ([http://www.omnio.ch/content-en/downloads/Betriebsanleitungen/2902000_Betriebsanleitung_ea.pdf Betriebsanleitung])&lt;br /&gt;
&lt;br /&gt;
FHEM in den learningMode versetzen, dazu im Befehl-Eingabefeld eingeben:&lt;br /&gt;
 set TCM_ESP3_0 teach 600&lt;br /&gt;
&lt;br /&gt;
Das Anlerntelegramm vom Omnio Ratio eagle-PM101 verschicken (MÖGLICH??)&lt;br /&gt;
&lt;br /&gt;
Im angelegten FHEM-Device manuell das Attribut &amp;lt;code&amp;gt;subType&amp;lt;/code&amp;gt; auf &amp;lt;code&amp;gt;PM101&amp;lt;/code&amp;gt; setzen.&lt;br /&gt;
&lt;br /&gt;
=== Aktoren ===&lt;br /&gt;
Die Bedienungsanleitungen und die commandref liefern Informationen, welche Anlernvorgänge der Aktor unterstützt. Finden sich keine Hinweise auf besondere PC- oder Gateway-Anlernvorgänge, so kann FHEM als &amp;quot;Notlösung&amp;quot; immer als virtueller FHEM-Schalter (Tasteremulation) angelernt werden. Einige Aktoren unterstützen mehrere Arten von Anlernvorgängen. Hier ist der mit den meisten/besten Steuerungsmöglichkeiten zu bevorzugen.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Aktoren Beispiele:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== unidirektionale Aktoren ====&lt;br /&gt;
Bei unidirektionalen Aktoren steht eine SenderID des TCM-Gateways immer im &amp;lt;code&amp;gt;define&amp;lt;/code&amp;gt; des FHEM-Devices. Mit dieser SenderID steuert FHEM den Aktor. Diese SenderID muss dazu im Aktor eingelernt werden.&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;MERKE:&#039;&#039;&#039; Eine SenderID des TCM-Gateways muss bei unidirektionalen Aktoren immer im &amp;lt;code&amp;gt;define&amp;lt;/code&amp;gt; des Devices stehen.&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;MERKE:&#039;&#039;&#039; Bei unidirektionalen Aktoren stimmt der Status des FHEM-Devices im Webfrontend nur mit dem realen Aktorzustand überein, wenn ausschließlich über FHEM gesteuert wird ([[#Physischer_EnOcean-_und_virtueller_Fhem-Schalter_zu_einem_Device_zusammenfassen|Abhilfe]])}}&lt;br /&gt;
===== Teach-In als Tasteremulation =====&lt;br /&gt;
PEHA 451 FU-EP o.T. (Schaltaktor unidirektional) &lt;br /&gt;
&lt;br /&gt;
Eine [[#Wie ermittelt man freie Sender-IDs des TCM-basierten Funkgateways?|freie SenderID des TCM-basierten Gateways heraussuchen]] und diese als EnOcean-Gerät in FHEM definieren, dazu im Befehl-Eingabefeld eingeben:&lt;br /&gt;
 define eg_fl_Licht EnOcean AABBCC01&lt;br /&gt;
&lt;br /&gt;
Alternativ kann man FHEM auch anweisen, für das EnOcean-Gerät selbst die nächste freie SenderID zu ermitteln. Die Definition ist dann folgendermaßen vorzunehmen:&lt;br /&gt;
 define eg_fl_Licht EnOcean getNextID&lt;br /&gt;
&lt;br /&gt;
Anschließend das Attribut &amp;lt;code&amp;gt;subType&amp;lt;/code&amp;gt; beim erzeugten Device auf &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; setzen. Durch diese Definition wird ein 8-fach EnOcean-Taster erzeugt. Der Taster hat 4 Kanäle (A,B,C,D) zu je 2 Tasten (0,I). Alle diese 8 Taster senden mit der gleichen SenderID des TCM. Das entspricht einem Gerät mit 4 Schaltwippen die jeweils &amp;quot;oben&amp;quot; &#039;&#039;&#039;oder&#039;&#039;&#039; &amp;quot;unten&amp;quot; gedrückt sein können. FHEM emuliert mit diesem EnOcean-Gerät einen EnOcean-Schalter (darum auch &amp;quot;virtueller FHEM-Schalter&amp;quot;). Der Taster 0 des Kanal A wird &amp;quot;gedrückt&amp;quot; mit &amp;lt;code&amp;gt;set eg_fl_Licht A0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dieser virtuelle FHEM-Schalter wird in den Aktor wie ein physischer Schalter eingelernt. Den Aktor in den Anlernmodus bringen (Taste LRN/SET drücken) und den virtuellen FHEM-Schalter betätigen, indem im Befehl-Eingabefeld eingeben wird:&lt;br /&gt;
 set eg_fl_Licht B0&lt;br /&gt;
Wenn der Aktor den erfolgreichen Anlernvorgang signalisiert, den Anlernmodus am Aktor ausschalten.&lt;br /&gt;
&lt;br /&gt;
* exemplarischer Auszug aus Konfiguration&lt;br /&gt;
 define eg_fl_Licht EnOcean AABBCC01        &amp;lt;--- AABBCC01 ist eine der 127 SenderID&#039;s des TCM, mit der FHEM sendet &lt;br /&gt;
 attr eg_fl_Licht room EG_Flur&lt;br /&gt;
 attr eg_fl_Licht eventMap BI:off B0:on&lt;br /&gt;
 attr eg_fl_Licht subType switch&lt;br /&gt;
 define FileLog_eg_fl_Licht FileLog ./log/ eg_fl_Licht-%Y.log eg_fl_Licht&lt;br /&gt;
 attr FileLog_eg_fl_Licht logtype text&lt;br /&gt;
&lt;br /&gt;
Der Status des Devices im Webfrontend stimmt bei unidirektionalen Aktoren nur, wenn die Steuerung des Aktors ausschließlich über FHEM erfolgt. Wird der Aktor sowohl über einen physischen Schalter als auch über FHEM gesteuert, so müssen die Stati der beiden Devices für physischen und virtuellen Schalter im Webfrontend verknüpft werden, damit der richtige Status des Aktors angezeigt wird ([[#Physischer EnOcean- und virtueller FHEM-Schalter zu einem Device zusammenfassen |siehe unten]]).&lt;br /&gt;
&lt;br /&gt;
===== Teach-In als Gateway/PC-Steuerung =====&lt;br /&gt;
&amp;quot;ältere&amp;quot; Eltako FSB61 (Produktionszeitraum KW 43/10 - KW 40/11 [http://www.eltako.com/fileadmin/downloads/de/_bedienung/FSB61NP_30200420-3_dtsch.pdf Bedienungsanleitung])&lt;br /&gt;
&lt;br /&gt;
EEP: A5-3F-7F &lt;br /&gt;
&lt;br /&gt;
Eine [[#Wie ermittelt man freie Sender-IDs des TCM-basierten Funkgateways?|freie SenderID des TCM-basierten Gateways heraussuchen]] und diese als EnOcean-Gerät in FHEM definieren, dazu im Befehl-Eingabefeld eingeben:&lt;br /&gt;
 define eg_fl_Rollo EnOcean AABBCC02&lt;br /&gt;
&lt;br /&gt;
Alternativ kann man FHEM auch anweisen, für das EnOcean-Gerät selbst die nächste freie SenderID zu ermitteln. Die Definiton ist dann folgendermaßen vorzunehmen:&lt;br /&gt;
 define eg_fl_Rollo EnOcean getNextID&lt;br /&gt;
&lt;br /&gt;
Beim erzeugten FHEM-Device muss das Attribut &amp;lt;code&amp;gt;subType&amp;lt;/code&amp;gt; auf &amp;lt;code&amp;gt;manufProfile&amp;lt;/code&amp;gt; gesetzt werden. Die Attribute &amp;lt;code&amp;gt;manufID&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;model&amp;lt;/code&amp;gt; sind auf die unten in der Konfiguration gezeigten Werte zu setzen.&lt;br /&gt;
&lt;br /&gt;
Dieser virtuelle FHEM-Schalter wird in den Aktor als PC/Szenentaster angelernt indem im Befehl-Eingabefeld eingeben wird:&lt;br /&gt;
 set eg_fl_Rollo teach&lt;br /&gt;
Wenn der Aktor den erfolgreichen Anlernvorgang signalisiert, den Anlernmodus am Aktor ausschalten.&lt;br /&gt;
&lt;br /&gt;
* exemplarischer Auszug aus Konfiguration&lt;br /&gt;
 define eg_fl_Rollo EnOcean AABBCC02        &amp;lt;--- AABBCC02 ist eine der 127 SenderID&#039;s des TCM, mit der FHEM sendet &lt;br /&gt;
 attr eg_fl_Rollo room EG_Flur&lt;br /&gt;
 attr eg_fl_Rollo subType manufProfile&lt;br /&gt;
 attr eg_fl_Rollo manufID 00D&lt;br /&gt;
 attr eg_fl_Rollo model FSB61&lt;br /&gt;
&lt;br /&gt;
Der Status des Devices im Webfrontend stimmt bei unidirektionalen Aktoren nur, wenn die Steuerung des Aktors ausschließlich über FHEM erfolgt. Wird der Aktor sowohl über einen physischen Schalter als auch über FHEM gesteuert, so müssen die Stati der beiden Devices für physischen und virtuellen Schalter im Webfrontend verknüpft werden, damit der richtige Status des Aktors angezeigt wird ([[#Physischer EnOcean- und virtueller FHEM-Schalter zu einem Device zusammenfassen |siehe unten]]).&lt;br /&gt;
&lt;br /&gt;
==== bidirektionale Aktoren ====&lt;br /&gt;
Bei bidirektionalen Aktoren steht die SenderID des Aktors im &amp;lt;code&amp;gt;define&amp;lt;/code&amp;gt; des FHEM-Devices. FHEM ordnet empfangene Bestätigungstelegramme anhand der Aktor-SenderID dem passenden FHEM-Device zu. Eine SenderID des TCM-Gateways mit der FHEM den Aktor steuert steht bei bidirektionalen Aktoren immer im Attribut &amp;lt;code&amp;gt;subDef&amp;lt;/code&amp;gt;. Diese SenderID muss dazu im Aktor eingelernt werden.&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;MERKE:&#039;&#039;&#039; Eine SenderID des TCM-Gateways muss bei bidirektionalen Aktoren immer im Attribut &amp;lt;code&amp;gt;subDef&amp;lt;/code&amp;gt; des Devices stehen.&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;MERKE:&#039;&#039;&#039; Bei bidirektionalen Aktoren stimmt nach korrekter Einbindung in FHEM der Status des FHEM-Devices im Webfrontend immer mit dem realen Aktorzustand überein.}}&lt;br /&gt;
===== Teach-In als Tasteremulation =====&lt;br /&gt;
[[EnOcean-FSR61VA-10A-Stromsto%C3%9F-Schaltrelais_mit_Strommessung|10A-Stromstoß-Schaltrelais mit Strommessung FSR61VA]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Schaltrelais (bidirektional)&lt;br /&gt;
&lt;br /&gt;
FHEM in den learningMode versetzen, dazu im Befehl-Eingabefeld eingeben:&lt;br /&gt;
 set TCM_ESP3_0 teach 600&lt;br /&gt;
&lt;br /&gt;
Die [[#SenderID|SenderID]] des Aktors heraussuchen und diese als EnOcean-Gerät in FHEM definieren, dazu im Befehl-Eingabefeld eingeben:&lt;br /&gt;
 define EnO_switch_FSR61VA EnOcean FFAABBC0&lt;br /&gt;
&lt;br /&gt;
Eine freie SenderID des TCM-basierten Gateways heraussuchen und diese im Attribut &amp;lt;code&amp;gt;subDef&amp;lt;/code&amp;gt; des angelegten Devices hinterlegen.&lt;br /&gt;
&lt;br /&gt;
Anschließend die Attribute &amp;lt;code&amp;gt;subType&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;switchMode&amp;lt;/code&amp;gt; wie im unten wiedergegebenen exemplarischen Auszug aus der Konfiguration anlegen.&lt;br /&gt;
&lt;br /&gt;
Damit der FSR61VA auf FHEM reagieren kann (Ein/Ausschalten), wird das FHEM-Device EnO_switch_FSR61VA in den FSR61VA als Richtungstaster (bzw. Taster ein/aus) eingelernt:&lt;br /&gt;
# Unterer Drehschalter je nach Produktionswoche des FSR61VA (aufgedruckt):&lt;br /&gt;
## bis KW 2/13: &amp;quot;ca. Mitte&amp;quot; (Taster Ein/Aus einlernen)&lt;br /&gt;
## ab KW 3/13 bis KW 10/14: &amp;quot;60&amp;quot; (Taster Ein/Aus einlernen)&lt;br /&gt;
## ab KW 11/14: &amp;quot;40&amp;quot; (Richtungstaster einlernen)&lt;br /&gt;
# Oberer Funktions-Drehschalter: &amp;quot;LRN&amp;quot; (LED blinkt)&lt;br /&gt;
# FHEM Eingabefeld: „set EnO_switch_FSR61VA B0“, &amp;amp;lt;Enter&amp;amp;gt; (LED erlischt)&lt;br /&gt;
# Oberer Funktions-Drehschalter: Eine der ESV-Einstellungen&lt;br /&gt;
# Unterer Funktions-Drehschalter: auf &amp;quot;oo&amp;quot; einstellen (unendlich)&lt;br /&gt;
&lt;br /&gt;
* exemplarischer Auszug aus der Konfiguration&lt;br /&gt;
 define EnO_switch_FSR61VA EnOcean FFAABBC0         --&amp;gt; EnO_switch_FSR61VA ist ein frei gewählter eindeutiger Name&lt;br /&gt;
                                                        für das FHEM-Device.&lt;br /&gt;
                                                        FFAABBC0 ist die erste am Boden des FSR61VA aufgedruckte SenderID. &lt;br /&gt;
                                                        Damit sendet das FSR61VA den Schaltzustand (B0/BI --&amp;gt; ein/aus)&lt;br /&gt;
 attr EnO_switch_FSR61VA IODev TCM_ESP3_0             --&amp;gt; TCM_ESP3_0 ist der Name des Devices, mit dem FHEM EnOcean-Funk &lt;br /&gt;
                                                        sendet und empfängt.&lt;br /&gt;
 attr EnO_switch_FSR61VA subDef FF998877            --&amp;gt; FF998877 ist eine der 127 SendeIDs des TCM_ESP3_0, damit sendet FHEM an den FSR61VA&lt;br /&gt;
 attr EnO_switch_FSR61VA subType switch             --&amp;gt; es handelt sich um einen EnOcean Schalter (der kann A0, AI, B0, BI,...)&lt;br /&gt;
 attr EnO_switch_FSR61VA switchMode pushbutton      --&amp;gt; als &amp;quot;pushbutton&amp;quot; sendet FHEM bei einem &lt;br /&gt;
                                                        &amp;quot;set EnO_switch_FSR61VA B0&amp;quot; nach dem Kommando (B0) noch ein &amp;quot;release&amp;quot;.&lt;br /&gt;
                                                        Das brauchts, wenn der FSR61VA als ES oder ESV betrieben wird.&lt;br /&gt;
                                                        Sonst wird jedes &amp;quot;set&amp;quot;-Kommando vom FSR61VA als  &lt;br /&gt;
                                                        &amp;quot;länger als eine Sekunde gedrückt&amp;quot; interpretiert -&amp;gt; &amp;quot;Tasterdauerlicht&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== Unidirektionales 4BS-Teach-In =====&lt;br /&gt;
[[EnOcean-FSR14-4x-RS485-Bus-Schaltaktor-4-Kanal-Stromsto%C3%9F-Schaltrelais|RS485-Bus-Aktor 4-Kanal-Stromstoß-Schaltrelais FSR14]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Schaltrelais (bidirektional)&lt;br /&gt;
&lt;br /&gt;
FHEM in den learningMode versetzen, dazu im Befehl-Eingabefeld eingeben:&lt;br /&gt;
 set TCM_ESP3_0 teach 600&lt;br /&gt;
&lt;br /&gt;
Die [[#SenderID|SenderID]] des Aktors heraussuchen und diese als EnOcean-Gerät in FHEM definieren, dazu im Befehl-Eingabefeld eingeben:&lt;br /&gt;
 define EnOcean_switch_FEFF4AF8 EnOcean FEFF4AF8&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=Ab {{Link2Forum|Topic=31450|Message=239937|LinkText=Updatestand 04.01.2015}} ist eine manuelle Vergabe einer freien SenderID per &amp;lt;code&amp;gt;subDef&amp;lt;/code&amp;gt; nicht mehr notwendig. Beim ersten Senden des &amp;quot;teach&amp;quot;-Befehls an den Aktor wird eine freie SenderID vergeben, sofern keine gültige SenderID eingetragen war.}}&lt;br /&gt;
Eine freie SenderID des TCM-basierten Gateways heraussuchen und diese im Attribut &amp;lt;code&amp;gt;subDef&amp;lt;/code&amp;gt; des angelegten Devices hinterlegen.&lt;br /&gt;
&lt;br /&gt;
Anschließend die Attribute &amp;lt;code&amp;gt;subType&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;gwCmd&amp;lt;/code&amp;gt; wie im unten wiedergegebenen exemplarischen Auszug aus der Konfiguration anlegen.&lt;br /&gt;
&lt;br /&gt;
Jetzt den Aktor in den Lernmodus versetzen und dann von FHEM das Lerntelegramm verschicken:&lt;br /&gt;
 set EnOcean_switch_FEFF4AF8 teach&lt;br /&gt;
Lernmodus am Aktor ausschalten&lt;br /&gt;
&lt;br /&gt;
* exemplarischer Auszug aus Konfiguration&lt;br /&gt;
 define EnOcean_switch_FEFF4AF8 EnOcean FEFF4AF8   &amp;lt;--- FEFF4AF8 ist hier die SenderID eines FSR14-Kanals (Aktor)&lt;br /&gt;
 attr EnOcean_switch_FEFF4AF8 subDef AABBCC03      &amp;lt;--- AABBCC03 ist eine der 127 SenderID&#039;s des TCM, mit der FHEM sendet [[#Taster - physisch und in FHEM|(siehe unten)]]&lt;br /&gt;
 attr EnOcean_switch_FEFF4AF8 room EnOcean        # Der Raum kann angepasst werden&lt;br /&gt;
 attr EnOcean_switch_FEFF4AF8 gwCmd switching     # Wichtig für FSR14&lt;br /&gt;
 attr EnOcean_switch_FEFF4AF8 subType gateway     # Wichtig für FSR14&lt;br /&gt;
 define FileLog_EnOcean_switch_FEFF4AF8 FileLog ./log/EnOcean_switch_FEFF4AF8-%Y.log EnOcean_switch_FEFF4AF8&lt;br /&gt;
 attr FileLog_EnOcean_switch_FEFF4AF8 logtype text&lt;br /&gt;
&lt;br /&gt;
===== Bidirektionales 4BS-Teach-In =====&lt;br /&gt;
[[EnOcean-MD15-Kleinstellantrieb|Kleinstellantrieb MD15-FTL-xx]]&amp;lt;br/&amp;gt; &lt;br /&gt;
Funkgesteuerter, batteriegespeister Kleinstellantrieb für Raumtemperaturregelung (bidirektional)&lt;br /&gt;
&lt;br /&gt;
EEP: A5-20-01&lt;br /&gt;
&lt;br /&gt;
4BS-Bidirektionales-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#Aktor möglichst komplett zurücksetzen, sofern nicht mehr im Original-Auslieferzustand&lt;br /&gt;
#Falls vorhanden, alle bisherigen FHEM-Devices des Aktors löschen und nach Speichern der geänderten Konfiguration FHEM neu starten&lt;br /&gt;
#FHEM in Lernmodus schalten: &amp;lt;code&amp;gt;set &amp;lt;nowiki&amp;gt;&amp;lt;IODev&amp;gt; teach &amp;lt;time/s&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Taster am MD15-FTL-xx so lange drücken, bis ein Signalton ertönt. MD15 bestätigt erfolgreichen Anlernvorgang durch das Aufleuchten der Status-LED und 2 Signaltöne&lt;br /&gt;
#Aktor wird in FHEM automatisch mit allen notwendigen Parametern angelegt.&lt;br /&gt;
&lt;br /&gt;
* exemplarischer Auszug aus Konfiguration&lt;br /&gt;
 define EnO_sensor_01000EFA EnOcean 01000EFA&lt;br /&gt;
 attr EnO_sensor_01000EFA IODev TCM_ESP3_0&lt;br /&gt;
 attr EnO_sensor_01000EFA comMode biDir&lt;br /&gt;
 attr EnO_sensor_01000EFA destinationID unicast&lt;br /&gt;
 attr EnO_sensor_01000EFA manufID 00A&lt;br /&gt;
 attr EnO_sensor_01000EFA room EnOcean&lt;br /&gt;
 attr EnO_sensor_01000EFA subDef AABBCC04&lt;br /&gt;
 attr EnO_sensor_01000EFA subType hvac.01&lt;br /&gt;
 define FileLog_EnO_sensor_01000EFA FileLog ./log/EnO_sensor_01000EFA-%Y.log EnO_sensor_01000EFA&lt;br /&gt;
 attr FileLog_EnO_sensor_01000EFA logtype text&lt;br /&gt;
 attr FileLog_EnO_sensor_01000EFA room EnOcean&lt;br /&gt;
&lt;br /&gt;
===== UTE-Teach-In =====&lt;br /&gt;
[[EnOcean-D-452-FU-EBIM-Aktor-2fach|Einbau-Aktor 452 FU-EBIM o.T.]]&amp;lt;br/&amp;gt;&lt;br /&gt;
2-Kanal-Multifunktionsaktor (bidirektional) mit Energiemessfunktion&lt;br /&gt;
&lt;br /&gt;
EEP: D2-01-08&lt;br /&gt;
&lt;br /&gt;
UTE-Teach-In:&lt;br /&gt;
&lt;br /&gt;
#Aktor möglichst komplett zurücksetzen, sofern nicht mehr im Original-Auslieferzustand&lt;br /&gt;
#Falls vorhanden, alle bisherigen FHEM Devices des Aktors löschen und nach Speichern der geänderten Konfiguration FHEM neu starten&lt;br /&gt;
#FHEM in Lernmodus schalten: &amp;lt;code&amp;gt;set &amp;lt;nowiki&amp;gt;&amp;lt;IODev&amp;gt; teach &amp;lt;time/s&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#Aktor-Kanal 0 oder 1 in Lernmodus versetzen (immer nur einen Kanal)&lt;br /&gt;
#Aktor-Kanal 0 oder 1 wird in FHEM automatisch mit allen notwendigen Parametern angelegt.&lt;br /&gt;
#Das Anlernen für den zweiten Kanal wie nach 3. bis 5. beschrieben wiederholen&lt;br /&gt;
&lt;br /&gt;
Die Kanäle können jetzt geschaltet werden mit:&lt;br /&gt;
&lt;br /&gt;
*FHEM Device für Kanal 0: set &amp;lt;Name_0&amp;gt; on|off 0&lt;br /&gt;
*FHEM Device für Kanal 1: set &amp;lt;Name_1&amp;gt; on|off 1&lt;br /&gt;
&lt;br /&gt;
Falls gewünscht, kann der Kanal mit dem Attribut attr &amp;lt;Name_0|1&amp;gt; defaultChannel 0|1 voreingestellt werden. Dann entfällt die Angabe des Kanals im set-Befehl.&lt;br /&gt;
&lt;br /&gt;
Die Statusrückmeldungen mit den aktuellen Werten des Energieverbrauches und der Leistung werden vom Aktor automatisch gesendet. Sie werden sowohl als Telegramme nach EEP D2-01-08 als auch nach EEP A5-11-04 mit unterschiedlichen SenderIDs (vgl. Etikett in Original-Verpackung) gesendet.&lt;br /&gt;
Die Rückmeldungen nach EEP D2-01-08 werden von FHEM im Aktor-Device subType actuator.01 berücksichtigt. Die Rückmeldungen nach EEP A5-11-04 werden von FHEM in einem senor-device subType lightCtrlState.02 berücksichtigt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Besonderheiten für die Anzeige im WebFrontend ==&lt;br /&gt;
&lt;br /&gt;
=== Aufteilung der Kanäle in unabhängige Devices ===&lt;br /&gt;
===== Mehrkanalige bidirektionale Aktoren =====&lt;br /&gt;
Mehrkanalige bidirektionale Aktoren (bspw. Eltako FMS61NP) haben teilweise nur eine SenderID und werden daher in FHEM über ein FHEM-Device im Webfrontend abgebildet und gesteuert. Um im WebFrontend für jeden Kanal ein separates FHEM-Device zur Anzeige und Steuerung zu erhalten, kann [[ReadingsProxy|readingsProxy]] genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Zunächst wird der Aktor standardmäßig in FHEM definiert/angelernt und die Funktion geprüft (hier am Beispiel eines Aktor mit dem Namen &amp;quot;Aktor&amp;quot;). Anschließend wird pro Kanal ein readingProxy-Device mit Bezug auf das Reading channelA, channelB, ... angelegt:&lt;br /&gt;
&lt;br /&gt;
 #Kanal A zur Steuerung mit on und off&lt;br /&gt;
 define AktorKanalA readingsProxy Aktor:channelA&lt;br /&gt;
 attr AktorKanalA setFn {($CMD eq &amp;quot;on&amp;quot;)?&amp;quot;A0&amp;quot;:&amp;quot;AI&amp;quot;;;} &lt;br /&gt;
 attr AktorKanalA setList off on &lt;br /&gt;
 attr AktorKanalA valueFn {($VALUE eq &amp;quot;A0&amp;quot;)?&amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;}&lt;br /&gt;
 attr AktorKanalA webCmd off:on &lt;br /&gt;
&lt;br /&gt;
 #Kanal B zur Steuerung mit on und off&lt;br /&gt;
 define AktorKanalB readingsProxy Aktor:channelB&lt;br /&gt;
 attr AktorKanalB setFn {($CMD eq &amp;quot;on&amp;quot;)?&amp;quot;B0&amp;quot;:&amp;quot;BI&amp;quot;;;} &lt;br /&gt;
 attr AktorKanalB setList off on &lt;br /&gt;
 attr AktorKanalB valueFn {($VALUE eq &amp;quot;B0&amp;quot;)?&amp;quot;on&amp;quot;:&amp;quot;off&amp;quot;}&lt;br /&gt;
 attr AktorKanalB webCmd off:on &lt;br /&gt;
&lt;br /&gt;
Jeder Kanal wird jetzt separat im WebFrontend durch das readingsProxy-Device abgebildet (Statusanzeige) und kann mit diesem gesteuert werden.&lt;br /&gt;
&lt;br /&gt;
===== Virtuelle Schalter für unidirektionale Aktoren =====&lt;br /&gt;
Um die 4 Kanäle jeweils einzeln als Schalter (einzelne Schaltwippe) im WebFrontend abzubilden kann [[ReadingsProxy|readingsProxy]] genutzt werden. So werden vier Schalter (im unten gezeigten Beispiel: fhemSchalterKanal[A-D]) mit nur einer der 127 eigenen SenderIDs zur Verfügung gestellt.&lt;br /&gt;
&lt;br /&gt;
Anders als bei den bekannten bidirektionalen Aktoren und den FHEM-Devices der physischen Schalter, existiert bei den virtuellen Schaltern das Reading channelA, channelB, ... nicht. Daher muss das readingsProxy für den virtuellen Schalter vom Reading state abgeleitet werden:&lt;br /&gt;
&lt;br /&gt;
 #Kanal A zur Steuerung mit on und off&lt;br /&gt;
 define fhemSchalterKanalA readingsProxy fhemSchalter:state&lt;br /&gt;
 attr fhemSchalterKanalA setFn {($CMD eq &amp;quot;on&amp;quot;)?&amp;quot;A0&amp;quot;:&amp;quot;AI&amp;quot;;;}&lt;br /&gt;
 attr fhemSchalterKanalA setList on off&lt;br /&gt;
 attr fhemSchalterKanalA valueFn {$LASTCMD}&lt;br /&gt;
 attr fhemSchalterKanalA webCmd on:off&lt;br /&gt;
&lt;br /&gt;
 #Kanal B zur Steuerung mit on und off&lt;br /&gt;
 define fhemSchalterKanalB readingsProxy fhemSchalter:state&lt;br /&gt;
 attr fhemSchalterKanalB setFn {($CMD eq &amp;quot;on&amp;quot;)?&amp;quot;B0&amp;quot;:&amp;quot;BI&amp;quot;;;}&lt;br /&gt;
 attr fhemSchalterKanalB setList on off&lt;br /&gt;
 attr fhemSchalterKanalB valueFn {$LASTCMD}&lt;br /&gt;
 attr fhemSchalterKanalB webCmd on:off&lt;br /&gt;
&lt;br /&gt;
 #Kanal C zur Steuerung mit on und off&lt;br /&gt;
 define fhemSchalterKanalC readingsProxy fhemSchalter:state&lt;br /&gt;
 attr fhemSchalterKanalC setFn {($CMD eq &amp;quot;on&amp;quot;)?&amp;quot;C0&amp;quot;:&amp;quot;CI&amp;quot;;;}&lt;br /&gt;
 attr fhemSchalterKanalC setList on off&lt;br /&gt;
 attr fhemSchalterKanalC valueFn {$LASTCMD}&lt;br /&gt;
 attr fhemSchalterKanalC webCmd on:off&lt;br /&gt;
&lt;br /&gt;
 #Kanal D zur Steuerung mit on und off&lt;br /&gt;
 define fhemSchalterKanalD readingsProxy fhemSchalter:state&lt;br /&gt;
 attr fhemSchalteKanalD setFn {($CMD eq &amp;quot;on&amp;quot;)?&amp;quot;D0&amp;quot;:&amp;quot;DI&amp;quot;;;}&lt;br /&gt;
 attr fhemSchalterKanalD setList on off&lt;br /&gt;
 attr fhemSchalterKanalD valueFn {$LASTCMD}&lt;br /&gt;
 attr fhemSchalterKanalD webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Werden diese FHEM-Taster (und etwaige physische Taster) in EnOcean-Aktoren eingelernt (siehe Anleitung des Aktors), so können nun die EnOcean-Aktoren mit physischen Tastern (sendet mit der 8-stelligen SenderID des Tasters) und mit virtuellen FHEM-Readingsproxy-Schaltern (senden mit einer der 127 eigenen SenderIDs) bedient werden.&lt;br /&gt;
&lt;br /&gt;
=== Physischer EnOcean- und virtueller Fhem-Schalter zu einem Device zusammenfassen ===&lt;br /&gt;
Um im Webfrontend die Aktionen beider Schalter in einem Element zusammengefasst und damit den realen Zustand bei &#039;&#039;&#039;unidirektionalen&#039;&#039;&#039; Aktoren zu sehen, kann man eine &amp;lt;code&amp;gt;structure&amp;lt;/code&amp;gt; nutzen:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
(Bei bidirektionalen Aktoren ist dies aufgrund der Statusrückmeldungen nicht notwendig. Achtung: Teilweise müssen Statusrückmeldungen/Bestätigungstelegramme erst am Aktor eingeschaltet werden)&lt;br /&gt;
&lt;br /&gt;
 #Definition des virtuellen FHEM-Schalters&lt;br /&gt;
 define fhemSchalter EnOcean AABBCC01              &amp;lt;--- AABBCC01 ist eine der 127 SenderID&#039;s des TCM, mit der FHEM sendet&lt;br /&gt;
 attr fhemSchalter eventMap BI:off B0:on&lt;br /&gt;
 attr fhemSchalter icon icoBELEUCHTUNG.png&lt;br /&gt;
 attr fhemSchalter subType switch&lt;br /&gt;
 &lt;br /&gt;
 #Definition des physischen Tasters (z.B. durch autocreate erzeugt)&lt;br /&gt;
 define EnO_switch_0021E4BB EnOcean 0021E4BB      &amp;lt;--- 0021E4BB ist die (aufgedruckte) 8-stellige SenderID des physischen Tasters&lt;br /&gt;
 attr EnO_switch_0021E4BB eventMap BI:off B0:on&lt;br /&gt;
 attr EnO_switch_0021E4BB room EnOcean&lt;br /&gt;
 attr EnO_switch_0021E4BB subType switch&lt;br /&gt;
 attr EnO_switch_0021E4BB dummy&lt;br /&gt;
 &lt;br /&gt;
 #fhemSchalter ist der Name des virtuellen FHEM-Schalters&lt;br /&gt;
 #EnO_switch_0021E4BB ist der (z.B. per autocreate erstellte) FHEM-Taster&lt;br /&gt;
 define Gruppe_test_notify structure room fhemSchalter EnO_switch_0021E4BB&lt;br /&gt;
 attr Gruppe_test_notify eventMap BI:off B0:on&lt;br /&gt;
 attr Gruppe_test_notify room Gaestezimmer&lt;br /&gt;
 attr Gruppe_test_notify clientstate_behavior last&lt;br /&gt;
&lt;br /&gt;
Alternativ kann man für diesen Zweck auch ein &amp;lt;code&amp;gt;notify&amp;lt;/code&amp;gt; in Verbindung mit &amp;lt;code&amp;gt; setreading &amp;lt;device&amp;gt; state &amp;lt;state&amp;gt;&amp;lt;/code&amp;gt; nutzen:&lt;br /&gt;
&lt;br /&gt;
 define nAbgleich notify EnO_switch_0021E4BB:(on|off) setreading fhemSchalter state $EVENT&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
=== Warum schaltet mein Aktor nicht, wenn ich im WebFrontend auf das Icon für den physischen Taster/Schalter klicke bzw. mit &amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; &amp;lt;command&amp;gt;&amp;lt;/code&amp;gt; ansteuere? ===&lt;br /&gt;
:Aus Sicherheitsgründen können bei EnOcean keine physischen Geräte(-adressen) durch FHEM bzw. das TCM-Gateway emuliert werden. FHEM muss zur Steuerung separat an den Aktor angelernt werden. Dazu eine der TCM-Adressen an den Aktor anlernen.&lt;br /&gt;
&lt;br /&gt;
=== Welche Infos sollten Anfragen im EnOcean-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 devices (&amp;lt;code&amp;gt;list &amp;lt;device&amp;gt;&amp;lt;/code&amp;gt;) oder zumindest Config-Auszug&lt;br /&gt;
* passender Ausschnitt aus Logfile (siehe Link im FHEM-Menülinks) mit verbose 5 (&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; verbose 5&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich zur Fortentwicklung der EnOcean-Module beitragen? ===&lt;br /&gt;
* Erfolgreichen Einsatz von neuen/bisher nicht gemeldeten EnOcean-Geräten im Forum mitteilen&lt;br /&gt;
* In der Commandref als [untested] markierte EEPs bei erfolgreichen Tests im Forum als getestet melden&lt;br /&gt;
* Codeschnipsel und Ideen im Forum posten&lt;br /&gt;
* Fehler und Probleme im Forum melden&lt;br /&gt;
* Wiki: Neue Geräte ins Wiki aufnehmen; Codeschnipsel und Beispiele einpflegen&lt;br /&gt;
&lt;br /&gt;
=== Wie findet man die Sender-ID eines bidirektionalen Aktors? ===&lt;br /&gt;
* Aufkleber auf dem Aktor oder beigelegte Information in der Aktorverpackung&lt;br /&gt;
* Ermittlung mit FHEM:&lt;br /&gt;
# Bestätigungstelegramme am Aktor aktivieren&lt;br /&gt;
# Funktaster am Aktor anlernen oder alternativ Taster am örtlichen Steuereingang anschließen&lt;br /&gt;
# FHEM in den learningMode versetzen: &amp;lt;code&amp;gt;set &amp;lt;nowiki&amp;gt;&amp;lt;IODev&amp;gt; teach &amp;lt;time/s&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# [[Event monitor|Event Monitor]] aufrufen&lt;br /&gt;
# Aktor mit Taster schalten&lt;br /&gt;
# Im Event Monitor wird nun die Sender-ID des Aktors durch das Bestätigungstelegramm angezeigt. Sofern ein Funktaster zur Ansteuerung genutzt wird, zeigt der Event Monitor auch dessen Sender-ID.&lt;br /&gt;
# FHEM hat mittels autocreate für das Bestätigungstelegramm ein Device angelegt, sofern das vorher noch nicht existierte. Dieses Device kann man nach eventueller Änderung des subType und dem Setzen anderer gegebenenfalls notwendiger Attribute an den Aktor anlernen.&lt;br /&gt;
&lt;br /&gt;
=== Wie ermittelt man freie Sender-IDs des TCM-basierten Funkgateways? ===&lt;br /&gt;
FHEM ermittelt eine freie SenderID automatisch, wenn die Definition folgermaßen erfolgt:&lt;br /&gt;
* unidirektionaler Aktor:&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;define &amp;lt;name&amp;gt; EnOcean getNextID &amp;lt;EEP&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Im definierten Device ist &amp;quot;getNextID&amp;quot; durch eine freie SenderID des TCMs ersetzt.&lt;br /&gt;
* bidirektionaler Aktor:&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;define &amp;lt;name&amp;gt; EnOcean &amp;lt;SenderId des Aktors&amp;gt; &amp;lt;EEP&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Dem definierten Device wird das Attribut &amp;lt;code&amp;gt;subDef&amp;lt;/code&amp;gt; mit dem Wert &amp;lt;code&amp;gt;getNextId&amp;lt;/code&amp;gt; zugewiesen: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attr &amp;lt;name&amp;gt; subDef getNextID&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. &amp;quot;getNextID&amp;quot; ersetzt FHEM automatisch durch eine freie SenderID des TCMs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Manuelle Ermittlung der freien SenderIDs, wenn die obige automatische mit FHEM fehlschlägt oder eine manuelle Vergabe gewünscht wird:&lt;br /&gt;
* Aus der oben [[EnOcean_Starter_Guide#Vorbereitung|gezeigten Tabelle]]&lt;br /&gt;
* Anzeige der nächsten freien Sender-ID: &amp;lt;pre&amp;gt;{EnOcean_CheckSenderID(&amp;quot;getNextID&amp;quot;, &amp;quot;&amp;lt;IODev&amp;gt;&amp;quot;, &amp;quot;0000000&amp;quot;)}&amp;amp;#13; &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Auflistung der bereits vergebenen Sender-IDs: &amp;lt;pre&amp;gt;{EnOcean_CheckSenderID(&amp;quot;getUsedID&amp;quot;, &amp;quot;&amp;lt;IODev&amp;gt;&amp;quot;, &amp;quot;0000000&amp;quot;)}&amp;amp;#13; &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Auflistung der noch nicht vergebenen Sender-IDs: &amp;lt;pre&amp;gt;{EnOcean_CheckSenderID(&amp;quot;getFreeID&amp;quot;, &amp;quot;&amp;lt;IODev&amp;gt;&amp;quot;, &amp;quot;0000000&amp;quot;)}&amp;amp;#13; &amp;lt;/pre&amp;gt;&lt;br /&gt;
Den jeweiligen Befehl in das &amp;quot;[[Konfiguration#Befehl-Eingabefeld|Befehl-Eingabefeld]]&amp;quot; kopieren, &amp;lt;IODev&amp;gt; durch den Namen des TCM-Devices ersetzen und dann Auslösen.&lt;br /&gt;
&lt;br /&gt;
=== Schaltet immer AI ein und A0 aus, BI ein und B0 aus usw. ? ===&lt;br /&gt;
Nein. &amp;lt;br&amp;gt;&lt;br /&gt;
Das Verhalten der Aktoren ist abhängig vom Hersteller und/oder vom Anlernvorgang. Laut EEP schaltet xI ein und x0 aus. Dies wird von den meisten Herstellern entsprechend umgesetzt. Eltako definiert dies genau andersherum: xI schaltet aus und x0 ein. Analog sind auch die jeweiligen Bestätigungstelegramme der Aktoren herstellerspezifisch festgelegt. Zudem kann bei einigen Aktoren auch je nach Anlernvorgang ein anderes Verhalten erreicht werden; Details enthalten die Bedienungsanleitungen.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann man einen Plot für ein EnOcean-Device anlegen? ===&lt;br /&gt;
Bei der manuellen Anlage von Devices über das EEP und bei der automatischen Anlage durch die autocreate-Funktion beim teach-in werden neben dem Device selbst auch das FileLog-Device und -soweit als Vorlage von FHEM mitgeliefert- die SVG-Devices mit .gplot-Datei für die Plots automatisch erzeugt. Manuell sollten die Devices deshalb möglichst über die Vorgabe des EEP erzeugt werden:&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;define &amp;lt;name&amp;gt; EnOcean &amp;lt;ID&amp;gt; &amp;lt;EEP&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; oder&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;define &amp;lt;name&amp;gt; EnOcean &amp;lt;EEP&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;define test EnOcean A5-04-02&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei bestehenden Devices können die FileLog- und SVG-Devices nachträglich erzeugt werden. Hierzu wird im DEF das entsprechende EEP statt der ID eingetragen und {{Taste|modify &amp;lt;name&amp;gt;}} bestätigt. Nach dem automatischen Anlegen der zugehörigen Devices erscheint dort wieder die ID.&lt;br /&gt;
&lt;br /&gt;
Sollte für das EEP keine .gplot-Vorlage für einen Plot bzw. das SVG-Device existieren, kann ein Plot mit dem [[Plots erzeugen|.gplot-Editor]] erstellt werden.&lt;br /&gt;
&lt;br /&gt;
=== Was muss man beim Einsatz der &amp;quot;set extensions&amp;quot; (on-for-timer, on-till, ...) beachten? ===&lt;br /&gt;
Die [http://fhem.de/commandref#setExtensions set extensions] werden von EnOcean grundsätzlich unterstützt, wenn das Device als &lt;br /&gt;
# set-Befehle &amp;quot;on&amp;quot; und &amp;quot;off&amp;quot; automatisch anbietet &#039;&#039;&#039;oder&#039;&#039;&#039; &lt;br /&gt;
# dies manuell durch das Mapping (bspw. &amp;lt;code&amp;gt;eventMap BI:on B0:off&amp;lt;/code&amp;gt;) erreicht wird.&lt;br /&gt;
&lt;br /&gt;
Im 1. Fall sind alle &amp;quot;set extensions&amp;quot;-Befehle automatisch funktionsfähig.&lt;br /&gt;
&lt;br /&gt;
Im 2. Fall ist die eventMap jedoch zusätzlich - je nach gewünschten &amp;quot;set extensions&amp;quot;-Befehl - zwingend weiter zu ergänzen:&lt;br /&gt;
* on-tor-timer:  &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; eventMap on-for-timer:on-for-timer BI:on B0:off&amp;lt;/code&amp;gt;  ({{Link2Forum|Topic=28855|Message=214960}})&lt;br /&gt;
* off-tor-timer:  &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; eventMap off-for-timer:off-for-timer BI:on B0:off&amp;lt;/code&amp;gt;&lt;br /&gt;
* on-till:  &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; eventMap on-till:on-till BI:on B0:off&amp;lt;/code&amp;gt;  ({{Link2Forum|Topic=29993|Message=226886}})&lt;br /&gt;
* off-till:  &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; eventMap off-till:off-till BI:on B0:off&amp;lt;/code&amp;gt;&lt;br /&gt;
* blink:  &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; eventMap on-for-timer:on-for-timer BI:on B0:off&amp;lt;/code&amp;gt;  ({{Link2Forum|Topic=31358|Message=239151}})&lt;br /&gt;
* intervals:  &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; eventMap on-till:on-till BI:on B0:off&amp;lt;/code&amp;gt;&lt;br /&gt;
Sollen mehrere &amp;quot;set extensions&amp;quot;-Befehle verwendet werden, so sind die obigen Codes entsprechend zu kombinieren.&lt;br /&gt;
&lt;br /&gt;
=== Für mein EnOcean-Gerät gibt es keine spezielle Wiki-Seite; wo finde ich dann Informationen? ===&lt;br /&gt;
* In der commandref nach dem Gerät suchen&lt;br /&gt;
* In der commandref nach dem verwendeten EEP suchen&lt;br /&gt;
* Im Wiki nach einem Gerät mit einer ähnlichen EEP/subType suchen&lt;br /&gt;
* Im EnOcean-Forum nach Threads zum Gerät/EEP suchen&lt;br /&gt;
&lt;br /&gt;
=== Warum funktioniert mein Eltako-Gerät nicht wie in commandref/Wiki beschrieben? ===&lt;br /&gt;
* Eltako-Geräte haben bei gleicher Produktbezeichnung teilweise je nach Produktionswoche unterschiedliche Funktionen/Eigenschaften&lt;br /&gt;
* die Produktionswoche ist auf dem Gerät angegeben (z.B. 11/14 -&amp;gt; Elfte Woche im Jahr 2014)&lt;br /&gt;
* in den nach Produktionswoche untergliederten [http://www.eltako.com/de/bedienungsanleitungen/der-gebaeudefunk.html Bedienungsanleitungen] stehen genauere Angaben&lt;br /&gt;
* Angaben in commandref/Wiki analog für die Angaben laut Bedienungsanleitung für den speziellen Produktionszeitraum umsetzen&lt;br /&gt;
* bei gravierenden Abweichungen und Neuerungen Info im Forum/Wiki &lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich Eltako-Aktoren anhand Ihrer Modellbezeichnung grob unterscheiden? ===&lt;br /&gt;
* 12er Baureihe (ausgelaufen) = unidirektionale RS485-Bus-Aktoren für Hutschiene&lt;br /&gt;
* 14er Baureihe = bidirektionale RS485-Bus-Aktoren für Hutschiene&lt;br /&gt;
* 61er Baureihe = uni- und bidirektionale Aktoren je nach Produktionszeitraum für Einbaumontage (Hohlwanddose)&lt;br /&gt;
* 70/71er Baureihe = uni- und bidirektionale Aktoren je nach Produktionszeitraum für Einbaumontage (Zwischendecke)&lt;br /&gt;
* zwischen den Modellreihen gibt es bei uni- und bidirektonalen Aktoren bei der Ansteuerung Übereinstimmungen; Angaben können dementsprechend analog zwischen den Geräten übertragen werden&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich PEHA-Aktoren anhand Ihrer Modellbezeichnung grob unterscheiden? ===&lt;br /&gt;
* Easyclick-Unterputzempfänger: unidirektionale Aktoren für Einbaumontage; Modellbezeichnung enthält typischerweise die Buchstaben EP&lt;br /&gt;
* Easyclickpro-Unterputzempfänger: bidirektionale Aktoren für Einbaumontage; Modellbezeichnung enthält die Buchstaben EBI oder EBIM (mit zusätzlicher Energiemessung)&lt;br /&gt;
&lt;br /&gt;
=== Wo finde ich Angaben zu Jäger Direkt - OPUS GreenNet EnOcean-Geräten? ===&lt;br /&gt;
* Es handelt sich im Wesentlichen um umgelabelte Produkte anderer Hersteller (Peha, Eltako usw.). Anhand der Gehäuseform lassen sich Rückschlüsse ziehen&lt;br /&gt;
* Angaben zu den &amp;quot;Original&amp;quot;-Produkten können grundsätzlich -soweit bekannt- auf OPUS GreenNet Geräte übertragen werden&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=EnOcean-UPJ230_12-Jalousieaktor&amp;diff=15222</id>
		<title>EnOcean-UPJ230 12-Jalousieaktor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=EnOcean-UPJ230_12-Jalousieaktor&amp;diff=15222"/>
		<updated>2016-04-25T20:37:37Z</updated>

		<summary type="html">&lt;p&gt;Benheim: &amp;quot;Baustelle&amp;quot; entfernt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=Omnio_UPJ230.jpg&lt;br /&gt;
|Bildbeschreibung=UPJ230/12 UP Multifunktions-Jalousieaktor 1-Kanal&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor, Empfänger, Sensor, Repeater&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=230V~&lt;br /&gt;
|HWPowerConsumption=Eigenverbrauch 0,4W&lt;br /&gt;
|HWPoweredBy=230V&lt;br /&gt;
|HWSize=45x50x25mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=[http://www.awag.ch/ AWAG Elektrotechnik AG]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-UPJ230/12-Jalousieaktor&#039;&#039;&#039; ist ein Aktor&lt;br /&gt;
* für&lt;br /&gt;
** Unterputzmontage&lt;br /&gt;
* für&lt;br /&gt;
** Steuerung von Rollladen, Beschattungselementen und elektrisch betriebenen Fenstern&lt;br /&gt;
== Features ==&lt;br /&gt;
Aktor für Beschattungselemente, Rolladen und elektrisch betriebenen Fenster, mit Repeater-Funktion&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
Der Aktor kann, wenn der EnOcean-Empfänger in den Anlernmodus geschaltet wurde, automatisch per autocreate in Fhem angelegt werden. Für die Auswertung und Einstellung der Lamellenposition ist danach manuell ein &amp;lt;code&amp;gt;readingsProxy&amp;lt;/code&amp;gt; definiert werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Schritte sind vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
* Fhem Eingabefeld: &amp;lt;code&amp;gt;set TCM_ESP3_0 teach 300&amp;lt;/code&amp;gt; (Lernmodus für 5 Minuten)&lt;br /&gt;
* Drehschalter am Aktor auf Stellung 13&lt;br /&gt;
* Taste LRN am Aktor für 2 Sekunden drücken&lt;br /&gt;
* Drehschalter am Aktor auf Stellung 11&lt;br /&gt;
* Taste LRN am Aktor drücken&lt;br /&gt;
&lt;br /&gt;
Die Definition des Aktors wird nun erstellt.&lt;br /&gt;
&lt;br /&gt;
Um Zwischenpositionen und Lamellenstellungen anfahren zu können, muss direkt am Aktor die Laufzeit gemäss beiliegender Anleitung erfasst werden (siehe Anleitung S. 4).&lt;br /&gt;
&lt;br /&gt;
=== Fhem Config-Auszug ===&lt;br /&gt;
Ein exemplarischer Auszug aus der [[Konfiguration|fhem.cfg]]:&lt;br /&gt;
&lt;br /&gt;
 define Jal_01 EnOcean 0185D7E8&lt;br /&gt;
 attr Jal_01 IODev TCM_ESP3_0&lt;br /&gt;
 attr Jal_01 comMode biDir&lt;br /&gt;
 attr Jal_01 devChannel 0&lt;br /&gt;
 attr Jal_01 eep D2-05-00&lt;br /&gt;
 attr Jal_01 manufID 005&lt;br /&gt;
 attr Jal_01 subDef FFEFF301&lt;br /&gt;
 attr Jal_01 subType blindsCtrl.00&lt;br /&gt;
 attr Jal_01 teachMethod UTE&lt;br /&gt;
 attr Jal_01 webCmd opens:stop:closes:position&lt;br /&gt;
&lt;br /&gt;
Um die Lamellenstellung zu steuern:&lt;br /&gt;
&lt;br /&gt;
 define Jal_01_Lamellen readingsProxy Jal_01:anglePos&lt;br /&gt;
 attr Jal_01_Lamellen setList angle:slider,1,1,100&lt;br /&gt;
 attr Jal_01_Lamellen webCmd angle&lt;br /&gt;
&lt;br /&gt;
Diese Definition sollte auch für die Steuerung von Fenstern vorgenommen werden. Andernfalls übernimmt der Aktor diese Steuerung, dabei stellt er die Lamellen nach dem Schliessen standardmässig auf &amp;quot;Auf&amp;quot;. Dadurch öffnet sich ein Fenster nach dem Schliessen wieder ein wenig. Ist die Winkelstellung in FHEM eingerichtet, wird das Verhalten des Aktors übersteuert und dauernd auf &amp;quot;Zu&amp;quot; gehalten, das Fenster bleibt nach dem Schliessen geschlossen.&lt;br /&gt;
&lt;br /&gt;
== Einsatzbeispiel ==&lt;br /&gt;
Siehe Beispiele hier: [[EnOcean-FSB61-Aktor-Beschattungselemente-Rollladen]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Anleitung: [http://www.awag.ch/ekat/page_de/upload_insta/UPJ230_12_Bd.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Rollladensteuerung]]&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Benutzer:Benheim&amp;diff=15221</id>
		<title>Benutzer:Benheim</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Benutzer:Benheim&amp;diff=15221"/>
		<updated>2016-04-25T20:37:12Z</updated>

		<summary type="html">&lt;p&gt;Benheim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Keine Seite aktuell in Bearbeitung&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=EnOcean-UPJ230_12-Jalousieaktor&amp;diff=15218</id>
		<title>EnOcean-UPJ230 12-Jalousieaktor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=EnOcean-UPJ230_12-Jalousieaktor&amp;diff=15218"/>
		<updated>2016-04-25T20:35:10Z</updated>

		<summary type="html">&lt;p&gt;Benheim: Benheim verschob die Seite FHEMWiki:EnOcean-UPJ230 12-Jalousieaktor nach EnOcean-UPJ230 12-Jalousieaktor&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=Omnio_UPJ230.jpg&lt;br /&gt;
|Bildbeschreibung=UPJ230/12 UP Multifunktions-Jalousieaktor 1-Kanal&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor, Empfänger, Sensor, Repeater&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=230V~&lt;br /&gt;
|HWPowerConsumption=Eigenverbrauch 0,4W&lt;br /&gt;
|HWPoweredBy=230V&lt;br /&gt;
|HWSize=45x50x25mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=[http://www.awag.ch/ AWAG Elektrotechnik AG]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-UPJ230/12-Jalousieaktor&#039;&#039;&#039; ist ein Aktor&lt;br /&gt;
* für&lt;br /&gt;
** Unterputzmontage&lt;br /&gt;
* für&lt;br /&gt;
** Steuerung von Rollladen, Beschattungselementen und elektrisch betriebenen Fenstern&lt;br /&gt;
== Features ==&lt;br /&gt;
Aktor für Beschattungselemente, Rolladen und elektrisch betriebenen Fenster, mit Repeater-Funktion&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
Der Aktor kann, wenn der EnOcean-Empfänger in den Anlernmodus geschaltet wurde, automatisch per autocreate in Fhem angelegt werden. Für die Auswertung und Einstellung der Lamellenposition ist danach manuell ein &amp;lt;code&amp;gt;readingsProxy&amp;lt;/code&amp;gt; definiert werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Schritte sind vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
* Fhem Eingabefeld: &amp;lt;code&amp;gt;set TCM_ESP3_0 teach 300&amp;lt;/code&amp;gt; (Lernmodus für 5 Minuten)&lt;br /&gt;
* Drehschalter am Aktor auf Stellung 13&lt;br /&gt;
* Taste LRN am Aktor für 2 Sekunden drücken&lt;br /&gt;
* Drehschalter am Aktor auf Stellung 11&lt;br /&gt;
* Taste LRN am Aktor drücken&lt;br /&gt;
&lt;br /&gt;
Die Definition des Aktors wird nun erstellt.&lt;br /&gt;
&lt;br /&gt;
Um Zwischenpositionen und Lamellenstellungen anfahren zu können, muss direkt am Aktor die Laufzeit gemäss beiliegender Anleitung erfasst werden (siehe Anleitung S. 4).&lt;br /&gt;
&lt;br /&gt;
=== Fhem Config-Auszug ===&lt;br /&gt;
Ein exemplarischer Auszug aus der [[Konfiguration|fhem.cfg]]:&lt;br /&gt;
&lt;br /&gt;
 define Jal_01 EnOcean 0185D7E8&lt;br /&gt;
 attr Jal_01 IODev TCM_ESP3_0&lt;br /&gt;
 attr Jal_01 comMode biDir&lt;br /&gt;
 attr Jal_01 devChannel 0&lt;br /&gt;
 attr Jal_01 eep D2-05-00&lt;br /&gt;
 attr Jal_01 manufID 005&lt;br /&gt;
 attr Jal_01 subDef FFEFF301&lt;br /&gt;
 attr Jal_01 subType blindsCtrl.00&lt;br /&gt;
 attr Jal_01 teachMethod UTE&lt;br /&gt;
 attr Jal_01 webCmd opens:stop:closes:position&lt;br /&gt;
&lt;br /&gt;
Um die Lamellenstellung zu steuern:&lt;br /&gt;
&lt;br /&gt;
 define Jal_01_Lamellen readingsProxy Jal_01:anglePos&lt;br /&gt;
 attr Jal_01_Lamellen setList angle:slider,1,1,100&lt;br /&gt;
 attr Jal_01_Lamellen webCmd angle&lt;br /&gt;
&lt;br /&gt;
Diese Definition sollte auch für die Steuerung von Fenstern vorgenommen werden. Andernfalls übernimmt der Aktor diese Steuerung, dabei stellt er die Lamellen nach dem Schliessen standardmässig auf &amp;quot;Auf&amp;quot;. Dadurch öffnet sich ein Fenster nach dem Schliessen wieder ein wenig. Ist die Winkelstellung in FHEM eingerichtet, wird das Verhalten des Aktors übersteuert und dauernd auf &amp;quot;Zu&amp;quot; gehalten, das Fenster bleibt nach dem Schliessen geschlossen.&lt;br /&gt;
&lt;br /&gt;
== Einsatzbeispiel ==&lt;br /&gt;
Siehe Beispiele hier: [[EnOcean-FSB61-Aktor-Beschattungselemente-Rollladen]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Anleitung: [http://www.awag.ch/ekat/page_de/upload_insta/UPJ230_12_Bd.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Rollladensteuerung]]&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=EnOcean-UPJ230_12-Jalousieaktor&amp;diff=15215</id>
		<title>EnOcean-UPJ230 12-Jalousieaktor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=EnOcean-UPJ230_12-Jalousieaktor&amp;diff=15215"/>
		<updated>2016-04-25T20:33:35Z</updated>

		<summary type="html">&lt;p&gt;Benheim: Benheim verschob die Seite Benutzer:Benheim/EnOcean-UPJ230 12-Jalousieaktor nach FHEMWiki:EnOcean-UPJ230 12-Jalousieaktor&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=Omnio_UPJ230.jpg&lt;br /&gt;
|Bildbeschreibung=UPJ230/12 UP Multifunktions-Jalousieaktor 1-Kanal&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor, Empfänger, Sensor, Repeater&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=230V~&lt;br /&gt;
|HWPowerConsumption=Eigenverbrauch 0,4W&lt;br /&gt;
|HWPoweredBy=230V&lt;br /&gt;
|HWSize=45x50x25mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=[http://www.awag.ch/ AWAG Elektrotechnik AG]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-UPJ230/12-Jalousieaktor&#039;&#039;&#039; ist ein Aktor&lt;br /&gt;
* für&lt;br /&gt;
** Unterputzmontage&lt;br /&gt;
* für&lt;br /&gt;
** Steuerung von Rollladen, Beschattungselementen und elektrisch betriebenen Fenstern&lt;br /&gt;
== Features ==&lt;br /&gt;
Aktor für Beschattungselemente, Rolladen und elektrisch betriebenen Fenster, mit Repeater-Funktion&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
Der Aktor kann, wenn der EnOcean-Empfänger in den Anlernmodus geschaltet wurde, automatisch per autocreate in Fhem angelegt werden. Für die Auswertung und Einstellung der Lamellenposition ist danach manuell ein &amp;lt;code&amp;gt;readingsProxy&amp;lt;/code&amp;gt; definiert werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Schritte sind vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
* Fhem Eingabefeld: &amp;lt;code&amp;gt;set TCM_ESP3_0 teach 300&amp;lt;/code&amp;gt; (Lernmodus für 5 Minuten)&lt;br /&gt;
* Drehschalter am Aktor auf Stellung 13&lt;br /&gt;
* Taste LRN am Aktor für 2 Sekunden drücken&lt;br /&gt;
* Drehschalter am Aktor auf Stellung 11&lt;br /&gt;
* Taste LRN am Aktor drücken&lt;br /&gt;
&lt;br /&gt;
Die Definition des Aktors wird nun erstellt.&lt;br /&gt;
&lt;br /&gt;
Um Zwischenpositionen und Lamellenstellungen anfahren zu können, muss direkt am Aktor die Laufzeit gemäss beiliegender Anleitung erfasst werden (siehe Anleitung S. 4).&lt;br /&gt;
&lt;br /&gt;
=== Fhem Config-Auszug ===&lt;br /&gt;
Ein exemplarischer Auszug aus der [[Konfiguration|fhem.cfg]]:&lt;br /&gt;
&lt;br /&gt;
 define Jal_01 EnOcean 0185D7E8&lt;br /&gt;
 attr Jal_01 IODev TCM_ESP3_0&lt;br /&gt;
 attr Jal_01 comMode biDir&lt;br /&gt;
 attr Jal_01 devChannel 0&lt;br /&gt;
 attr Jal_01 eep D2-05-00&lt;br /&gt;
 attr Jal_01 manufID 005&lt;br /&gt;
 attr Jal_01 subDef FFEFF301&lt;br /&gt;
 attr Jal_01 subType blindsCtrl.00&lt;br /&gt;
 attr Jal_01 teachMethod UTE&lt;br /&gt;
 attr Jal_01 webCmd opens:stop:closes:position&lt;br /&gt;
&lt;br /&gt;
Um die Lamellenstellung zu steuern:&lt;br /&gt;
&lt;br /&gt;
 define Jal_01_Lamellen readingsProxy Jal_01:anglePos&lt;br /&gt;
 attr Jal_01_Lamellen setList angle:slider,1,1,100&lt;br /&gt;
 attr Jal_01_Lamellen webCmd angle&lt;br /&gt;
&lt;br /&gt;
Diese Definition sollte auch für die Steuerung von Fenstern vorgenommen werden. Andernfalls übernimmt der Aktor diese Steuerung, dabei stellt er die Lamellen nach dem Schliessen standardmässig auf &amp;quot;Auf&amp;quot;. Dadurch öffnet sich ein Fenster nach dem Schliessen wieder ein wenig. Ist die Winkelstellung in FHEM eingerichtet, wird das Verhalten des Aktors übersteuert und dauernd auf &amp;quot;Zu&amp;quot; gehalten, das Fenster bleibt nach dem Schliessen geschlossen.&lt;br /&gt;
&lt;br /&gt;
== Einsatzbeispiel ==&lt;br /&gt;
Siehe Beispiele hier: [[EnOcean-FSB61-Aktor-Beschattungselemente-Rollladen]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Anleitung: [http://www.awag.ch/ekat/page_de/upload_insta/UPJ230_12_Bd.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Rollladensteuerung]]&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=EnOcean-UPJ230_12-Jalousieaktor&amp;diff=15214</id>
		<title>EnOcean-UPJ230 12-Jalousieaktor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=EnOcean-UPJ230_12-Jalousieaktor&amp;diff=15214"/>
		<updated>2016-04-25T20:32:10Z</updated>

		<summary type="html">&lt;p&gt;Benheim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=Omnio_UPJ230.jpg&lt;br /&gt;
|Bildbeschreibung=UPJ230/12 UP Multifunktions-Jalousieaktor 1-Kanal&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor, Empfänger, Sensor, Repeater&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=230V~&lt;br /&gt;
|HWPowerConsumption=Eigenverbrauch 0,4W&lt;br /&gt;
|HWPoweredBy=230V&lt;br /&gt;
|HWSize=45x50x25mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=[http://www.awag.ch/ AWAG Elektrotechnik AG]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-UPJ230/12-Jalousieaktor&#039;&#039;&#039; ist ein Aktor&lt;br /&gt;
* für&lt;br /&gt;
** Unterputzmontage&lt;br /&gt;
* für&lt;br /&gt;
** Steuerung von Rollladen, Beschattungselementen und elektrisch betriebenen Fenstern&lt;br /&gt;
== Features ==&lt;br /&gt;
Aktor für Beschattungselemente, Rolladen und elektrisch betriebenen Fenster, mit Repeater-Funktion&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
Der Aktor kann, wenn der EnOcean-Empfänger in den Anlernmodus geschaltet wurde, automatisch per autocreate in Fhem angelegt werden. Für die Auswertung und Einstellung der Lamellenposition ist danach manuell ein &amp;lt;code&amp;gt;readingsProxy&amp;lt;/code&amp;gt; definiert werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Schritte sind vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
* Fhem Eingabefeld: &amp;lt;code&amp;gt;set TCM_ESP3_0 teach 300&amp;lt;/code&amp;gt; (Lernmodus für 5 Minuten)&lt;br /&gt;
* Drehschalter am Aktor auf Stellung 13&lt;br /&gt;
* Taste LRN am Aktor für 2 Sekunden drücken&lt;br /&gt;
* Drehschalter am Aktor auf Stellung 11&lt;br /&gt;
* Taste LRN am Aktor drücken&lt;br /&gt;
&lt;br /&gt;
Die Definition des Aktors wird nun erstellt.&lt;br /&gt;
&lt;br /&gt;
Um Zwischenpositionen und Lamellenstellungen anfahren zu können, muss direkt am Aktor die Laufzeit gemäss beiliegender Anleitung erfasst werden (siehe Anleitung S. 4).&lt;br /&gt;
&lt;br /&gt;
=== Fhem Config-Auszug ===&lt;br /&gt;
Ein exemplarischer Auszug aus der [[Konfiguration|fhem.cfg]]:&lt;br /&gt;
&lt;br /&gt;
 define Jal_01 EnOcean 0185D7E8&lt;br /&gt;
 attr Jal_01 IODev TCM_ESP3_0&lt;br /&gt;
 attr Jal_01 comMode biDir&lt;br /&gt;
 attr Jal_01 devChannel 0&lt;br /&gt;
 attr Jal_01 eep D2-05-00&lt;br /&gt;
 attr Jal_01 manufID 005&lt;br /&gt;
 attr Jal_01 subDef FFEFF301&lt;br /&gt;
 attr Jal_01 subType blindsCtrl.00&lt;br /&gt;
 attr Jal_01 teachMethod UTE&lt;br /&gt;
 attr Jal_01 webCmd opens:stop:closes:position&lt;br /&gt;
&lt;br /&gt;
Um die Lamellenstellung zu steuern:&lt;br /&gt;
&lt;br /&gt;
 define Jal_01_Lamellen readingsProxy Jal_01:anglePos&lt;br /&gt;
 attr Jal_01_Lamellen setList angle:slider,1,1,100&lt;br /&gt;
 attr Jal_01_Lamellen webCmd angle&lt;br /&gt;
&lt;br /&gt;
Diese Definition sollte auch für die Steuerung von Fenstern vorgenommen werden. Andernfalls übernimmt der Aktor diese Steuerung, dabei stellt er die Lamellen nach dem Schliessen standardmässig auf &amp;quot;Auf&amp;quot;. Dadurch öffnet sich ein Fenster nach dem Schliessen wieder ein wenig. Ist die Winkelstellung in FHEM eingerichtet, wird das Verhalten des Aktors übersteuert und dauernd auf &amp;quot;Zu&amp;quot; gehalten, das Fenster bleibt nach dem Schliessen geschlossen.&lt;br /&gt;
&lt;br /&gt;
== Einsatzbeispiel ==&lt;br /&gt;
Siehe Beispiele hier: [[EnOcean-FSB61-Aktor-Beschattungselemente-Rollladen]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Anleitung: [http://www.awag.ch/ekat/page_de/upload_insta/UPJ230_12_Bd.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Rollladensteuerung]]&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=EnOcean-UPJ230_12-Jalousieaktor&amp;diff=15212</id>
		<title>EnOcean-UPJ230 12-Jalousieaktor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=EnOcean-UPJ230_12-Jalousieaktor&amp;diff=15212"/>
		<updated>2016-04-25T14:20:05Z</updated>

		<summary type="html">&lt;p&gt;Benheim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=Omnio_UPJ230.jpg&lt;br /&gt;
|Bildbeschreibung=UPJ230/12 UP Multifunktions-Jalousieaktor 1-Kanal&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor, Empfänger, Sensor, Repeater&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=230V~&lt;br /&gt;
|HWPowerConsumption=Eigenverbrauch 0,4W&lt;br /&gt;
|HWPoweredBy=230V&lt;br /&gt;
|HWSize=45x50x25mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=[http://www.awag.ch/ AWAG Elektrotechnik AG]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-UPJ230/12-Jalousieaktor&#039;&#039;&#039; ist ein Aktor&lt;br /&gt;
* für&lt;br /&gt;
** Unterputzmontage&lt;br /&gt;
* für&lt;br /&gt;
** Steuerung von Rollladen, Beschattungselementen und elektrisch betriebenen Fenstern&lt;br /&gt;
== Features ==&lt;br /&gt;
Aktor für Beschattungselemente, Rolladen und elektrisch betriebenen Fenster, mit Repeater-Funktion&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
Der Aktor kann, wenn der EnOcean-Empfänger in den Anlernmodus geschaltet wurde, automatisch per autocreate in Fhem angelegt werden. Für die Auswertung und Einstellung der Lamellenposition ist danach manuell ein &amp;lt;code&amp;gt;readingsProxy&amp;lt;/code&amp;gt; definiert werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Schritte sind vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
* Fhem Eingabefeld: &amp;lt;code&amp;gt;set TCM_ESP3_0 teach 300&amp;lt;/code&amp;gt; (Lernmodus für 5 Minuten)&lt;br /&gt;
* Drehschalter am Aktor auf Stellung 13&lt;br /&gt;
* Taste LRN am Aktor für 2 Sekunden drücken&lt;br /&gt;
* Drehschalter am Aktor auf Stellung 11&lt;br /&gt;
* Taste LRN am Aktor drücken&lt;br /&gt;
&lt;br /&gt;
Die Definition des Aktors wird nun erstellt.&lt;br /&gt;
&lt;br /&gt;
Um Zwischenpositionen und Lamellenstellungen anfahren zu können, muss direkt am Aktor die Laufzeit gemäss beiliegender Anleitung erfasst werden (siehe Anleitung S. 4).&lt;br /&gt;
&lt;br /&gt;
=== Fhem Config-Auszug ===&lt;br /&gt;
Ein exemplarischer Auszug aus der [[Konfiguration|fhem.cfg]]:&lt;br /&gt;
&lt;br /&gt;
 define Jal_01 EnOcean 0185D7E8&lt;br /&gt;
 attr Jal_01 IODev TCM_ESP3_0&lt;br /&gt;
 attr Jal_01 comMode biDir&lt;br /&gt;
 attr Jal_01 devChannel 0&lt;br /&gt;
 attr Jal_01 eep D2-05-00&lt;br /&gt;
 attr Jal_01 manufID 005&lt;br /&gt;
 attr Jal_01 subDef FFEFF301&lt;br /&gt;
 attr Jal_01 subType blindsCtrl.00&lt;br /&gt;
 attr Jal_01 teachMethod UTE&lt;br /&gt;
 attr Jal_01 webCmd opens:stop:closes:position&lt;br /&gt;
&lt;br /&gt;
Um die Lamellenstellung zu steuern:&lt;br /&gt;
&lt;br /&gt;
 define Jal_01_Lamellen readingsProxy Jal_01:anglePos&lt;br /&gt;
 attr Jal_01_Lamellen setList angle:slider,1,1,100&lt;br /&gt;
 attr Jal_01_Lamellen webCmd angle&lt;br /&gt;
&lt;br /&gt;
Diese Definition sollte auch für die Steuerung von Fenstern vorgenommen werden. Andernfalls übernimmt der Aktor diese Steuerung, dabei stellt er die Lamellen nach dem Schliessen standardmässig auf &amp;quot;Auf&amp;quot;. Dadurch öffnet sich ein Fenster nach dem Schliessen wieder ein wenig. Ist die Winkelstellung in FHEM eingerichtet, wird das Verhalten des Aktors übersteuert und dauernd auf &amp;quot;Zu&amp;quot; gehalten, das Fenster bleibt nach dem Schliessen geschlossen.&lt;br /&gt;
&lt;br /&gt;
== Einsatzbeispiel ==&lt;br /&gt;
Siehe Beispiele hier: [[EnOcean-FSB61-Aktor-Beschattungselemente-Rollladen]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Anleitung: [http://www.awag.ch/ekat/page_de/upload_insta/UPJ230_12_Bd.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
-[-[-Kategorie:EnOcean Components]]&lt;br /&gt;
-[-[-Kategorie:Rollladensteuerung]]&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=EnOcean-UPJ230_12-Jalousieaktor&amp;diff=15211</id>
		<title>EnOcean-UPJ230 12-Jalousieaktor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=EnOcean-UPJ230_12-Jalousieaktor&amp;diff=15211"/>
		<updated>2016-04-25T14:19:00Z</updated>

		<summary type="html">&lt;p&gt;Benheim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=Omnio_UPJ230.jpg&lt;br /&gt;
|Bildbeschreibung=UPJ230/12 UP Multifunktions-Jalousieaktor 1-Kanal&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor, Empfänger, Sensor, Repeater&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=230V~&lt;br /&gt;
|HWPowerConsumption=Eigenverbrauch 0,4W&lt;br /&gt;
|HWPoweredBy=230V&lt;br /&gt;
|HWSize=45x50x25mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=[http://www.awag.ch/#AWAG Elektrotechnik AG]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-UPJ230/12-Jalousieaktor&#039;&#039;&#039; ist ein Aktor&lt;br /&gt;
* für&lt;br /&gt;
** Unterputzmontage&lt;br /&gt;
* für&lt;br /&gt;
** Steuerung von Rollladen, Beschattungselementen und elektrisch betriebenen Fenstern&lt;br /&gt;
== Features ==&lt;br /&gt;
Aktor für Beschattungselemente, Rolladen und elektrisch betriebenen Fenster, mit Repeater-Funktion&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
Der Aktor kann, wenn der EnOcean-Empfänger in den Anlernmodus geschaltet wurde, automatisch per autocreate in Fhem angelegt werden. Für die Auswertung und Einstellung der Lamellenposition ist danach manuell ein &amp;lt;code&amp;gt;readingsProxy&amp;lt;/code&amp;gt; definiert werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Schritte sind vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
* Fhem Eingabefeld: &amp;lt;code&amp;gt;set TCM_ESP3_0 teach 300&amp;lt;/code&amp;gt; (Lernmodus für 5 Minuten)&lt;br /&gt;
* Drehschalter am Aktor auf Stellung 13&lt;br /&gt;
* Taste LRN am Aktor für 2 Sekunden drücken&lt;br /&gt;
* Drehschalter am Aktor auf Stellung 11&lt;br /&gt;
* Taste LRN am Aktor drücken&lt;br /&gt;
&lt;br /&gt;
Die Definition des Aktors wird nun erstellt.&lt;br /&gt;
&lt;br /&gt;
Um Zwischenpositionen und Lamellenstellungen anfahren zu können, muss direkt am Aktor die Laufzeit gemäss beiliegender Anleitung erfasst werden (siehe Anleitung S. 4).&lt;br /&gt;
&lt;br /&gt;
=== Fhem Config-Auszug ===&lt;br /&gt;
Ein exemplarischer Auszug aus der [[Konfiguration|fhem.cfg]]:&lt;br /&gt;
&lt;br /&gt;
 define Jal_01 EnOcean 0185D7E8&lt;br /&gt;
 attr Jal_01 IODev TCM_ESP3_0&lt;br /&gt;
 attr Jal_01 comMode biDir&lt;br /&gt;
 attr Jal_01 devChannel 0&lt;br /&gt;
 attr Jal_01 eep D2-05-00&lt;br /&gt;
 attr Jal_01 manufID 005&lt;br /&gt;
 attr Jal_01 subDef FFEFF301&lt;br /&gt;
 attr Jal_01 subType blindsCtrl.00&lt;br /&gt;
 attr Jal_01 teachMethod UTE&lt;br /&gt;
 attr Jal_01 webCmd opens:stop:closes:position&lt;br /&gt;
&lt;br /&gt;
Um die Lamellenstellung zu steuern:&lt;br /&gt;
&lt;br /&gt;
 define Jal_01_Lamellen readingsProxy Jal_01:anglePos&lt;br /&gt;
 attr Jal_01_Lamellen setList angle:slider,1,1,100&lt;br /&gt;
 attr Jal_01_Lamellen webCmd angle&lt;br /&gt;
&lt;br /&gt;
Diese Definition sollte auch für die Steuerung von Fenstern vorgenommen werden. Andernfalls übernimmt der Aktor diese Steuerung, dabei stellt er die Lamellen nach dem Schliessen standardmässig auf &amp;quot;Auf&amp;quot;. Dadurch öffnet sich ein Fenster nach dem Schliessen wieder ein wenig. Ist die Winkelstellung in FHEM eingerichtet, wird das Verhalten des Aktors übersteuert und dauernd auf &amp;quot;Zu&amp;quot; gehalten, das Fenster bleibt nach dem Schliessen geschlossen.&lt;br /&gt;
&lt;br /&gt;
== Einsatzbeispiel ==&lt;br /&gt;
Siehe Beispiele hier: [[EnOcean-FSB61-Aktor-Beschattungselemente-Rollladen]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Anleitung: [http://www.awag.ch/ekat/page_de/upload_insta/UPJ230_12_Bd.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
-[-[-Kategorie:EnOcean Components]]&lt;br /&gt;
-[-[-Kategorie:Rollladensteuerung]]&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Omnio_UPJ230.jpg&amp;diff=15210</id>
		<title>Datei:Omnio UPJ230.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Omnio_UPJ230.jpg&amp;diff=15210"/>
		<updated>2016-04-25T14:17:50Z</updated>

		<summary type="html">&lt;p&gt;Benheim: Mit freundlicher Genehmigung der AWAG AG.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mit freundlicher Genehmigung der AWAG AG.&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Hue&amp;diff=15207</id>
		<title>Hue</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Hue&amp;diff=15207"/>
		<updated>2016-04-24T09:37:44Z</updated>

		<summary type="html">&lt;p&gt;Benheim: /* HUE-Device */ Link unter kompatible Modelle auf Wiki-Eintrag zu HUE Dimmer eingefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right&amp;quot;&amp;gt;{{Infobox Modul&lt;br /&gt;
|Name=HUEBridge&lt;br /&gt;
|ModPurpose=Anbindung Bridge des Phillips Hue Lighting System&lt;br /&gt;
|ModType=d&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
|ModCmdRef=HUEBridge&lt;br /&gt;
|ModForumArea=Beleuchtung&lt;br /&gt;
|ModTechName=30_HUEBridge.pm&lt;br /&gt;
|ModOwner=Andre ([http://forum.fhem.de/index.php?action=profile;u=430 Forum] / [[Benutzer Diskussion:justme|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|Name=HUEDevice&lt;br /&gt;
|ModPurpose=Ansteuerung Geräte des Phillips Hue Lighting System über HUEBridge&lt;br /&gt;
|ModType=d&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
|ModCmdRef=HUEDevice&lt;br /&gt;
|ModForumArea=Beleuchtung&lt;br /&gt;
|ModTechName=31_HUEDevice.pm&lt;br /&gt;
|ModOwner=Andre ([http://forum.fhem.de/index.php?action=profile;u=430 Forum] / [[Benutzer Diskussion:justme|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HUE-Bridge ==&lt;br /&gt;
&lt;br /&gt;
=== Einrichtung in fhem ===&lt;br /&gt;
Die Einrichtung ist wirklich einfach. Mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define Wiesollesheißen HUEBridge eu.re.ip.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird die Bridge eingebunden. Dann einfach auf den runden Knopf in der Mitte der Bridge drücken und sie wird von Fhem erkannt. Die drei Lampen des Starterkits werden automatisch erkannt und sind ansteuerbar -&amp;gt; fertig!&lt;br /&gt;
&lt;br /&gt;
WICHTIG: danach in Fhem ein mal die Konfiguration speichern damit der Pairing-Key gesichert wird. Sonst muss bei nächsten Fhem-Neustart das Paring erneut durchgefürt werden.&lt;br /&gt;
&lt;br /&gt;
Eine ausführliche Anleitung mit Bildern zudem unter: http://www.meintechblog.de/2014/11/philips-hue-so-klappt-die-integration-in-fhem/&lt;br /&gt;
&lt;br /&gt;
=== Nonblocking ===&lt;br /&gt;
Wenn man möchte, dass die Versuche, die HUEBridge zu kontaktieren, FHEM nicht blockieren, sollte man &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;attr &amp;lt;HUEBridge_Name&amp;gt; httpUtils 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
setzen.&lt;br /&gt;
&lt;br /&gt;
== HUE-Device ==&lt;br /&gt;
Als Gerät können alle Hue und LightLink kompatiblen Modelle verwendet werden. Dies sind zur Zeit (Anfang 2014):&lt;br /&gt;
*HueBulbs (alle drei Modelle) &lt;br /&gt;
*Friends of Hue LightStrips und LivingColors Bloom &lt;br /&gt;
*LivingColors ab gen2&lt;br /&gt;
*LivingColors Bloom und Iris&lt;br /&gt;
*LivingWhites Energiesparlampen&lt;br /&gt;
*LivingWhites Leuchtenadapter&lt;br /&gt;
*[[HUE_Dimmer_Switch|HUE Dimmer]]&lt;br /&gt;
Diese sind jeweils über eine Bridge (HueDevice) aus steuerbar. Die LivingColors und LivingWhites Geräte sind vorher mit Hilfe einer LivingColors oder LivingWhites Fernbedienung an der Bridge anzulernen.&lt;br /&gt;
=== Grundlagen - Farbmodelle ===&lt;br /&gt;
Ein HueDevice kann per set-Befehl über unterschiedliche Farbmodelle gesteuert werden. In der folgenden Tabelle ist dargestellt, welche Werte-Kombinationen sinnvoll sind:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Farbmodell !! Bestandteile !! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| xyY || x- und y-Koordinate im Farbraum, Y ist die Helligkeit || &amp;lt;code&amp;gt; set bulb1 xy 0.4595,0.4105 : bri 220 &amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| hue,sat,bri || Farbwert, Sättigung und Helligkeit || &amp;lt;code&amp;gt; set bulb1 hue 14922 : sat 144 : bri 220 &amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ct || Farbwert über Farbtemperatur || &amp;lt;code&amp;gt; set bulb1 color 2600 &amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rgb || Farbbestandteile rot, grün und blau || &amp;lt;code&amp;gt; set bulb1 rgb FFC698 &amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Zur Regelung der Helligkeit sind die Befehle &#039;&#039;bri&#039;&#039; und &#039;&#039;pct&#039;&#039; gleichwertig. &#039;&#039;bri&#039;&#039; hat den Bereich 0..254, &#039;&#039;pct&#039;&#039; 0..100 .&amp;lt;br&amp;gt;&lt;br /&gt;
Das Modul lässt die Mischung von Angaben aus unterschiedlichen Farbmodellen technisch zu, jedoch sind diese nicht immer sinnvoll.&lt;br /&gt;
&lt;br /&gt;
=== Darstellung im Webfrontend ===&lt;br /&gt;
Wenn man die SVG Icons verwendet ist es sinnvoll, das Attribut color-icons zu setzen. Mit &amp;lt;code&amp;gt;attr HUEDevice1 color-icons 2&amp;lt;/code&amp;gt; werden z.B. die Farben und der Dimmzustand der Lampe als Icon dargestellt.&lt;br /&gt;
Damit das ganze funktioniert, müsst ihr auch noch das &amp;lt;code&amp;gt;attr WEB iconPath fhemSVG:openautomation:default&amp;lt;/code&amp;gt; setzen.&lt;br /&gt;
&lt;br /&gt;
== RaspBee ==&lt;br /&gt;
Das HUEBridge Modul unterstützt in einer beta version auch das RaspBee ZigBee Modul über die zugehörige deCONZ Software und die Wireless Light Control WebApp mit dem REST plugin. Die hierzu erhältlichen Funk-Vorschaltgeräte sind noch nicht getestet sollten aber auch funktionieren.&lt;br /&gt;
&lt;br /&gt;
== HUE auf der Fritzbox ==&lt;br /&gt;
Da auf der FB standardmäßig kein JSON installiert ist, muss dies nachinstalliert werden:  Man lädt das JSON-Paket http://search.cpan.org/CPAN/authors/id/M/MA/MAKAMAKA/JSON-2.53.tar.gz, packt es aus und kopiert den Inhalt vom &amp;lt;b&amp;gt;lib-Verzeichnis&amp;lt;/b&amp;gt; nach \fhem\lib\perl5\site_perl\5.12.2&lt;br /&gt;
&lt;br /&gt;
== HUE auf der Synology Diskstation ==&lt;br /&gt;
Da auf der DS standardmäßig kein JSON installiert ist, muss dies nachinstalliert werden, die Anleitung dazu {{Link2Forum|Topic=19093|Message=224641|LinkText=hier}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other Components]]&lt;br /&gt;
[[Kategorie:Lichteffektgeräte]]&lt;br /&gt;
[[Kategorie:IP Components]]&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Benutzer:Benheim&amp;diff=15194</id>
		<title>Benutzer:Benheim</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Benutzer:Benheim&amp;diff=15194"/>
		<updated>2016-04-23T15:25:34Z</updated>

		<summary type="html">&lt;p&gt;Benheim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In Bearbeitung: [[/EnOcean-UPJ230_12-Jalousieaktor]]&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=EnOcean-PTM-210-Taster&amp;diff=15193</id>
		<title>EnOcean-PTM-210-Taster</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=EnOcean-PTM-210-Taster&amp;diff=15193"/>
		<updated>2016-04-23T15:25:07Z</updated>

		<summary type="html">&lt;p&gt;Benheim: Omnio Wandsender als Beispiel hinzugefügt (IMHO einziges Modell nach CH-Norm)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=PTM215_F1FT65_FT55.jpg&lt;br /&gt;
|Bildbeschreibung=EnOcean Funktaster: Eltako FT55 (schwarz), in seine Einzelteile zerlegter Eltako F1FT65, links unten das PTM215&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Sender, Sensor&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWChannels=2&lt;br /&gt;
|HWVoltage=&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=Tastendruck&lt;br /&gt;
|HWSize=&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=EnOcean, diverse&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-PTM-210-Taster&#039;&#039;&#039; ist &amp;quot;das&amp;quot; batterielose Funkschaltmodul&lt;br /&gt;
* für&lt;br /&gt;
** Schalter/Taster und Fernbedienungen ohne Verschlüsselungsfunktion&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
=== EnOcean-PTM-210-Taster ===&lt;br /&gt;
&amp;quot;Das&amp;quot; batterielose Funkschaltmodul, das in den Schaltern/Tastern oder Fernbedienungen ohne Verschlüsselungsfunktion von diversen Hersteller genutzt wird (z.b. Eltako FT4, FT55, Peha Easyclick-2-Kanal-Wandsender, AWAG Omnio Wandsender WS-CH-102...). Die Energie für das Funktelegramm wird durch den Tastendruck erzeugt. Das Funkmodul hat 2 Kanäle. Bei den Wandtastern wird durch Aufklicken von einer Einzelwippe daraus ein 1-kanaliger Einfach-Wandtaster bzw. durch Aufklicken von 2 Wippen ein 2-kanaliger Doppeltaster&lt;br /&gt;
=== EnOcean-PTM-215-Taster ===&lt;br /&gt;
wie PTM-210, jedoch zusätzlich mit zuschaltbarer verschlüsselter Datenübertragung, verbaut z.B. in Eltako 1FT65, FT55&lt;br /&gt;
== Hinweise zum Betrieb mit Fhem ==&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
Der Sensor wird bei Versand eines Telegramms vollständig von Fhem im &amp;lt;code&amp;gt;learningMode&amp;lt;/code&amp;gt; erkannt. Definition in der Konfiguration erfolgt dann automatisch durch autocreate.&lt;br /&gt;
&lt;br /&gt;
Anlernvorgang:&lt;br /&gt;
# Fhem in Lernmodus schalten: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set &amp;lt;IODev&amp;gt; teach &amp;lt;time/s&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Funktelegramm durch Druck auf eine Taste auslösen. Das Anlegen in der Konfiguration erfolgt dann automatisch per autocreate.&lt;br /&gt;
&lt;br /&gt;
=== Besonderheiten bei verschlüsseltem PTM-215 über Eltako FAM14/FGW14 ===&lt;br /&gt;
Ist FHEM über ein FGW14 an ein FAM14 angeschlossen und erhält darüber EnOcean-Funktelegramme, so ist eine ggf. aktivierte Verschlüsselung eines PTM-215 für FHEM grundsätzlich transparent (der Taster muss nach Anleitung im FAM14 eingelernt werden und funktioniert anschließend so, als wäre er nicht verschlüsselt). Damit die korrekten channelA- und B-Events erzeugt werden, sind aber nach dem automatischen Anlegen des Tasters durch FHEM noch folgende Schritte durchzuführen (PTM_215 ist im folgenden der Devicename des Tasters):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr PTM_215 subType switch.7F&lt;br /&gt;
attr PTM_215 manufID 00D&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fhem Config-Auszug ===&lt;br /&gt;
Ein exemplarischer Auszug aus der [[Konfiguration]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define EnO_switch_FFC54500 EnOcean FFC54500                    &amp;lt;-- &amp;quot;FFC54500&amp;quot; ist die 8-stellige Hex-SenderID des Tasters&lt;br /&gt;
attr EnO_switch_FFC54500 IODev TCM310_0&lt;br /&gt;
attr EnO_switch_FFC54500 room EnOcean&lt;br /&gt;
attr EnO_switch_FFC54500 subType switch   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Logbeispiel ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2014-01-01_07:00:01 EnO_switch_FFC54500 buttons: pressed&lt;br /&gt;
2014-01-01_07:00:01 EnO_switch_FFC54500 channelA: AI&lt;br /&gt;
2014-01-01_07:00:01 EnO_switch_FFC54500 AI&lt;br /&gt;
2014-01-01_07:00:02 EnO_switch_FFC54500 buttons: released&lt;br /&gt;
2014-01-01_07:00:03 EnO_switch_FFC54500 buttons: pressed&lt;br /&gt;
2014-01-01_07:00:03 EnO_switch_FFC54500 channelB: BI&lt;br /&gt;
2014-01-01_07:00:03 EnO_switch_FFC54500 BI&lt;br /&gt;
2014-01-01_07:00:03 EnO_switch_FFC54500 buttons: released&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Einsatzbeispiel ==&lt;br /&gt;
Wie zu Anfang beschrieben, kann ein PTM-210/215 bis zu vier verschiedene Events erzeugen. Diese werden in FHEM als A0/AI (für die linke Tasterseite oben bzw. unten) und B0/BI (für die rechte Tasterseite oben bzw. unten) abgebildet. Um eine Lampe beim Betätigen des linken oberen Tasters einzuschalten, wäre also folgende Definition möglich:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define nLampeAn notify PTM_215:A0 set Lampe on&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Mehrfachklick&amp;quot;-Erkennung ===&lt;br /&gt;
Am 07.09.2014 wurde für das Kommando &amp;lt;code&amp;gt;sequence&amp;lt;/code&amp;gt; das Attribut &amp;lt;code&amp;gt;triggerPartial&amp;lt;/code&amp;gt; eingeführt. Damit kann ein Mehrfachklick erkannt und entsprechend der Klickanzahl eine unterschiedliches Szenario ausgeführt werden ({{Link2Forum|Topic=26772|Message=198050}}). &lt;br /&gt;
 &lt;br /&gt;
Bei einem Update-Stand von Fhem vor dem 08.09.2014 kann mit folgendem Code für eine Tasterseite (B0) ein Doppelklick erkannt werden:&lt;br /&gt;
&lt;br /&gt;
 define sDoppelklickB0 sequence Taster2:channelB:.B0 1 Taster2:channelB:.B0&lt;br /&gt;
 define nDoppelklickB0 notify DoppelklickB0:trigger set Lampe off&lt;br /&gt;
 define wEinfachklickB0 watchdog Taster2:channelB:.B0 00:00:01 SAME set Lampe on;; trigger wEinfachklickB0 .&lt;br /&gt;
 attr wEinfachklickB0 regexp1WontReactivate 1&lt;br /&gt;
&lt;br /&gt;
aus {{Link2Forum|Topic=22289|Message=186698}}&lt;br /&gt;
=== &amp;quot;Taste lange gedrückt&amp;quot; und &amp;quot;Taste kurz gedrückt&amp;quot; unterscheiden ===&lt;br /&gt;
&lt;br /&gt;
Beide Tasterseiten (B0/BI) unterscheiden hiermit die Tastdauer (bei einem Einfachtaster):&lt;br /&gt;
&lt;br /&gt;
 define nklickdauer notify Taster:buttons:.released {\&lt;br /&gt;
 my $start=time_str2num(ReadingsTimestamp(&amp;quot;$NAME&amp;quot;, &amp;quot;channelB&amp;quot;, 0));;\&lt;br /&gt;
 my $stop=time_str2num(ReadingsTimestamp(&amp;quot;$NAME&amp;quot;, &amp;quot;buttons&amp;quot;, 0));;\&lt;br /&gt;
 if (ReadingsVal(&amp;quot;$NAME&amp;quot;,&amp;quot;channelB&amp;quot;,0) eq &amp;quot;B0&amp;quot;){\&lt;br /&gt;
 if ($stop-$start&amp;lt;=1) {fhem &amp;quot;set Raffstore 50&amp;quot;} else {fhem &amp;quot;set Raffstore 100&amp;quot;}}\&lt;br /&gt;
 else {if ($stop-$start&amp;lt;=1) {fhem &amp;quot;set Raffstore 20&amp;quot;} else {fhem &amp;quot;set Raffstore 80&amp;quot;}}\&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Gleichen Zweck erfüllt auch der Code für eine Tasterseite (BI)&lt;br /&gt;
&lt;br /&gt;
 define Schalter1BIlongclick notify Schalter1:BI define Test at +00:00:01 set Alles off&lt;br /&gt;
 define sSchalter1BIlongclick sequence Schalter1:BI 1 Schalter1:buttons:.*released&lt;br /&gt;
 define nSchalter1BIlongclick notify sSchalter1BIlongclick:trigger delete Test&lt;br /&gt;
&lt;br /&gt;
oder alternativ diese Variante mit Nutzung von &amp;lt;code&amp;gt;sequence&amp;lt;/code&amp;gt; und dem Attribut &amp;lt;code&amp;gt;triggerPartial&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 define sKurzerLangerDruck sequence Taster:BI 0.5 Taster:buttons:.released&lt;br /&gt;
 attr sKurzerLangerDruck triggerPartial 1&lt;br /&gt;
 define nKurzerDruck notify sKurzerLangerDruck:trigger set Raffstore 100&lt;br /&gt;
 define nLangerDruck notify sKurzerLangerDruck:partial_1 set Raffstore 50&lt;br /&gt;
&lt;br /&gt;
aus {{Link2Forum|Topic=22289|Message=186698}}, der auch eine Variante für einen Doppeltaster enthält.&lt;br /&gt;
&lt;br /&gt;
Ein weitergehendes Anwendungsbeispiel für eine indirekte Dimmersteuerung: [[Enocean_Dimmer_mit_kurzem_und_langem_Tastendruck_ansteuern|Enocean Dimmer  mit kurzem und langem Tastendruck ansteuern]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Datenblatt: [http://www.enocean.com/de/enocean_module/ptm-210-data-sheet-pdf/ PDF]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:EnOcean Components]]&lt;br /&gt;
[[Kategorie:Schalter (Sender)]]&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Benutzer:Benheim&amp;diff=15192</id>
		<title>Benutzer:Benheim</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Benutzer:Benheim&amp;diff=15192"/>
		<updated>2016-04-23T15:15:20Z</updated>

		<summary type="html">&lt;p&gt;Benheim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In Bearbeitung: [[/EnOcean-UPJ230_12-Jalousieaktor]] [[/EnOcean-WS-CH-Wandsender-4-Kanal]]&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=EnOcean-UPJ230_12-Jalousieaktor&amp;diff=15188</id>
		<title>EnOcean-UPJ230 12-Jalousieaktor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=EnOcean-UPJ230_12-Jalousieaktor&amp;diff=15188"/>
		<updated>2016-04-23T12:58:16Z</updated>

		<summary type="html">&lt;p&gt;Benheim: Die Seite wurde neu angelegt: „{{Baustelle}}  {{Infobox Hardware |Bild=nopicrightnow.jpg |Bildbeschreibung=UPJ230/12 UP Multifunktions-Jalousieaktor 1-Kanal |HWProtocol=EnOcean |HWType=Aktor…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=nopicrightnow.jpg&lt;br /&gt;
|Bildbeschreibung=UPJ230/12 UP Multifunktions-Jalousieaktor 1-Kanal&lt;br /&gt;
|HWProtocol=EnOcean&lt;br /&gt;
|HWType=Aktor, Empfänger, Sensor, Repeater&lt;br /&gt;
|HWCategory=EnOcean&lt;br /&gt;
|HWComm=EnOcean Funk, 868Mhz&lt;br /&gt;
|HWChannels=1 (bidirektional)&lt;br /&gt;
|HWVoltage=230V~&lt;br /&gt;
|HWPowerConsumption=Eigenverbrauch 0,4W&lt;br /&gt;
|HWPoweredBy=230V&lt;br /&gt;
|HWSize=45x50x25mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#EnOcean EnOcean]&lt;br /&gt;
|HWManufacturer=[http://www.awag.ch/#AWAG Elektrotechnik AG]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnOcean-UPJ230/12-Jalousieaktor&#039;&#039;&#039; ist ein Aktor&lt;br /&gt;
* für&lt;br /&gt;
** Unterputzmontage&lt;br /&gt;
* für&lt;br /&gt;
** Steuerung von Rollladen, Beschattungselementen und elektrisch betriebenen Fenstern&lt;br /&gt;
== Features ==&lt;br /&gt;
Aktor für Beschattungselemente, Rolladen und elektrisch betriebenen Fenster, mit Repeater-Funktion&lt;br /&gt;
&lt;br /&gt;
=== Definition/Anlernvorgang ===&lt;br /&gt;
Der Aktor kann, wenn der EnOcean-Empfänger in den Anlernmodus geschaltet wurde, automatisch per autocreate in Fhem angelegt werden. Für die Auswertung und Einstellung der Lamellenposition ist danach manuell ein &amp;lt;code&amp;gt;readingsProxy&amp;lt;/code&amp;gt; definiert werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Schritte sind vorzunehmen:&lt;br /&gt;
&lt;br /&gt;
* Fhem Eingabefeld: &amp;lt;code&amp;gt;set TCM_ESP3_0 teach 300&amp;lt;/code&amp;gt; (Lernmodus für 5 Minuten)&lt;br /&gt;
* Drehschalter am Aktor auf Stellung 13&lt;br /&gt;
* Taste LRN am Aktor für 2 Sekunden drücken&lt;br /&gt;
* Drehschalter am Aktor auf Stellung 11&lt;br /&gt;
* Taste LRN am Aktor drücken&lt;br /&gt;
&lt;br /&gt;
Die Definition des Aktors wird nun erstellt.&lt;br /&gt;
&lt;br /&gt;
Um Zwischenpositionen und Lamellenstellungen anfahren zu können, muss direkt am Aktor die Laufzeit gemäss beiliegender Anleitung erfasst werden (siehe Anleitung S. 4).&lt;br /&gt;
&lt;br /&gt;
=== Fhem Config-Auszug ===&lt;br /&gt;
Ein exemplarischer Auszug aus der [[Konfiguration|fhem.cfg]]:&lt;br /&gt;
&lt;br /&gt;
 define Jal_01 EnOcean 0185D7E8&lt;br /&gt;
 attr Jal_01 IODev TCM_ESP3_0&lt;br /&gt;
 attr Jal_01 comMode biDir&lt;br /&gt;
 attr Jal_01 devChannel 0&lt;br /&gt;
 attr Jal_01 eep D2-05-00&lt;br /&gt;
 attr Jal_01 manufID 005&lt;br /&gt;
 attr Jal_01 subDef FFEFF301&lt;br /&gt;
 attr Jal_01 subType blindsCtrl.00&lt;br /&gt;
 attr Jal_01 teachMethod UTE&lt;br /&gt;
 attr Jal_01 webCmd opens:stop:closes:position&lt;br /&gt;
&lt;br /&gt;
Um die Lamellenstellung zu steuern:&lt;br /&gt;
&lt;br /&gt;
 define Jal_01_Lamellen readingsProxy Jal_01:anglePos&lt;br /&gt;
 attr Jal_01_Lamellen setList angle:slider,1,1,100&lt;br /&gt;
 attr Jal_01_Lamellen webCmd angle&lt;br /&gt;
&lt;br /&gt;
Diese Definition sollte auch für die Steuerung von Fenstern vorgenommen werden. Andernfalls übernimmt der Aktor diese Steuerung, dabei stellt er die Lamellen nach dem Schliessen standardmässig auf &amp;quot;Auf&amp;quot;. Dadurch öffnet sich ein Fenster nach dem Schliessen wieder ein wenig. Ist die Winkelstellung in FHEM eingerichtet, wird das Verhalten des Aktors übersteuert und dauernd auf &amp;quot;Zu&amp;quot; gehalten, das Fenster bleibt nach dem Schliessen geschlossen.&lt;br /&gt;
&lt;br /&gt;
== Einsatzbeispiel ==&lt;br /&gt;
Siehe Beispiele hier: [[EnOcean-FSB61-Aktor-Beschattungselemente-Rollladen]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Anleitung: [http://www.awag.ch/ekat/page_de/upload_insta/UPJ230_12_Bd.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
-[-[-Kategorie:EnOcean Components]]&lt;br /&gt;
-[-[-Kategorie:Rollladensteuerung]]&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Benutzer:Benheim&amp;diff=15187</id>
		<title>Benutzer:Benheim</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Benutzer:Benheim&amp;diff=15187"/>
		<updated>2016-04-23T11:49:12Z</updated>

		<summary type="html">&lt;p&gt;Benheim: Die Seite wurde neu angelegt: „In Bearbeitung: /EnOcean-UPJ230_12-Jalousieaktor“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In Bearbeitung: [[/EnOcean-UPJ230_12-Jalousieaktor]]&lt;/div&gt;</summary>
		<author><name>Benheim</name></author>
	</entry>
</feed>