<?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=DR</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=DR"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/DR"/>
	<updated>2026-04-12T00:13:20Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HMCCU&amp;diff=38534</id>
		<title>HMCCU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HMCCU&amp;diff=38534"/>
		<updated>2023-08-09T06:22:25Z</updated>

		<summary type="html">&lt;p&gt;DR: /* Inbetriebnahme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Modul HMCCU ermöglicht zusammen mit weiteren Modulen eine Integration der [[HomeMatic]] CCU Zentrale sowie der dort angelernten Geräte in FHEM. &lt;br /&gt;
{{Hinweis|Dieser Artikel bezieht sich auf die neue HMCCU Version 5.0}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Anbindung HomeMatic CCU an FHEM&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=HMCCU&lt;br /&gt;
|ModForumArea=HomeMatic&lt;br /&gt;
|ModTechName=88_HMCCU.pm &lt;br /&gt;
|ModOwner=zap ({{Link2FU|10980|Forum}} / [[Benutzer Diskussion:Zap|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
==Einführung==&lt;br /&gt;
===Übersicht===&lt;br /&gt;
Das Modul [[HMCCU]] ermöglicht zusammen mit den Client Modulen → [[HMCCUDEV]], HMCCUCHN und HMCCUPROCRPC eine Integration der [[HomeMatic]] CCU Zentrale sowie der dort angelernten Geräte in FHEM. Im Einzelnen werden folgende Funktionen unterstützt:&lt;br /&gt;
&lt;br /&gt;
* Unterstützt Hard- und Software CCUs inkl. CCU3, YAHM, piVCCU und RaspberryMatic&lt;br /&gt;
* Unterstützung der Protokolle BidCos, Wired und [[HomeMatic IP|HM-IP]]&lt;br /&gt;
* Unterstützung von CUxD, OSRAM und Philips Hue Devices in der CCU&lt;br /&gt;
* Unterstützung von HVL (HomeMatic Virtual Layer)&lt;br /&gt;
* Unterstützung von CCU Gerätegruppen bzw. virtuellen Geräten (Heizung, Rauchmelder)&lt;br /&gt;
* Automatische Aktualisierung von Gerätezuständen in FHEM per RPC-Server&lt;br /&gt;
* Automatische Konvertierung und Skalierung von Werten beim Lesen und Schreiben&lt;br /&gt;
* Lesen und Schreiben von CCU Systemvariablen&lt;br /&gt;
* Ausführen von CCU Programmen&lt;br /&gt;
* Ausführen von HomeMatic Scripts auf der CCU&lt;br /&gt;
&lt;br /&gt;
Die einzelnen Module haben folgende Aufgaben:&lt;br /&gt;
&lt;br /&gt;
* HMCCU: Kommunikation zwischen FHEM und CCU (I/O Device)&lt;br /&gt;
* HMCCURPCPROC: RPC-Server zum Empfang von Events der CCU&lt;br /&gt;
* HMCCUDEV: Definition von FHEM Devices für HomeMatic Geräte&lt;br /&gt;
* HMCCUCHN: Definition von FHEM Devices für einzelne Kanäle von HomeMatic Geräten&lt;br /&gt;
* HMCCUConf: Templates mit Default Attributen für bestimmte HomeMatic Gerätetypen&lt;br /&gt;
&lt;br /&gt;
===Geräte, Kanäle und Datenpunkte===&lt;br /&gt;
Geräte in der HomeMatic CCU bestehen aus einem oder mehreren Kanälen. Ein Kanal wiederum hat einen oder mehrere Datenpunkte. Über diese Datenpunkte kann ein Gerät gesteuert oder Statusinformationen ausgelesen werden. Sofern ein Datenpunkt lesbar ist, kann er als Reading in einem HMCCUCHN oder HMCCUDEV Device dargestellt werden. Ausgehend von dieser Abbildung in der CCU kann man nun entscheiden, ob man ein CCU Gerät mit HMCCUCHN oder HMCCUDEV definiert.&lt;br /&gt;
&lt;br /&gt;
Der oben beschriebene Aufbau lässt sich am Beispiel einer Steckdose veranschaulichen:&amp;lt;syntaxhighlight lang=&amp;quot;Text&amp;quot;&amp;gt;&lt;br /&gt;
DEV ST-WR-Waschmaschine KEQ0965669 interface=BidCos-RF type=HM-ES-PMSw1-Pl&lt;br /&gt;
CHN KEQ0965669:0 ST-WR-Waschmaschine:0&lt;br /&gt;
   0.UNREACH = false {b} [RE]&lt;br /&gt;
   0.STICKY_UNREACH = true {b} [RWE]&lt;br /&gt;
   0.CONFIG_PENDING = false {b} [RE]&lt;br /&gt;
   0.DUTYCYCLE = false {b} [RE]&lt;br /&gt;
   0.RSSI_DEVICE = 1 {n} [RE]&lt;br /&gt;
   0.RSSI_PEER = 214 {n} [RE]&lt;br /&gt;
   0.DEVICE_IN_BOOTLOADER = false {b} [RE]&lt;br /&gt;
   0.UPDATE_PENDING = false {b} [RE]&lt;br /&gt;
   0.AES_KEY = 0 {n} [R]&lt;br /&gt;
CHN KEQ0965669:1 ST-WR-Waschmaschine:1&lt;br /&gt;
   1.STATE = true {b} [RWE]&lt;br /&gt;
   1.ON_TIME =  {f} [W]&lt;br /&gt;
   1.INHIBIT = false {b} [RWE]&lt;br /&gt;
   1.INSTALL_TEST =  {b} [W]&lt;br /&gt;
   1.WORKING = false {b} [RE]&lt;br /&gt;
CHN KEQ0965669:2 ST-WR-Waschmaschine:2&lt;br /&gt;
   2.ENERGY_COUNTER = 59348.000000 {f} [RE]&lt;br /&gt;
   2.POWER = 0.120000 {f} [RE]&lt;br /&gt;
   2.CURRENT = 45.000000 {f} [RE]&lt;br /&gt;
   2.VOLTAGE = 233.000000 {f} [RE]&lt;br /&gt;
   2.FREQUENCY = 49.990000 {f} [RE]&lt;br /&gt;
   2.BOOT = true {b} [RE]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das Gerät in diesem Beispiel hat 3 nutzbare Kanäle: &lt;br /&gt;
* Kanal 0 ist der Maintenance Kanal. Diesen Kanal hat jedes Gerät. Er ist sowohl bei HMCCUCHN als auch bei HMCCUDEV immer vorhanden. Die Datenpunkte werden automatisch auf gebräuchliche Readings wie z.B. &amp;quot;battery&amp;quot; gemappt. &lt;br /&gt;
* Kanal 1 ist der Schaltkanal der Steckdose. Er besitzt einen Datenpunkt STATE, über den die Steckdose ein-/ausgeschaltet werden kann. Die Flags &amp;quot;RWE&amp;quot; stehen für &#039;&#039;&#039;R&#039;&#039;&#039;ead, &#039;&#039;&#039;W&#039;&#039;&#039;rite, &#039;&#039;&#039;E&#039;&#039;&#039;vent. Der Datenpunkt ist also beschreibbar, lesbar und wird von der CCU per Event automatisch aktualisiert &lt;br /&gt;
* Kanal 2 ist ein reiner Statuskanal. Er besitzt keine beschreibbaren Datenpunkte (nur &#039;&#039;&#039;R&#039;&#039;&#039;ead und &#039;&#039;&#039;E&#039;&#039;&#039;vent). &lt;br /&gt;
Wenn man das Gerät lediglich schalten möchte und auf die Anzeige der Energiewerte aus Kanal 2 verzichten kann, sollte man ein HMCCUCHN Device für Kanal 1 (KEQ0965669:1) definieren (enthält automatisch auch Kanal 0). Andernfalls definiert man ein HMCCUDEV Device für das Gerät KEQ0965669, das dann alle Kanäle (0-2) enthält.  &lt;br /&gt;
&lt;br /&gt;
Es wird empfohlen, für die Definition von FHEM Devices die HMCCU-Befehle &#039;&#039;&#039;get createDev&#039;&#039;&#039; oder &#039;&#039;&#039;get create&#039;&#039;&#039; zu verwenden. Sofern ein Gerät von HMCCU unterstützt wird, wird automatisch das richtige Modul ausgewählt. &lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Im Artikel → [[HMCCU Best Practice]] gibt es einige Tipps für den Einstieg inklusive Schritt-für-Schritt Anleitungen (noch nicht an 5.0 angepasst).}}&lt;br /&gt;
&lt;br /&gt;
==Inbetriebnahme==&lt;br /&gt;
===Zu beachten===&lt;br /&gt;
&lt;br /&gt;
* In den CCU Gerätenamen dürfen keine Umlaute verwendet werden. Leerzeichen sind zulässig, können aber u.U. bei einigen Funktionen zu Problemen führen.&lt;br /&gt;
* Namen in der CCU müssen über alle Objekttypen hinweg eindeutig sein. Beispiel: Ein Gerät und ein Raum dürfen nicht den gleichen Namen haben.&lt;br /&gt;
* Nach dem Neustart der CCU muss auch der RPC-Server neu gestartet werden, da die CCU2 bei einem Neustart die registrierten RPC-Server &amp;quot;vergisst&amp;quot;.&lt;br /&gt;
* Nach Änderung von Attributen der RPC-Server Devices oder von RPC-Attributen im I/O Device müssen die RPC-Server neu gestartet werden, damit die Änderungen berücksichtigt werden.&lt;br /&gt;
* Vor der Ausführung eines FHEM Updates oder vor der Installation eines CCU Firmware Updates muss der RPC-Server gestoppt werden.&lt;br /&gt;
* Seit der CCU Firmware 2.27.7 sind die Zugriffsmöglichkeiten auf die CCU durch eine Firewall abgesichert. Der Zugriff durch FHEM muss explizit freigeschaltet werden, da HMCCU sonst nicht korrekt funktioniert (s. nächster Abschnitt).&lt;br /&gt;
&lt;br /&gt;
===CCU Firewall Einstellungen===&lt;br /&gt;
Ab CCU Firmware 2.27.7 sind auf der CCU über das WebGUI folgende Einstellungen vorzunehmen:&lt;br /&gt;
* Menü &amp;quot;Einstellungen &amp;gt; Systemsteuerung&amp;quot; aufrufen&lt;br /&gt;
* Button &amp;quot;Firewall konfigurieren&amp;quot; anklicken&lt;br /&gt;
* Bei &amp;quot;Firewall-Richtlinie&amp;quot; den Eintrag &amp;quot;Ports offen&amp;quot; auswählen, andernfalls müssen die notwendigen Ports im Feld &amp;quot;Port-Freigabe&amp;quot; explizit angegeben werden&lt;br /&gt;
* Die Rechte für &amp;quot;HomeMatic XML-RPC API&amp;quot; und &amp;quot;Remote HomeMatic-Script API&amp;quot; auf &amp;quot;Vollzugriff&amp;quot; setzen.&lt;br /&gt;
* Man kann die Rechte auf &amp;quot;Eingeschränkter Zugriff&amp;quot; belassen, muss dann aber im Feld &amp;quot;IP-Adressen für eingeschränkten Zugriff&amp;quot; die IP des FHEM-Servers oder das komplette Subnetz in Subnet-Notation angeben.&lt;br /&gt;
&lt;br /&gt;
Wenn der Zugriff von FHEM auf die CCU ohne Anmeldung erfolgen soll, muss zusätzlich in der Systemsteuerung unter &amp;quot;Sicherheit&amp;quot; die Option &amp;quot;Authentifizierung&amp;quot; deaktiviert werden. Alternativ kann im I/O Device (HMCCU) mit dem Befehl set authentication Benutzername und Passwort der CCU angegeben werden.&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Alle HMCCU Module sind Teil von FHEM. HMCCU benötigt die Perl Module RPC::XML::Server und RPC::XML::Client. &lt;br /&gt;
&lt;br /&gt;
Unter debian/raspbian kann das Paket librpc-xml-perl installiert werden oder alternativ CPAN verwendet werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install -y librpc-xml-perl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows (Strawberry Perl) kann man das Paket RPC::XML mit cpan installieren&lt;br /&gt;
&amp;lt;pre&amp;gt;cpan install RPC::XML&amp;lt;/pre&amp;gt;&lt;br /&gt;
Bei der Installation gemäß [[FHEM Installation Windows]] befindet sich cpan man unter &amp;lt;code&amp;gt;&amp;lt;FHEM-Hauptverzeichis&amp;gt;\perl\bin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Definition I/O Device===&lt;br /&gt;
Im ersten Schritt wird ein I/O Device angelegt, das für die Kommunikation zwischen FHEM und der CCU verantwortlich ist. Im folgenden Beispiel wird davon ausgegangen, dass die CCU unter der IP-Adresse 192.168.1.10 erreichbar ist. Das FHEM Device bekommt den Namen „d_ccu“.&lt;br /&gt;
&amp;lt;pre&amp;gt;define d_ccu HMCCU 192.168.1.10&amp;lt;/pre&amp;gt;&lt;br /&gt;
Falls die CCU als Software Service auf dem gleichen Rechner läuft wie FHEM, sollte bei der Definition der Parameter &#039;&#039;ccudelay&#039;&#039; angegeben werden. Die CCU Services brauchen beim Starten länger als FHEM (bis zu 2 Minuten). Durch &#039;&#039;ccudelay&#039;&#039; wird das neu angelegte I/O Device verzögert um die angegebene Anzahl Sekunden initialisiert. Die Vorgabe sind 180 Sekunden. Je nach Installation kann auch ein höherer Wert notwendig sein:&lt;br /&gt;
&amp;lt;pre&amp;gt;define d_ccu HMCCU 192.168.1.10 ccudelay=180&amp;lt;/pre&amp;gt;&lt;br /&gt;
Der Start von FHEM wird dadurch nicht verzögert. Lediglich HMCCU wird verzögert initialisiert. Die verzögerte Initialisierung kann mit dem Parameter &#039;&#039;delayedinit&#039;&#039; erzwungen werden, greift dann also auch, wenn die CCU beim Start von FHEM erreichbar ist&lt;br /&gt;
&lt;br /&gt;
===RPC Server konfigurieren und starten===&lt;br /&gt;
Im nächsten Schritt wird der RPC-Server konfiguriert und gestartet. Zunächst werden mit dem Attribut &#039;&#039;rpcinterfaces&#039;&#039; die Schnittstellen bzw. Ports festgelegt, für die sich der RPC-Server bei der CCU registrieren soll. Das Attribut zeigt in einer Auswahlliste die möglichen Schnittstellen an. Nur für die hier ausgewählten Schnittstellen werden automatisch Readings aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Beim ersten Start dieses RPC-Servers über das I/O Device wird automatisch je Schnittstelle ein Device vom Typ HMCCURPCPROC angelegt. Die Attribute &amp;quot;room&amp;quot; und &amp;quot;group&amp;quot; werden vom I/O Device übernommen.&lt;br /&gt;
&lt;br /&gt;
Nun kann der RPC-Server gestartet werden. Dabei wird je RPC-Schnittstelle ein separater fhem.pl Prozess mit eigenem Listening-Port gestartet. Beim ersten Start legt HMCCU für jede unter &#039;&#039;rpcinterfaces&#039;&#039; angegebene Schnittstelle ein Device vom Typ HMCCURPCPROC an. Sofern auf dem FHEM-Server eine Firewall aktiv ist, müssen die Ports (s. Attribut &#039;&#039;rpcserverport&#039;&#039;) für den Zugriff der CCU freigegeben werden.&lt;br /&gt;
&lt;br /&gt;
Alle RPC-Server werden über das I/O Device mit einem Befehl gestartet:&lt;br /&gt;
&amp;lt;pre&amp;gt;set d_ccu on&amp;lt;/pre&amp;gt;&lt;br /&gt;
Während des Starts der RPC-Server und der Registrierung bei der CCU kann das I/O Device nur eingeschränkt verwendet werden. Dies wird durch den Status „starting/busy“ angezeigt. Nachdem die RPC-Server gestartet wurden, wechselt der Status zu „running/OK“. Zusätzlich werden im Internal RPCPID die Prozess-IDs der RPC-Server Prozesse gespeichert.&lt;br /&gt;
Anschließend sollte man noch das Attribut &#039;&#039;rpcserver&#039;&#039; auf „on“ setzen, damit die RPC-Server beim Start von FHEM automatisch gestartet werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;attr d_ccu rpcserver on&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Migration von HMCCU 4.3 ==&lt;br /&gt;
Nachdem FHEM auf HMCCU Version 5.0 aktualisiert und neu gestartet wurde, sollten die definierten Geräte (HMCCUCHN und HMCCUDEV Devices) wie unter Version 4.3 funktionieren. Da die Devices in Version 5.0 jedoch mit deutlich weniger Attributen auskommen bzw. einige Attribute wie z.B. &amp;quot;eventMap&amp;quot; sogar zu doppelten &#039;&#039;&#039;set&#039;&#039;&#039; Befehlen führen können, sollten die Attribute der Geräte jeweils mit dem Befehl &#039;&#039;&#039;set defaults reset&#039;&#039;&#039; zurückgesetzt werden. Beim Zurücksetzen der Attribute werden überflüssige Attribute gelöscht.&lt;br /&gt;
&lt;br /&gt;
Wichtig: Nach dem Zurücksetzen der Attribute mit &#039;&#039;&#039;set defaults reset&#039;&#039;&#039; die Konfiguration speichern und FHEM neu starten.&lt;br /&gt;
&lt;br /&gt;
Je nach Anzahl bereits definierter Devices kann es sinnvoll sein, alle Devices mit der Funktion &#039;&#039;&#039;get create&#039;&#039;&#039; oder &#039;&#039;&#039;get createDev&#039;&#039;&#039; neu anzulegen. Für die neu angelegten Geräte wird automatisch das passende Client-Modul (HMCCUDEV oder HMCCUCHN) verwendet.&lt;br /&gt;
&lt;br /&gt;
==Synchronisation mit der CCU==&lt;br /&gt;
&lt;br /&gt;
=== Geräte synchronisieren ===&lt;br /&gt;
Das Modul HMCCU bietet Befehle an, um Daten zwischen der CCU und FHEM zu synchronisieren. Der Befehl &#039;&#039;&#039;get ccuConfig&#039;&#039;&#039; liest alle Geräte aus der CCU. Er sollte immer ausgeführt werden, wenn sich an einer Gerätedefinition in der CCU etwas geändert hat, z.B. ein Gerät oder Kanal wurde umbenannt, ein neues Gerät wurde angelernt, ein Gerät wurde gelöscht. Bei der Definition des I/O Device (z.B. beim Start von FHEM) wird der Befehl automatisch ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Der Befehl &#039;&#039;&#039;get ccuDevices&#039;&#039;&#039; zeigt eine Liste der in der CCU bekannten Geräte an inklusive einer Liste der Kanalrollen, die von HMCCU automatisch erkannt werden. Daran kann man erkennen, welche CCU-Geräte von den Befehlen &#039;&#039;&#039;get create&#039;&#039;&#039; und &#039;&#039;&#039;get createDev&#039;&#039;&#039; unterstützt werden.&lt;br /&gt;
&lt;br /&gt;
=== Datenpunkte (Readings) synchronisieren ===&lt;br /&gt;
Eine manuelle Aktualisierung der Datenpunkte sollte nicht notwendig sein. Die Aktualisierung erfolgt automatisch durch die CCU per RPC-Server Verbindung. Der Befehl &#039;&#039;&#039;get update&#039;&#039;&#039; liest die Datenpunkte aller in FHEM definierten HMCCUDEV und HMCCUCHN Devices aus der CCU und aktualisiert alle Readings aller Client Devices.&lt;br /&gt;
&lt;br /&gt;
==Autocreate von FHEM-Devices für CCU Geräte==&lt;br /&gt;
HMCCU bietet eine Möglichkeit, um automatisch Client Devices in FHEM für Geräte oder Kanäle in der CCU anzulegen, sofern HMCCU eine oder mehrere Kanalrollen des betreffenden Gerätetyps unterstützt. Dazu kann entweder der Befehl &#039;&#039;&#039;get createDev&#039;&#039;&#039; (für ein einzelnes CCU Gerät) oder der Befehl &#039;&#039;&#039;get create&#039;&#039;&#039; (für mehrere CCU Geräte) verwenden werden.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Es wird dringend empfohlen, FHEM Devices für CCU Geräte mit den Befehlen get createDev oder get create anzulegen. Nur wenn Geräte dabei nicht erkannt werden, sollte man auf das klassische define zurückgreifen}}&lt;br /&gt;
&lt;br /&gt;
Die beiden Befehle zur automatischen Erzeugung von HMCCUDEV/HMCCUCHN Devices beziehen sich immer auf CCU-Geräte, nicht deren Kanäle. Bei der Erzeugung der FHEM-Devices entscheidet HMCCU selbständig, ob ein oder mehrere HMCCUDEV oder HMCCUCHN Devices angelegt werden. Nach Ausführung der Befehle werden in einem Fenster die angelegten oder auch nicht erkannten Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Für das CCU-Gerät &amp;quot;Heizung-Wohnzimmer&amp;quot; soll ein FHEM-Device angelegt werden:&lt;br /&gt;
 get d_ccu createDev Heizung-Wohnzimmer&lt;br /&gt;
Beispiel: Für alle CCU-Geräte, deren Namen mit &amp;quot;Heizung&amp;quot; beginnt, sollen FHEM-Devices angelegt werden:&lt;br /&gt;
 get d_ccu create Heizung.* room=Homematic group=Heizung&lt;br /&gt;
Beim vorherigen Beispiel wird als Gerätename ein regulärer Ausdruck (&amp;quot;Heizung.*) angegeben. Jedes angelegte Gerät bekommt die Attribute &amp;quot;room&amp;quot; und &amp;quot;group&amp;quot; zugewiesen.&lt;br /&gt;
&lt;br /&gt;
Wenn ein CCU-Gerät mehrere identische Kanalrollen besitzt, erzeugt HMCCU für jeden Kanal ein HMCCUCHN-Device. Ein Beispiel für solche CCU-Geräte sind Fernbedienungen, die 2-16 Kanäle der Rolle &amp;quot;KEY&amp;quot; besitzen.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Für die 2-Kanal-Fernbedienung FB-Rollladen werden 2 HMCCUCHN Devices angelegt. Die Namen der Devices werden aus den Kanalnamen der Fernbedienung in der CCU gebildet:&lt;br /&gt;
 get d_ccu createDev FB-Rollladen&lt;br /&gt;
erzeugt die HMCCUCHN Devices: FB-Rollladen-Wohnzimmer, FB-Rollladen-Kueche.&lt;br /&gt;
&lt;br /&gt;
Die Attribute der automatisch angelegten Devices können über die I/O Device Attribute &#039;&#039;&#039;ccudef-attributes&#039;&#039;&#039; und &#039;&#039;&#039;createDeviceGroup&#039;&#039;&#039; beeinflusst werden. Um allen neu angelegten Devices das Attribut room=Homematic zuzuweisen, definiert man folgendes Attribut im I/O Device:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Text&amp;quot;&amp;gt;&lt;br /&gt;
attr d_ccu ccudef-attributes room=Homematic&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;createDeviceGroup&#039;&#039;&#039; können Einzel-Devices, die alle zu einem CCU-Gerät gehören, automatisch in einer FHEM-Gruppe zusammengefasst werden. Dieses Attribut kommt z.B. zur Anwendung, wenn man get createDev für eine Fernbedienung mit mehreren Kanälen ausführt. In diesem Fall legt HMCCU für jeden Kanal der Fernbedienung ein HMCCUCHN Device an. Mit dem folgenden Attribut im I/O Device werden diese HMCCUCHN Devices alle einer Gruppe zugeordnet, deren Name dem Gerätenamen in der CCU entspricht:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Text&amp;quot;&amp;gt;&lt;br /&gt;
attr d_ccu createDeviceGroup %n&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die möglichen Platzhalter (wie z.B. %n) können der Commandref entnommen werden.&lt;br /&gt;
&lt;br /&gt;
==Weitere Funktionen des Moduls HMCCU==&lt;br /&gt;
===Lesen und Ändern von CCU Systemvariablen===&lt;br /&gt;
Systemvariablen der CCU können mit den Befehlen &#039;&#039;&#039;get vars&#039;&#039;&#039; und &#039;&#039;&#039;set var&#039;&#039;&#039; gelesen und geändert werden. Der Befehl &#039;&#039;&#039;get vars&#039;&#039;&#039; akzeptiert als Parameter einen regulären Ausdruck. Dadurch können mehrere Systemvariablen auf einmal gelesen werden. Nach dem Auslesen einer Systemvariable wird der Wert in einem Reading im I/O Device gespeichert. &lt;br /&gt;
&lt;br /&gt;
Beispiel: Lesen aller Systemvariablen, die mit A beginnen:&lt;br /&gt;
&amp;lt;pre&amp;gt;get d_ccu vars A.*&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Systemvariablen können in regelmäßigen Abständen gelesen werden. Dazu wird mit dem Attribut ccuGetVars ein Intervall und optional ein regulärer Ausdruck für die zu lesenden Systemvariablen festgelegt.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Lesen aller Systemvariablen alle 60 Sekunden. Im zweiten Befehl werden nur Variablen gelesen, die mit &amp;quot;A&amp;quot; beginnen:&lt;br /&gt;
&amp;lt;pre&amp;gt;attr d_ccu ccuGetVars 60&lt;br /&gt;
attr d_ccu ccuGetVars 60:^A&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn eine Systemvariable bereits in der CCU existiert, kann ihr Wert mit dem Befehl &#039;&#039;&#039;set var&#039;&#039;&#039; geändert werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Setzen der Systemvariablen „Temperatur“ auf den Wert 20.5:&lt;br /&gt;
&amp;lt;pre&amp;gt;set d_ccu var Temperatur 20.5&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem Befehl &#039;&#039;&#039;set var&#039;&#039;&#039; kann auch eine neue Systemvariable in der CCU angelegt werden. Dazu wird als erster Parameter vor dem Variablennamen der Typ der neuen Variable angegeben. Mögliche Typen sind &amp;quot;bool&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;number&amp;quot; oder &amp;quot;text&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Anlegen einer Textvariablen mit dem Namen &amp;quot;Wetter&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt;set d_ccu var text Wetter sonnig&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Optional können noch Attribute für eine neue Systemvariable gesetzt werden. Folgende Attribute sind erlaubt:&lt;br /&gt;
&lt;br /&gt;
* unit = Einheit&lt;br /&gt;
* desc = Beschreibung&lt;br /&gt;
* min = Kleinster erlaubter Wert bei numerischen Variablen&lt;br /&gt;
* max = Größter erlaubter Wert bei numerischen Variablen&lt;br /&gt;
* list = Durch Komma getrennte Liste mit zulässigen Werten bei Listen-Variablen&lt;br /&gt;
* valtrue = Angezeigter Wert bei Variablen vom Typ bool, Default = &amp;quot;ist wahr&amp;quot;&lt;br /&gt;
* valfalse = Angezeigter Wert bei Variablen vom Typ bool, Default = &amp;quot;ist falsch&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Beispiel: Anlegen einer numerischen Variablen für Temperaturwerte:&lt;br /&gt;
&amp;lt;pre&amp;gt;set d_ccu var number Temperatur 20.5 unit=Grad desc=Aussentemperatur min=-10.0 max=40.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ausführen von CCU Programmen===&lt;br /&gt;
Ein in der CCU2 hinterlegtes Programm kann mit dem Befehl &#039;&#039;&#039;set execute&#039;&#039;&#039; ausgeführt werden. Einziger Parameter des Befehls ist der Name des Programms. Es spielt keine Rolle, ob das Programm in der CCU aktiv oder inaktiv ist.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Programm mit dem Namen &amp;quot;Schalter_Ein&amp;quot; ausführen:&lt;br /&gt;
&amp;lt;pre&amp;gt;set d_ccu execute Schalter_Ein&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aggregation von Gerätezuständen===&lt;br /&gt;
Hinter diesem etwas kryptischen Begriff verbirgt sich die Zusammenfassung von Zuständen von Client-Devices. Anwendungsbeispiele sind:&lt;br /&gt;
* Wieviele und welche Geräte haben einen niedrigen Batteriestand?&lt;br /&gt;
* Wieviele und welche Fenster sind geöffnet?&lt;br /&gt;
Für die Beantwortung dieser Fragen stellt HMCCU einige Befehle und Attribute bereit. Die Ergebnisse werden in Form von Readings im I/O Device bereitgestellt:&lt;br /&gt;
*&#039;&#039;Präfix&#039;&#039;_count = Anzahl der FHEM Devices, die für die Aggregation ausgewertet wurden.&lt;br /&gt;
*&#039;&#039;Präfix&#039;&#039;_list = Liste der FHEM Devices, die der if Bedingung Aggregationsregel entsprechen.&lt;br /&gt;
*&#039;&#039;Präfix&#039;&#039;_match - Anzahl der FHEM Devices, die der if Bedingung der Aggregationsregel entsprechen.&lt;br /&gt;
*&#039;&#039;Präfix&#039;&#039;_state - Ergebnis der Aggregationsregel (if oder else Wert).&lt;br /&gt;
Aggregationen werden automatisch bei Änderung von Readings neu berechnet. Alternativ kann mit dem Befehl &#039;&#039;&#039;get aggregation&#039;&#039;&#039; eine Aggregation explizit durchgeführt werden. Als Parameter wird der Name der Aggregationsregel oder &amp;quot;all&amp;quot; für alle Aggregationen übergeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;get &amp;lt;io-dev&amp;gt; aggregation {all|&amp;lt;name&amp;gt;}&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die Konfiguration der Aggregationen erfolgt mit Hilfe von Regeln, die über das Attribut &#039;&#039;ccuaggregate&#039;&#039; definiert werden. Dabei werden mehrere Regeln durch ein Semikolon und optional einen Zeilenumbruch getrennt. Eine Aggregationsregel enthält mehrere, durch Komma getrennte Parameter, die das Verhalten einer Aggregation festlegen:&lt;br /&gt;
*&#039;&#039;&#039;name&#039;&#039;&#039;:&amp;lt;Name&amp;gt; - Legt den Namen einer Aggregation fest.&lt;br /&gt;
*&#039;&#039;&#039;filter&#039;&#039;&#039;:{name|alias|group|room|type}=&amp;lt;Incl-Expr&amp;gt;[!&amp;lt;Excl-Expr&amp;gt;] - Legt fest, welche Geräte in die Aggregation einbezogen werden:&lt;br /&gt;
**name: FHEM Device Name&lt;br /&gt;
**alias: FHEM Device Alias&lt;br /&gt;
**group: FHEM Device &#039;&#039;group&#039;&#039; Attribut&lt;br /&gt;
**room: FHEM Device &#039;&#039;room&#039;&#039; Attribut&lt;br /&gt;
**type: HomeMatic Gerätetyp&lt;br /&gt;
*&#039;&#039;&#039;read&#039;&#039;&#039;:&amp;lt;Read-Expr&amp;gt; - Legt fest, welche Readings für die Aggregation verwendet werden (z.B. state oder LOWBAT).&lt;br /&gt;
*&#039;&#039;&#039;if&#039;&#039;&#039;:{any|all}=&amp;lt;Value&amp;gt; - Legt die Bedingung fest, unter der die Aggregationsregel greift:&lt;br /&gt;
**any: Regel greift, wenn das Reading mindestens eins der über &#039;&#039;Filter&#039;&#039; selektierten FHEM Devices den Wert &#039;&#039;Value&#039;&#039; hat.&lt;br /&gt;
**all: Regel greift, wenn die Readings aller der über &#039;&#039;Filter&#039;&#039; selektierten FHEM Devices den Wert &#039;&#039;Value&#039;&#039; haben.&lt;br /&gt;
*&#039;&#039;&#039;else&#039;&#039;&#039;:&amp;lt;Value&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;prefix&#039;&#039;&#039;:{RULE|&amp;lt;Text&amp;gt;} - Legt das Präfix für die Readings fest, die das Ergebnis einer Aggregation beinhalten wobei &amp;quot;RULE&amp;quot; für den Namen der Aggregationsregel steht.&lt;br /&gt;
*&#039;&#039;&#039;coll&#039;&#039;&#039;:{NAME|&amp;lt;Attribute&amp;gt;}[!&amp;lt;Default&amp;gt;] - Legt fest, welches Attribut der FHEM Devices, die in die Aggregation einbezogen werden, in das _list Reading aufgenommen werden, sofern sie die if Bedingung erfüllen. Dabei entspricht &amp;quot;NAME&amp;quot; dem FHEM-Devicename. Der optionale Parameter Default legt den Inhalt des _list Readings fest, wenn keines der FHEM Devices die if Bedingung erfüllt. Voreingestellt ist &amp;quot;no match&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Aggregation der Batteriezustände aller HomeMatic Geräte in FHEM (Annahme: Alle gehören zum Raum &amp;quot;Homematic&amp;quot;):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr d_ccu ccuaggregate name:battery,filter:room=Homematic,read:(LOWBAT|LOW_BAT),if:any=yes,else:no,prefix=battery_,coll:alias&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Diese Aggregationsregel könnte folgende Readings im I/O Device generieren (Annahme: Batterien von 2 Fenstersensoren leer):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
battery_count: 50&lt;br /&gt;
battery_list: Fenster Bad,Fenster Wohnzimmer&lt;br /&gt;
battery_match: 2&lt;br /&gt;
battery_state: yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ausführen von HomeMatic Scripts===&lt;br /&gt;
Mit dem Befehl &#039;&#039;&#039;set hmscript&#039;&#039;&#039; kann ein beliebiges HomeMatic Script an die CCU2 zur Ausführung gesendet werden. Wenn das Script zeilenweise Daten im Format &amp;quot;Parameter=Value&amp;quot; zurück gibt, werden diese als Readings mit dem Namen &#039;&#039;Parameter&amp;quot; im I/O Device gespeichert.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Beispiel: Das folgende HomeMatic Script wertet alle CCU2 Systemvariablen aus. Das Ergebnis wird als Readings gespeichert (äquivalent zu Befehl &#039;&#039;&#039;get vars&#039;&#039;&#039;):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
object osysvar;&lt;br /&gt;
string ssysvarid;&lt;br /&gt;
foreach (ssysvarid, dom.GetObject(ID_SYSTEM_VARIABLES).EnumUsedIDs())&lt;br /&gt;
{&lt;br /&gt;
   osysvar = dom.GetObject(ssysvarid);&lt;br /&gt;
   WriteLine (osysvar.Name() # &amp;quot;=&amp;quot; # osysvar.Value());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das Script auf dem FHEM-Server unter /opt/fhem/sysvars.scr gespeichert wird, kann es wie folgt ausgeführt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;set d_ccu hmscript /opt/fhem/sysvars.scr&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>DR</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/Tools_und_Fehlersuche&amp;diff=38533</id>
		<title>DOIF/Tools und Fehlersuche</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/Tools_und_Fehlersuche&amp;diff=38533"/>
		<updated>2023-08-09T06:20:58Z</updated>

		<summary type="html">&lt;p&gt;DR: nur ein Überschrift in der Zeile, sonst wird er nicht als solcher erkannt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Hilfsmodul]]&lt;br /&gt;
&#039;&#039;&#039;Anmerkung:&#039;&#039;&#039; Dieser Artikel wurde {{Link2Forum|Topic=58237|Message=496560|LinkText=aus dem Forum}} übernommen.&lt;br /&gt;
&lt;br /&gt;
Dies ist der Versuch einige Hilfen aufzuzeigen, damit ein fehlerhaftes DOIF selbst korrigiert werden kann und wenn dies nicht zum Ziel führt, notwendige Angaben für eine Anfrage im Forum zusammenzustellen.&lt;br /&gt;
&lt;br /&gt;
== Eine verlässliche Basis zur Fehlereingrenzung schaffen. ==&lt;br /&gt;
=== Standardisierte Geräteerstellung und Bearbeitung ===&lt;br /&gt;
Im Folgenden wird davon ausgegangen, dass zum Erstellen des DOIF und zur Befehlseingabe die Eingabezeile des Web-Frontends benutzt wird und mit dem DEF-Editor (auf DEF klicken) in der sich öffnenden Geräteübersicht (DeviceOverview) bearbeitet wird, ohne eine cfg-Datei zu editieren.&lt;br /&gt;
&lt;br /&gt;
Nutzung des integrierten DEF-Editors mit Codemirror-Erweiterung, [[Konfiguration#Syntaxhervorhebung | Codemirror einrichten und bedienen]], siehe ergänzend [[DOIF/Tipps zur leichteren Bedienung | DOIF: Tips leichtere Bedienung Syntaxhervorhebung Klammerprüfung Suchen&amp;amp;Ersetzen ]]&lt;br /&gt;
&lt;br /&gt;
=== Strukturierung der Definition ===&lt;br /&gt;
Eine einzeilige Definition, die über mehrere Seiten verschoben werden muss oder über mehrere Zeilen umgebrochen wird ist unübersichtlich. Der DEF-Editor bietet die Möglichkeit zur Strukturierung der Definition.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
## 1&lt;br /&gt;
(&amp;lt;Bedingung&amp;gt;)&lt;br /&gt;
   (&amp;lt;Befehle&amp;gt;)&lt;br /&gt;
## 2&lt;br /&gt;
DOELSEIF (&amp;lt;Bedingung&amp;gt;)&lt;br /&gt;
   (&amp;lt;Befehle&amp;gt;)&lt;br /&gt;
## 3&lt;br /&gt;
DOELSEIF (&amp;lt;Bedingung&amp;gt;)&lt;br /&gt;
   (&amp;lt;Befehle&amp;gt;)&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FHEM aktuell halten ===&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Die aktuelle FHEM-Software ist ein &amp;quot;nightly build&amp;quot;, es gibt keine ausgewiesene &amp;quot;stable version&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Um Überraschungen zu vermeiden, sollte vor einem Update im Forum nach Fehlerhinweisen zu den genutzten Modulen recherchiert werden.&lt;br /&gt;
&lt;br /&gt;
Die Änderungshinweise sollten beachtet werden, da die Änderungshinweise nicht verpflichtend sind, sollten auch die Hinweise in den {{Link2Forum|Topic=57|LinkText=FHEM Code changes}} gelesen werden.&lt;br /&gt;
&lt;br /&gt;
Nach einem Update sollte immer das Logfile nach neuen Fehler- u. Warnmeldungen untersucht werden.&lt;br /&gt;
&lt;br /&gt;
Eine Automatisierung des Updatevorgangs oder Teile davon ist -gerade auch für Einsteiger- nicht unbedingt empfohlen. Sie sollte nur unter genauer Kenntnis möglicher Folgen eingesetzt werden und geschieht immer auf eigene Gefahr.}}&lt;br /&gt;
Die [http://fhem.de/commandref_DE.html#DOIF Befehlsreferenz] im Netz beschreibt die Eigenschaften des aktuellen Moduls. Möchte man die neusten Eigenschaften nutzen, ist eine Aktualisierung durchzuführen. Wird nur das Modul aktualisiert, kann das zu unerwartetem Verhalten des DOIF führen.&lt;br /&gt;
&lt;br /&gt;
Prüfen ob ein Update für DOIF vorliegt mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
update check&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FHEM aktualisieren mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach einem &amp;quot;update&amp;quot; immer ein&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
shutdown restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
durchführen.&lt;br /&gt;
&lt;br /&gt;
==== Neustart nach Update automatisieren ====&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Durch diese Automatik kann unter anderem die Anzeige der Änderungs-Informationen (CHANGED) zum Update, durch ein Neuladen der Browserseite, sofort wieder ausgeblendet werden, so dass die Änderungs-Informationen im Logfile oder svn/Forum gelesen werden müssen.}}&lt;br /&gt;
&amp;quot;shutdown restart&amp;quot; kann man per notify automatisieren mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define shutdown_restart notify global:UPDATE save;shutdown restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Modulversionen anzeigen ====&lt;br /&gt;
Der Befehl&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
liefert die &amp;quot;Latest Revision:&amp;quot; und die aktuell geladenen Modulversionen.&lt;br /&gt;
&lt;br /&gt;
== Fehlersuche ==&lt;br /&gt;
&#039;&#039;&#039;[[DOIFtools]]&#039;&#039;&#039; enthält einen Check für DOIF, der einige Dinge erkennt und Hinweise gibt, siehe [[DOIFtools#DOIF_Pr.C3.BCfung_und_Empfehlungen|DOIF_Prüfung_und_Empfehlungen]].&lt;br /&gt;
&lt;br /&gt;
=== Fehler in der Syntax der Definition ===&lt;br /&gt;
Diese Fehler werden durch die Benutzung des DEF-Editors mit Codemirror-Erweiterung reduziert.&lt;br /&gt;
&lt;br /&gt;
Der Editor unterstützt:&lt;br /&gt;
* farbliche Hervorhebung bekannter Befehle&lt;br /&gt;
* Vervollständigung bekannter Begriffe&lt;br /&gt;
* eine Prüfung auf unvollständige Klammerpaare&lt;br /&gt;
* ggf. Fehlermeldung beim Erstellen einer Definition&lt;br /&gt;
* Suchen&amp;amp;Ersetzen&lt;br /&gt;
*uvm.&lt;br /&gt;
&lt;br /&gt;
Einige Syntaxfehler werden im Frontend bei der Erstellung des Gerätes oder im globalen Logfile angezeigt. Das globale Logfile ist über den Menüpunkt &amp;quot;Logfile&amp;quot; im Hauptmenü des Frontends zu erreichen.&lt;br /&gt;
Fehler oder Warnungen, die erst zur Laufzeit offensichtlich werden, stehen in der Geräteübersicht oder im globalen Logfile.&lt;br /&gt;
&lt;br /&gt;
=== Logische Fehler ===&lt;br /&gt;
Diese Fehler werden erst zur Laufzeit sichtbar und das DOIF verhält sich nicht wie erwartet.&lt;br /&gt;
&lt;br /&gt;
Die Fehler entstehen z.B. durch:&lt;br /&gt;
&lt;br /&gt;
* Angabe einer falsche Rangfolge von Operatoren in der Bedingung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[A] and [B] or [C]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
geschrieben, aber&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[A] and ([B] or [C])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
gemeint.&lt;br /&gt;
* Nichtbeachtung des unterschiedlichen Verhalten von triggernden und nicht triggernden [[DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erläuterungen#Ausl.C3.B6ser|Auslöserangaben]].&lt;br /&gt;
* Ein unerwartetes Auslösen von DOELSE.&lt;br /&gt;
* Unerwartete Ereignisse eines Gerätes, die in einer Bedingung nicht abgefangen werden.&lt;br /&gt;
* Falsche Angabe der Events eines beteiligten Gerätes.&lt;br /&gt;
* Es wird DOELSE mit einer Bedingung angegeben.&lt;br /&gt;
&lt;br /&gt;
===Besonderheit des Error-Reading===&lt;br /&gt;
Das Reading &amp;quot;error&amp;quot; enthält Fehlermeldungen oder Rückgabewerte von Befehlen, die nicht 0, &amp;quot;&amp;quot;, undef. also logisch &amp;quot;falsch&amp;quot; entsprechen.&lt;br /&gt;
Die Ausführung des Befehls&lt;br /&gt;
&amp;lt;pre&amp;gt;({my $var = 1})&amp;lt;/pre&amp;gt;&lt;br /&gt;
setzt das Error-Reading &lt;br /&gt;
&amp;lt;pre&amp;gt;error      {my $var =1 }: 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
Diese falsche Fehlermeldung kann vermieden werden, durch Erzeugen eines Rückgabewertes, der logisch &amp;quot;falsch&amp;quot; entspricht.&lt;br /&gt;
&amp;lt;pre&amp;gt;({my $var = 1;; 0})&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die mit &amp;quot;;; 0&amp;quot; angehängte Null verhindert das Setzen des Error-Readings.&lt;br /&gt;
&lt;br /&gt;
===Adressierung von Arrayelementen===&lt;br /&gt;
Die Adressierung von Arrayelementen &amp;lt;code&amp;gt;$myArray[4]&amp;lt;/code&amp;gt; kann zu Fehlverhalten führen, weil die eckigen Klammern als DOIF-Syntax interpretiert werden. Das gilt nicht für den Block &#039;&#039;subs&#039;&#039; im Perl-Mode. Altervativ könnte z.B. ein numerierter Hash verwendet werden &amp;lt;code&amp;gt;$myArrayAsHash{4}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Fehler eingrenzen ===&lt;br /&gt;
Wenn ein Hinweis in der Fehlermeldung nicht ausreicht, um den Fehler zu beseitigen, empfiehlt es sich die Definition des DOIF Schritt für Schritt neu aufzubauen und die Fehlermeldung zu beobachten, um den Fehlerort einzugrenzen. Der letzte Schritt, der zur Fehlermeldung geführt hat, muss dann genauer untersucht werden.&amp;lt;br&amp;gt;Auch wenn es keine Fehlermeldungen gibt, aber das DOIF sich nicht so verhält wie man es erwartet, kann es hilfreich sein die Bedingung Schritt für Schritt aufzubauen, bis sich ein unerwartetes Verhalten zeigt. Die letzte Änderung müsste dann im im Kontext der restlichen Bedingung genauer analysiert werden.&lt;br /&gt;
&lt;br /&gt;
=== DOIF zum Testen ===&lt;br /&gt;
Eine weitere Möglichkeit wäre ein DOIF zum Testen anzulegen. Darin können Befehle, Bedingungen oder Bedingungsteile, verschiedene Schreibweisen oder alternative Operanden verwendet und ausprobiert werden, bis der eine Lösung gefunden wurde.&lt;br /&gt;
&lt;br /&gt;
=== Befehlsteil testen ===&lt;br /&gt;
Die Ausführung der Befehle in den einzelnen Befehlszweigen lässt sich über den Set-Befehl anstossen.&lt;br /&gt;
 set &amp;lt;DOIFname&amp;gt; cmd_&amp;lt;Nr des Befehlszweiges&amp;gt;&lt;br /&gt;
Wenn [[DOIFtools]] genutzt wird, dann sollten entsprechende Logeinträge im [[DOIFtools#Erstellen_eines_Debug-Logfile|DOIFtoolsLog]] zu finden sein.&lt;br /&gt;
&lt;br /&gt;
===Bedingungen testen mit dem Befehl [[Trigger|trigger]]===&lt;br /&gt;
Manche [[Event|Events]] lassen auf sich warten, um die Bedingung vorher zu testen kann der Befehl [[Trigger|trigger]] verwendet werden.&lt;br /&gt;
  trigger &amp;lt;[[Gerätename]]&amp;gt; &amp;amp;lang;&amp;lt;Readingname&amp;gt;: &amp;amp;rang;&amp;lt;Wert&amp;gt;&lt;br /&gt;
Das funktioniert dort, wo die [http://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events Auslösung über Events] in der Bedingung genutzt wird.&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen testen mit dem Befehl setreading ===&lt;br /&gt;
Manche [[Readings]] Aktualisierungen lassen auf sich warten, um die Bedingung vorher zu testen kann der Befehl setreading verwendet werden.&lt;br /&gt;
  setreading &amp;lt;[[Gerätename]]&amp;gt; &amp;lt;Readingname&amp;gt; &amp;lt;Wert&amp;gt;&lt;br /&gt;
Siehe auch {{Link2CmdRef|Anker=setreading|Lang=de}}.&lt;br /&gt;
&lt;br /&gt;
=== Operatoren loggen, die keine Bedingungsprüfung auslösen (triggern) ===&lt;br /&gt;
Operatoren, die keine Bedingungsprüfung auslösen, werden im Listing des DOIF nicht angezeigt.&lt;br /&gt;
Sie können geloggt werden, durch die Angabe eines Log-Befehls in der Bedingung.&lt;br /&gt;
==== Allgemein ====&lt;br /&gt;
  (&amp;lt;Bedingung&amp;gt;; Log &amp;lt;verbose level&amp;gt;, &amp;lt;content to log&amp;gt;)&lt;br /&gt;
==== Vorschlag ====&lt;br /&gt;
  (&amp;lt;Bedingung&amp;gt;; Log 1, &amp;quot;$SELF:&amp;quot;.&amp;quot;\n&amp;lt;name1&amp;gt;:&amp;lt;reading1&amp;gt; &amp;quot;.ReadingsVal(&amp;quot;&amp;lt;name1&amp;gt;&amp;quot;,&amp;quot;&amp;lt;reading1&amp;gt;&amp;quot;,&amp;quot;&amp;lt;default1&amp;gt;&amp;quot;).&amp;quot;\n&amp;lt;name2&amp;gt;:&amp;lt;reading2&amp;gt; &amp;quot;.ReadingsVal(&amp;quot;&amp;lt;name2&amp;gt;&amp;quot;,&amp;quot;&amp;lt;reading2&amp;gt;&amp;quot;,&amp;quot;&amp;lt;default2&amp;gt;&amp;quot;)...)&lt;br /&gt;
Siehe auch: {{Link2Forum|Topic=99365|Message=927748|LinkText=alternativer Vorschlag}} oder [[DevelopmentModuleAPI#Log|Log-Befehl]]&lt;br /&gt;
&lt;br /&gt;
== Hilfsmittel zu Fehleranalyse ==&lt;br /&gt;
=== Befehlsreferenz ===&lt;br /&gt;
Die [http://fhem.de/commandref_DE.html#DOIF Befehlsreferenz zum DOIF] immer wieder problembezogen lesen.&lt;br /&gt;
&lt;br /&gt;
=== Stacktrace ===&lt;br /&gt;
Zur Ursachenermittlung von Perl-Warnungen kann das globale Attribut stacktrace auf 1 gesetzt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr global stacktrace 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Verboselevel ===&lt;br /&gt;
In manchen Fällen bekommt man hilfreiche Informationen, wenn der Verboselevel von betroffenen Geräten erhöht wird.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr &amp;lt;gerätename&amp;gt; verbose 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Event-Monitor ===&lt;br /&gt;
Der [[Event_monitor|Event-Monitor]] ist über den Menüpunkt &amp;quot;Event monitor&amp;quot; im Hauptmenü des Frontends zu erreichen. Er enthält einen Filter, um die Anzeige der Events zu beschränken, um z.B. nur die [[Event|Events]] eines Gerätes anzuzeigen, etwa des DOIF.&lt;br /&gt;
&lt;br /&gt;
Wenn &#039;&#039;&#039;[[DOIFtools]]&#039;&#039;&#039; installiert ist. kann der [[Event_monitor|Event-Monitor]] in der Detailansicht des [[DOIF]] angezeigt werden, siehe [[DOIFtools#Zugriff_auf_den_Event-Monitor_in_der_Detailansicht_des_DOIF|Zugriff_auf_den_Event-Monitor_in_der_Detailansicht_des_DOIF]].&lt;br /&gt;
&lt;br /&gt;
Der [[Event_monitor|Event-Monitor]] kann über den [[Readings]] positioniert werden, so können [[Event|Events]] und resultierende Readings-Änderungen gleichzeitig beobachtet werden, siehe [[DOIFtools#Event-Monitor_im_DOIF_direkt_vor_den_Readings_anzeigen|Event-Monitor_im_DOIF_direkt_vor_den_Readings_anzeigen]].&lt;br /&gt;
&lt;br /&gt;
=== Detailansicht des DOIF ===&lt;br /&gt;
Das Schaltverhalten des DOIF kann in der Detailansicht (DeviceOverview) des DOIF und/oder im Eventmonitor beobachtet werden.&lt;br /&gt;
&lt;br /&gt;
Bei der Detailansicht ist zu beachten, dass nicht alle sich ändernden Readings aktualisiert werden. Um diese geänderten Readings anzuzeigen, muss die  Ansicht im Browser aktualisiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Gerätedefinition ausgeben ===&lt;br /&gt;
Eine Gerätedefinition einschliesslich der Attribute kann man sich mit dem Befehl &amp;quot;exportdevice&amp;quot; anzeigen lassen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
exportdevice &amp;lt;DOIFname&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Listing des DOIF ===&lt;br /&gt;
Eine Momentaufnahme vom Status des DOIF im Fehlerfall kann man sich mit dem Befehl &#039;&#039;&#039;[[List|list]]&#039;&#039;&#039; anzeigen lassen oder zum Posten verwenden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
list &amp;lt;DOIFname&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Verhaltensanalyse des DOIF ===&lt;br /&gt;
Mit &#039;&#039;&#039;[[DOIFtools]]&#039;&#039;&#039; kann automatisiert ein detailiertes Logfile erstellt werden, siehe &#039;&#039;&#039;[[DOIFtools#Erstellen_eines_Debug-Logfile|DOIFtoolsLog]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In dem &#039;&#039;&#039;DOIFtoolsLog&#039;&#039;&#039; kann das Verhalten des DOIF und der dazugehörenden Operanden genau nachvollzogen werden, da auch ein &#039;&#039;&#039;[[List|Listing]]&#039;&#039;&#039; eingeschlossen werden kann, siehe [[DOIFtools#Listings_in_DOIFtoolsLog_einschliessen|Listings in DOIFtoolsLog einschliessen]].&lt;br /&gt;
&lt;br /&gt;
Wenn Abweichungen zum erwarteten Verhalten erkannt werden, hat man einen Anhaltspunkt für weitere Untersuchungen oder sogar den Auslöser gefunden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alternativ kann ein Logfile manuell erstellt werden. Dazu können alle Geräte einbezogen werden, die im DOIF enthalten sind; z.B. als tägliches Logfile.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define DOIF_Log FileLog ./log/DOIF_Log-%j.log &amp;lt;DOIFname&amp;gt;:.*|&amp;lt;Gerät 1&amp;gt;:.*|&amp;lt;Gerät 2&amp;gt;:.* ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem Attribut mseclog lässt sich ein genauerer Zeitstempel einstellen, damit können zusammengehörende Events erkannt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr DOIF_Log mseclog 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen und Befehle zum aktuellen Zeitpunkt auszuwerten (Dump von DOIF) ===&lt;br /&gt;
Mit der Perl-Funktion &amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot; inline&amp;gt;dumpDevice($devspec)&amp;lt;/syntaxhighlight&amp;gt; für die 99_myUtils.pm, kann der Zustand eines oder mehrerer DOIF geloggt werden. Es werden Operanden und Funktionen aufgelöst und deren Inhalte angezeigt. Die genaue Syntax einer Device-Spezifikation ($devspec) ist in der {{Link2CmdRef|Anker=devspec}} erläutert.&lt;br /&gt;
&lt;br /&gt;
Die Funktion kann im Log-Befehl verwendet werden und im Bedingungs- und Ausführungsteil genutzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;(&amp;lt;Bedingungen&amp;gt; ;Log 1, dumpDevice(&amp;quot;$SELF&amp;quot;))&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
oder&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;(&amp;lt;Befehle&amp;gt;,{Log 1, dumpDevice(&amp;quot;$SELF&amp;quot;)})&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Funktion wird im Forum bereitgestellt: {{Link2Forum|Topic=85493|LinkText=Debug DOIF via Device Dump}}&lt;br /&gt;
&lt;br /&gt;
== Qualifizierte Angaben zur Anfrage im Forum ==&lt;br /&gt;
Dem Helfenden sollten alle zum Problem gehörenden Informationen gegeben werden, die dem Fragenden auch zur Verfügung stehen.&lt;br /&gt;
&lt;br /&gt;
Nicht immer sind alle Angaben notwendig, bei komplexen Problemen schon eher.&lt;br /&gt;
* Hinweis, wenn FHEM und DOIF nicht aktuell sind.&lt;br /&gt;
* Hinweis, wenn die cfg-Dateien direkt bearbeitet werden.&lt;br /&gt;
* genaue Beschreibung des erwarteten Verhalten&lt;br /&gt;
* genaue Beschreibung des beobachteten Verhalten&lt;br /&gt;
* Alle relevanten Fehlermeldungen&lt;br /&gt;
* Darstellen, was man selbst schon versucht hat und mit welchem Ergebnis, dann wird es nicht noch einmal vorgeschlagen.&lt;br /&gt;
* Ein für andere ausführbares [[DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erläuterungen#Beispiel_A.29:_Ereignissteuerung|&#039;&#039;&#039;Testszenario&#039;&#039;&#039;]] für [[Import_von_Code_Snippets|Raw definition]], mit Dummys als Ersatz für Sensoren, Schalter, Aktoren usw.&lt;br /&gt;
* Angabe der vollständigen Definition des DOIF (Name, Definition, Attribute) in Code-Tags (das Raute-Zeichen # im Forum-Editor)&lt;br /&gt;
* Zusätzlich ein vollständiges &#039;&#039;&#039;[[List|Listing]]&#039;&#039;&#039; des DOIF&lt;br /&gt;
* Die relevanten Stellen aus dem aufgezeichneten [[FileLog]] ,vorzugsweise &#039;&#039;&#039;[[DOIFtools#Erstellen_eines_Debug-Logfile|DOIFtoolsLog]]&#039;&#039;&#039; mit Kommentar und Markierung der Probleme in Quote-Tags (das Zeichen rechts neben der Raute). In Quote-Tags kann die Zeichenformatierung zum Markieren genutzt werden, in Code-Tags nicht.&lt;br /&gt;
* Auszug aus dem [[Event_monitor|Event-Monitor]] mit Kommentar und Markierung der Probleme&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [[DOIF]]&lt;br /&gt;
* [[DOIFtools]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>DR</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HMCCU&amp;diff=34395</id>
		<title>HMCCU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HMCCU&amp;diff=34395"/>
		<updated>2020-12-15T20:32:13Z</updated>

		<summary type="html">&lt;p&gt;DR: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Modul HMCCU ermöglicht zusammen mit weiteren Modulen eine Integration der [[HomeMatic]] CCU Zentrale sowie der dort angelernten Geräte in FHEM. {{Infobox Modul&lt;br /&gt;
|ModPurpose=Anbindung HomeMatic CCU an FHEM&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=HMCCU&lt;br /&gt;
|ModForumArea=HomeMatic&lt;br /&gt;
|ModTechName=88_HMCCU.pm &lt;br /&gt;
|ModOwner=zap ({{Link2FU|10980|Forum}} / [[Benutzer Diskussion:Zap|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
==Einführung==&lt;br /&gt;
===Übersicht===&lt;br /&gt;
Das Modul [[HMCCU]] ermöglicht zusammen mit den Client Modulen → [[HMCCUDEV]], HMCCUCHN und HMCCUPROCRPC eine Integration der [[HomeMatic]] CCU Zentrale sowie der dort angelernten Geräte in FHEM. Im Einzelnen werden folgende Funktionen unterstützt:&lt;br /&gt;
&lt;br /&gt;
* Unterstützt Hard- und Software CCUs inkl. CCU3, YAHM, piVCCU und RaspberryMatic&lt;br /&gt;
* Unterstützung der Protokolle BidCos, Wired und [[HomeMatic IP|HM-IP]]&lt;br /&gt;
* Unterstützung von CUxD, OSRAM und Philips Hue Devices in der CCU&lt;br /&gt;
* Unterstützung von HVL (HomeMatic Virtual Layer)&lt;br /&gt;
* Unterstützung von CCU Gerätegruppen bzw. virtuellen Geräten (Heizung, Rauchmelder)&lt;br /&gt;
* Automatische Aktualisierung von Gerätezuständen in FHEM per RPC-Server&lt;br /&gt;
* Automatische Konvertierung und Skalierung von Werten beim Lesen und Schreiben&lt;br /&gt;
* Lesen und Schreiben von CCU Systemvariablen&lt;br /&gt;
* Ausführen von CCU Programmen&lt;br /&gt;
* Ausführen von HomeMatic Scripts auf der CCU&lt;br /&gt;
&lt;br /&gt;
Die einzelnen Module haben folgende Aufgaben:&lt;br /&gt;
&lt;br /&gt;
* HMCCU: Kommunikation zwischen FHEM und CCU (I/O Device)&lt;br /&gt;
* HMCCURPCPROC: RPC-Server zum Empfang von Events der CCU&lt;br /&gt;
* HMCCUDEV: Definition von FHEM Devices für HomeMatic Geräte&lt;br /&gt;
* HMCCUCHN: Definition von FHEM Devices für einzelne Kanäle von HomeMatic Geräten&lt;br /&gt;
* HMCCUConf: Templates mit Default Attributen für bestimmte HomeMatic Gerätetypen&lt;br /&gt;
&lt;br /&gt;
===Geräte, Kanäle und Datenpunkte===&lt;br /&gt;
Geräte in der HomeMatic CCU bestehen aus einem oder mehreren Kanälen. Ein Kanal wiederum hat einen oder mehrere Datenpunkte. Über diese Datenpunkte kann ein Gerät gesteuert oder Statusinformationen ausgelesen werden. Sofern ein Datenpunkt lesbar ist, kann er als Reading in einem HMCCUCHN oder HMCCUDEV Device dargestellt werden. Ausgehend von dieser Abbildung in der CCU kann man nun entscheiden, ob man ein CCU Gerät mit HMCCUCHN oder HMCCUDEV definiert.&lt;br /&gt;
&lt;br /&gt;
Wenn alle benötigten Datenpunkte eines Gerätes über einen Kanal angesprochen werden können, sollte HMCCUCHN verwendet werden. Mit HMCCUDEV werden alle Kanäle eines Gerätes eingebunden. Außerdem unterstützt HMCCUDEV Rauchmeldergruppen sowie virtuelle Geräte wie z.B. Heizungsgruppen.&lt;br /&gt;
&lt;br /&gt;
Ein Sonderfall ist der Statuskanal 0, der von allen HomeMatic Geräten bereitgestellt wird. Dieser Kanal ist inklusive seiner Datenpunkte sowohl in HMCCUCHN als auch in HMCCUDEV Devices verfügbar.&lt;br /&gt;
{{Hinweis|Im Artikel → [[HMCCU Best Practice]] gibt es einige Tipps für den Einstieg inklusive Schritt-für-Schritt Anleitungen.}}&lt;br /&gt;
&lt;br /&gt;
==Inbetriebnahme==&lt;br /&gt;
===Zu beachten===&lt;br /&gt;
&lt;br /&gt;
* In den CCU Gerätenamen dürfen keine Umlaute verwendet werden. Leerzeichen sind zulässig, können aber u.U. bei einigen Funktionen zu Problemen führen.&lt;br /&gt;
* Namen in der CCU müssen über alle Objekttypen hinweg eindeutig sein. Beispiel: Ein Gerät und ein Raum dürfen nicht den gleichen Namen haben.&lt;br /&gt;
* Nach dem Neustart der CCU muss auch der RPC-Server neu gestartet werden, da die CCU2 bei einem Neustart die registrierten RPC-Server &amp;quot;vergisst&amp;quot;.&lt;br /&gt;
* Vor der Ausführung eines FHEM Updates oder vor der Installation eines CCU Firmware Updates muss der RPC-Server gestoppt werden.&lt;br /&gt;
* Seit der CCU Firmware 2.27.7 sind die Zugriffsmöglichkeiten auf die CCU durch eine Firewall abgesichert. Der Zugriff durch FHEM muss explizit freigeschaltet werden, da HMCCU sonst nicht korrekt funktioniert (s. nächster Abschnitt).&lt;br /&gt;
&lt;br /&gt;
===CCU Firewall Einstellungen===&lt;br /&gt;
Ab CCU Firmware 2.27.7 sind auf der CCU über das WebGUI folgende Einstellungen vorzunehmen:&lt;br /&gt;
* Menü &amp;quot;Einstellungen &amp;gt; Systemsteuerung&amp;quot; aufrufen&lt;br /&gt;
* Button &amp;quot;Firewall konfigurieren&amp;quot; anklicken&lt;br /&gt;
* Bei &amp;quot;Firewall-Richtlinie&amp;quot; den Eintrag &amp;quot;Ports offen&amp;quot; auswählen, andernfalls müssen die notwendigen Ports im Feld &amp;quot;Port-Freigabe&amp;quot; explizit angegeben werden&lt;br /&gt;
* Die Rechte für &amp;quot;HomeMatic XML-RPC API&amp;quot; und &amp;quot;Remote HomeMatic-Script API&amp;quot; auf &amp;quot;Vollzugriff&amp;quot; setzen.&lt;br /&gt;
* Man kann die Rechte auf &amp;quot;Eingeschränkter Zugriff&amp;quot; belassen, muss dann aber im Feld &amp;quot;IP-Adressen für eingeschränkten Zugriff&amp;quot; die IP des FHEM-Servers oder das komplette Subnetz in Subnet-Notation angeben.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich muss in der Systemsteuerung unter &amp;quot;Sicherheit&amp;quot; die Option &amp;quot;Authentifizierung&amp;quot; deaktiviert werden, da HMCCU den Zugriff per Username/Password noch nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Alle HMCCU Module sind Teil von FHEM. HMCCU benötigt die Perl Module RPC::XML::Server und RPC::XML::Client. &lt;br /&gt;
&lt;br /&gt;
Unter debian/raspbian kann das Paket librpc-xml-perl installiert werden&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install -y librpc-xml-perl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows (Strawberry Perl) kann man das Paket RPC::XML mit cpan installieren&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;doscon&amp;quot;&amp;gt;&lt;br /&gt;
cpan install RPC::XML&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
Bei der Installation gemäß [[FHEM Installation Windows]] befindet sich cpan man unter &amp;lt;code&amp;gt;&amp;lt;FHEM-Hauptverzeichis&amp;gt;\perl\bin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der interne RPC-Server legt für den Datenaustausch zwischen CCU2 und FHEM Dateien im Verzeichnis /tmp an. Der fhem Prozess benötigt daher Schreibrechte für dieses Verzeichnis. Das Verzeichnis kann mit dem Attribut &#039;&#039;rpcqueue&#039;&#039; geändert werden. Der mit dem Modul HMCCURPCPROC bereitgestellte externe RPC-Server verwendet keine temporären Dateien. Der interne RPC-Server wird ab Version 4.4 nicht mehr unterstützt.&lt;br /&gt;
&lt;br /&gt;
===Definition I/O Device===&lt;br /&gt;
Im ersten Schritt wird ein I/O Device angelegt, das für die Kommunikation zwischen FHEM und der CCU verantwortlich ist. Im folgenden Beispiel wird davon ausgegangen, dass die CCU unter der IP-Adresse 192.168.1.10 erreichbar ist. Das FHEM Device bekommt den Namen „d_ccu“.&lt;br /&gt;
&amp;lt;pre&amp;gt;define d_ccu HMCCU 192.168.1.10&amp;lt;/pre&amp;gt;&lt;br /&gt;
Falls die CCU als Software Service auf dem gleichen Rechner läuft wie FHEM, sollte bei der Definition der Parameter &#039;&#039;ccudelay&#039;&#039; angegeben werden. Die CCU Services brauchen beim Starten länger als FHEM. Durch &#039;&#039;ccudelay&#039;&#039; wird das neu angelegte I/O Device verzögert um die angegebene Anzahl Sekunden initialisiert. Die Vorgabe sind 180 Sekunden. Je nach Installation kann auch ein höherer Wert notwendig sein:&lt;br /&gt;
&amp;lt;pre&amp;gt;define d_ccu HMCCU 192.168.1.10 ccudelay=180&amp;lt;/pre&amp;gt;&lt;br /&gt;
Der Start von FHEM wird dadurch nicht verzögert. Die verzögerte Initialisierung kann mit dem Parameter &#039;&#039;delayedinit&#039;&#039; erzwungen werden, greift dann also auch, wenn die CCU beim Start von FHEM erreichbar ist&lt;br /&gt;
&lt;br /&gt;
===RPC Server konfigurieren===&lt;br /&gt;
Im nächsten Schritt wird der RPC-Server konfiguriert und gestartet. Zunächst werden mit dem Attribut &#039;&#039;rpcinterfaces&#039;&#039; die Schnittstellen bzw. Ports festgelegt, für die sich der RPC-Server bei der CCU registrieren soll. Folgende Angaben sind möglich:&lt;br /&gt;
* BidCos-RF&lt;br /&gt;
* BidCos-Wired&lt;br /&gt;
* HmIP-RF&lt;br /&gt;
* CUxD&lt;br /&gt;
* Homegear&lt;br /&gt;
* HVL&lt;br /&gt;
* VirtualDevices&lt;br /&gt;
&#039;&#039;&#039;Wichtig&#039;&#039;&#039;! Die CCU stellt außer BidCos-RF nur die Schnittstellen bereit, für die auch Geräte vorhanden sind. Nicht verwendete Schnittstellen dürfen bei &#039;&#039;rpcinterfaces&#039;&#039; nicht angegeben werden, da sonst der RPC-Server nicht startet. Im Internal &amp;quot;ccuinterfaces&amp;quot; werden nach der Definition des I/O Device alle verfügbaren Schnittstellen angezeigt.&lt;br /&gt;
&lt;br /&gt;
Danach wird durch Setzen des Attributs &#039;&#039;ccuflags&#039;&#039; auf den Wert procrpc der externe RPC-Server aktiviert. Die Verwendung des internen RPC-Servers ist zwar noch möglich, wird jedoch nicht mehr offiziell unterstützt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Externer RPC-Server (HMCCURPCPROC)&#039;&#039;&#039;&lt;br /&gt;
Beim ersten Start dieses RPC-Servers über das I/O Device wird automatisch je Schnittstelle ein Device vom Typ HMCCURPCPROC angelegt. Die Attribute room und group werden vom I/O Device übernommen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RPC-Server starten&#039;&#039;&#039;&lt;br /&gt;
Nun kann der RPC-Server gestartet werden. Dabei wird je RPC-Schnittstelle ein separater fhem.pl Prozess mit eigenem Listening-Port gestartet. Beim ersten Start legt HMCCU für jede unter &#039;&#039;rpcinterfaces&#039;&#039; angegebene Schnittstelle ein Device vom Typ HMCCURPCPROC an. Bei aktivierter Firewall müssen die Ports (s. Attribut &#039;&#039;rpcserverport&#039;&#039;) geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
Alle RPC-Server werden über das I/O Device mit einem Befehl gestartet:&lt;br /&gt;
&amp;lt;pre&amp;gt;set d_ccu rpcserver on&amp;lt;/pre&amp;gt;&lt;br /&gt;
Während des Starts der RPC-Server und der Registrierung bei der CCU kann das I/O Device nur eingeschränkt verwendet werden. Dies wird durch den Status „starting/busy“ angezeigt. Nachdem die RPC-Server gestartet wurden, wechselt der Status zu „running/OK“. Zusätzlich werden im Internal RPCPID die Prozess-IDs der RPC-Server Prozesse gespeichert.&lt;br /&gt;
Anschließend sollte man noch das Attribut &#039;&#039;rpcserver&#039;&#039; auf „on“ setzen, damit die RPC-Server beim Start von FHEM automatisch gestartet werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;attr d_ccu rpcserver on&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Vorgaben für Client Devices===&lt;br /&gt;
Im I/O Device stehen einige Attribute zur Verfügung, über die Vorgaben für Attribute in Client-Devices eingestellt werden können:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribut in HMCCU !! Vorgabe für Attribut in&amp;lt;br /&amp;gt;HMCCUDEV/HMCCUCHN !! Default !! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| ccudef-hmstatevals || hmstatevals || &#039;^UNREACH!(1 |true):unreachable;^LOW_?BAT!(1|true):warn_battery&#039; || Legt fest, wie der HomeMatic Status eines Client-Device ermittelt wird.&lt;br /&gt;
|-&lt;br /&gt;
| ccudef-readingfilter || ccureadingfilter || .* || Legt fest, welche Datenpunkte eines CCU Gerätes als Readings gespeichert werden&lt;br /&gt;
|-&lt;br /&gt;
| ccudef-readingname || ccureadingname || Kein Default || Ändert den Namen von Readings und/oder ergänzt neue Readings&lt;br /&gt;
|-&lt;br /&gt;
| ccudef-substitute || substitute || Kein Default || Ersetzt Datenpunktwerte vor der Speicherung in Readings.&lt;br /&gt;
|}&lt;br /&gt;
Der Inhalt der HMCCU Attribute wird an die Attribute im Client-Device angehängt. In der Datei HMCCUConf.pm ist ein Default-Template für ein HMCCU Device definiert, das über den Befehl &#039;&#039;&#039;set defaults&#039;&#039;&#039; für das I/O Device angewendet werden kann. Dabei werden die Attribute &#039;&#039;ccudef-*&#039;&#039; auf Werte gesetzt, die Readings und Werte analog zu CUL_HM erzeugen.&lt;br /&gt;
&lt;br /&gt;
Wichtig! Bei der Ausführung von &#039;&#039;&#039;set defaults&#039;&#039;&#039; für das I/O Device wird der Reading-Filter auf den Wert &amp;quot;^(LOW_?BAT|UNREACH)$&amp;quot; gesetzt. Dies hat zur Folge, dass in den Client-Devices nur diese beiden Datenpunkte als Readings gespeichert werden. Daher muss für jedes Client-Device über das lokale Attribut &#039;&#039;ccureadingfilter&#039;&#039; eine Liste der zusätzlich benötigten Datenpunkte definiert werden.&lt;br /&gt;
&lt;br /&gt;
==Synchronisation mit der CCU==&lt;br /&gt;
Das Modul HMCCU bietet Befehle an, um Daten zwischen der CCU und FHEM zu synchronisieren. Der Befehl &#039;&#039;&#039;get devicelist&#039;&#039;&#039; liest alle Geräte aus der CCU. Er sollte immer ausgeführt werden, wenn sich an einer Gerätedefinition in der CCU etwas geändert hat, z.B. Gerät oder Kanal wurde umbenannt, neues Gerät wurde angelernt, Gerät wurde gelöscht. Bei der Definition des I/O Device wird der Befehl automatisch ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Der Befehl &#039;&#039;&#039;get update&#039;&#039;&#039; liest die Datenpunkte aller in FHEM definierten HMCCUDEV und HMCCUCHN Devices aus der CCU und aktualisiert alle Readings aller Client Devices.&lt;br /&gt;
&lt;br /&gt;
==Autocreate von Client Devices==&lt;br /&gt;
HMCCU bietet eine Möglichkeit, um automatisch Client Devices in FHEM für Geräte oder Kanäle in der CCU anzulegen. Dazu wird der Befehl &#039;&#039;&#039;get devicelist&#039;&#039;&#039; mit folgender Syntax aufgerufen:&lt;br /&gt;
&amp;lt;pre&amp;gt;get &amp;lt;io-dev&amp;gt; devicelist create &amp;lt;dev-expr&amp;gt; [Options ...] [&amp;lt;attr&amp;gt;=&amp;lt;value [...]]&amp;lt;/pre&amp;gt;&lt;br /&gt;
Der Parameter &#039;&#039;dev-expr&#039;&#039; spezifiziert per regulärem Ausdruck, für welche CCU Geräte oder Kanäle ein Device in FHEM angelegt werden soll. Es ist davon abzuraten, an dieser Stelle &amp;quot;.*&amp;quot; zu verwenden, da so sehr viele (meist unnütze) FHEM Devices angelegt werden.&lt;br /&gt;
Folgende &#039;&#039;Options&#039;&#039; sind möglich:&lt;br /&gt;
*t={chn|dev|all} - Es werden nur Kanäle (chn) oder Geräte (dev) berücksichtigt (ab 3.6).&lt;br /&gt;
*p=&amp;lt;prefix&amp;gt; - Der Text &#039;&#039;prefix&#039;&#039; wird den Namen der neuen FHEM Devices vorangestellt.&lt;br /&gt;
*s=&amp;lt;suffix&amp;gt; - Der Text &#039;&#039;suffix&#039;&#039; wird an die Namen der neuen FHEM Devices angehängt.&lt;br /&gt;
*f=&amp;lt;format&amp;gt; - Mit &#039;&#039;format&#039;&#039; kann ein Template für die FHEM Devicenamen festgelegt werden. In einem Template können folgende Platzhalter verwendet werden: %n = CCU Geräte- oder Kanalname, %d = CCU Gerätename, %a = CCU Geräte- oder Kanaladresse.&lt;br /&gt;
*defattr - Sorgt dafür, dass für die neu definierten FHEM Devices einige Defaultattribute gesetzt werden, sofern für den jeweiligen Gerätetyp vorhanden.&lt;br /&gt;
*duplicates - Erlaubt das Anlegen von doppelten Devices. Wenn diese Option fehlt, werden in FHEM vorhandene Geräte nicht neu angelegt.&lt;br /&gt;
*save - Nach dem Anlegen der Geräte wird die neue FHEM Konfiguration gespeichert.&lt;br /&gt;
An den Befehl kann eine Liste von Attributen angehängt werden, die den neuen FHEM-Devices zugewiesen werden sollen.&lt;br /&gt;
&lt;br /&gt;
Beispiel 1: In FHEM Devices für alle CCU Geräte anlegen, deren Namen mit &amp;quot;HM-KL&amp;quot; beginnt. Alle neuen FHEM Devices beginnen mit &amp;quot;HM_&amp;quot;. Sofern vorhanden werden Default Attribute gesetzt. Die Konfiguration wird gespeichert.&lt;br /&gt;
&amp;lt;pre&amp;gt;get d_ccu devicelist create ^HM-KL.* t=dev f=HM_%n defattr save room=Homematic&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel 2: In FHEM Devices für alle CCU Geräte anlegen, deren Namen mit &amp;quot;HM&amp;quot; oder &amp;quot;Hm&amp;quot; (HmIP-Geräte) beginnt. Alle neuen FHEM Devices haben den Namen wie in der CCU und können dann mit dem Attribut &amp;quot;alias&amp;quot; verständlicher benannt werden. Sofern vorhanden, werden default Attribute gesetzt. Die Konfiguration wird gespeichert. Der Room &amp;quot;CCU_HM&amp;quot; ist angelehnt an &amp;quot;CUL_HM&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;get d_ccu devicelist create ^H[M|m].* t=dev f=%n defattr save room=CCU_HM&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Verwaltung von Default Attributen==&lt;br /&gt;
HMCCU bietet für FHEM Devices vom Typ HMCCUCHN und HMCCUDEV bei bestimmten HomeMatic Gerätetypen Default Attribute an. Diese können in den Client Devices mit dem Befehl &#039;&#039;&#039;set defaults&#039;&#039;&#039; definiert werden. Der Befehl &#039;&#039;&#039;get defaults&#039;&#039;&#039; zeigt die für einen Gerätetyp vorhandenen Attribute an. HMCCU bietet jedem Benutzer die Möglichkeit, zusätzlich zu den in der Datei HMCCUConf.pm mitgelieferten Attributen eigene Vorlagendateien mit Default Attributen zu definieren.&lt;br /&gt;
&lt;br /&gt;
===Anzeigen der Gerätetypen mit Default Attributen===&lt;br /&gt;
Mit dem Befehl &#039;&#039;&#039;get defaults&#039;&#039;&#039; im I/O Device werden alle HomeMatic Gerätetypen angezeigt, für die Default Attribute vorhanden sind. Dabei werden auch benutzerdefinierte Attribute berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
===Default Attribute exportieren und importieren===&lt;br /&gt;
Der Befehl &#039;&#039;&#039;get exportdefaults&#039;&#039;&#039; schreibt die mitgelieferten Default Attribute aus HMCCUConf.pm in eine Vorlagendatei. Diese Datei kann der Benutzer nach seinen Bedürfnissen anpassen und anschließend mit dem Befehl &#039;&#039;&#039;set importdefaults&#039;&#039;&#039; in FHEM importieren. Das Anlegen von eigenen Default Attributen könnte so aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
get d_ccu exportdefaults /opt/fhem/hmccu_defattr.txt&lt;br /&gt;
&lt;br /&gt;
... Datei /opt/fhem/hmccu_defattr.txt editieren ...&lt;br /&gt;
&lt;br /&gt;
set d_ccu importdefaults /opt/fhem/hmccu_defattr.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Beim Ausführen des Befehls &#039;&#039;&#039;set defaults&#039;&#039;&#039; in einem Client Device haben die benutzerdefinierten Attribute Priorität.&lt;br /&gt;
&lt;br /&gt;
===Benutzerdefinierte Attribute löschen===&lt;br /&gt;
Mit dem Befehl &#039;&#039;&#039;set cleardefaults&#039;&#039;&#039; werden alle mit &#039;&#039;&#039;set importdefaults&#039;&#039;&#039; importierten Default Attribute gelöscht. Danach sind wieder nur die in HMCCUConf.pm enthaltenen Default Attribute verfügbar.&lt;br /&gt;
&lt;br /&gt;
==Weitere Funktionen des Moduls HMCCU==&lt;br /&gt;
===Lesen und Ändern von CCU Systemvariablen===&lt;br /&gt;
Systemvariablen der CCU können mit den Befehlen &#039;&#039;&#039;get vars&#039;&#039;&#039; und &#039;&#039;&#039;set var&#039;&#039;&#039; gelesen und geändert werden. Der Befehl &#039;&#039;&#039;get vars&#039;&#039;&#039; akzeptiert als Parameter einen regulären Ausdruck. Dadurch können mehrere Systemvariablen auf einmal gelesen werden. Nach dem Auslesen einer Systemvariable wird der Wert in einem Reading im I/O Device gespeichert. &lt;br /&gt;
&lt;br /&gt;
Beispiel: Lesen aller Systemvariablen, die mit A beginnen:&lt;br /&gt;
&amp;lt;pre&amp;gt;get d_ccu vars A.*&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Systemvariablen können in regelmäßigen Abständen gelesen werden. Dazu wird mit dem Attribut ccuGetVars ein Intervall und optional ein regulärer Ausdruck für die zu lesenden Systemvariablen festgelegt.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Lesen aller Systemvariablen alle 60 Sekunden. Im zweiten Befehl werden nur Variablen gelesen, die mit &amp;quot;A&amp;quot; beginnen:&lt;br /&gt;
&amp;lt;pre&amp;gt;attr d_ccu ccuGetVars 60&lt;br /&gt;
attr d_ccu ccuGetVars 60 ^A&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn eine Systemvariable bereits in der CCU existiert, kann ihr Wert mit dem Befehl &#039;&#039;&#039;set var&#039;&#039;&#039; geändert werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Setzen der Systemvariablen „Temperatur“ auf den Wert 20.5:&lt;br /&gt;
&amp;lt;pre&amp;gt;set d_ccu var Temperatur 20.5&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem Befehl &#039;&#039;&#039;set var&#039;&#039;&#039; kann auch eine neue Systemvariable in der CCU angelegt werden. Dazu wird als erster Parameter vor dem Variablennamen der Typ der neuen Variable angegeben. Mögliche Typen sind &amp;quot;bool&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;number&amp;quot; oder &amp;quot;text&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Anlegen einer Textvariablen mit dem Namen &amp;quot;Wetter&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt;set d_ccu var text Wetter sonnig&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Optional können noch Attribute für eine neue Systemvariable gesetzt werden. Folgende Attribute sind erlaubt:&lt;br /&gt;
&lt;br /&gt;
* unit = Einheit&lt;br /&gt;
* desc = Beschreibung&lt;br /&gt;
* min = Kleinster erlaubter Wert bei numerischen Variablen&lt;br /&gt;
* max = Größter erlaubter Wert bei numerischen Variablen&lt;br /&gt;
* list = Durch Komma getrennte Liste mit zulässigen Werten bei Listen-Variablen&lt;br /&gt;
* valtrue = Angezeigter Wert bei Variablen vom Typ bool, Default = &amp;quot;ist wahr&amp;quot;&lt;br /&gt;
* valfalse = Angezeigter Wert bei Variablen vom Typ bool, Default = &amp;quot;ist falsch&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Beispiel: Anlegen einer numerischen Variablen für Temperaturwerte:&lt;br /&gt;
&amp;lt;pre&amp;gt;set d_ccu var number Temperatur 20.5 unit=Grad desc=Aussentemperatur min=-10.0 max=40.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ausführen von CCU Programmen===&lt;br /&gt;
Ein in der CCU2 hinterlegtes Programm kann mit dem Befehl &#039;&#039;&#039;set execute&#039;&#039;&#039; ausgeführt werden. Einziger Parameter des Befehls ist der Name des Programms. Es spielt keine Rolle, ob das Programm in der CCU aktiv oder inaktiv ist.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Programm mit dem Namen &amp;quot;Schalter_Ein&amp;quot; ausführen:&lt;br /&gt;
&amp;lt;pre&amp;gt;set d_ccu execute Schalter_Ein&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aggregation von Gerätezuständen (ab 3.6)===&lt;br /&gt;
Hinter diesem etwas kryptischen Begriff verbirgt sich die Zusammenfassung von Zuständen von Client-Devices. Anwendungsbeispiele sind:&lt;br /&gt;
* Wieviele und welche Geräte haben einen niedrigen Batteriestand?&lt;br /&gt;
* Wieviele und welche Fenster sind geöffnet?&lt;br /&gt;
Für die Beantwortung dieser Fragen stellt HMCCU einige Befehle und Attribute bereit. Die Ergebnisse werden in Form von Readings im I/O Device bereitgestellt:&lt;br /&gt;
*&#039;&#039;Präfix&#039;&#039;_count = Anzahl der FHEM Devices, die für die Aggregation ausgewertet wurden.&lt;br /&gt;
*&#039;&#039;Präfix&#039;&#039;_list = Liste der FHEM Devices, die der if Bedingung Aggregationsregel entsprechen.&lt;br /&gt;
*&#039;&#039;Präfix&#039;&#039;_match - Anzahl der FHEM Devices, die der if Bedingung der Aggregationsregel entsprechen.&lt;br /&gt;
*&#039;&#039;Präfix&#039;&#039;_state - Ergebnis der Aggregationsregel (if oder else Wert).&lt;br /&gt;
Aggregationen werden automatisch bei Änderung von Readings neu berechnet. Alternativ kann mit dem Befehl &#039;&#039;&#039;get aggregation&#039;&#039;&#039; eine Aggregation explizit durchgeführt werden. Als Parameter wird der Name der Aggregationsregel oder &amp;quot;all&amp;quot; für alle Aggregationen übergeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;get &amp;lt;io-dev&amp;gt; aggregation {all|&amp;lt;name&amp;gt;}&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die Konfiguration der Aggregationen erfolgt mit Hilfe von Regeln, die über das Attribut &#039;&#039;ccuaggregate&#039;&#039; definiert werden. Dabei werden mehrere Regeln durch ein Semikolon und optional einen Zeilenumbruch getrennt. Eine Aggregationsregel enthält mehrere, durch Komma getrennte Parameter, die das Verhalten einer Aggregation festlegen:&lt;br /&gt;
*&#039;&#039;&#039;name&#039;&#039;&#039;:&amp;lt;Name&amp;gt; - Legt den Namen einer Aggregation fest.&lt;br /&gt;
*&#039;&#039;&#039;filter&#039;&#039;&#039;:{name|alias|group|room|type}=&amp;lt;Incl-Expr&amp;gt;[!&amp;lt;Excl-Expr&amp;gt;] - Legt fest, welche Geräte in die Aggregation einbezogen werden:&lt;br /&gt;
**name: FHEM Device Name&lt;br /&gt;
**alias: FHEM Device Alias&lt;br /&gt;
**group: FHEM Device &#039;&#039;group&#039;&#039; Attribut&lt;br /&gt;
**room: FHEM Device &#039;&#039;room&#039;&#039; Attribut&lt;br /&gt;
**type: HomeMatic Gerätetyp&lt;br /&gt;
*&#039;&#039;&#039;read&#039;&#039;&#039;:&amp;lt;Read-Expr&amp;gt; - Legt fest, welche Readings für die Aggregation verwendet werden (z.B. state oder LOWBAT).&lt;br /&gt;
*&#039;&#039;&#039;if&#039;&#039;&#039;:{any|all}=&amp;lt;Value&amp;gt; - Legt die Bedingung fest, unter der die Aggregationsregel greift:&lt;br /&gt;
**any: Regel greift, wenn das Reading mindestens eins der über &#039;&#039;Filter&#039;&#039; selektierten FHEM Devices den Wert &#039;&#039;Value&#039;&#039; hat.&lt;br /&gt;
**all: Regel greift, wenn die Readings aller der über &#039;&#039;Filter&#039;&#039; selektierten FHEM Devices den Wert &#039;&#039;Value&#039;&#039; haben.&lt;br /&gt;
*&#039;&#039;&#039;else&#039;&#039;&#039;:&amp;lt;Value&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;prefix&#039;&#039;&#039;:{RULE|&amp;lt;Text&amp;gt;} - Legt das Präfix für die Readings fest, die das Ergebnis einer Aggregation beinhalten wobei &amp;quot;RULE&amp;quot; für den Namen der Aggregationsregel steht.&lt;br /&gt;
*&#039;&#039;&#039;coll&#039;&#039;&#039;:{NAME|&amp;lt;Attribute&amp;gt;}[!&amp;lt;Default&amp;gt;] - Legt fest, welches Attribut der FHEM Devices, die in die Aggregation einbezogen werden, in das _list Reading aufgenommen werden, sofern sie die if Bedingung erfüllen. Dabei entspricht &amp;quot;NAME&amp;quot; dem FHEM-Devicename. Der optionale Parameter Default legt den Inhalt des _list Readings fest, wenn keines der FHEM Devices die if Bedingung erfüllt. Voreingestellt ist &amp;quot;no match&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Aggregation der Batteriezustände aller HomeMatic Geräte in FHEM (Annahme: Alle gehören zum Raum &amp;quot;Homematic&amp;quot;):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr d_ccu ccuaggregate name:battery,filter:room=Homematic,read:(LOWBAT|LOW_BAT),if:any=yes,else:no,prefix=battery_,coll:alias&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Diese Aggregationsregel könnte folgende Readings im I/O Device generieren (Annahme: Batterien von 2 Fenstersensoren leer):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
battery_count: 50&lt;br /&gt;
battery_list: Fenster Bad,Fenster Wohnzimmer&lt;br /&gt;
battery_match: 2&lt;br /&gt;
battery_state: yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ausführen von HomeMatic Scripts===&lt;br /&gt;
Mit dem Befehl &#039;&#039;&#039;set hmscript&#039;&#039;&#039; kann ein beliebiges HomeMatic Script an die CCU2 zur Ausführung gesendet werden. Wenn das Script zeilenweise Daten im Format &amp;quot;Parameter=Value&amp;quot; zurück gibt, werden diese als Readings mit dem Namen &#039;&#039;Parameter&amp;quot; im I/O Device gespeichert.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Beispiel: Das folgende HomeMatic Script wertet alle CCU2 Systemvariablen aus. Das Ergebnis wird als Readings gespeichert (äquivalent zu Befehl &#039;&#039;&#039;get vars&#039;&#039;&#039;):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
object osysvar;&lt;br /&gt;
string ssysvarid;&lt;br /&gt;
foreach (ssysvarid, dom.GetObject(ID_SYSTEM_VARIABLES).EnumUsedIDs())&lt;br /&gt;
{&lt;br /&gt;
   osysvar = dom.GetObject(ssysvarid);&lt;br /&gt;
   WriteLine (osysvar.Name() # &amp;quot;=&amp;quot; # osysvar.Value());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das Script auf dem FHEM-Server unter /opt/fhem/sysvars.scr gespeichert wird, kann es wie folgt ausgeführt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;set d_ccu hmscript /opt/fhem/sysvars.scr&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>DR</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Alexa-Fhem&amp;diff=21997</id>
		<title>Alexa-Fhem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Alexa-Fhem&amp;diff=21997"/>
		<updated>2017-07-28T06:45:59Z</updated>

		<summary type="html">&lt;p&gt;DR: /* Windows */ typo&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 Fehlermedlung 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&amp;quot; unter &amp;lt;code&amp;gt;/etc/default&amp;lt;/code&amp;gt; anlegen&lt;br /&gt;
&lt;br /&gt;
 # Defaults / Konfigurations Optionen für alexa-fhem&lt;br /&gt;
 # Wo findet alexa-fhem die config.json Datei?&lt;br /&gt;
 ALEXA_OPTS=-U /opt/fhem/.alexa&lt;br /&gt;
&lt;br /&gt;
Den Pfad &amp;lt;code&amp;gt;/opt/fhem/.alexa&amp;lt;/code&amp;gt; an die Systemgegebenheiten anpassen. Letztendlich kann die config.json irgendwo liegen, hauptsache alexa-fhem weiß wo. Achtung: Natürlich muss der Benutzer auch Zugriff auf das Verzeichnis mit der config als auch das alexa-fhem Verzeichnis haben.&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 #oder ein anderer Benutzer wie fhem&lt;br /&gt;
 EnvironmentFile=/etc/default/alexa&lt;br /&gt;
 # oder wo auch immer eure alexa-fhem liegt&lt;br /&gt;
 ExecStart=/opt/fhem/alexa-fhem/bin/alexa $ALEXA_OPTS&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;
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;
&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;
==== 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 wird bzw. im großen Textfeld ist 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 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;
 &#039;&#039;&#039;attr Alexa.Party setList on off&#039;&#039;&#039;&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;
== 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;
====Was ist zu tun, wenn sich der Alexa-Service nicht starten lässt?====&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;
&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>DR</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Alexa-Fhem&amp;diff=21831</id>
		<title>Alexa-Fhem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Alexa-Fhem&amp;diff=21831"/>
		<updated>2017-07-19T19:28:28Z</updated>

		<summary type="html">&lt;p&gt;DR: +Update für Windows&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;source 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;/source&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;source 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;/source&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).&lt;br /&gt;
# Das dabei entstandene Verzeichnis &#039;&#039;package&#039;&#039; in &#039;&#039;alexa-fhem&#039;&#039; umbenennen &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;mv package alexa-fhem&amp;lt;/source&amp;gt;&lt;br /&gt;
# Durch &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;cd alexa-fhem&amp;lt;/source&amp;gt; in das Verzeichnis wechseln&lt;br /&gt;
# Mit &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/source&amp;gt; alle Abhängigkeiten installieren (kein sudo!).&lt;br /&gt;
# SSL Zertifikat erzeugen durch Aufruf von &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;./createKey.sh&amp;lt;/source&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;source 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;/source&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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/source&amp;gt; alle Abhängigkeiten installieren.&amp;lt;br/&amp;gt; Bei der Felermedlung 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;source 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;/source&amp;gt;&amp;lt;source 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;/source&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;move /y newkey.pem key.pem&amp;lt;/source&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;source 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;/source&amp;gt;&amp;lt;source 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;/source&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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/source&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;source 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;/source&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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/source&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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;./bin/alexa&amp;lt;/source&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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;node alexa&amp;lt;/source&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;source 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;/source&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;source 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;/source&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&amp;quot; unter &amp;lt;code&amp;gt;/etc/default&amp;lt;/code&amp;gt; anlegen&lt;br /&gt;
&lt;br /&gt;
 # Defaults / Konfigurations Optionen für alexa-fhem&lt;br /&gt;
 # Wo findet alexa-fhem die config.json Datei?&lt;br /&gt;
 ALEXA_OPTS=-U /opt/fhem/.alexa&lt;br /&gt;
&lt;br /&gt;
Den Pfad &amp;lt;code&amp;gt;/opt/fhem/.alexa&amp;lt;/code&amp;gt; an die Systemgegebenheiten anpassen. Letztendlich kann die config.json irgendwo liegen, hauptsache alexa-fhem weiß wo. Achtung: Natürlich muss der Benutzer auch Zugriff auf das Verzeichnis mit der config als auch das alexa-fhem Verzeichnis haben.&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 #oder ein anderer Benutzer wie fhem&lt;br /&gt;
 EnvironmentFile=/etc/default/alexa&lt;br /&gt;
 # oder wo auch immer eure alexa-fhem liegt&lt;br /&gt;
 ExecStart=/opt/fhem/alexa-fhem/bin/alexa $ALEXA_OPTS&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;
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;
&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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;define MyAlexa alexa&amp;lt;/source&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;
==== 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 wird bzw. im großen Textfeld ist 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 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;
 &#039;&#039;&#039;attr Alexa.Party setList on off&#039;&#039;&#039;&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;
== 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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;node -v&amp;lt;/source&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;
====Was ist zu tun, wenn sich der Alexa-Service nicht starten lässt?====&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;source 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;/source&amp;gt;&lt;br /&gt;
Sollte dies nicht der Fall sein bitte mit:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;chmod +x alexa&amp;lt;/source&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;
&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>DR</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Alexa-Fhem&amp;diff=21830</id>
		<title>Alexa-Fhem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Alexa-Fhem&amp;diff=21830"/>
		<updated>2017-07-19T11:38:46Z</updated>

		<summary type="html">&lt;p&gt;DR: /* SmartHome Skill anlegen */&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;source 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;/source&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;source 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;/source&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).&lt;br /&gt;
# Das dabei entstandene Verzeichnis &#039;&#039;package&#039;&#039; in &#039;&#039;alexa-fhem&#039;&#039; umbenennen &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;mv package alexa-fhem&amp;lt;/source&amp;gt;&lt;br /&gt;
# Durch &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;cd alexa-fhem&amp;lt;/source&amp;gt; in das Verzeichnis wechseln&lt;br /&gt;
# Mit &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/source&amp;gt; alle Abhängigkeiten installieren (kein sudo!).&lt;br /&gt;
# SSL Zertifikat erzeugen durch Aufruf von &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;./createKey.sh&amp;lt;/source&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;source 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;/source&amp;gt; in das Verzeichnis wechseln. &amp;lt;br/&amp;gt;Dabei ist natürlich der &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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/source&amp;gt; alle Abhängigkeiten installieren.&amp;lt;br/&amp;gt; Bei der Felermedlung 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;source 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;/source&amp;gt;&amp;lt;source 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;/source&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;move /y newkey.pem key.pem&amp;lt;/source&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;source 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;/source&amp;gt;&amp;lt;source 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;/source&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;
# 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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/source&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;
&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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;./bin/alexa&amp;lt;/source&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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;node alexa&amp;lt;/source&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;source 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;/source&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;source 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;/source&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&amp;quot; unter &amp;lt;code&amp;gt;/etc/default&amp;lt;/code&amp;gt; anlegen&lt;br /&gt;
&lt;br /&gt;
 # Defaults / Konfigurations Optionen für alexa-fhem&lt;br /&gt;
 # Wo findet alexa-fhem die config.json Datei?&lt;br /&gt;
 ALEXA_OPTS=-U /opt/fhem/.alexa&lt;br /&gt;
&lt;br /&gt;
Den Pfad &amp;lt;code&amp;gt;/opt/fhem/.alexa&amp;lt;/code&amp;gt; an die Systemgegebenheiten anpassen. Letztendlich kann die config.json irgendwo liegen, hauptsache alexa-fhem weiß wo. Achtung: Natürlich muss der Benutzer auch Zugriff auf das Verzeichnis mit der config als auch das alexa-fhem Verzeichnis haben.&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 #oder ein anderer Benutzer wie fhem&lt;br /&gt;
 EnvironmentFile=/etc/default/alexa&lt;br /&gt;
 # oder wo auch immer eure alexa-fhem liegt&lt;br /&gt;
 ExecStart=/opt/fhem/alexa-fhem/bin/alexa $ALEXA_OPTS&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;
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;
&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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;define MyAlexa alexa&amp;lt;/source&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;
==== 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 wird bzw. im großen Textfeld ist 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 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;
 &#039;&#039;&#039;attr Alexa.Party setList on off&#039;&#039;&#039;&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;
== 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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;node -v&amp;lt;/source&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;
====Was ist zu tun, wenn sich der Alexa-Service nicht starten lässt?====&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;source 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;/source&amp;gt;&lt;br /&gt;
Sollte dies nicht der Fall sein bitte mit:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;chmod +x alexa&amp;lt;/source&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;
&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>DR</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Alexa-Fhem&amp;diff=21829</id>
		<title>Alexa-Fhem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Alexa-Fhem&amp;diff=21829"/>
		<updated>2017-07-19T11:38:27Z</updated>

		<summary type="html">&lt;p&gt;DR: /* SmartHome Skill anlegen */ + neuer Parameter &amp;quot;Payload Version&amp;quot;&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;source 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;/source&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;source 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;/source&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).&lt;br /&gt;
# Das dabei entstandene Verzeichnis &#039;&#039;package&#039;&#039; in &#039;&#039;alexa-fhem&#039;&#039; umbenennen &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;mv package alexa-fhem&amp;lt;/source&amp;gt;&lt;br /&gt;
# Durch &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;cd alexa-fhem&amp;lt;/source&amp;gt; in das Verzeichnis wechseln&lt;br /&gt;
# Mit &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/source&amp;gt; alle Abhängigkeiten installieren (kein sudo!).&lt;br /&gt;
# SSL Zertifikat erzeugen durch Aufruf von &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;./createKey.sh&amp;lt;/source&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;source 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;/source&amp;gt; in das Verzeichnis wechseln. &amp;lt;br/&amp;gt;Dabei ist natürlich der &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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/source&amp;gt; alle Abhängigkeiten installieren.&amp;lt;br/&amp;gt; Bei der Felermedlung 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;source 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;/source&amp;gt;&amp;lt;source 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;/source&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;move /y newkey.pem key.pem&amp;lt;/source&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;source 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;/source&amp;gt;&amp;lt;source 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;/source&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;
# 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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/source&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;
&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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;./bin/alexa&amp;lt;/source&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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;node alexa&amp;lt;/source&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;source 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;/source&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;source 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;/source&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&amp;quot; unter &amp;lt;code&amp;gt;/etc/default&amp;lt;/code&amp;gt; anlegen&lt;br /&gt;
&lt;br /&gt;
 # Defaults / Konfigurations Optionen für alexa-fhem&lt;br /&gt;
 # Wo findet alexa-fhem die config.json Datei?&lt;br /&gt;
 ALEXA_OPTS=-U /opt/fhem/.alexa&lt;br /&gt;
&lt;br /&gt;
Den Pfad &amp;lt;code&amp;gt;/opt/fhem/.alexa&amp;lt;/code&amp;gt; an die Systemgegebenheiten anpassen. Letztendlich kann die config.json irgendwo liegen, hauptsache alexa-fhem weiß wo. Achtung: Natürlich muss der Benutzer auch Zugriff auf das Verzeichnis mit der config als auch das alexa-fhem Verzeichnis haben.&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 #oder ein anderer Benutzer wie fhem&lt;br /&gt;
 EnvironmentFile=/etc/default/alexa&lt;br /&gt;
 # oder wo auch immer eure alexa-fhem liegt&lt;br /&gt;
 ExecStart=/opt/fhem/alexa-fhem/bin/alexa $ALEXA_OPTS&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;
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;
&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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;define MyAlexa alexa&amp;lt;/source&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; &amp;quot;v2 (other devices)&amp;quot; &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;
==== 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 wird bzw. im großen Textfeld ist 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 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;
 &#039;&#039;&#039;attr Alexa.Party setList on off&#039;&#039;&#039;&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;
== 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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;node -v&amp;lt;/source&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;
====Was ist zu tun, wenn sich der Alexa-Service nicht starten lässt?====&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;source 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;/source&amp;gt;&lt;br /&gt;
Sollte dies nicht der Fall sein bitte mit:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;chmod +x alexa&amp;lt;/source&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;
&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>DR</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Alexa-Fhem&amp;diff=21815</id>
		<title>Alexa-Fhem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Alexa-Fhem&amp;diff=21815"/>
		<updated>2017-07-17T13:47:09Z</updated>

		<summary type="html">&lt;p&gt;DR: /* Alexa-Fhem installieren */ +Start unter Windows&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;source 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;/source&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;source 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;/source&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).&lt;br /&gt;
# Das dabei entstandene Verzeichnis &#039;&#039;package&#039;&#039; in &#039;&#039;alexa-fhem&#039;&#039; umbenennen &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;mv package alexa-fhem&amp;lt;/source&amp;gt;&lt;br /&gt;
# Durch &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;cd alexa-fhem&amp;lt;/source&amp;gt; in das Verzeichnis wechseln&lt;br /&gt;
# Mit &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/source&amp;gt; alle Abhängigkeiten installieren (kein sudo!).&lt;br /&gt;
# SSL Zertifikat erzeugen durch Aufruf von &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;./createKey.sh&amp;lt;/source&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;source 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;/source&amp;gt; in das Verzeichnis wechseln. &amp;lt;br/&amp;gt;Dabei ist natürlich der &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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/source&amp;gt; alle Abhängigkeiten installieren.&amp;lt;br/&amp;gt; Bei der Felermedlung 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;source 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;/source&amp;gt;&amp;lt;source 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;/source&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;move /y newkey.pem key.pem&amp;lt;/source&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;source 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;/source&amp;gt;&amp;lt;source 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;/source&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;
# 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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/source&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;
&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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;./bin/alexa&amp;lt;/source&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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;node alexa&amp;lt;/source&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;source 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;/source&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;source 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;/source&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&amp;quot; unter &amp;lt;code&amp;gt;/etc/default&amp;lt;/code&amp;gt; anlegen&lt;br /&gt;
&lt;br /&gt;
 # Defaults / Konfigurations Optionen für alexa-fhem&lt;br /&gt;
 # Wo findet alexa-fhem die config.json Datei?&lt;br /&gt;
 ALEXA_OPTS=-U /opt/fhem/.alexa&lt;br /&gt;
&lt;br /&gt;
Den Pfad &amp;lt;code&amp;gt;/opt/fhem/.alexa&amp;lt;/code&amp;gt; an die Systemgegebenheiten anpassen. Letztendlich kann die config.json irgendwo liegen, hauptsache alexa-fhem weiß wo. Achtung: Natürlich muss der Benutzer auch Zugriff auf das Verzeichnis mit der config als auch das alexa-fhem Verzeichnis haben.&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 #oder ein anderer Benutzer wie fhem&lt;br /&gt;
 EnvironmentFile=/etc/default/alexa&lt;br /&gt;
 # oder wo auch immer eure alexa-fhem liegt&lt;br /&gt;
 ExecStart=/opt/fhem/alexa-fhem/bin/alexa $ALEXA_OPTS&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;
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;
&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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;define MyAlexa alexa&amp;lt;/source&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;) &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;
==== 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 wird bzw. im großen Textfeld ist 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 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;
 &#039;&#039;&#039;attr Alexa.Party setList on off&#039;&#039;&#039;&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;
== 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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;node -v&amp;lt;/source&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;
====Was ist zu tun, wenn sich der Alexa-Service nicht starten lässt?====&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;source 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;/source&amp;gt;&lt;br /&gt;
Sollte dies nicht der Fall sein bitte mit:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;chmod +x alexa&amp;lt;/source&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;
&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>DR</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Alexa-Fhem&amp;diff=21814</id>
		<title>Alexa-Fhem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Alexa-Fhem&amp;diff=21814"/>
		<updated>2017-07-17T13:42:24Z</updated>

		<summary type="html">&lt;p&gt;DR: /* Erstinstallation */ + Installation unter Windows&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;source 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;/source&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;source 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;/source&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).&lt;br /&gt;
# Das dabei entstandene Verzeichnis &#039;&#039;package&#039;&#039; in &#039;&#039;alexa-fhem&#039;&#039; umbenennen &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;mv package alexa-fhem&amp;lt;/source&amp;gt;&lt;br /&gt;
# Durch &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;cd alexa-fhem&amp;lt;/source&amp;gt; in das Verzeichnis wechseln&lt;br /&gt;
# Mit &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/source&amp;gt; alle Abhängigkeiten installieren (kein sudo!).&lt;br /&gt;
# SSL Zertifikat erzeugen durch Aufruf von &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;./createKey.sh&amp;lt;/source&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;source 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;/source&amp;gt; in das Verzeichnis wechseln. &amp;lt;br/&amp;gt;Dabei ist natürlich der &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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/source&amp;gt; alle Abhängigkeiten installieren.&amp;lt;br/&amp;gt; Bei der Felermedlung 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;source 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;/source&amp;gt;&amp;lt;source 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;/source&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;move /y newkey.pem key.pem&amp;lt;/source&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;source 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;/source&amp;gt;&amp;lt;source 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;/source&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;
# 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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/source&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;
&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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;./bin/alexa&amp;lt;/source&amp;gt; den Dienst starten (kein sudo!)&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;source 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;/source&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;source 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;/source&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&amp;quot; unter &amp;lt;code&amp;gt;/etc/default&amp;lt;/code&amp;gt; anlegen&lt;br /&gt;
&lt;br /&gt;
 # Defaults / Konfigurations Optionen für alexa-fhem&lt;br /&gt;
 # Wo findet alexa-fhem die config.json Datei?&lt;br /&gt;
 ALEXA_OPTS=-U /opt/fhem/.alexa&lt;br /&gt;
&lt;br /&gt;
Den Pfad &amp;lt;code&amp;gt;/opt/fhem/.alexa&amp;lt;/code&amp;gt; an die Systemgegebenheiten anpassen. Letztendlich kann die config.json irgendwo liegen, hauptsache alexa-fhem weiß wo. Achtung: Natürlich muss der Benutzer auch Zugriff auf das Verzeichnis mit der config als auch das alexa-fhem Verzeichnis haben.&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 #oder ein anderer Benutzer wie fhem&lt;br /&gt;
 EnvironmentFile=/etc/default/alexa&lt;br /&gt;
 # oder wo auch immer eure alexa-fhem liegt&lt;br /&gt;
 ExecStart=/opt/fhem/alexa-fhem/bin/alexa $ALEXA_OPTS&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;
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;
&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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;define MyAlexa alexa&amp;lt;/source&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;) &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;
==== 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 wird bzw. im großen Textfeld ist 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 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;
 &#039;&#039;&#039;attr Alexa.Party setList on off&#039;&#039;&#039;&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;
== 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;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;node -v&amp;lt;/source&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;
====Was ist zu tun, wenn sich der Alexa-Service nicht starten lässt?====&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;source 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;/source&amp;gt;&lt;br /&gt;
Sollte dies nicht der Fall sein bitte mit:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;chmod +x alexa&amp;lt;/source&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;
&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>DR</name></author>
	</entry>
</feed>