<?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=Hapege</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=Hapege"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Hapege"/>
	<updated>2026-04-30T13:24:44Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHEM_Connector_f%C3%BCr_Amazon_Alexa&amp;diff=40440</id>
		<title>FHEM Connector für Amazon Alexa</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FHEM_Connector_f%C3%BCr_Amazon_Alexa&amp;diff=40440"/>
		<updated>2025-10-14T14:02:44Z</updated>

		<summary type="html">&lt;p&gt;Hapege: /* Was geht alles ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Alexa FHEMlazy&#039;&#039;&#039; war historisch ein Fork des Original [[Alexa-Fhem|alexa-fhem]], der im Januar 2019 mit dem Original zusammengeführt wurde und nun als &#039;&#039;&#039;FHEM Connector&#039;&#039;&#039; verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
Er ermöglicht innerhalb von Minuten die Verknüpfung von FHEM mit einem Amazon Echo Gerät. Auch Geräte anderer Hersteller mit verbauten Mikrofonen und Alexa-Sprachassistenten-Unterstützung sollten problemlos funktionieren. Für folgende Geräte ist dies bspw. der Fall (Falls Ihr andere/weitere Gerätemodelle bzw. Hersteller in Verwendung habt, bitte hier pflegen):&lt;br /&gt;
&lt;br /&gt;
* SONOS Beam und SONOS One   &lt;br /&gt;
&lt;br /&gt;
Gegenüber dem klassischen Ansatz ergeben sich Einschränkungen, so läuft die Software normalerweise unter dem gleichen Benutzer wie FHEM auf dem gleichen Server, und es wird z.Zt. nur der Smarthome-Skill unterstützt (die Variante, bei der die Möglichkeiten der Interaktion von Amazon festgelegt wurden).&lt;br /&gt;
Dafür ist weder ein Developer-Account bei Amazon, eigene Lambda- und Skillfunktionen, noch das Öffnen eines eingehenden Ports aus dem Internet nötig. &lt;br /&gt;
* Die Software integriert einen Installer, der die Erstkonfiguration und Anmeldung übernimmt&lt;br /&gt;
* Die Kommunikation zur Software auf dem heimischen Rechner und dann zu FHEM verläuft über SSH und einen vom FHEM-Verein gehosteten Server&lt;br /&gt;
* Funktioniert mit IPv4, IPv6, echtem Dual Stack und DS-Lite&lt;br /&gt;
* Als Skill bei Amazon wird der Skill &amp;quot;FHEM Connector&amp;quot; verwendet.&lt;br /&gt;
&lt;br /&gt;
Der Thread im Forum zur Software ist hier: {{Link2Forum|Topic=94817}}.&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Einfache Anbindung von FHEM an Amazon Assistent Alexa&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=alexa&lt;br /&gt;
|ModTechName=39_alexa.pm / alexa-fhem&lt;br /&gt;
|ModForumArea=Frontends/Sprachsteuerung&lt;br /&gt;
|ModOwner=gvzdus, André/ justme1968 ({{Link2FU|430|Forum}} / [[Benutzer Diskussion:Justme|Wiki]])&lt;br /&gt;
}} &lt;br /&gt;
==Einführung==&lt;br /&gt;
===Arbeitsweise und Datenfluss===&lt;br /&gt;
Vorläufig ist alexa-fhem im &amp;quot;FHEM Connector-Modus&amp;quot; ein reiner [https://developer.amazon.com/de/docs/smarthome/understand-the-smart-home-skill-api.html SmartHome-Skill].&lt;br /&gt;
SmartHome-Skills erhalten weder die Sprachdaten selber noch das, was Amazon in Textform verstanden hat, sondern vielmehr extrahiert Amazon aus dem verstandenen Text Anweisungen und Abfragen für Geräte, die dann an den Skill übermittelt werden. Charmant ist dabei, dass unmittelbar gefragt werden kann &amp;quot;Alexa, wie ist die Temperatur im Wohnzimmer?&amp;quot;, während andere Skills zunächst explizit angesprochen werden müssen (&amp;quot;Alexa, frage FHEM nach der Temperatur im Wohnzimmer&amp;quot;). Außerdem kann der Nutzer mehrere Smarthome-Skills installieren, und die Geräte werden zu einer Gesamtmenge zusammengefasst.&lt;br /&gt;
&lt;br /&gt;
Gehen wir den Datenfluss bei der konkreten Frage &amp;quot;Wie ist die Temperatur im Wohnzimmer?&amp;quot; durch:&lt;br /&gt;
* Alexa hat bei der Skillinstallation gelernt, dass &amp;quot;FHEM Connector&amp;quot; bei Dir einen Thermostaten im Raum Wohnzimmer kennt. Dadurch wird bei der Sprachanalyse von &amp;quot;Alexa Voice Service&amp;quot; in der Cloud erkannt, dass eine Abfrage an &amp;quot;FHEM Connector&amp;quot; erfolgversprechend ist.&lt;br /&gt;
* Zunächst wird die zentrale &amp;quot;Lambda-Funktion&amp;quot; von &amp;quot;FHEM Connector&amp;quot; aufgerufen. Die Funktion leitet aber im Kern nur den Request unverändert an den vom Verein bereitgestellten Server weiter. Im Request enthalten ist ein Token, das sogenannte &amp;quot;Bearer-Token&amp;quot;.&lt;br /&gt;
* Der &amp;quot;Vereinsserver&amp;quot; prüft anhand dieses Tokens, ob es überhaupt bekannt ist, und zu welchem Nutzer es gehört. Ist dieser Nutzer verbunden, wird der Request wiederum quasi unverändert an den Nutzer weitergeleitet.&lt;br /&gt;
* Diese Weiterleitung passiert über einen sogenannten SSH-Reverse-Tunnel, der von Deiner Seite und der Software auf dem FHEM-Tunnel automatisch aufgebaut wird.&lt;br /&gt;
* Auf Deiner Seite läuft die eigentliche Software, und zwar unter nodeJS. nodeJS ist ein Javascript ausführender Miniserver, der lokal auf einem Zufallsport auf Requests &amp;quot;lauscht&amp;quot;. In der Original-Version  [[Alexa-Fhem|Alexa FHEM]] kommen die Requests aus dem Internet (hoffentlich von der eigenen Lambda-Funktion), hier bei &amp;quot;FHEM Connector&amp;quot; kommen sie ausschließlich aus dem SSH-Tunnel von lokal.&lt;br /&gt;
* Die Software validiert nun diesen Request anhand des Bearer-Tokens. Konkret wird dabei das bei der Installation generierte Token, dass bei der Skill-Aktivierung an Amazon übertragen wurde, mit dem lokal gespeicherten Wert verglichen. Stimmt das Token, wird der Befehl verarbeitet, üblicherweise wird hierbei ein Aufruf an die Webschnittstelle von FHEM abgesetzt.&lt;br /&gt;
* FHEM führt den Befehl aus&lt;br /&gt;
&lt;br /&gt;
Hört sich langsam und kompliziert an? Kompliziert: Okay. Langsam eher nicht, in etlichen Fällen liegt die Gesamtantwortszeit unter 200 ms.&lt;br /&gt;
&lt;br /&gt;
Soweit ein erster Überblick über die Datenflüsse. Im Abschnitt Sicherheit ist das Konzept der Absicherung deutlich genauer und ausführlicher beschrieben.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
Du wirst bei der Installation zuerst auf der Kommandozeile auf Deinem Raspberry (o.ä.) unterwegs sein, anschließend im Webfrontend von FHEM, und zum Schluss auf der Alexa-Konsole im Web.&lt;br /&gt;
&lt;br /&gt;
===node.js installieren===&lt;br /&gt;
&lt;br /&gt;
Ab Jessy liegt NodeJS bereits in einer ausreichend aktuellen Version vor (Stretch und Buster funktionieren ebenfalls). Mit&lt;br /&gt;
&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 install nodejs npm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kannst Du es installieren. Mit &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
node --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
erfährst Du die aktuelle Version - wenn hier etwas mit &amp;quot;8&amp;quot; oder höher vorneweg erscheint, ist alles gut.&lt;br /&gt;
Ansonsten suche Dir bitte eine Anleitung im Web, wie Du NodeJS auf Deinem System auf einen aktuellen Stand bringen kannst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung:&#039;&#039;&#039; diese Aussage bzgl. node-Version (und Jessie/Stretch) stimmt wohl für alexa-fhem Stand heute (12.06.2020) nicht mehr, siehe https://forum.fhem.de/index.php/topic,112025.msg1063218.html#msg1063218&lt;br /&gt;
&lt;br /&gt;
=== Alexa-FHEM installieren ===&lt;br /&gt;
&lt;br /&gt;
Nun installieren wir Alexa-fhem aus dem offiziellen Repository:&lt;br /&gt;
&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 npm install -g alexa-fhem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Vorgang benötigt etwas Zeit.&lt;br /&gt;
&lt;br /&gt;
(Edit: die aktuelle Version 0.5.65 hat ein Problem, wenn ModeController verwendet wird. Wer modes braucht, der sollte die vorherige Version 0.5.64 installieren:&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 npm install -g alexa-fhem@0.5.64&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alexa-FHEM aktivieren ===&lt;br /&gt;
&lt;br /&gt;
Wechsele jetzt in FHEM-Web!&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, dass das Alexa-Modul in der Version ab Januar 2019 vorliegt. Dafür bitte einmal FHEM aktualisieren:&lt;br /&gt;
Speichern der Config nicht vergessen, und&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
update&lt;br /&gt;
shutdown restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alles, was jetzt noch nötig ist, ist das Anlegen eines Alexa-Devices. Gib dafür in der FHEM-Web-Kommandozeile&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
define alexa alexa&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
an. Nun läuft, während Du bereits das neu angelegte Alexa-Devices siehst, ein komplexer Prozess im Hintergrund:&lt;br /&gt;
&lt;br /&gt;
* Falls noch kein SSH-Key für den Benutzer, unter dem FHEM läuft, existiert, wird einer generiert&lt;br /&gt;
* Es wird ein Secret-Key im Prozess generiert, dass den Server nicht verlässt, und der Skillanmeldung dient.&lt;br /&gt;
* Du wirst auf dem Server &amp;quot;va-fhem.fhem.de&amp;quot; des FHEM-Vereins mit dem SSH-Key angemeldet, und der Hash-Wert Deines Secret-Key dort abgelegt.&lt;br /&gt;
&lt;br /&gt;
Und wenn Du diese Sätze gelesen hast, sollte inzwischen sich das Alexa-Device in FHEM-Web aktualisiert haben, und &lt;br /&gt;
ungefähr so aussehen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Alexa-Device-2.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Neben dem Status für alexa-fhem und der Proxyverbindung ist wichtig, dass diese beiden Zeilen beim Reload aufgetaucht sind:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
alexaFHEM.bearerToken crypt:...&lt;br /&gt;
alexaFHEM.skillRegKey crypt:...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ja, und diesen Schlüssel benötigst Du wirklich! Also am besten schon einmal mit &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
get &amp;lt;alexa&amp;gt; proxyKey&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in Klartext anzeigen lassen und in ein Editor-Fenster dauerhaft wegsichern.&lt;br /&gt;
&lt;br /&gt;
Jetzt solltest Du Dein Alexa-Device nicht mehr löschen, denn das im Reading angezeigte &amp;quot;bearerToken&amp;quot; zu löschen bedeutet, dass die Software die Zugriffe von nicht mehr überprüfen kann und keine Kommandos mehr funktionieren. In diesem Fall hilft nur die Neuinstallation des Skills.&lt;br /&gt;
&lt;br /&gt;
==== Fehler bei der Aktivierung ====&lt;br /&gt;
&lt;br /&gt;
Während kompliziertere Fehlerfälle im Abschnitt &amp;quot;Mögliche Probleme und Lösungen&amp;quot; behandelt werden, hier häufige Fälle, warum die kryptischen Zeilen nicht auftauchen:&lt;br /&gt;
&lt;br /&gt;
* Zuerst bitte einfach einmal die Seite neu laden.&lt;br /&gt;
&lt;br /&gt;
===== 401: Authorization Required =====&lt;br /&gt;
&lt;br /&gt;
Wenn Du FHEM-Web mit einem User/Passwort-Schutz versehen hast, wirst du folgende Fehlermeldung sehen: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
alexaFHEM stopped; failed to connect to fhem: 401: Authorization Required&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Regel musst du die Angaben User/Passwort noch einmal explizit setzen. Im Attribute-Abschnitt &amp;quot;alexaFHEM-auth&amp;quot; auswählen, User/Passwort mit &amp;quot;:&amp;quot; getrennt angeben und &amp;quot;attr&amp;quot; anklicken. alexa-fhem wird automatisch neu gestartet. Hier das Ganze in der Text-Variante:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
attr alexa alexaFHEM-auth user:pass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Permission denied =====&lt;br /&gt;
&lt;br /&gt;
Wenn du folgende Fehlermeldungen im Alexa Logfile siehst, wurde das Verzeichnis &amp;quot;/opt/fhem/.ssh/&amp;quot; von dir bei der Arbeit mit &amp;quot;root&amp;quot; oder &amp;quot;sudo&amp;quot; mit den falschen Berechtigungen versehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
[2019-7-25 11:59:12] sshautoconf: aborted with ssh-keygen returned error - key_save_private: Permission denied&lt;br /&gt;
[2019-7-25 11:59:12] *** SSH: proxy configuration failed: ssh-keygen returned error - key_save_private: Permission denied&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prüfen kannst du die Berechtigungen mit folgendem Befehl auf der Shell-Konsole: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
ls -l /opt/fhem/.ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Du solltest dann folgende Ausgabe erhalten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
insgesamt 12&lt;br /&gt;
-rw------- 1 fhem dialout 1675 Jul 12 13:10 id_rsa&lt;br /&gt;
-rw-r--r-- 1 fhem dialout  391 Jul 12 13:10 id_rsa.pub&lt;br /&gt;
-rw-r--r-- 1 fhem dialout  884 Jul 12 13:10 known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Steht in der Ausgabe nicht &amp;quot;fhem dialout&amp;quot; (dein fhem User), sondern bspw. &amp;quot;root root&amp;quot;, dann bspw. mit folgendem Befehl an deinen fhem User anpassen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
chown fhem:dialout /opt/fhem/.ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem ersten Befehl &amp;quot;ls -l ...&amp;quot; kannst du dann nochmal prüfen, ob die Berechtigungen korrekt übernommen wurden. &lt;br /&gt;
&lt;br /&gt;
===== weitere Prüfungen =====&lt;br /&gt;
&lt;br /&gt;
Hast Du noch die Shell-Konsole offen? Dann prüfe bitte noch einmal auf der Konsole, ob nun zwei Prozesse laufen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
ps -ef | egrep &#039;(alexa|ssh)&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sollte Dir idealerweise so etwas anzeigen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
fhem     31322     1 99 13:56 ?        00:00:03 alexa                              &lt;br /&gt;
fhem     31332 31322  8 13:56 ?        00:00:00 /usr/bin/ssh -R 1234:127.0.0.1:&amp;lt;zufälliger port&amp;gt; -oServerAliveInterval=90 -p 58824 fhem-va.fhem.de&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;alexa&amp;quot; ist dabei der Node-JS-Prozess, der ssh-Prozess ist die aufgebaute Verbindung zum Vereinsserver.&lt;br /&gt;
&lt;br /&gt;
Wenn Du diese Prozesse &#039;&#039;&#039;nicht&#039;&#039;&#039; siehst oder das Alexa-Device keinen Registrierungskey anzeigt, dann ist leider der Start nicht glatt verlaufen.&lt;br /&gt;
&lt;br /&gt;
Im Logfile (über den link &amp;lt;code&amp;gt;Logfile&amp;lt;/code&amp;gt; in der Detail-Ansicht über &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;, oder über den Namen bei &#039;&#039;currentlogfile&#039;&#039; in den Internals) findest Du idealerweise selber Hinweise, wo es hakt, oder kannst im Forum nachfragen.&lt;br /&gt;
&lt;br /&gt;
=== Geräte im FHEM-Webfrontend zuweisen ===&lt;br /&gt;
Um das Aha-Erlebnis zu vergrößern, ist jetzt ein guter Zeitpunkt, 1 oder besser mind. 2 Geräte für den Alexa-Dienst zuzuweisen. Von Haus aus wird keines Deiner FHEM-Geräte automatisch Alexa zugewiesen!&lt;br /&gt;
&lt;br /&gt;
Wähle die Geräte aus, rufe sie auf und setze das Attribut &amp;quot;alexaName&amp;quot;. Hierbei in Kürze nur der Hinweis:&lt;br /&gt;
* Keine Angst vor Leerzeichen und Umlauten, funktioniert.&lt;br /&gt;
* Große Angst vor Rechtschreibfehlern (Terrasse, Rollladen) oder komplizierten Wörtern &amp;quot;handgebastelte Martinslaterne im Kinderzimmer Iphigenie-Chantal&amp;quot;.&lt;br /&gt;
* Mehrere Namen für dasselbe Gerät/Device in fhem werden unterstützt. Mehrere Namen werden durch &amp;lt;s&amp;gt;Strichpunkt&amp;lt;/s&amp;gt; Komma getrennt&amp;lt;ref&amp;gt;Feature nicht dokumentiert {{Link2Forum|Topic=74041|LinkText=Forumsthread}}&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* Das Attribut &amp;quot;alexaRoom&amp;quot; ist NUR FÜR DEN CUSTOM SKILL relevant. Ausnahme: structure und LightScene Devices, siehe: [[FHEM_Connector_f%C3%BCr_Amazon_Alexa#Was_geht_alles_.3F]].&lt;br /&gt;
&lt;br /&gt;
Lade die Geräte neu in die Software, indem Du &amp;lt;code&amp;gt;set &amp;lt;alexa&amp;gt; restart&amp;lt;/code&amp;gt; ausführst!&lt;br /&gt;
[[Datei:HowToSet alexaName.png|alternativtext=How to set alexaName|ohne|mini|Wie setzt man das Attribut alexaName]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkungen (weil oft gestellte Fragen im Forum) bzgl. Erkennung von Geräten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Wichtig ist, dass die Filtereinstellung in der alexa-fhem.cfg (zu finden unter &amp;quot;Edit Files&amp;quot;) passt.&lt;br /&gt;
Das, was dort eingetragen ist (Standard: alexaName=..* / also es ist ein alexaName vergeben) auch an den entsprechenden Devices in fhem vorhanden ist.&lt;br /&gt;
Stimmt das nicht überein, kann alexa-fhem keine Devices von fhem abfragen/finden.&lt;br /&gt;
Ob der Filter entsprechend funktioniert kann man wie folgt testen: &#039;&#039;list Filtereinstellung&#039;&#039; beispiel mit Standardfilter: &#039;&#039;list alexaName=..*&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Hat alexa-fhem per Filter Devices aus fhem &amp;quot;gefunden&amp;quot;, geht es weiter mit der &amp;quot;Erkennung&amp;quot;. Also um welches Device (Typ und &amp;quot;Fähigkeiten&amp;quot;) handelt es sich. Dazu gilt folgendes:&lt;br /&gt;
** sind entsprechende Readings beim Device vorhanden (z.B. temperature, state mit on/off, ...) erkennt das alexa-fhem automatisch. Die Liste der automatisch erkannten Readings wächst ständig. Daher erst mal schauen ob das Device bereits entsprechend erkannt (typisiert) wurde. Das kann durch prüfen des alexa-fhem-Logs geschehen (NICHT fhem-log!).&lt;br /&gt;
** sind entsprechende &amp;quot;set-Befehle&amp;quot; erkennbar (oft auch durch Readings). Also ist beispielsweise (wie beim Dummy nötig) ein &#039;&#039;setList&#039;&#039; mit entsprechenden Einträgen vorhanden oder entsprechende Readings, z.B. desired-temp zum Stellen der Temperatur etc.&lt;br /&gt;
** wird das Device nicht richtig oder &amp;quot;unvollständig&amp;quot; erkannt helfen folgende Attribute:&lt;br /&gt;
*** genericDeviceType: hiermit kann alexa-fhem in die gewünschte Richtung &amp;quot;geschubbst&amp;quot; werden. Anmerkung: man kann nicht alles erzwingen, Readings bzw. set-Befehle müssen passen (oder per homebridgeMapping passend gemacht werden). Wenn ein genericDeviceType nicht per &amp;quot;Drop-Down&amp;quot; erscheint, dann kann er auch (wenn bekannt) einfach per WEB-cmd eingegeben werden: &#039;&#039;attr Devicename genericDeviceType media&#039;&#039;&lt;br /&gt;
*** homebridgeMapping: hierdurch kann alexa-fhem bei der Erkennung von Zuständen und möglichen Einstellungen (also WAS kann das Device) unterstützt werden. Mittels homebridgeMapping können vorhandene Readings (Zustände) auf für alexa-fhem bekannte Zustände gemappt werden. Ebenso können damit Standard-fhem-Kommandos von alexa-fhem auf Device-spezifische gemappt werden. Beispiel: on/off auf Ein/Aus (falls das Device statt on/off eben ein Ein/Aus erwartet). Zum Beispiel: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;thermostat&amp;gt; homebridgeMapping TargetTemperature=target::target,minValue=18,maxValue=25,minStep=0.5 CurrentTemperature=myTemp:temperature&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; [https://github.com/justme-1968/homebridge-fhem/blob/master/README.md weitere Beispiele]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&#039;&#039;&#039;Mehrere Namen für dasselbe Gerät/Device in fhem sind möglich.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Die Namen werden durch &amp;lt;s&amp;gt;Strichpunkt&amp;lt;/s&amp;gt; Komma getrennt.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;attr dmLampe alexaName Lichtkuppel,Lichtkugel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung bzgl. genericDeviceType und homebridgeMapping:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* diese Attribute werden von verschiedenen &amp;quot;Sprachsteuerungsmodulen&amp;quot; in fhem verwendet (homebridge [dort wurde es &amp;quot;erfunden&amp;quot;], alexa-fhem, gassistant, ...). Daher ist nicht jedes Mapping für alle &amp;quot;Dienste&amp;quot; verwendbar. Ausprobieren schadet aber nicht.&lt;br /&gt;
* ebenso kann man mit diesen Attributen (homebridgeMapping wird gerne so &amp;quot;missbraucht&amp;quot;) nichts erzwingen, was seitens Amazon/Alexa nicht unterstützt bzw. verstanden wird! D.h. zunächst ist zu prüfen, ob ein bestimmter (gewünschter) Sprachbefehl seitens Amazon/Alexa unterstützt wird! Aktuelles Beispiel (Stand Jan 2020): &amp;quot;Alexa, fahre den Rollo hoch/runter&amp;quot;. Da ist Amazon/Alexa gerade dabei etwas zu tun. Bislang wird das nicht unterstützt, also ist das auch mit einem entsprechenden homebridgeMapping nicht zu erzwingen! Was unterstützt wird kann man bei Amazon nachlesen: [https://developer.amazon.com/es-ES/docs/alexa/device-apis/list-of-interfaces.html]&lt;br /&gt;
&lt;br /&gt;
== Finale: Skill verknüpfen ==&lt;br /&gt;
Suche auf der Alexa-App den Skill &amp;quot;FHEM Connector&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Wenn du noch nicht bei Amazon angemeldet bist, erwartet Amazon zunächst, dass Du Dich normal bei Amazon anmeldest.&lt;br /&gt;
&lt;br /&gt;
Sobald Du &amp;quot;FHEM Connector&amp;quot; aktivierst, öffnet sich ein Browser-Tab mit folgender Maske:&amp;lt;br /&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
[[Datei:FHEMlazy_login.png|240px]]&lt;br /&gt;
&lt;br /&gt;
Hier kopierst Du Deinen Anmeldeschlüssel (im Klartext!) hinein, den du mittels &amp;quot;get alexa proxyKey&amp;quot; erhalten hast, und klickst auf Check. Als glücklicher Mensch ist auf der folgenden Statusseite alles grün:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Datei:FHEMlazy_check.png|240px]]&lt;br /&gt;
&lt;br /&gt;
Im Einzelnen wird hier geprüft, ob Du per SSH verbunden bist (und auch Deine IP zur Sicherheit angezeigt), ob der Reverse-Tunnel steht, ob nodeJS erreichbar ist und wie viele Geräte Alexa gleich finden sollte (in meinem Fall 22).&lt;br /&gt;
&lt;br /&gt;
Sollte etwas nicht grün sein und Du eine Idee zum Fixen haben, kannst Du mit &amp;quot;Retry&amp;quot; neue Versuche auslösen.&lt;br /&gt;
&lt;br /&gt;
Ist alles okay, klicke rechts den Button &amp;quot;Activate Skill&amp;quot;. Du springst damit wieder zurück zu Amazon, die Dir hoffentlich zur erfolgreichen Verknüpfung gratulieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;s&amp;gt;Amazon möchte nun unmittelbar die Gerätesuche starten, und unter SmartHome-Geräte sollten diese nun auftauchen.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Als Abschluss muss man nur noch in ein Echo-Gerät seiner Wahl die Anweisung: &amp;quot;&#039;&#039;Alexa suche smarte Geräte&#039;&#039;&amp;quot; sprechen und schon sollten die oben genannten Geräte gefunden werden und in der APP als Geräte auftauchen.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Was geht alles ? ==&lt;br /&gt;
&lt;br /&gt;
* Geräte, die sich ein- und ausschalten lassen:&lt;br /&gt;
** Automatisch: Müssen &amp;lt;code&amp;gt;set on&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set off&amp;lt;/code&amp;gt; Kommandos haben&lt;br /&gt;
** dummys müssen &amp;lt;code&amp;gt;setList&amp;lt;/code&amp;gt; mit on und off haben&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; switch bzw. light kann bestimmt werden ob es in alexa als Schalter oder Licht behandelt wird.&lt;br /&gt;
** Wenn die Set-Kommandos im FHEM Device anders benannt sind: homebridgeMapping On:cmdOn=&amp;lt;ein&amp;gt;,cmdOff=&amp;lt;aus&amp;gt; setzen&lt;br /&gt;
** Kommandos:&lt;br /&gt;
***Alexa, schalte &amp;lt;name&amp;gt; ein/aus&lt;br /&gt;
***Alexa, Licht an/aus&lt;br /&gt;
***Alexa, schalte &amp;lt;gruppe&amp;gt; ein/aus&lt;br /&gt;
* Geräte, die eine Temperatur messen&lt;br /&gt;
** Automatisch: Es muss ein Reading &amp;lt;code&amp;gt;temperature&amp;lt;/code&amp;gt; geben&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; thermometer&lt;br /&gt;
** Sonst: homebridgeMapping CurrentTemperature:reading=&amp;lt;reading&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Helligkeit sich ändern lässt&lt;br /&gt;
** Automatisch: wenn &amp;lt;code&amp;gt;dim&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;pct&amp;lt;/code&amp;gt; Kommandos erkannt werden&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; light&lt;br /&gt;
** Über homebridgeMapping: Wenn &amp;lt;code&amp;gt;helligkeit&amp;lt;/code&amp;gt; das Reading für die aktuelle Helligkeit enthält und die Helligkeit mit &amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; prozent xxx&amp;lt;/code&amp;gt; gesetzt wird, sieht das homebridgeMapping wie folgt aus: homebridgeMapping Brightness=helligkeit::prozent,minValue=0,maxValue=&amp;lt;maximalwert&amp;gt;&lt;br /&gt;
** Kommandos:&lt;br /&gt;
*** Alexa, mache &amp;lt;name&amp;gt; heller/dunkler&lt;br /&gt;
*** Alexa, Licht heller/dunkler&lt;br /&gt;
* Geräte, deren Farbe sich ändern lässt&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Farbtemperatur sich ändern lässt&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, bei denen sich eine Lautstärke einstellen lässt&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, bei denen sich ein prozentualer Wert einstellen lässt&lt;br /&gt;
** Automatisch: wenn &amp;lt;code&amp;gt;dim&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;pct&amp;lt;/code&amp;gt; Kommandos erkannt werden&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* elektrische Türschlösser&lt;br /&gt;
** &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt;: lock&lt;br /&gt;
** homebridgeMapping mit LockCurrentState und LockTargetState&lt;br /&gt;
&lt;br /&gt;
* Thermostate&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; thermostate&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* structure Devices aus FHEM (ab alexa-fhem version 0.5.7)&lt;br /&gt;
** können mit &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; scene als Szene eingebunden werden&lt;br /&gt;
** über &amp;lt;code&amp;gt;alexaRoom&amp;lt;/code&amp;gt; kann der name um einen Ort ergänzt werden&lt;br /&gt;
** Szenen aus einer structure lassen sich ein- und ausschalten&lt;br /&gt;
** Wichtig:&lt;br /&gt;
*** Ein Skill darf nur 12 Szenen automatisch erkennen und einbinden.&lt;br /&gt;
&lt;br /&gt;
* LightScene Devices aus FHEM (ab alexa-fhem version 0.5.8)&lt;br /&gt;
** können mit &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; scene als Szenen eingebunden werden&lt;br /&gt;
** über &amp;lt;code&amp;gt;alexaRoom&amp;lt;/code&amp;gt; kann der name um einen Ort ergänzt werden&lt;br /&gt;
** Szenen aus einer LightScene lassen sich nur einschalten&lt;br /&gt;
** Wichtig:&lt;br /&gt;
*** Ein Skill darf nur 12 Szenen automatisch erkennen und einbinden.&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Kanal sich umschalten lässt (ab alexa-fhem version 0.5.13)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; media&lt;br /&gt;
** homebridgeMapping ChannelController:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt;&lt;br /&gt;
** Erlaubte Werte siehe hier: https://developer.amazon.com/de/docs/device-apis/alexa-channelcontroller.html#changechannel&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Playback status sich schalten lässt (ab alexa-fhem version 0.5.13)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; media&lt;br /&gt;
** homebridgeMapping PlaybackController:playback,values=Play;Pause;Stop;Previous;Next&lt;br /&gt;
** Erlaubte Werte siehe hier: https://developer.amazon.com/de/docs/device-apis/alexa-playbackcontroller.html#discovery&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Eingang sich umschalten lässt (ab alexa-fhem version 0.5.13)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; media&lt;br /&gt;
** homebridgeMapping InputController:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt;,values=HDMI+1;HDMI+2;XBOX&lt;br /&gt;
** Erlaubte Werte siehe hier: https://developer.amazon.com/de/docs/device-apis/alexa-property-schemas.html#input&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Kontaktsensoren (ab alexa-fhem version 0.5.15)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; contact&lt;br /&gt;
** homebridgeMapping ContactSensorState:reading=&amp;lt;reading&amp;gt; oder CurrentDoorState:reading=&amp;lt;reading&amp;gt;&lt;br /&gt;
** Die Anzeige in der Alexa-App funktioniert sofort, die Abfrage per Sprache erst ab Version 0.5.27.&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Lautstärke sich ändern lässt (ab alexa-fhem version 0.5.24)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; speaker&lt;br /&gt;
** Automatisch: es muss ein Reading &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; und/oder &amp;lt;code&amp;gt;mute&amp;lt;/code&amp;gt; geben&lt;br /&gt;
** homebridgeMapping Volume:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt; Mute:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt;&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, die sich ein- (und optional) ausschalten lassen als Szene (ab alexa-fhem version 0.5.26)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; scene&lt;br /&gt;
** Automatisch: Müssen &amp;lt;code&amp;gt;set on&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set off&amp;lt;/code&amp;gt; Kommandos haben&lt;br /&gt;
** homebridgeMapping On:reading=&amp;lt;reading&amp;gt;,cmdOn=&amp;lt;cmd&amp;gt;[,cmdOff=&amp;lt;cmd&amp;gt;]&lt;br /&gt;
** Hinweis: Fehlende Kommandos lassen sich mit cmdalias erzeugen&lt;br /&gt;
** Wichtig:&lt;br /&gt;
*** Ein Skill darf nur 12 Szenen automatisch erkennen und einbinden.&lt;br /&gt;
* Rollläden. Lange ein Problemthema, das nur mit &amp;quot;Schalte auf 0%, schalte auf 100% lief&amp;quot;. Wichtig: &amp;quot;alexa-fhem&amp;quot; ab Version 0.5.39 einsetzen. GenericDevice-Type auf &amp;quot;blind&amp;quot; setzen. Nach Restart von alexa-fhem und neuer Gerätesuche sollte folgendes funktionieren:&lt;br /&gt;
** &amp;quot;..., öffne &amp;lt;Name&amp;gt; ganz&amp;quot;&lt;br /&gt;
** &amp;quot;..., schließe &amp;lt;Name&amp;gt; komplett&amp;quot;&lt;br /&gt;
** &amp;quot;hoch&amp;quot; und &amp;quot;runter&amp;quot; (ohne &amp;quot;ganz&amp;quot; oder &amp;quot;komplett&amp;quot;) schalten jeweils nur einen bestimmten Prozentsatz hoch oder runter. Dieser kann mit &amp;lt;code&amp;gt;attr &amp;lt;name&amp;gt; homebridgeMapping TargetPosition:minStep=&amp;lt;wert&amp;gt;&amp;lt;/code&amp;gt;geändert werden. Aber Achtung: In diesem Intervall kann dann auch nur noch ein absoluter Prozentwert per Sprache oder Slider eingestellt werden! Bei z.B. 25% würden 13% zu 25% aufgerundet, 12% zu 0% abgerundet werden.&lt;br /&gt;
* Kontaktsensoren (ab alexa-fhem version 0.5.47)&lt;br /&gt;
** Automatisch wenn ein Reading &amp;lt;code&amp;gt;motion&amp;lt;/code&amp;gt; vorhanden ist oder es sich um einen Zigbee bewgungsmelder an einer HUE oder deCONZ Bridge handelt&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; MotionSensor&lt;br /&gt;
** homebridgeMapping MotionDetected:reading=&amp;lt;reading&amp;gt;,values=&amp;lt;wert für bewgung&amp;gt;:1;&amp;lt;wert für keine bewegung&amp;gt;:0&lt;br /&gt;
&lt;br /&gt;
* Alarmmelder (noch nicht in Deutschland):&lt;br /&gt;
** genericDeviceType Security&lt;br /&gt;
** homebridgeMapping Alarm=&amp;lt;reading&amp;gt;[,type=[fireAlarm|waterAlarm|burglaryAlarm|carbonMonoxideAlarm]]&lt;br /&gt;
** wenn der type nicht angegeben wird ist fireAlarm der default&lt;br /&gt;
** automatisch werden 0, ok und alles was mit no anfängt als OK erkannt. alles andere gilt als ALARM.&lt;br /&gt;
*Geräte mit mehrstufigen Modi:&lt;br /&gt;
**siehe den zugehörigen Thread im Forum: {{Link2Forum|Topic= 125604}}&lt;br /&gt;
**(Funktioniert Stand 10/25 nur mit alexa-fhem v0.5.64, nicht mit der aktuellen 0.5.65, siehe oben)&lt;br /&gt;
&lt;br /&gt;
Es werden noch einige andere häufig verwendete Geräte (Homematic, hue,...) automatisch erkannt.&lt;br /&gt;
&lt;br /&gt;
to be continued ...&lt;br /&gt;
&lt;br /&gt;
In der [https://developer.amazon.com/docs/device-apis/list-of-interfaces.html List of Capability Interfaces] bei Amazon kann man sehen, welche Möglichkeiten das Smart Home Skill API aktuell in einzelnen Ländern bietet. Leider ohne die jeweiligen landessprachlichen Kommandos.&lt;br /&gt;
&lt;br /&gt;
=== Aktiv Routinen starten ===&lt;br /&gt;
Routinen (eine Funktionalität, die rein - genauso wie &amp;quot;Räume&amp;quot; - bei Amazon liegt und nicht von FHEM Connector beeinflusst wird) waren lange die ewige Antwort auf die Frage: &amp;quot;Meine Frau möchte aber &#039;&#039;&#039;Öffne Rollläden&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; sagen&amp;quot;: In der Alexa-App gibt es im Menü den Punkt &amp;quot;Routinen&amp;quot;, und hier lässt sich eine gewisse Anzahl von Aktionen (unter optionalen Bedingungen) an ein Sprachkommando knüpfen.&lt;br /&gt;
&lt;br /&gt;
Neu: Routinen können inzwischen auch von Skills getriggert werden, und seit Version 0.5.47 (Februar 2020) auch von FHEM Connector. Das braucht niemand, um die Rollläden hochzufahren, denn das kann FHEM ja selber, aber um z.B. eine Ansage auf einem Alexa-Gerät zu triggern. Dafür gibt es auch das FHEM-Modul &amp;quot;echodevice&amp;quot;, aber es erfordert ein paar Klimmzüge. Mit dem aktiven Triggern von Routinen kann FHEM auslösen, dass Alexa ungefragt (!) Dinge wie &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;Die Temperatur in der Tiefkühltruhe hat -16 Grad überschritten&amp;quot;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
in den Raum sagt. Also eine Alternative bzw. Ergänzung zu Alarmen / Erinnerungen per Telegram o.ä.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorgeschichte&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Die Smarthome-Skill-API von Amazon sah schon lange das &amp;quot;proactiveReporting&amp;quot; vor: Also z.B. die gemessene Temperatur nicht erst auf Anfrage hin zu übermitteln, sondern laufend aktiv zu pushen. Aber warum Daten an Amazon senden, wenn es dafür keinen Mehrwert gibt? Beim Öffnen z.B. des Thermostaten in der Alexa-App kommen ohnehin laufend Statusabfragen. Warum also einen Datenpool bei Amazon über die Haustemperatur aufbauen und Änderungen pushen, wenn es keinen Mehrwert dafür gibt? &lt;br /&gt;
&lt;br /&gt;
Inzwischen lassen sich (reale oder vermeintliche) Änderungen von &#039;&#039;Bewegungssensoren&#039;&#039; und &#039;&#039;Fensterkontakten&#039;&#039; als Startbedingung an Alexa-Routinen koppeln. Man kann in der Alexa-App (ggf. fiktive) Öffnen eines Fensterkontaktes an das Aufsagen eines freien Textes durch die Hausbutlerin knüpfen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Umsetzung&#039;&#039;&#039;:&lt;br /&gt;
* Jedes Alexa-Device, dessen Status aktiv zu Amazon gepusht werden soll, im Attribut &amp;quot;alexaProactiveEvents&amp;quot; mit einer &amp;quot;1&amp;quot; versehen. Per Default wird &#039;&#039;kein&#039;&#039; Gerät laufend aktiv zu Amazon gepusht!&lt;br /&gt;
* das geänderte Device einmal zu Amazon pushen &amp;quot;set &amp;lt;alexa&amp;gt; add &amp;lt;device&amp;gt;&amp;quot; (oder &#039;Alexa, suche neue Geräte&#039; murmeln)&lt;br /&gt;
* Das Gerät sollte jetzt beim Anlegen einer neuen Routine (&amp;quot;Neue Routine&amp;quot;, &amp;quot;Wenn Folgendes passiert&amp;quot;, &amp;quot;Smart Home&amp;quot;) als möglicher Triggerpunkt erscheinen.&lt;br /&gt;
&lt;br /&gt;
==== Dummygeräte: ====&lt;br /&gt;
Ein Dummydevice sollte einen Kontaktschalter oder Bewegungssensor simulieren, um dann in FHEM eine beliebige Bedingung als Trigger zu definieren, und eine freie Ansage in Alexa als Routine zu definieren. Hier ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
define voicetrigger1 dummy&lt;br /&gt;
attr voicetrigger1 alexaName alle Fenster&lt;br /&gt;
attr voicetrigger1 alexaProactiveEvents 1&lt;br /&gt;
attr voicetrigger1 genericDeviceType contact&lt;br /&gt;
attr voicetrigger1 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED&lt;br /&gt;
attr voicetrigger1 setList open closed&lt;br /&gt;
&lt;br /&gt;
set alexa add voicetrigger1&lt;br /&gt;
set alexa restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fehlersuche:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Push setzt ein intaktes Push-Token voraus. Sollte im Alexa-Logfile Folgendes erscheinen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;failed to refresh token: invalid_grant: &#039;The request has an invalid grant parameter : refresh_token&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
so ist das Push-Token nicht aktuell. Weil die Auswirkung lange nur war, dass Geräteänderungen nicht aktiv an Amazon gemeldet wurden, gibt es noch keine umfassende Analyse des Problems. Es lässt sich lösen, indem eine oder beide folgenden Aktionen ausgeführt werden:&lt;br /&gt;
* Löschen des &amp;quot;.eventToken&amp;quot; im Alexa-Device über &amp;quot;deletereading&amp;quot;&lt;br /&gt;
* &amp;quot;FHEM-Connector&amp;quot;-Skill auf &amp;quot;alexa.amazon.de&amp;quot; einmal deaktivieren und dann neu verbinden&lt;br /&gt;
&lt;br /&gt;
== Mögliche Probleme und Lösungen ==&lt;br /&gt;
&lt;br /&gt;
Es kann vorkommen, dass Geräte zwar korrekt erkannt werden, aber das durch Alexa erkannte Kommando nicht richtig umgesetzt wird (Beispiel - mittlerweile behoben: {{Link2Forum|Topic=96766}}). Neben dem FHEM-Log gibt es noch das Logfile, welches von alexa-fhem angelegt wird. &lt;br /&gt;
&lt;br /&gt;
=== Fehlersuche über die FHEM-Oberfläche ===&lt;br /&gt;
&lt;br /&gt;
* alexa-fhem Logfile anschauen (Detail-Ansicht des &amp;lt;alexa&amp;gt;-Device aufrufen, klick auf &#039;&#039;&#039;Logfile&#039;&#039;&#039; oben)&lt;br /&gt;
* alexa-fhem im Debug-Modus aufrufen:&lt;br /&gt;
** -D zum alexaFHEM-params attribut hinzufügen&lt;br /&gt;
** Alexa-Befehl auslösen&lt;br /&gt;
** -D aus dem alexaFHEM-params attribut entfernen&lt;br /&gt;
* Die notwendigen Informationen finden sich in dem alexa-Logfile (siehe oben)&lt;br /&gt;
&lt;br /&gt;
=== Fehlersuche über Kommandozeile (lies: Shell) + FHEM-Oberfläche ===&lt;br /&gt;
&lt;br /&gt;
:* set &amp;lt;alexa&amp;gt; stop (FHEM-Oberfläche)&lt;br /&gt;
:* Auf der Kommandozeile &amp;lt;code&amp;gt;alexa-fhem -D -c /opt/fhem/alexa-fhem.cfg &amp;gt; debug.log&amp;lt;/code&amp;gt; starten (dadurch wird die Datei debug.log erzeugt im aktuellen Verzeichnis)&lt;br /&gt;
:* Alexa-Befehl auslösen&lt;br /&gt;
:* alexa-fhem auf der Kommandozeile wieder stoppen (CTRL-C)&lt;br /&gt;
:* set &amp;lt;alexa&amp;gt; start (FHEM-Oberfläche)&lt;br /&gt;
&lt;br /&gt;
Die Datei debug.log sollte Hinweise enthalten, wie das Problem zu lösen ist oder Dich zumindest in die richtige Richtung schieben.&lt;br /&gt;
&lt;br /&gt;
Im Beispiel aus dem Forum fand sich in dem Logfile der Hinweis darauf, dass das Device mit falschen min/max-Werten unterwegs war.&lt;br /&gt;
&lt;br /&gt;
=== Registrierungskey vergessen, Registrierung zurücksetzen ===&lt;br /&gt;
&lt;br /&gt;
Auf der Kommandoshell:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
pi@raspberrypi:~# sudo -u fhem ssh -p 58824 fhem-va.fhem.de status&lt;br /&gt;
Registered.&lt;br /&gt;
Registered on 2019-01-13T15:38:13Z.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
heisst, das der Vereinsserver eigentlich alles hat, was er will. Es wird kein neuer Schlüssel generiert.&lt;br /&gt;
Wenn Du die Situation zurücksetzen möchtest, wäre die hässliche Methode, Deinen SSH-Key zu löschen. Eleganter ist, die Registrierung auf Vereinsseite zu löschen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
pi@raspberrypi:~# sudo -u fhem ssh -p 58824 fhem-va.fhem.de unregister&lt;br /&gt;
Your registration has been removed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
löscht Deinen Schlüssel mitsamt allen dort gespeicherten Daten auf Vereinsseite. Bei Restart von alexa-fhem in FHEM-WEB wird jetzt ein neuer Registrierungskey angefordert.&lt;br /&gt;
&lt;br /&gt;
== Sicherheitskonzept und Secrets ==&lt;br /&gt;
&lt;br /&gt;
Um diesen Abschnitt zu verstehen, solltest Du den Abschnitt &amp;quot;Arbeitsweise&amp;quot; im Kopf haben. Einerseits ist Dir vermutlich einleuchtend, dass ein Server, der per SSH rückwärts nur ausgewählte Kommandos in den Tunnel, den Du aufgebaut hast, leitet, &amp;quot;irgendwie sicherer&amp;quot; ist. Andererseits möchte man nicht blind vertrauen.&lt;br /&gt;
&lt;br /&gt;
=== SSH ===&lt;br /&gt;
==== SSH - macht das nichts Gefährliches? ====&lt;br /&gt;
SSH ist ein Veteran des Internet und entstand, um sich sicher (verschlüsselt) und schnell auf Servern einzuloggen. Schon früh wurde dabei der sogenannte &amp;quot;Reverse-Tunnel&amp;quot; implementiert: Also der vom Client (Deinem Rechner) geäußerte Wunsch: &amp;quot;Bitte leite mir Requests, die bei Dir, Server, auf Port xy eingehen, an meinen lokalen Port yz weiter.&amp;quot;. Dieses Verfahren implementiert der Reverseproxy, wobei tatsächlich auf dem Server für Dich kein echter Port geöffnet wird.&lt;br /&gt;
&lt;br /&gt;
Wie Dir ggf. sicher der Unix-Guru Deines Vertrauens bestätigen wird: Die Kombination&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
ssh -R 1234:localhost:&amp;lt;zufälliger port&amp;gt; zielserver &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
erlaubt keine Ausführung von Shell-Kommandos auf Deinem Server, sondern einzig, dass vom SSH-Programm Verbindungen zu einem lokalen Port auf Deinem Server auf dem alexa-fhem lauscht aufgebaut werden. Du kannst also z.B. mit einem&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 /usr/sbin/tcpdump -X -s 0 -i lo port &amp;lt;zufälliger port&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
vollständig überwachen (oder ggf. permanent aufzeichen), was auf Deinem Server von außen gesteuert passiert.&lt;br /&gt;
&lt;br /&gt;
==== Wie wird bei SSH verschlüsselt? ====&lt;br /&gt;
Im Prinzip wie im Web auf SSL-Seiten, teils mit den gleichen Verschlüsselungsverfahren. Allerdings arbeitet SSH eher wie das im Web recht seltene Verfahren: Bei jeder Verbindung übermitteln sowohl Server wie auch Client den öffentlichen Teil ihres Schlüssels. Anders als im Web wird der Schlüssel aber nicht von einer öffentlichen Zertifizierungsstelle wie &amp;quot;LetsEncrypt&amp;quot; unterschrieben. Stattdessen entscheiden Server wie Client beim ersten Verbindungsaufbau typischerweise per manueller Frage: &amp;quot;Willst Du jetzt und künftig diesem Schlüssel vertrauen?&amp;quot; Bei der Installation wird diese Frage für Deine Seite bejaht, und fortan wird der öffentliche Schlüssel des FHEM-Servers auf Deinem Rechner gespeichert. Ab da bist Du z.B. davor sicher, dass jemand den DNS-Eintrag verbiegt oder sich in den Datenfluss Deines Providers einhängt: Ein geänderter Serverschlüssel würde bemerkt werden.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Soweit klar? Aus Deinem öffentlichen Schlüssel wiederum leitet der Server her: &amp;quot;Das ist definitiv wieder derjenige, der sich damals &amp;quot;registriert&amp;quot; hat&amp;quot;. Und an dieser Stelle kann ich auch den &amp;lt;b&amp;gt;ersten Teil des 3-teiligen Registrierungskeys&amp;lt;/b&amp;gt; erläutern: Die typischerweise 6-stellige Hex-Zahl am Anfang ist der Java-Hashcode Deines öffentlichen Schlüssel. Sie ist damit sozusagen Deine aus Deinem öffentlichen Schlüssel abgeleitete Benutzer-ID.&lt;br /&gt;
&lt;br /&gt;
=== Die Rolle der Secrets ===&lt;br /&gt;
Wenn jetzt klar ist, dass die Verbindung zum Vereinsserver sicher und vertauschungsfrei funktioniert, bleiben noch 2 Probleme zu lösen:&lt;br /&gt;
1) Im Web bei der Skill-Aktivierung musst Du beweisen, dass Du der Mensch am Browser bist, dem der SSH-Tunnel von IP xy mit dem öffentlichen Schlüssel X gehört. Bei der automatischen Registrierung werden lokal auf Deinem Rechner zwei 64-Bit-Secrets generiert:&lt;br /&gt;
* Das &amp;lt;b&amp;gt;Anmelde&amp;lt;/b&amp;gt;-Secret&lt;br /&gt;
* Das &amp;lt;b&amp;gt;Bearer&amp;lt;/b&amp;gt;-Token&lt;br /&gt;
Beim Anmelden des SSH-Keys auf dem öffentlichen Server wird nun der &amp;lt;b&amp;gt;Hashwert&amp;lt;/b&amp;gt; des ersten Secrets übertragen und dort in Verbindung mit Deinem öffentlichen Schlüssel gespeichert. Ein Hashwert bedeutet, dass (sofern das Verfahren, hier SHA256, funktioniert), niemand aus dem Hash das Secret zurückrechnen kann. Ein Datenbankklau auf dem Server gefährdet also nicht die Sicherheit Deines Passwortes.&lt;br /&gt;
&lt;br /&gt;
Wenn Du nun beim Skill-Aktivieren den Registrierungskey eingibst, dann &amp;quot;sieht&amp;quot; der Server zum ersten Mal Dein ausgewürfeltes Secret, vergleicht es mit dem Hashwert und wird es anschließend wieder umgehend vergessen. Anhand des Hashwertes kann der Server aber entscheiden, dass Du der legitime Nutzer zum öffentlichen Schlüssel XY bist.&lt;br /&gt;
&lt;br /&gt;
2) Das zweite Problem ist: Wie soll Amazon &amp;quot;beweisen&amp;quot;, dass sie der legitime Aufrufer sind? Amazon erhält binnen wenigen Sekunden nach dem Klick auf &amp;quot;Activate Skill&amp;quot; den &amp;lt;b&amp;gt;dritten Teil&amp;lt;/b&amp;gt; des Registrierungskeys als sogenanntes Bearer-Token. Zwar läuft er durch den Registrierungsserver, er wird dort, auf dem Registrierungs/Vereinsserver aber nicht gespeichert. Das Bearer-Token wird von Amazon bei allen Requests zu Deinem Server mitgesendet. Da es am Anfang zusätzlich Deine &amp;quot;User-ID&amp;quot; enthält, weiß der Vereinsserver, zu welchem SSH-Tunnel der Request zu senden ist. Aber lokal auf Deinem Rechner wird ausgewertet, ob das Token &amp;quot;stimmt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== alexa-fhem Updaten bzw. &amp;quot;Upgraden&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updaten einer &amp;quot;Connector&amp;quot; Installation:&#039;&#039;&#039;&lt;br /&gt;
* alexa-fhem über FHEM anhalten (Name des Alexa-Device: alexa):&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;set alexa stop&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Auf der Konsole wie anfangs bei der Installation:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;sudo npm update -g alexa-fhem&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Manchmal hat npm Probleme mit einem Update. Dann einfach die aktuelle Version noch mal drüber Installieren: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;sudo npm install -g alexa-fhem&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*alexa-fhem über FHEM wieder starten:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;set alexa start&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Upgraden von einer &amp;quot;Nicht-Connector&amp;quot; Installation (z.B. manuelle Installation per pm-Download):&#039;&#039;&#039;&lt;br /&gt;
* Daten der aktuellen Installation sichern (v.a. config.json / man weiß ja nie)&lt;br /&gt;
* Autostart der aktuellen alexa-fhem Installation deaktivieren:&lt;br /&gt;
** Bei initd: Service deaktivieren mittels: &amp;lt;code&amp;gt;sudo update-rc.d -f alexa remove&amp;lt;/code&amp;gt; Vorher mittels stoppen: &amp;lt;code&amp;gt;sudo service alexa stop&amp;lt;/code&amp;gt; Startscript unter /etc/init.d/ löschen.&lt;br /&gt;
** Bei systemd: Service deaktivieren mittels: &amp;lt;code&amp;gt;sudo systemctl disable alexa&amp;lt;/code&amp;gt; Vorher mittels stoppen: &amp;lt;code&amp;gt;sudo systemctl alexa stop&amp;lt;/code&amp;gt; Startscript unter /etc/systemd/system/ löschen.&lt;br /&gt;
* ALLE vorhandenen alexa-fhem Daten LÖSCHEN! Bleiben Dinge zurück und wird dann laut Connector installiert kann es zu Problemen kommen!&lt;br /&gt;
* (reboot)&lt;br /&gt;
* Installation von alexa-fhem laut Anleitung (Beginn dieses Wiki)&lt;br /&gt;
* Falls eigene Dinge von früher genutzt werden wollen/sollen (z.B. Custom Skill), dann die entsprechenden Einträge aus der gesicherten config.json in die neu angelegte alexa-fhem.cfg (zu finden unter &amp;quot;Edit files&amp;quot;) übernehmen.&lt;br /&gt;
* Werden keine eigenen Dinge verwendet, dann kann der Port (Standard: 3000) geschlossen werden und auch die Daten unter Amazon-Developer können gelöscht werden.&lt;br /&gt;
&lt;br /&gt;
== Bug- und Wunschliste ==&lt;br /&gt;
* Ist beim Start keine Internetverbindung vorhanden, erfolgt kein Retry -- alexa-fhem muss restartet werden (ssh_autoconfig wertet keine temporären Fehler aus)&lt;br /&gt;
&lt;br /&gt;
==Weitergehende Informationen==&lt;br /&gt;
*[[Alexa und Mappings]]&lt;br /&gt;
*[[Alexa Tipps und Kniffe]]&lt;br /&gt;
*[[FHEM Connector for Amazon Alexa]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Sprachsteuerung]]&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hapege</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHEM_Connector_f%C3%BCr_Amazon_Alexa&amp;diff=40439</id>
		<title>FHEM Connector für Amazon Alexa</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FHEM_Connector_f%C3%BCr_Amazon_Alexa&amp;diff=40439"/>
		<updated>2025-10-14T14:02:17Z</updated>

		<summary type="html">&lt;p&gt;Hapege: /* Was geht alles ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Alexa FHEMlazy&#039;&#039;&#039; war historisch ein Fork des Original [[Alexa-Fhem|alexa-fhem]], der im Januar 2019 mit dem Original zusammengeführt wurde und nun als &#039;&#039;&#039;FHEM Connector&#039;&#039;&#039; verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
Er ermöglicht innerhalb von Minuten die Verknüpfung von FHEM mit einem Amazon Echo Gerät. Auch Geräte anderer Hersteller mit verbauten Mikrofonen und Alexa-Sprachassistenten-Unterstützung sollten problemlos funktionieren. Für folgende Geräte ist dies bspw. der Fall (Falls Ihr andere/weitere Gerätemodelle bzw. Hersteller in Verwendung habt, bitte hier pflegen):&lt;br /&gt;
&lt;br /&gt;
* SONOS Beam und SONOS One   &lt;br /&gt;
&lt;br /&gt;
Gegenüber dem klassischen Ansatz ergeben sich Einschränkungen, so läuft die Software normalerweise unter dem gleichen Benutzer wie FHEM auf dem gleichen Server, und es wird z.Zt. nur der Smarthome-Skill unterstützt (die Variante, bei der die Möglichkeiten der Interaktion von Amazon festgelegt wurden).&lt;br /&gt;
Dafür ist weder ein Developer-Account bei Amazon, eigene Lambda- und Skillfunktionen, noch das Öffnen eines eingehenden Ports aus dem Internet nötig. &lt;br /&gt;
* Die Software integriert einen Installer, der die Erstkonfiguration und Anmeldung übernimmt&lt;br /&gt;
* Die Kommunikation zur Software auf dem heimischen Rechner und dann zu FHEM verläuft über SSH und einen vom FHEM-Verein gehosteten Server&lt;br /&gt;
* Funktioniert mit IPv4, IPv6, echtem Dual Stack und DS-Lite&lt;br /&gt;
* Als Skill bei Amazon wird der Skill &amp;quot;FHEM Connector&amp;quot; verwendet.&lt;br /&gt;
&lt;br /&gt;
Der Thread im Forum zur Software ist hier: {{Link2Forum|Topic=94817}}.&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Einfache Anbindung von FHEM an Amazon Assistent Alexa&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=alexa&lt;br /&gt;
|ModTechName=39_alexa.pm / alexa-fhem&lt;br /&gt;
|ModForumArea=Frontends/Sprachsteuerung&lt;br /&gt;
|ModOwner=gvzdus, André/ justme1968 ({{Link2FU|430|Forum}} / [[Benutzer Diskussion:Justme|Wiki]])&lt;br /&gt;
}} &lt;br /&gt;
==Einführung==&lt;br /&gt;
===Arbeitsweise und Datenfluss===&lt;br /&gt;
Vorläufig ist alexa-fhem im &amp;quot;FHEM Connector-Modus&amp;quot; ein reiner [https://developer.amazon.com/de/docs/smarthome/understand-the-smart-home-skill-api.html SmartHome-Skill].&lt;br /&gt;
SmartHome-Skills erhalten weder die Sprachdaten selber noch das, was Amazon in Textform verstanden hat, sondern vielmehr extrahiert Amazon aus dem verstandenen Text Anweisungen und Abfragen für Geräte, die dann an den Skill übermittelt werden. Charmant ist dabei, dass unmittelbar gefragt werden kann &amp;quot;Alexa, wie ist die Temperatur im Wohnzimmer?&amp;quot;, während andere Skills zunächst explizit angesprochen werden müssen (&amp;quot;Alexa, frage FHEM nach der Temperatur im Wohnzimmer&amp;quot;). Außerdem kann der Nutzer mehrere Smarthome-Skills installieren, und die Geräte werden zu einer Gesamtmenge zusammengefasst.&lt;br /&gt;
&lt;br /&gt;
Gehen wir den Datenfluss bei der konkreten Frage &amp;quot;Wie ist die Temperatur im Wohnzimmer?&amp;quot; durch:&lt;br /&gt;
* Alexa hat bei der Skillinstallation gelernt, dass &amp;quot;FHEM Connector&amp;quot; bei Dir einen Thermostaten im Raum Wohnzimmer kennt. Dadurch wird bei der Sprachanalyse von &amp;quot;Alexa Voice Service&amp;quot; in der Cloud erkannt, dass eine Abfrage an &amp;quot;FHEM Connector&amp;quot; erfolgversprechend ist.&lt;br /&gt;
* Zunächst wird die zentrale &amp;quot;Lambda-Funktion&amp;quot; von &amp;quot;FHEM Connector&amp;quot; aufgerufen. Die Funktion leitet aber im Kern nur den Request unverändert an den vom Verein bereitgestellten Server weiter. Im Request enthalten ist ein Token, das sogenannte &amp;quot;Bearer-Token&amp;quot;.&lt;br /&gt;
* Der &amp;quot;Vereinsserver&amp;quot; prüft anhand dieses Tokens, ob es überhaupt bekannt ist, und zu welchem Nutzer es gehört. Ist dieser Nutzer verbunden, wird der Request wiederum quasi unverändert an den Nutzer weitergeleitet.&lt;br /&gt;
* Diese Weiterleitung passiert über einen sogenannten SSH-Reverse-Tunnel, der von Deiner Seite und der Software auf dem FHEM-Tunnel automatisch aufgebaut wird.&lt;br /&gt;
* Auf Deiner Seite läuft die eigentliche Software, und zwar unter nodeJS. nodeJS ist ein Javascript ausführender Miniserver, der lokal auf einem Zufallsport auf Requests &amp;quot;lauscht&amp;quot;. In der Original-Version  [[Alexa-Fhem|Alexa FHEM]] kommen die Requests aus dem Internet (hoffentlich von der eigenen Lambda-Funktion), hier bei &amp;quot;FHEM Connector&amp;quot; kommen sie ausschließlich aus dem SSH-Tunnel von lokal.&lt;br /&gt;
* Die Software validiert nun diesen Request anhand des Bearer-Tokens. Konkret wird dabei das bei der Installation generierte Token, dass bei der Skill-Aktivierung an Amazon übertragen wurde, mit dem lokal gespeicherten Wert verglichen. Stimmt das Token, wird der Befehl verarbeitet, üblicherweise wird hierbei ein Aufruf an die Webschnittstelle von FHEM abgesetzt.&lt;br /&gt;
* FHEM führt den Befehl aus&lt;br /&gt;
&lt;br /&gt;
Hört sich langsam und kompliziert an? Kompliziert: Okay. Langsam eher nicht, in etlichen Fällen liegt die Gesamtantwortszeit unter 200 ms.&lt;br /&gt;
&lt;br /&gt;
Soweit ein erster Überblick über die Datenflüsse. Im Abschnitt Sicherheit ist das Konzept der Absicherung deutlich genauer und ausführlicher beschrieben.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
Du wirst bei der Installation zuerst auf der Kommandozeile auf Deinem Raspberry (o.ä.) unterwegs sein, anschließend im Webfrontend von FHEM, und zum Schluss auf der Alexa-Konsole im Web.&lt;br /&gt;
&lt;br /&gt;
===node.js installieren===&lt;br /&gt;
&lt;br /&gt;
Ab Jessy liegt NodeJS bereits in einer ausreichend aktuellen Version vor (Stretch und Buster funktionieren ebenfalls). Mit&lt;br /&gt;
&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 install nodejs npm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kannst Du es installieren. Mit &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
node --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
erfährst Du die aktuelle Version - wenn hier etwas mit &amp;quot;8&amp;quot; oder höher vorneweg erscheint, ist alles gut.&lt;br /&gt;
Ansonsten suche Dir bitte eine Anleitung im Web, wie Du NodeJS auf Deinem System auf einen aktuellen Stand bringen kannst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung:&#039;&#039;&#039; diese Aussage bzgl. node-Version (und Jessie/Stretch) stimmt wohl für alexa-fhem Stand heute (12.06.2020) nicht mehr, siehe https://forum.fhem.de/index.php/topic,112025.msg1063218.html#msg1063218&lt;br /&gt;
&lt;br /&gt;
=== Alexa-FHEM installieren ===&lt;br /&gt;
&lt;br /&gt;
Nun installieren wir Alexa-fhem aus dem offiziellen Repository:&lt;br /&gt;
&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 npm install -g alexa-fhem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Vorgang benötigt etwas Zeit.&lt;br /&gt;
&lt;br /&gt;
(Edit: die aktuelle Version 0.5.65 hat ein Problem, wenn ModeController verwendet wird. Wer modes braucht, der sollte die vorherige Version 0.5.64 installieren:&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 npm install -g alexa-fhem@0.5.64&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alexa-FHEM aktivieren ===&lt;br /&gt;
&lt;br /&gt;
Wechsele jetzt in FHEM-Web!&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, dass das Alexa-Modul in der Version ab Januar 2019 vorliegt. Dafür bitte einmal FHEM aktualisieren:&lt;br /&gt;
Speichern der Config nicht vergessen, und&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
update&lt;br /&gt;
shutdown restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alles, was jetzt noch nötig ist, ist das Anlegen eines Alexa-Devices. Gib dafür in der FHEM-Web-Kommandozeile&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
define alexa alexa&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
an. Nun läuft, während Du bereits das neu angelegte Alexa-Devices siehst, ein komplexer Prozess im Hintergrund:&lt;br /&gt;
&lt;br /&gt;
* Falls noch kein SSH-Key für den Benutzer, unter dem FHEM läuft, existiert, wird einer generiert&lt;br /&gt;
* Es wird ein Secret-Key im Prozess generiert, dass den Server nicht verlässt, und der Skillanmeldung dient.&lt;br /&gt;
* Du wirst auf dem Server &amp;quot;va-fhem.fhem.de&amp;quot; des FHEM-Vereins mit dem SSH-Key angemeldet, und der Hash-Wert Deines Secret-Key dort abgelegt.&lt;br /&gt;
&lt;br /&gt;
Und wenn Du diese Sätze gelesen hast, sollte inzwischen sich das Alexa-Device in FHEM-Web aktualisiert haben, und &lt;br /&gt;
ungefähr so aussehen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Alexa-Device-2.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Neben dem Status für alexa-fhem und der Proxyverbindung ist wichtig, dass diese beiden Zeilen beim Reload aufgetaucht sind:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
alexaFHEM.bearerToken crypt:...&lt;br /&gt;
alexaFHEM.skillRegKey crypt:...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ja, und diesen Schlüssel benötigst Du wirklich! Also am besten schon einmal mit &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
get &amp;lt;alexa&amp;gt; proxyKey&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in Klartext anzeigen lassen und in ein Editor-Fenster dauerhaft wegsichern.&lt;br /&gt;
&lt;br /&gt;
Jetzt solltest Du Dein Alexa-Device nicht mehr löschen, denn das im Reading angezeigte &amp;quot;bearerToken&amp;quot; zu löschen bedeutet, dass die Software die Zugriffe von nicht mehr überprüfen kann und keine Kommandos mehr funktionieren. In diesem Fall hilft nur die Neuinstallation des Skills.&lt;br /&gt;
&lt;br /&gt;
==== Fehler bei der Aktivierung ====&lt;br /&gt;
&lt;br /&gt;
Während kompliziertere Fehlerfälle im Abschnitt &amp;quot;Mögliche Probleme und Lösungen&amp;quot; behandelt werden, hier häufige Fälle, warum die kryptischen Zeilen nicht auftauchen:&lt;br /&gt;
&lt;br /&gt;
* Zuerst bitte einfach einmal die Seite neu laden.&lt;br /&gt;
&lt;br /&gt;
===== 401: Authorization Required =====&lt;br /&gt;
&lt;br /&gt;
Wenn Du FHEM-Web mit einem User/Passwort-Schutz versehen hast, wirst du folgende Fehlermeldung sehen: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
alexaFHEM stopped; failed to connect to fhem: 401: Authorization Required&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Regel musst du die Angaben User/Passwort noch einmal explizit setzen. Im Attribute-Abschnitt &amp;quot;alexaFHEM-auth&amp;quot; auswählen, User/Passwort mit &amp;quot;:&amp;quot; getrennt angeben und &amp;quot;attr&amp;quot; anklicken. alexa-fhem wird automatisch neu gestartet. Hier das Ganze in der Text-Variante:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
attr alexa alexaFHEM-auth user:pass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Permission denied =====&lt;br /&gt;
&lt;br /&gt;
Wenn du folgende Fehlermeldungen im Alexa Logfile siehst, wurde das Verzeichnis &amp;quot;/opt/fhem/.ssh/&amp;quot; von dir bei der Arbeit mit &amp;quot;root&amp;quot; oder &amp;quot;sudo&amp;quot; mit den falschen Berechtigungen versehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
[2019-7-25 11:59:12] sshautoconf: aborted with ssh-keygen returned error - key_save_private: Permission denied&lt;br /&gt;
[2019-7-25 11:59:12] *** SSH: proxy configuration failed: ssh-keygen returned error - key_save_private: Permission denied&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prüfen kannst du die Berechtigungen mit folgendem Befehl auf der Shell-Konsole: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
ls -l /opt/fhem/.ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Du solltest dann folgende Ausgabe erhalten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
insgesamt 12&lt;br /&gt;
-rw------- 1 fhem dialout 1675 Jul 12 13:10 id_rsa&lt;br /&gt;
-rw-r--r-- 1 fhem dialout  391 Jul 12 13:10 id_rsa.pub&lt;br /&gt;
-rw-r--r-- 1 fhem dialout  884 Jul 12 13:10 known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Steht in der Ausgabe nicht &amp;quot;fhem dialout&amp;quot; (dein fhem User), sondern bspw. &amp;quot;root root&amp;quot;, dann bspw. mit folgendem Befehl an deinen fhem User anpassen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
chown fhem:dialout /opt/fhem/.ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem ersten Befehl &amp;quot;ls -l ...&amp;quot; kannst du dann nochmal prüfen, ob die Berechtigungen korrekt übernommen wurden. &lt;br /&gt;
&lt;br /&gt;
===== weitere Prüfungen =====&lt;br /&gt;
&lt;br /&gt;
Hast Du noch die Shell-Konsole offen? Dann prüfe bitte noch einmal auf der Konsole, ob nun zwei Prozesse laufen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
ps -ef | egrep &#039;(alexa|ssh)&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sollte Dir idealerweise so etwas anzeigen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
fhem     31322     1 99 13:56 ?        00:00:03 alexa                              &lt;br /&gt;
fhem     31332 31322  8 13:56 ?        00:00:00 /usr/bin/ssh -R 1234:127.0.0.1:&amp;lt;zufälliger port&amp;gt; -oServerAliveInterval=90 -p 58824 fhem-va.fhem.de&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;alexa&amp;quot; ist dabei der Node-JS-Prozess, der ssh-Prozess ist die aufgebaute Verbindung zum Vereinsserver.&lt;br /&gt;
&lt;br /&gt;
Wenn Du diese Prozesse &#039;&#039;&#039;nicht&#039;&#039;&#039; siehst oder das Alexa-Device keinen Registrierungskey anzeigt, dann ist leider der Start nicht glatt verlaufen.&lt;br /&gt;
&lt;br /&gt;
Im Logfile (über den link &amp;lt;code&amp;gt;Logfile&amp;lt;/code&amp;gt; in der Detail-Ansicht über &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;, oder über den Namen bei &#039;&#039;currentlogfile&#039;&#039; in den Internals) findest Du idealerweise selber Hinweise, wo es hakt, oder kannst im Forum nachfragen.&lt;br /&gt;
&lt;br /&gt;
=== Geräte im FHEM-Webfrontend zuweisen ===&lt;br /&gt;
Um das Aha-Erlebnis zu vergrößern, ist jetzt ein guter Zeitpunkt, 1 oder besser mind. 2 Geräte für den Alexa-Dienst zuzuweisen. Von Haus aus wird keines Deiner FHEM-Geräte automatisch Alexa zugewiesen!&lt;br /&gt;
&lt;br /&gt;
Wähle die Geräte aus, rufe sie auf und setze das Attribut &amp;quot;alexaName&amp;quot;. Hierbei in Kürze nur der Hinweis:&lt;br /&gt;
* Keine Angst vor Leerzeichen und Umlauten, funktioniert.&lt;br /&gt;
* Große Angst vor Rechtschreibfehlern (Terrasse, Rollladen) oder komplizierten Wörtern &amp;quot;handgebastelte Martinslaterne im Kinderzimmer Iphigenie-Chantal&amp;quot;.&lt;br /&gt;
* Mehrere Namen für dasselbe Gerät/Device in fhem werden unterstützt. Mehrere Namen werden durch &amp;lt;s&amp;gt;Strichpunkt&amp;lt;/s&amp;gt; Komma getrennt&amp;lt;ref&amp;gt;Feature nicht dokumentiert {{Link2Forum|Topic=74041|LinkText=Forumsthread}}&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* Das Attribut &amp;quot;alexaRoom&amp;quot; ist NUR FÜR DEN CUSTOM SKILL relevant. Ausnahme: structure und LightScene Devices, siehe: [[FHEM_Connector_f%C3%BCr_Amazon_Alexa#Was_geht_alles_.3F]].&lt;br /&gt;
&lt;br /&gt;
Lade die Geräte neu in die Software, indem Du &amp;lt;code&amp;gt;set &amp;lt;alexa&amp;gt; restart&amp;lt;/code&amp;gt; ausführst!&lt;br /&gt;
[[Datei:HowToSet alexaName.png|alternativtext=How to set alexaName|ohne|mini|Wie setzt man das Attribut alexaName]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkungen (weil oft gestellte Fragen im Forum) bzgl. Erkennung von Geräten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Wichtig ist, dass die Filtereinstellung in der alexa-fhem.cfg (zu finden unter &amp;quot;Edit Files&amp;quot;) passt.&lt;br /&gt;
Das, was dort eingetragen ist (Standard: alexaName=..* / also es ist ein alexaName vergeben) auch an den entsprechenden Devices in fhem vorhanden ist.&lt;br /&gt;
Stimmt das nicht überein, kann alexa-fhem keine Devices von fhem abfragen/finden.&lt;br /&gt;
Ob der Filter entsprechend funktioniert kann man wie folgt testen: &#039;&#039;list Filtereinstellung&#039;&#039; beispiel mit Standardfilter: &#039;&#039;list alexaName=..*&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Hat alexa-fhem per Filter Devices aus fhem &amp;quot;gefunden&amp;quot;, geht es weiter mit der &amp;quot;Erkennung&amp;quot;. Also um welches Device (Typ und &amp;quot;Fähigkeiten&amp;quot;) handelt es sich. Dazu gilt folgendes:&lt;br /&gt;
** sind entsprechende Readings beim Device vorhanden (z.B. temperature, state mit on/off, ...) erkennt das alexa-fhem automatisch. Die Liste der automatisch erkannten Readings wächst ständig. Daher erst mal schauen ob das Device bereits entsprechend erkannt (typisiert) wurde. Das kann durch prüfen des alexa-fhem-Logs geschehen (NICHT fhem-log!).&lt;br /&gt;
** sind entsprechende &amp;quot;set-Befehle&amp;quot; erkennbar (oft auch durch Readings). Also ist beispielsweise (wie beim Dummy nötig) ein &#039;&#039;setList&#039;&#039; mit entsprechenden Einträgen vorhanden oder entsprechende Readings, z.B. desired-temp zum Stellen der Temperatur etc.&lt;br /&gt;
** wird das Device nicht richtig oder &amp;quot;unvollständig&amp;quot; erkannt helfen folgende Attribute:&lt;br /&gt;
*** genericDeviceType: hiermit kann alexa-fhem in die gewünschte Richtung &amp;quot;geschubbst&amp;quot; werden. Anmerkung: man kann nicht alles erzwingen, Readings bzw. set-Befehle müssen passen (oder per homebridgeMapping passend gemacht werden). Wenn ein genericDeviceType nicht per &amp;quot;Drop-Down&amp;quot; erscheint, dann kann er auch (wenn bekannt) einfach per WEB-cmd eingegeben werden: &#039;&#039;attr Devicename genericDeviceType media&#039;&#039;&lt;br /&gt;
*** homebridgeMapping: hierdurch kann alexa-fhem bei der Erkennung von Zuständen und möglichen Einstellungen (also WAS kann das Device) unterstützt werden. Mittels homebridgeMapping können vorhandene Readings (Zustände) auf für alexa-fhem bekannte Zustände gemappt werden. Ebenso können damit Standard-fhem-Kommandos von alexa-fhem auf Device-spezifische gemappt werden. Beispiel: on/off auf Ein/Aus (falls das Device statt on/off eben ein Ein/Aus erwartet). Zum Beispiel: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;thermostat&amp;gt; homebridgeMapping TargetTemperature=target::target,minValue=18,maxValue=25,minStep=0.5 CurrentTemperature=myTemp:temperature&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; [https://github.com/justme-1968/homebridge-fhem/blob/master/README.md weitere Beispiele]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&#039;&#039;&#039;Mehrere Namen für dasselbe Gerät/Device in fhem sind möglich.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Die Namen werden durch &amp;lt;s&amp;gt;Strichpunkt&amp;lt;/s&amp;gt; Komma getrennt.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;attr dmLampe alexaName Lichtkuppel,Lichtkugel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung bzgl. genericDeviceType und homebridgeMapping:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* diese Attribute werden von verschiedenen &amp;quot;Sprachsteuerungsmodulen&amp;quot; in fhem verwendet (homebridge [dort wurde es &amp;quot;erfunden&amp;quot;], alexa-fhem, gassistant, ...). Daher ist nicht jedes Mapping für alle &amp;quot;Dienste&amp;quot; verwendbar. Ausprobieren schadet aber nicht.&lt;br /&gt;
* ebenso kann man mit diesen Attributen (homebridgeMapping wird gerne so &amp;quot;missbraucht&amp;quot;) nichts erzwingen, was seitens Amazon/Alexa nicht unterstützt bzw. verstanden wird! D.h. zunächst ist zu prüfen, ob ein bestimmter (gewünschter) Sprachbefehl seitens Amazon/Alexa unterstützt wird! Aktuelles Beispiel (Stand Jan 2020): &amp;quot;Alexa, fahre den Rollo hoch/runter&amp;quot;. Da ist Amazon/Alexa gerade dabei etwas zu tun. Bislang wird das nicht unterstützt, also ist das auch mit einem entsprechenden homebridgeMapping nicht zu erzwingen! Was unterstützt wird kann man bei Amazon nachlesen: [https://developer.amazon.com/es-ES/docs/alexa/device-apis/list-of-interfaces.html]&lt;br /&gt;
&lt;br /&gt;
== Finale: Skill verknüpfen ==&lt;br /&gt;
Suche auf der Alexa-App den Skill &amp;quot;FHEM Connector&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Wenn du noch nicht bei Amazon angemeldet bist, erwartet Amazon zunächst, dass Du Dich normal bei Amazon anmeldest.&lt;br /&gt;
&lt;br /&gt;
Sobald Du &amp;quot;FHEM Connector&amp;quot; aktivierst, öffnet sich ein Browser-Tab mit folgender Maske:&amp;lt;br /&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
[[Datei:FHEMlazy_login.png|240px]]&lt;br /&gt;
&lt;br /&gt;
Hier kopierst Du Deinen Anmeldeschlüssel (im Klartext!) hinein, den du mittels &amp;quot;get alexa proxyKey&amp;quot; erhalten hast, und klickst auf Check. Als glücklicher Mensch ist auf der folgenden Statusseite alles grün:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Datei:FHEMlazy_check.png|240px]]&lt;br /&gt;
&lt;br /&gt;
Im Einzelnen wird hier geprüft, ob Du per SSH verbunden bist (und auch Deine IP zur Sicherheit angezeigt), ob der Reverse-Tunnel steht, ob nodeJS erreichbar ist und wie viele Geräte Alexa gleich finden sollte (in meinem Fall 22).&lt;br /&gt;
&lt;br /&gt;
Sollte etwas nicht grün sein und Du eine Idee zum Fixen haben, kannst Du mit &amp;quot;Retry&amp;quot; neue Versuche auslösen.&lt;br /&gt;
&lt;br /&gt;
Ist alles okay, klicke rechts den Button &amp;quot;Activate Skill&amp;quot;. Du springst damit wieder zurück zu Amazon, die Dir hoffentlich zur erfolgreichen Verknüpfung gratulieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;s&amp;gt;Amazon möchte nun unmittelbar die Gerätesuche starten, und unter SmartHome-Geräte sollten diese nun auftauchen.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Als Abschluss muss man nur noch in ein Echo-Gerät seiner Wahl die Anweisung: &amp;quot;&#039;&#039;Alexa suche smarte Geräte&#039;&#039;&amp;quot; sprechen und schon sollten die oben genannten Geräte gefunden werden und in der APP als Geräte auftauchen.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Was geht alles ? ==&lt;br /&gt;
&lt;br /&gt;
* Geräte, die sich ein- und ausschalten lassen:&lt;br /&gt;
** Automatisch: Müssen &amp;lt;code&amp;gt;set on&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set off&amp;lt;/code&amp;gt; Kommandos haben&lt;br /&gt;
** dummys müssen &amp;lt;code&amp;gt;setList&amp;lt;/code&amp;gt; mit on und off haben&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; switch bzw. light kann bestimmt werden ob es in alexa als Schalter oder Licht behandelt wird.&lt;br /&gt;
** Wenn die Set-Kommandos im FHEM Device anders benannt sind: homebridgeMapping On:cmdOn=&amp;lt;ein&amp;gt;,cmdOff=&amp;lt;aus&amp;gt; setzen&lt;br /&gt;
** Kommandos:&lt;br /&gt;
***Alexa, schalte &amp;lt;name&amp;gt; ein/aus&lt;br /&gt;
***Alexa, Licht an/aus&lt;br /&gt;
***Alexa, schalte &amp;lt;gruppe&amp;gt; ein/aus&lt;br /&gt;
* Geräte, die eine Temperatur messen&lt;br /&gt;
** Automatisch: Es muss ein Reading &amp;lt;code&amp;gt;temperature&amp;lt;/code&amp;gt; geben&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; thermometer&lt;br /&gt;
** Sonst: homebridgeMapping CurrentTemperature:reading=&amp;lt;reading&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Helligkeit sich ändern lässt&lt;br /&gt;
** Automatisch: wenn &amp;lt;code&amp;gt;dim&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;pct&amp;lt;/code&amp;gt; Kommandos erkannt werden&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; light&lt;br /&gt;
** Über homebridgeMapping: Wenn &amp;lt;code&amp;gt;helligkeit&amp;lt;/code&amp;gt; das Reading für die aktuelle Helligkeit enthält und die Helligkeit mit &amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; prozent xxx&amp;lt;/code&amp;gt; gesetzt wird, sieht das homebridgeMapping wie folgt aus: homebridgeMapping Brightness=helligkeit::prozent,minValue=0,maxValue=&amp;lt;maximalwert&amp;gt;&lt;br /&gt;
** Kommandos:&lt;br /&gt;
*** Alexa, mache &amp;lt;name&amp;gt; heller/dunkler&lt;br /&gt;
*** Alexa, Licht heller/dunkler&lt;br /&gt;
* Geräte, deren Farbe sich ändern lässt&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Farbtemperatur sich ändern lässt&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, bei denen sich eine Lautstärke einstellen lässt&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, bei denen sich ein prozentualer Wert einstellen lässt&lt;br /&gt;
** Automatisch: wenn &amp;lt;code&amp;gt;dim&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;pct&amp;lt;/code&amp;gt; Kommandos erkannt werden&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* elektrische Türschlösser&lt;br /&gt;
** &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt;: lock&lt;br /&gt;
** homebridgeMapping mit LockCurrentState und LockTargetState&lt;br /&gt;
&lt;br /&gt;
* Thermostate&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; thermostate&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* structure Devices aus FHEM (ab alexa-fhem version 0.5.7)&lt;br /&gt;
** können mit &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; scene als Szene eingebunden werden&lt;br /&gt;
** über &amp;lt;code&amp;gt;alexaRoom&amp;lt;/code&amp;gt; kann der name um einen Ort ergänzt werden&lt;br /&gt;
** Szenen aus einer structure lassen sich ein- und ausschalten&lt;br /&gt;
** Wichtig:&lt;br /&gt;
*** Ein Skill darf nur 12 Szenen automatisch erkennen und einbinden.&lt;br /&gt;
&lt;br /&gt;
* LightScene Devices aus FHEM (ab alexa-fhem version 0.5.8)&lt;br /&gt;
** können mit &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; scene als Szenen eingebunden werden&lt;br /&gt;
** über &amp;lt;code&amp;gt;alexaRoom&amp;lt;/code&amp;gt; kann der name um einen Ort ergänzt werden&lt;br /&gt;
** Szenen aus einer LightScene lassen sich nur einschalten&lt;br /&gt;
** Wichtig:&lt;br /&gt;
*** Ein Skill darf nur 12 Szenen automatisch erkennen und einbinden.&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Kanal sich umschalten lässt (ab alexa-fhem version 0.5.13)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; media&lt;br /&gt;
** homebridgeMapping ChannelController:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt;&lt;br /&gt;
** Erlaubte Werte siehe hier: https://developer.amazon.com/de/docs/device-apis/alexa-channelcontroller.html#changechannel&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Playback status sich schalten lässt (ab alexa-fhem version 0.5.13)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; media&lt;br /&gt;
** homebridgeMapping PlaybackController:playback,values=Play;Pause;Stop;Previous;Next&lt;br /&gt;
** Erlaubte Werte siehe hier: https://developer.amazon.com/de/docs/device-apis/alexa-playbackcontroller.html#discovery&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Eingang sich umschalten lässt (ab alexa-fhem version 0.5.13)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; media&lt;br /&gt;
** homebridgeMapping InputController:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt;,values=HDMI+1;HDMI+2;XBOX&lt;br /&gt;
** Erlaubte Werte siehe hier: https://developer.amazon.com/de/docs/device-apis/alexa-property-schemas.html#input&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Kontaktsensoren (ab alexa-fhem version 0.5.15)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; contact&lt;br /&gt;
** homebridgeMapping ContactSensorState:reading=&amp;lt;reading&amp;gt; oder CurrentDoorState:reading=&amp;lt;reading&amp;gt;&lt;br /&gt;
** Die Anzeige in der Alexa-App funktioniert sofort, die Abfrage per Sprache erst ab Version 0.5.27.&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Lautstärke sich ändern lässt (ab alexa-fhem version 0.5.24)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; speaker&lt;br /&gt;
** Automatisch: es muss ein Reading &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; und/oder &amp;lt;code&amp;gt;mute&amp;lt;/code&amp;gt; geben&lt;br /&gt;
** homebridgeMapping Volume:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt; Mute:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt;&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, die sich ein- (und optional) ausschalten lassen als Szene (ab alexa-fhem version 0.5.26)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; scene&lt;br /&gt;
** Automatisch: Müssen &amp;lt;code&amp;gt;set on&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set off&amp;lt;/code&amp;gt; Kommandos haben&lt;br /&gt;
** homebridgeMapping On:reading=&amp;lt;reading&amp;gt;,cmdOn=&amp;lt;cmd&amp;gt;[,cmdOff=&amp;lt;cmd&amp;gt;]&lt;br /&gt;
** Hinweis: Fehlende Kommandos lassen sich mit cmdalias erzeugen&lt;br /&gt;
** Wichtig:&lt;br /&gt;
*** Ein Skill darf nur 12 Szenen automatisch erkennen und einbinden.&lt;br /&gt;
* Rollläden. Lange ein Problemthema, das nur mit &amp;quot;Schalte auf 0%, schalte auf 100% lief&amp;quot;. Wichtig: &amp;quot;alexa-fhem&amp;quot; ab Version 0.5.39 einsetzen. GenericDevice-Type auf &amp;quot;blind&amp;quot; setzen. Nach Restart von alexa-fhem und neuer Gerätesuche sollte folgendes funktionieren:&lt;br /&gt;
** &amp;quot;..., öffne &amp;lt;Name&amp;gt; ganz&amp;quot;&lt;br /&gt;
** &amp;quot;..., schließe &amp;lt;Name&amp;gt; komplett&amp;quot;&lt;br /&gt;
** &amp;quot;hoch&amp;quot; und &amp;quot;runter&amp;quot; (ohne &amp;quot;ganz&amp;quot; oder &amp;quot;komplett&amp;quot;) schalten jeweils nur einen bestimmten Prozentsatz hoch oder runter. Dieser kann mit &amp;lt;code&amp;gt;attr &amp;lt;name&amp;gt; homebridgeMapping TargetPosition:minStep=&amp;lt;wert&amp;gt;&amp;lt;/code&amp;gt;geändert werden. Aber Achtung: In diesem Intervall kann dann auch nur noch ein absoluter Prozentwert per Sprache oder Slider eingestellt werden! Bei z.B. 25% würden 13% zu 25% aufgerundet, 12% zu 0% abgerundet werden.&lt;br /&gt;
* Kontaktsensoren (ab alexa-fhem version 0.5.47)&lt;br /&gt;
** Automatisch wenn ein Reading &amp;lt;code&amp;gt;motion&amp;lt;/code&amp;gt; vorhanden ist oder es sich um einen Zigbee bewgungsmelder an einer HUE oder deCONZ Bridge handelt&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; MotionSensor&lt;br /&gt;
** homebridgeMapping MotionDetected:reading=&amp;lt;reading&amp;gt;,values=&amp;lt;wert für bewgung&amp;gt;:1;&amp;lt;wert für keine bewegung&amp;gt;:0&lt;br /&gt;
&lt;br /&gt;
* Alarmmelder (noch nicht in Deutschland):&lt;br /&gt;
** genericDeviceType Security&lt;br /&gt;
** homebridgeMapping Alarm=&amp;lt;reading&amp;gt;[,type=[fireAlarm|waterAlarm|burglaryAlarm|carbonMonoxideAlarm]]&lt;br /&gt;
** wenn der type nicht angegeben wird ist fireAlarm der default&lt;br /&gt;
** automatisch werden 0, ok und alles was mit no anfängt als OK erkannt. alles andere gilt als ALARM.&lt;br /&gt;
*Geräte mit mehrstufigen Modi:&lt;br /&gt;
**siehe den zugehörigen Thread im Forum: {{Link2Forum|Topic= 125604}}&lt;br /&gt;
**(Funktioniert Stand 10/25 nur mit alexa-fhem v0.5.64, nicht mit der aktuelle 0.5.65, siehe oben)&lt;br /&gt;
&lt;br /&gt;
Es werden noch einige andere häufig verwendete Geräte (Homematic, hue,...) automatisch erkannt.&lt;br /&gt;
&lt;br /&gt;
to be continued ...&lt;br /&gt;
&lt;br /&gt;
In der [https://developer.amazon.com/docs/device-apis/list-of-interfaces.html List of Capability Interfaces] bei Amazon kann man sehen, welche Möglichkeiten das Smart Home Skill API aktuell in einzelnen Ländern bietet. Leider ohne die jeweiligen landessprachlichen Kommandos.&lt;br /&gt;
&lt;br /&gt;
=== Aktiv Routinen starten ===&lt;br /&gt;
Routinen (eine Funktionalität, die rein - genauso wie &amp;quot;Räume&amp;quot; - bei Amazon liegt und nicht von FHEM Connector beeinflusst wird) waren lange die ewige Antwort auf die Frage: &amp;quot;Meine Frau möchte aber &#039;&#039;&#039;Öffne Rollläden&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; sagen&amp;quot;: In der Alexa-App gibt es im Menü den Punkt &amp;quot;Routinen&amp;quot;, und hier lässt sich eine gewisse Anzahl von Aktionen (unter optionalen Bedingungen) an ein Sprachkommando knüpfen.&lt;br /&gt;
&lt;br /&gt;
Neu: Routinen können inzwischen auch von Skills getriggert werden, und seit Version 0.5.47 (Februar 2020) auch von FHEM Connector. Das braucht niemand, um die Rollläden hochzufahren, denn das kann FHEM ja selber, aber um z.B. eine Ansage auf einem Alexa-Gerät zu triggern. Dafür gibt es auch das FHEM-Modul &amp;quot;echodevice&amp;quot;, aber es erfordert ein paar Klimmzüge. Mit dem aktiven Triggern von Routinen kann FHEM auslösen, dass Alexa ungefragt (!) Dinge wie &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;Die Temperatur in der Tiefkühltruhe hat -16 Grad überschritten&amp;quot;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
in den Raum sagt. Also eine Alternative bzw. Ergänzung zu Alarmen / Erinnerungen per Telegram o.ä.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorgeschichte&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Die Smarthome-Skill-API von Amazon sah schon lange das &amp;quot;proactiveReporting&amp;quot; vor: Also z.B. die gemessene Temperatur nicht erst auf Anfrage hin zu übermitteln, sondern laufend aktiv zu pushen. Aber warum Daten an Amazon senden, wenn es dafür keinen Mehrwert gibt? Beim Öffnen z.B. des Thermostaten in der Alexa-App kommen ohnehin laufend Statusabfragen. Warum also einen Datenpool bei Amazon über die Haustemperatur aufbauen und Änderungen pushen, wenn es keinen Mehrwert dafür gibt? &lt;br /&gt;
&lt;br /&gt;
Inzwischen lassen sich (reale oder vermeintliche) Änderungen von &#039;&#039;Bewegungssensoren&#039;&#039; und &#039;&#039;Fensterkontakten&#039;&#039; als Startbedingung an Alexa-Routinen koppeln. Man kann in der Alexa-App (ggf. fiktive) Öffnen eines Fensterkontaktes an das Aufsagen eines freien Textes durch die Hausbutlerin knüpfen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Umsetzung&#039;&#039;&#039;:&lt;br /&gt;
* Jedes Alexa-Device, dessen Status aktiv zu Amazon gepusht werden soll, im Attribut &amp;quot;alexaProactiveEvents&amp;quot; mit einer &amp;quot;1&amp;quot; versehen. Per Default wird &#039;&#039;kein&#039;&#039; Gerät laufend aktiv zu Amazon gepusht!&lt;br /&gt;
* das geänderte Device einmal zu Amazon pushen &amp;quot;set &amp;lt;alexa&amp;gt; add &amp;lt;device&amp;gt;&amp;quot; (oder &#039;Alexa, suche neue Geräte&#039; murmeln)&lt;br /&gt;
* Das Gerät sollte jetzt beim Anlegen einer neuen Routine (&amp;quot;Neue Routine&amp;quot;, &amp;quot;Wenn Folgendes passiert&amp;quot;, &amp;quot;Smart Home&amp;quot;) als möglicher Triggerpunkt erscheinen.&lt;br /&gt;
&lt;br /&gt;
==== Dummygeräte: ====&lt;br /&gt;
Ein Dummydevice sollte einen Kontaktschalter oder Bewegungssensor simulieren, um dann in FHEM eine beliebige Bedingung als Trigger zu definieren, und eine freie Ansage in Alexa als Routine zu definieren. Hier ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
define voicetrigger1 dummy&lt;br /&gt;
attr voicetrigger1 alexaName alle Fenster&lt;br /&gt;
attr voicetrigger1 alexaProactiveEvents 1&lt;br /&gt;
attr voicetrigger1 genericDeviceType contact&lt;br /&gt;
attr voicetrigger1 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED&lt;br /&gt;
attr voicetrigger1 setList open closed&lt;br /&gt;
&lt;br /&gt;
set alexa add voicetrigger1&lt;br /&gt;
set alexa restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fehlersuche:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Push setzt ein intaktes Push-Token voraus. Sollte im Alexa-Logfile Folgendes erscheinen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;failed to refresh token: invalid_grant: &#039;The request has an invalid grant parameter : refresh_token&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
so ist das Push-Token nicht aktuell. Weil die Auswirkung lange nur war, dass Geräteänderungen nicht aktiv an Amazon gemeldet wurden, gibt es noch keine umfassende Analyse des Problems. Es lässt sich lösen, indem eine oder beide folgenden Aktionen ausgeführt werden:&lt;br /&gt;
* Löschen des &amp;quot;.eventToken&amp;quot; im Alexa-Device über &amp;quot;deletereading&amp;quot;&lt;br /&gt;
* &amp;quot;FHEM-Connector&amp;quot;-Skill auf &amp;quot;alexa.amazon.de&amp;quot; einmal deaktivieren und dann neu verbinden&lt;br /&gt;
&lt;br /&gt;
== Mögliche Probleme und Lösungen ==&lt;br /&gt;
&lt;br /&gt;
Es kann vorkommen, dass Geräte zwar korrekt erkannt werden, aber das durch Alexa erkannte Kommando nicht richtig umgesetzt wird (Beispiel - mittlerweile behoben: {{Link2Forum|Topic=96766}}). Neben dem FHEM-Log gibt es noch das Logfile, welches von alexa-fhem angelegt wird. &lt;br /&gt;
&lt;br /&gt;
=== Fehlersuche über die FHEM-Oberfläche ===&lt;br /&gt;
&lt;br /&gt;
* alexa-fhem Logfile anschauen (Detail-Ansicht des &amp;lt;alexa&amp;gt;-Device aufrufen, klick auf &#039;&#039;&#039;Logfile&#039;&#039;&#039; oben)&lt;br /&gt;
* alexa-fhem im Debug-Modus aufrufen:&lt;br /&gt;
** -D zum alexaFHEM-params attribut hinzufügen&lt;br /&gt;
** Alexa-Befehl auslösen&lt;br /&gt;
** -D aus dem alexaFHEM-params attribut entfernen&lt;br /&gt;
* Die notwendigen Informationen finden sich in dem alexa-Logfile (siehe oben)&lt;br /&gt;
&lt;br /&gt;
=== Fehlersuche über Kommandozeile (lies: Shell) + FHEM-Oberfläche ===&lt;br /&gt;
&lt;br /&gt;
:* set &amp;lt;alexa&amp;gt; stop (FHEM-Oberfläche)&lt;br /&gt;
:* Auf der Kommandozeile &amp;lt;code&amp;gt;alexa-fhem -D -c /opt/fhem/alexa-fhem.cfg &amp;gt; debug.log&amp;lt;/code&amp;gt; starten (dadurch wird die Datei debug.log erzeugt im aktuellen Verzeichnis)&lt;br /&gt;
:* Alexa-Befehl auslösen&lt;br /&gt;
:* alexa-fhem auf der Kommandozeile wieder stoppen (CTRL-C)&lt;br /&gt;
:* set &amp;lt;alexa&amp;gt; start (FHEM-Oberfläche)&lt;br /&gt;
&lt;br /&gt;
Die Datei debug.log sollte Hinweise enthalten, wie das Problem zu lösen ist oder Dich zumindest in die richtige Richtung schieben.&lt;br /&gt;
&lt;br /&gt;
Im Beispiel aus dem Forum fand sich in dem Logfile der Hinweis darauf, dass das Device mit falschen min/max-Werten unterwegs war.&lt;br /&gt;
&lt;br /&gt;
=== Registrierungskey vergessen, Registrierung zurücksetzen ===&lt;br /&gt;
&lt;br /&gt;
Auf der Kommandoshell:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
pi@raspberrypi:~# sudo -u fhem ssh -p 58824 fhem-va.fhem.de status&lt;br /&gt;
Registered.&lt;br /&gt;
Registered on 2019-01-13T15:38:13Z.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
heisst, das der Vereinsserver eigentlich alles hat, was er will. Es wird kein neuer Schlüssel generiert.&lt;br /&gt;
Wenn Du die Situation zurücksetzen möchtest, wäre die hässliche Methode, Deinen SSH-Key zu löschen. Eleganter ist, die Registrierung auf Vereinsseite zu löschen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
pi@raspberrypi:~# sudo -u fhem ssh -p 58824 fhem-va.fhem.de unregister&lt;br /&gt;
Your registration has been removed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
löscht Deinen Schlüssel mitsamt allen dort gespeicherten Daten auf Vereinsseite. Bei Restart von alexa-fhem in FHEM-WEB wird jetzt ein neuer Registrierungskey angefordert.&lt;br /&gt;
&lt;br /&gt;
== Sicherheitskonzept und Secrets ==&lt;br /&gt;
&lt;br /&gt;
Um diesen Abschnitt zu verstehen, solltest Du den Abschnitt &amp;quot;Arbeitsweise&amp;quot; im Kopf haben. Einerseits ist Dir vermutlich einleuchtend, dass ein Server, der per SSH rückwärts nur ausgewählte Kommandos in den Tunnel, den Du aufgebaut hast, leitet, &amp;quot;irgendwie sicherer&amp;quot; ist. Andererseits möchte man nicht blind vertrauen.&lt;br /&gt;
&lt;br /&gt;
=== SSH ===&lt;br /&gt;
==== SSH - macht das nichts Gefährliches? ====&lt;br /&gt;
SSH ist ein Veteran des Internet und entstand, um sich sicher (verschlüsselt) und schnell auf Servern einzuloggen. Schon früh wurde dabei der sogenannte &amp;quot;Reverse-Tunnel&amp;quot; implementiert: Also der vom Client (Deinem Rechner) geäußerte Wunsch: &amp;quot;Bitte leite mir Requests, die bei Dir, Server, auf Port xy eingehen, an meinen lokalen Port yz weiter.&amp;quot;. Dieses Verfahren implementiert der Reverseproxy, wobei tatsächlich auf dem Server für Dich kein echter Port geöffnet wird.&lt;br /&gt;
&lt;br /&gt;
Wie Dir ggf. sicher der Unix-Guru Deines Vertrauens bestätigen wird: Die Kombination&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
ssh -R 1234:localhost:&amp;lt;zufälliger port&amp;gt; zielserver &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
erlaubt keine Ausführung von Shell-Kommandos auf Deinem Server, sondern einzig, dass vom SSH-Programm Verbindungen zu einem lokalen Port auf Deinem Server auf dem alexa-fhem lauscht aufgebaut werden. Du kannst also z.B. mit einem&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 /usr/sbin/tcpdump -X -s 0 -i lo port &amp;lt;zufälliger port&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
vollständig überwachen (oder ggf. permanent aufzeichen), was auf Deinem Server von außen gesteuert passiert.&lt;br /&gt;
&lt;br /&gt;
==== Wie wird bei SSH verschlüsselt? ====&lt;br /&gt;
Im Prinzip wie im Web auf SSL-Seiten, teils mit den gleichen Verschlüsselungsverfahren. Allerdings arbeitet SSH eher wie das im Web recht seltene Verfahren: Bei jeder Verbindung übermitteln sowohl Server wie auch Client den öffentlichen Teil ihres Schlüssels. Anders als im Web wird der Schlüssel aber nicht von einer öffentlichen Zertifizierungsstelle wie &amp;quot;LetsEncrypt&amp;quot; unterschrieben. Stattdessen entscheiden Server wie Client beim ersten Verbindungsaufbau typischerweise per manueller Frage: &amp;quot;Willst Du jetzt und künftig diesem Schlüssel vertrauen?&amp;quot; Bei der Installation wird diese Frage für Deine Seite bejaht, und fortan wird der öffentliche Schlüssel des FHEM-Servers auf Deinem Rechner gespeichert. Ab da bist Du z.B. davor sicher, dass jemand den DNS-Eintrag verbiegt oder sich in den Datenfluss Deines Providers einhängt: Ein geänderter Serverschlüssel würde bemerkt werden.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Soweit klar? Aus Deinem öffentlichen Schlüssel wiederum leitet der Server her: &amp;quot;Das ist definitiv wieder derjenige, der sich damals &amp;quot;registriert&amp;quot; hat&amp;quot;. Und an dieser Stelle kann ich auch den &amp;lt;b&amp;gt;ersten Teil des 3-teiligen Registrierungskeys&amp;lt;/b&amp;gt; erläutern: Die typischerweise 6-stellige Hex-Zahl am Anfang ist der Java-Hashcode Deines öffentlichen Schlüssel. Sie ist damit sozusagen Deine aus Deinem öffentlichen Schlüssel abgeleitete Benutzer-ID.&lt;br /&gt;
&lt;br /&gt;
=== Die Rolle der Secrets ===&lt;br /&gt;
Wenn jetzt klar ist, dass die Verbindung zum Vereinsserver sicher und vertauschungsfrei funktioniert, bleiben noch 2 Probleme zu lösen:&lt;br /&gt;
1) Im Web bei der Skill-Aktivierung musst Du beweisen, dass Du der Mensch am Browser bist, dem der SSH-Tunnel von IP xy mit dem öffentlichen Schlüssel X gehört. Bei der automatischen Registrierung werden lokal auf Deinem Rechner zwei 64-Bit-Secrets generiert:&lt;br /&gt;
* Das &amp;lt;b&amp;gt;Anmelde&amp;lt;/b&amp;gt;-Secret&lt;br /&gt;
* Das &amp;lt;b&amp;gt;Bearer&amp;lt;/b&amp;gt;-Token&lt;br /&gt;
Beim Anmelden des SSH-Keys auf dem öffentlichen Server wird nun der &amp;lt;b&amp;gt;Hashwert&amp;lt;/b&amp;gt; des ersten Secrets übertragen und dort in Verbindung mit Deinem öffentlichen Schlüssel gespeichert. Ein Hashwert bedeutet, dass (sofern das Verfahren, hier SHA256, funktioniert), niemand aus dem Hash das Secret zurückrechnen kann. Ein Datenbankklau auf dem Server gefährdet also nicht die Sicherheit Deines Passwortes.&lt;br /&gt;
&lt;br /&gt;
Wenn Du nun beim Skill-Aktivieren den Registrierungskey eingibst, dann &amp;quot;sieht&amp;quot; der Server zum ersten Mal Dein ausgewürfeltes Secret, vergleicht es mit dem Hashwert und wird es anschließend wieder umgehend vergessen. Anhand des Hashwertes kann der Server aber entscheiden, dass Du der legitime Nutzer zum öffentlichen Schlüssel XY bist.&lt;br /&gt;
&lt;br /&gt;
2) Das zweite Problem ist: Wie soll Amazon &amp;quot;beweisen&amp;quot;, dass sie der legitime Aufrufer sind? Amazon erhält binnen wenigen Sekunden nach dem Klick auf &amp;quot;Activate Skill&amp;quot; den &amp;lt;b&amp;gt;dritten Teil&amp;lt;/b&amp;gt; des Registrierungskeys als sogenanntes Bearer-Token. Zwar läuft er durch den Registrierungsserver, er wird dort, auf dem Registrierungs/Vereinsserver aber nicht gespeichert. Das Bearer-Token wird von Amazon bei allen Requests zu Deinem Server mitgesendet. Da es am Anfang zusätzlich Deine &amp;quot;User-ID&amp;quot; enthält, weiß der Vereinsserver, zu welchem SSH-Tunnel der Request zu senden ist. Aber lokal auf Deinem Rechner wird ausgewertet, ob das Token &amp;quot;stimmt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== alexa-fhem Updaten bzw. &amp;quot;Upgraden&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updaten einer &amp;quot;Connector&amp;quot; Installation:&#039;&#039;&#039;&lt;br /&gt;
* alexa-fhem über FHEM anhalten (Name des Alexa-Device: alexa):&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;set alexa stop&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Auf der Konsole wie anfangs bei der Installation:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;sudo npm update -g alexa-fhem&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Manchmal hat npm Probleme mit einem Update. Dann einfach die aktuelle Version noch mal drüber Installieren: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;sudo npm install -g alexa-fhem&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*alexa-fhem über FHEM wieder starten:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;set alexa start&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Upgraden von einer &amp;quot;Nicht-Connector&amp;quot; Installation (z.B. manuelle Installation per pm-Download):&#039;&#039;&#039;&lt;br /&gt;
* Daten der aktuellen Installation sichern (v.a. config.json / man weiß ja nie)&lt;br /&gt;
* Autostart der aktuellen alexa-fhem Installation deaktivieren:&lt;br /&gt;
** Bei initd: Service deaktivieren mittels: &amp;lt;code&amp;gt;sudo update-rc.d -f alexa remove&amp;lt;/code&amp;gt; Vorher mittels stoppen: &amp;lt;code&amp;gt;sudo service alexa stop&amp;lt;/code&amp;gt; Startscript unter /etc/init.d/ löschen.&lt;br /&gt;
** Bei systemd: Service deaktivieren mittels: &amp;lt;code&amp;gt;sudo systemctl disable alexa&amp;lt;/code&amp;gt; Vorher mittels stoppen: &amp;lt;code&amp;gt;sudo systemctl alexa stop&amp;lt;/code&amp;gt; Startscript unter /etc/systemd/system/ löschen.&lt;br /&gt;
* ALLE vorhandenen alexa-fhem Daten LÖSCHEN! Bleiben Dinge zurück und wird dann laut Connector installiert kann es zu Problemen kommen!&lt;br /&gt;
* (reboot)&lt;br /&gt;
* Installation von alexa-fhem laut Anleitung (Beginn dieses Wiki)&lt;br /&gt;
* Falls eigene Dinge von früher genutzt werden wollen/sollen (z.B. Custom Skill), dann die entsprechenden Einträge aus der gesicherten config.json in die neu angelegte alexa-fhem.cfg (zu finden unter &amp;quot;Edit files&amp;quot;) übernehmen.&lt;br /&gt;
* Werden keine eigenen Dinge verwendet, dann kann der Port (Standard: 3000) geschlossen werden und auch die Daten unter Amazon-Developer können gelöscht werden.&lt;br /&gt;
&lt;br /&gt;
== Bug- und Wunschliste ==&lt;br /&gt;
* Ist beim Start keine Internetverbindung vorhanden, erfolgt kein Retry -- alexa-fhem muss restartet werden (ssh_autoconfig wertet keine temporären Fehler aus)&lt;br /&gt;
&lt;br /&gt;
==Weitergehende Informationen==&lt;br /&gt;
*[[Alexa und Mappings]]&lt;br /&gt;
*[[Alexa Tipps und Kniffe]]&lt;br /&gt;
*[[FHEM Connector for Amazon Alexa]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Sprachsteuerung]]&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hapege</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHEM_Connector_f%C3%BCr_Amazon_Alexa&amp;diff=40438</id>
		<title>FHEM Connector für Amazon Alexa</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FHEM_Connector_f%C3%BCr_Amazon_Alexa&amp;diff=40438"/>
		<updated>2025-10-14T14:00:46Z</updated>

		<summary type="html">&lt;p&gt;Hapege: /* Alexa-FHEM installieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Alexa FHEMlazy&#039;&#039;&#039; war historisch ein Fork des Original [[Alexa-Fhem|alexa-fhem]], der im Januar 2019 mit dem Original zusammengeführt wurde und nun als &#039;&#039;&#039;FHEM Connector&#039;&#039;&#039; verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
Er ermöglicht innerhalb von Minuten die Verknüpfung von FHEM mit einem Amazon Echo Gerät. Auch Geräte anderer Hersteller mit verbauten Mikrofonen und Alexa-Sprachassistenten-Unterstützung sollten problemlos funktionieren. Für folgende Geräte ist dies bspw. der Fall (Falls Ihr andere/weitere Gerätemodelle bzw. Hersteller in Verwendung habt, bitte hier pflegen):&lt;br /&gt;
&lt;br /&gt;
* SONOS Beam und SONOS One   &lt;br /&gt;
&lt;br /&gt;
Gegenüber dem klassischen Ansatz ergeben sich Einschränkungen, so läuft die Software normalerweise unter dem gleichen Benutzer wie FHEM auf dem gleichen Server, und es wird z.Zt. nur der Smarthome-Skill unterstützt (die Variante, bei der die Möglichkeiten der Interaktion von Amazon festgelegt wurden).&lt;br /&gt;
Dafür ist weder ein Developer-Account bei Amazon, eigene Lambda- und Skillfunktionen, noch das Öffnen eines eingehenden Ports aus dem Internet nötig. &lt;br /&gt;
* Die Software integriert einen Installer, der die Erstkonfiguration und Anmeldung übernimmt&lt;br /&gt;
* Die Kommunikation zur Software auf dem heimischen Rechner und dann zu FHEM verläuft über SSH und einen vom FHEM-Verein gehosteten Server&lt;br /&gt;
* Funktioniert mit IPv4, IPv6, echtem Dual Stack und DS-Lite&lt;br /&gt;
* Als Skill bei Amazon wird der Skill &amp;quot;FHEM Connector&amp;quot; verwendet.&lt;br /&gt;
&lt;br /&gt;
Der Thread im Forum zur Software ist hier: {{Link2Forum|Topic=94817}}.&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Einfache Anbindung von FHEM an Amazon Assistent Alexa&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=alexa&lt;br /&gt;
|ModTechName=39_alexa.pm / alexa-fhem&lt;br /&gt;
|ModForumArea=Frontends/Sprachsteuerung&lt;br /&gt;
|ModOwner=gvzdus, André/ justme1968 ({{Link2FU|430|Forum}} / [[Benutzer Diskussion:Justme|Wiki]])&lt;br /&gt;
}} &lt;br /&gt;
==Einführung==&lt;br /&gt;
===Arbeitsweise und Datenfluss===&lt;br /&gt;
Vorläufig ist alexa-fhem im &amp;quot;FHEM Connector-Modus&amp;quot; ein reiner [https://developer.amazon.com/de/docs/smarthome/understand-the-smart-home-skill-api.html SmartHome-Skill].&lt;br /&gt;
SmartHome-Skills erhalten weder die Sprachdaten selber noch das, was Amazon in Textform verstanden hat, sondern vielmehr extrahiert Amazon aus dem verstandenen Text Anweisungen und Abfragen für Geräte, die dann an den Skill übermittelt werden. Charmant ist dabei, dass unmittelbar gefragt werden kann &amp;quot;Alexa, wie ist die Temperatur im Wohnzimmer?&amp;quot;, während andere Skills zunächst explizit angesprochen werden müssen (&amp;quot;Alexa, frage FHEM nach der Temperatur im Wohnzimmer&amp;quot;). Außerdem kann der Nutzer mehrere Smarthome-Skills installieren, und die Geräte werden zu einer Gesamtmenge zusammengefasst.&lt;br /&gt;
&lt;br /&gt;
Gehen wir den Datenfluss bei der konkreten Frage &amp;quot;Wie ist die Temperatur im Wohnzimmer?&amp;quot; durch:&lt;br /&gt;
* Alexa hat bei der Skillinstallation gelernt, dass &amp;quot;FHEM Connector&amp;quot; bei Dir einen Thermostaten im Raum Wohnzimmer kennt. Dadurch wird bei der Sprachanalyse von &amp;quot;Alexa Voice Service&amp;quot; in der Cloud erkannt, dass eine Abfrage an &amp;quot;FHEM Connector&amp;quot; erfolgversprechend ist.&lt;br /&gt;
* Zunächst wird die zentrale &amp;quot;Lambda-Funktion&amp;quot; von &amp;quot;FHEM Connector&amp;quot; aufgerufen. Die Funktion leitet aber im Kern nur den Request unverändert an den vom Verein bereitgestellten Server weiter. Im Request enthalten ist ein Token, das sogenannte &amp;quot;Bearer-Token&amp;quot;.&lt;br /&gt;
* Der &amp;quot;Vereinsserver&amp;quot; prüft anhand dieses Tokens, ob es überhaupt bekannt ist, und zu welchem Nutzer es gehört. Ist dieser Nutzer verbunden, wird der Request wiederum quasi unverändert an den Nutzer weitergeleitet.&lt;br /&gt;
* Diese Weiterleitung passiert über einen sogenannten SSH-Reverse-Tunnel, der von Deiner Seite und der Software auf dem FHEM-Tunnel automatisch aufgebaut wird.&lt;br /&gt;
* Auf Deiner Seite läuft die eigentliche Software, und zwar unter nodeJS. nodeJS ist ein Javascript ausführender Miniserver, der lokal auf einem Zufallsport auf Requests &amp;quot;lauscht&amp;quot;. In der Original-Version  [[Alexa-Fhem|Alexa FHEM]] kommen die Requests aus dem Internet (hoffentlich von der eigenen Lambda-Funktion), hier bei &amp;quot;FHEM Connector&amp;quot; kommen sie ausschließlich aus dem SSH-Tunnel von lokal.&lt;br /&gt;
* Die Software validiert nun diesen Request anhand des Bearer-Tokens. Konkret wird dabei das bei der Installation generierte Token, dass bei der Skill-Aktivierung an Amazon übertragen wurde, mit dem lokal gespeicherten Wert verglichen. Stimmt das Token, wird der Befehl verarbeitet, üblicherweise wird hierbei ein Aufruf an die Webschnittstelle von FHEM abgesetzt.&lt;br /&gt;
* FHEM führt den Befehl aus&lt;br /&gt;
&lt;br /&gt;
Hört sich langsam und kompliziert an? Kompliziert: Okay. Langsam eher nicht, in etlichen Fällen liegt die Gesamtantwortszeit unter 200 ms.&lt;br /&gt;
&lt;br /&gt;
Soweit ein erster Überblick über die Datenflüsse. Im Abschnitt Sicherheit ist das Konzept der Absicherung deutlich genauer und ausführlicher beschrieben.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
Du wirst bei der Installation zuerst auf der Kommandozeile auf Deinem Raspberry (o.ä.) unterwegs sein, anschließend im Webfrontend von FHEM, und zum Schluss auf der Alexa-Konsole im Web.&lt;br /&gt;
&lt;br /&gt;
===node.js installieren===&lt;br /&gt;
&lt;br /&gt;
Ab Jessy liegt NodeJS bereits in einer ausreichend aktuellen Version vor (Stretch und Buster funktionieren ebenfalls). Mit&lt;br /&gt;
&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 install nodejs npm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kannst Du es installieren. Mit &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
node --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
erfährst Du die aktuelle Version - wenn hier etwas mit &amp;quot;8&amp;quot; oder höher vorneweg erscheint, ist alles gut.&lt;br /&gt;
Ansonsten suche Dir bitte eine Anleitung im Web, wie Du NodeJS auf Deinem System auf einen aktuellen Stand bringen kannst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung:&#039;&#039;&#039; diese Aussage bzgl. node-Version (und Jessie/Stretch) stimmt wohl für alexa-fhem Stand heute (12.06.2020) nicht mehr, siehe https://forum.fhem.de/index.php/topic,112025.msg1063218.html#msg1063218&lt;br /&gt;
&lt;br /&gt;
=== Alexa-FHEM installieren ===&lt;br /&gt;
&lt;br /&gt;
Nun installieren wir Alexa-fhem aus dem offiziellen Repository:&lt;br /&gt;
&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 npm install -g alexa-fhem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Vorgang benötigt etwas Zeit.&lt;br /&gt;
&lt;br /&gt;
(Edit: die aktuelle Version 0.5.65 hat ein Problem, wenn ModeController verwendet wird. Wer modes braucht, der sollte die vorherige Version 0.5.64 installieren:&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 npm install -g alexa-fhem@0.5.64&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alexa-FHEM aktivieren ===&lt;br /&gt;
&lt;br /&gt;
Wechsele jetzt in FHEM-Web!&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, dass das Alexa-Modul in der Version ab Januar 2019 vorliegt. Dafür bitte einmal FHEM aktualisieren:&lt;br /&gt;
Speichern der Config nicht vergessen, und&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
update&lt;br /&gt;
shutdown restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alles, was jetzt noch nötig ist, ist das Anlegen eines Alexa-Devices. Gib dafür in der FHEM-Web-Kommandozeile&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
define alexa alexa&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
an. Nun läuft, während Du bereits das neu angelegte Alexa-Devices siehst, ein komplexer Prozess im Hintergrund:&lt;br /&gt;
&lt;br /&gt;
* Falls noch kein SSH-Key für den Benutzer, unter dem FHEM läuft, existiert, wird einer generiert&lt;br /&gt;
* Es wird ein Secret-Key im Prozess generiert, dass den Server nicht verlässt, und der Skillanmeldung dient.&lt;br /&gt;
* Du wirst auf dem Server &amp;quot;va-fhem.fhem.de&amp;quot; des FHEM-Vereins mit dem SSH-Key angemeldet, und der Hash-Wert Deines Secret-Key dort abgelegt.&lt;br /&gt;
&lt;br /&gt;
Und wenn Du diese Sätze gelesen hast, sollte inzwischen sich das Alexa-Device in FHEM-Web aktualisiert haben, und &lt;br /&gt;
ungefähr so aussehen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Alexa-Device-2.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Neben dem Status für alexa-fhem und der Proxyverbindung ist wichtig, dass diese beiden Zeilen beim Reload aufgetaucht sind:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
alexaFHEM.bearerToken crypt:...&lt;br /&gt;
alexaFHEM.skillRegKey crypt:...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ja, und diesen Schlüssel benötigst Du wirklich! Also am besten schon einmal mit &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
get &amp;lt;alexa&amp;gt; proxyKey&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in Klartext anzeigen lassen und in ein Editor-Fenster dauerhaft wegsichern.&lt;br /&gt;
&lt;br /&gt;
Jetzt solltest Du Dein Alexa-Device nicht mehr löschen, denn das im Reading angezeigte &amp;quot;bearerToken&amp;quot; zu löschen bedeutet, dass die Software die Zugriffe von nicht mehr überprüfen kann und keine Kommandos mehr funktionieren. In diesem Fall hilft nur die Neuinstallation des Skills.&lt;br /&gt;
&lt;br /&gt;
==== Fehler bei der Aktivierung ====&lt;br /&gt;
&lt;br /&gt;
Während kompliziertere Fehlerfälle im Abschnitt &amp;quot;Mögliche Probleme und Lösungen&amp;quot; behandelt werden, hier häufige Fälle, warum die kryptischen Zeilen nicht auftauchen:&lt;br /&gt;
&lt;br /&gt;
* Zuerst bitte einfach einmal die Seite neu laden.&lt;br /&gt;
&lt;br /&gt;
===== 401: Authorization Required =====&lt;br /&gt;
&lt;br /&gt;
Wenn Du FHEM-Web mit einem User/Passwort-Schutz versehen hast, wirst du folgende Fehlermeldung sehen: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
alexaFHEM stopped; failed to connect to fhem: 401: Authorization Required&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Regel musst du die Angaben User/Passwort noch einmal explizit setzen. Im Attribute-Abschnitt &amp;quot;alexaFHEM-auth&amp;quot; auswählen, User/Passwort mit &amp;quot;:&amp;quot; getrennt angeben und &amp;quot;attr&amp;quot; anklicken. alexa-fhem wird automatisch neu gestartet. Hier das Ganze in der Text-Variante:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
attr alexa alexaFHEM-auth user:pass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Permission denied =====&lt;br /&gt;
&lt;br /&gt;
Wenn du folgende Fehlermeldungen im Alexa Logfile siehst, wurde das Verzeichnis &amp;quot;/opt/fhem/.ssh/&amp;quot; von dir bei der Arbeit mit &amp;quot;root&amp;quot; oder &amp;quot;sudo&amp;quot; mit den falschen Berechtigungen versehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
[2019-7-25 11:59:12] sshautoconf: aborted with ssh-keygen returned error - key_save_private: Permission denied&lt;br /&gt;
[2019-7-25 11:59:12] *** SSH: proxy configuration failed: ssh-keygen returned error - key_save_private: Permission denied&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prüfen kannst du die Berechtigungen mit folgendem Befehl auf der Shell-Konsole: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
ls -l /opt/fhem/.ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Du solltest dann folgende Ausgabe erhalten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
insgesamt 12&lt;br /&gt;
-rw------- 1 fhem dialout 1675 Jul 12 13:10 id_rsa&lt;br /&gt;
-rw-r--r-- 1 fhem dialout  391 Jul 12 13:10 id_rsa.pub&lt;br /&gt;
-rw-r--r-- 1 fhem dialout  884 Jul 12 13:10 known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Steht in der Ausgabe nicht &amp;quot;fhem dialout&amp;quot; (dein fhem User), sondern bspw. &amp;quot;root root&amp;quot;, dann bspw. mit folgendem Befehl an deinen fhem User anpassen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
chown fhem:dialout /opt/fhem/.ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem ersten Befehl &amp;quot;ls -l ...&amp;quot; kannst du dann nochmal prüfen, ob die Berechtigungen korrekt übernommen wurden. &lt;br /&gt;
&lt;br /&gt;
===== weitere Prüfungen =====&lt;br /&gt;
&lt;br /&gt;
Hast Du noch die Shell-Konsole offen? Dann prüfe bitte noch einmal auf der Konsole, ob nun zwei Prozesse laufen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
ps -ef | egrep &#039;(alexa|ssh)&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sollte Dir idealerweise so etwas anzeigen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
fhem     31322     1 99 13:56 ?        00:00:03 alexa                              &lt;br /&gt;
fhem     31332 31322  8 13:56 ?        00:00:00 /usr/bin/ssh -R 1234:127.0.0.1:&amp;lt;zufälliger port&amp;gt; -oServerAliveInterval=90 -p 58824 fhem-va.fhem.de&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;alexa&amp;quot; ist dabei der Node-JS-Prozess, der ssh-Prozess ist die aufgebaute Verbindung zum Vereinsserver.&lt;br /&gt;
&lt;br /&gt;
Wenn Du diese Prozesse &#039;&#039;&#039;nicht&#039;&#039;&#039; siehst oder das Alexa-Device keinen Registrierungskey anzeigt, dann ist leider der Start nicht glatt verlaufen.&lt;br /&gt;
&lt;br /&gt;
Im Logfile (über den link &amp;lt;code&amp;gt;Logfile&amp;lt;/code&amp;gt; in der Detail-Ansicht über &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;, oder über den Namen bei &#039;&#039;currentlogfile&#039;&#039; in den Internals) findest Du idealerweise selber Hinweise, wo es hakt, oder kannst im Forum nachfragen.&lt;br /&gt;
&lt;br /&gt;
=== Geräte im FHEM-Webfrontend zuweisen ===&lt;br /&gt;
Um das Aha-Erlebnis zu vergrößern, ist jetzt ein guter Zeitpunkt, 1 oder besser mind. 2 Geräte für den Alexa-Dienst zuzuweisen. Von Haus aus wird keines Deiner FHEM-Geräte automatisch Alexa zugewiesen!&lt;br /&gt;
&lt;br /&gt;
Wähle die Geräte aus, rufe sie auf und setze das Attribut &amp;quot;alexaName&amp;quot;. Hierbei in Kürze nur der Hinweis:&lt;br /&gt;
* Keine Angst vor Leerzeichen und Umlauten, funktioniert.&lt;br /&gt;
* Große Angst vor Rechtschreibfehlern (Terrasse, Rollladen) oder komplizierten Wörtern &amp;quot;handgebastelte Martinslaterne im Kinderzimmer Iphigenie-Chantal&amp;quot;.&lt;br /&gt;
* Mehrere Namen für dasselbe Gerät/Device in fhem werden unterstützt. Mehrere Namen werden durch &amp;lt;s&amp;gt;Strichpunkt&amp;lt;/s&amp;gt; Komma getrennt&amp;lt;ref&amp;gt;Feature nicht dokumentiert {{Link2Forum|Topic=74041|LinkText=Forumsthread}}&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* Das Attribut &amp;quot;alexaRoom&amp;quot; ist NUR FÜR DEN CUSTOM SKILL relevant. Ausnahme: structure und LightScene Devices, siehe: [[FHEM_Connector_f%C3%BCr_Amazon_Alexa#Was_geht_alles_.3F]].&lt;br /&gt;
&lt;br /&gt;
Lade die Geräte neu in die Software, indem Du &amp;lt;code&amp;gt;set &amp;lt;alexa&amp;gt; restart&amp;lt;/code&amp;gt; ausführst!&lt;br /&gt;
[[Datei:HowToSet alexaName.png|alternativtext=How to set alexaName|ohne|mini|Wie setzt man das Attribut alexaName]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkungen (weil oft gestellte Fragen im Forum) bzgl. Erkennung von Geräten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Wichtig ist, dass die Filtereinstellung in der alexa-fhem.cfg (zu finden unter &amp;quot;Edit Files&amp;quot;) passt.&lt;br /&gt;
Das, was dort eingetragen ist (Standard: alexaName=..* / also es ist ein alexaName vergeben) auch an den entsprechenden Devices in fhem vorhanden ist.&lt;br /&gt;
Stimmt das nicht überein, kann alexa-fhem keine Devices von fhem abfragen/finden.&lt;br /&gt;
Ob der Filter entsprechend funktioniert kann man wie folgt testen: &#039;&#039;list Filtereinstellung&#039;&#039; beispiel mit Standardfilter: &#039;&#039;list alexaName=..*&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Hat alexa-fhem per Filter Devices aus fhem &amp;quot;gefunden&amp;quot;, geht es weiter mit der &amp;quot;Erkennung&amp;quot;. Also um welches Device (Typ und &amp;quot;Fähigkeiten&amp;quot;) handelt es sich. Dazu gilt folgendes:&lt;br /&gt;
** sind entsprechende Readings beim Device vorhanden (z.B. temperature, state mit on/off, ...) erkennt das alexa-fhem automatisch. Die Liste der automatisch erkannten Readings wächst ständig. Daher erst mal schauen ob das Device bereits entsprechend erkannt (typisiert) wurde. Das kann durch prüfen des alexa-fhem-Logs geschehen (NICHT fhem-log!).&lt;br /&gt;
** sind entsprechende &amp;quot;set-Befehle&amp;quot; erkennbar (oft auch durch Readings). Also ist beispielsweise (wie beim Dummy nötig) ein &#039;&#039;setList&#039;&#039; mit entsprechenden Einträgen vorhanden oder entsprechende Readings, z.B. desired-temp zum Stellen der Temperatur etc.&lt;br /&gt;
** wird das Device nicht richtig oder &amp;quot;unvollständig&amp;quot; erkannt helfen folgende Attribute:&lt;br /&gt;
*** genericDeviceType: hiermit kann alexa-fhem in die gewünschte Richtung &amp;quot;geschubbst&amp;quot; werden. Anmerkung: man kann nicht alles erzwingen, Readings bzw. set-Befehle müssen passen (oder per homebridgeMapping passend gemacht werden). Wenn ein genericDeviceType nicht per &amp;quot;Drop-Down&amp;quot; erscheint, dann kann er auch (wenn bekannt) einfach per WEB-cmd eingegeben werden: &#039;&#039;attr Devicename genericDeviceType media&#039;&#039;&lt;br /&gt;
*** homebridgeMapping: hierdurch kann alexa-fhem bei der Erkennung von Zuständen und möglichen Einstellungen (also WAS kann das Device) unterstützt werden. Mittels homebridgeMapping können vorhandene Readings (Zustände) auf für alexa-fhem bekannte Zustände gemappt werden. Ebenso können damit Standard-fhem-Kommandos von alexa-fhem auf Device-spezifische gemappt werden. Beispiel: on/off auf Ein/Aus (falls das Device statt on/off eben ein Ein/Aus erwartet). Zum Beispiel: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;thermostat&amp;gt; homebridgeMapping TargetTemperature=target::target,minValue=18,maxValue=25,minStep=0.5 CurrentTemperature=myTemp:temperature&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; [https://github.com/justme-1968/homebridge-fhem/blob/master/README.md weitere Beispiele]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&#039;&#039;&#039;Mehrere Namen für dasselbe Gerät/Device in fhem sind möglich.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Die Namen werden durch &amp;lt;s&amp;gt;Strichpunkt&amp;lt;/s&amp;gt; Komma getrennt.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;attr dmLampe alexaName Lichtkuppel,Lichtkugel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung bzgl. genericDeviceType und homebridgeMapping:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* diese Attribute werden von verschiedenen &amp;quot;Sprachsteuerungsmodulen&amp;quot; in fhem verwendet (homebridge [dort wurde es &amp;quot;erfunden&amp;quot;], alexa-fhem, gassistant, ...). Daher ist nicht jedes Mapping für alle &amp;quot;Dienste&amp;quot; verwendbar. Ausprobieren schadet aber nicht.&lt;br /&gt;
* ebenso kann man mit diesen Attributen (homebridgeMapping wird gerne so &amp;quot;missbraucht&amp;quot;) nichts erzwingen, was seitens Amazon/Alexa nicht unterstützt bzw. verstanden wird! D.h. zunächst ist zu prüfen, ob ein bestimmter (gewünschter) Sprachbefehl seitens Amazon/Alexa unterstützt wird! Aktuelles Beispiel (Stand Jan 2020): &amp;quot;Alexa, fahre den Rollo hoch/runter&amp;quot;. Da ist Amazon/Alexa gerade dabei etwas zu tun. Bislang wird das nicht unterstützt, also ist das auch mit einem entsprechenden homebridgeMapping nicht zu erzwingen! Was unterstützt wird kann man bei Amazon nachlesen: [https://developer.amazon.com/es-ES/docs/alexa/device-apis/list-of-interfaces.html]&lt;br /&gt;
&lt;br /&gt;
== Finale: Skill verknüpfen ==&lt;br /&gt;
Suche auf der Alexa-App den Skill &amp;quot;FHEM Connector&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Wenn du noch nicht bei Amazon angemeldet bist, erwartet Amazon zunächst, dass Du Dich normal bei Amazon anmeldest.&lt;br /&gt;
&lt;br /&gt;
Sobald Du &amp;quot;FHEM Connector&amp;quot; aktivierst, öffnet sich ein Browser-Tab mit folgender Maske:&amp;lt;br /&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
[[Datei:FHEMlazy_login.png|240px]]&lt;br /&gt;
&lt;br /&gt;
Hier kopierst Du Deinen Anmeldeschlüssel (im Klartext!) hinein, den du mittels &amp;quot;get alexa proxyKey&amp;quot; erhalten hast, und klickst auf Check. Als glücklicher Mensch ist auf der folgenden Statusseite alles grün:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Datei:FHEMlazy_check.png|240px]]&lt;br /&gt;
&lt;br /&gt;
Im Einzelnen wird hier geprüft, ob Du per SSH verbunden bist (und auch Deine IP zur Sicherheit angezeigt), ob der Reverse-Tunnel steht, ob nodeJS erreichbar ist und wie viele Geräte Alexa gleich finden sollte (in meinem Fall 22).&lt;br /&gt;
&lt;br /&gt;
Sollte etwas nicht grün sein und Du eine Idee zum Fixen haben, kannst Du mit &amp;quot;Retry&amp;quot; neue Versuche auslösen.&lt;br /&gt;
&lt;br /&gt;
Ist alles okay, klicke rechts den Button &amp;quot;Activate Skill&amp;quot;. Du springst damit wieder zurück zu Amazon, die Dir hoffentlich zur erfolgreichen Verknüpfung gratulieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;s&amp;gt;Amazon möchte nun unmittelbar die Gerätesuche starten, und unter SmartHome-Geräte sollten diese nun auftauchen.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Als Abschluss muss man nur noch in ein Echo-Gerät seiner Wahl die Anweisung: &amp;quot;&#039;&#039;Alexa suche smarte Geräte&#039;&#039;&amp;quot; sprechen und schon sollten die oben genannten Geräte gefunden werden und in der APP als Geräte auftauchen.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Was geht alles ? ==&lt;br /&gt;
&lt;br /&gt;
* Geräte, die sich ein- und ausschalten lassen:&lt;br /&gt;
** Automatisch: Müssen &amp;lt;code&amp;gt;set on&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set off&amp;lt;/code&amp;gt; Kommandos haben&lt;br /&gt;
** dummys müssen &amp;lt;code&amp;gt;setList&amp;lt;/code&amp;gt; mit on und off haben&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; switch bzw. light kann bestimmt werden ob es in alexa als Schalter oder Licht behandelt wird.&lt;br /&gt;
** Wenn die Set-Kommandos im FHEM Device anders benannt sind: homebridgeMapping On:cmdOn=&amp;lt;ein&amp;gt;,cmdOff=&amp;lt;aus&amp;gt; setzen&lt;br /&gt;
** Kommandos:&lt;br /&gt;
***Alexa, schalte &amp;lt;name&amp;gt; ein/aus&lt;br /&gt;
***Alexa, Licht an/aus&lt;br /&gt;
***Alexa, schalte &amp;lt;gruppe&amp;gt; ein/aus&lt;br /&gt;
* Geräte, die eine Temperatur messen&lt;br /&gt;
** Automatisch: Es muss ein Reading &amp;lt;code&amp;gt;temperature&amp;lt;/code&amp;gt; geben&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; thermometer&lt;br /&gt;
** Sonst: homebridgeMapping CurrentTemperature:reading=&amp;lt;reading&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Helligkeit sich ändern lässt&lt;br /&gt;
** Automatisch: wenn &amp;lt;code&amp;gt;dim&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;pct&amp;lt;/code&amp;gt; Kommandos erkannt werden&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; light&lt;br /&gt;
** Über homebridgeMapping: Wenn &amp;lt;code&amp;gt;helligkeit&amp;lt;/code&amp;gt; das Reading für die aktuelle Helligkeit enthält und die Helligkeit mit &amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; prozent xxx&amp;lt;/code&amp;gt; gesetzt wird, sieht das homebridgeMapping wie folgt aus: homebridgeMapping Brightness=helligkeit::prozent,minValue=0,maxValue=&amp;lt;maximalwert&amp;gt;&lt;br /&gt;
** Kommandos:&lt;br /&gt;
*** Alexa, mache &amp;lt;name&amp;gt; heller/dunkler&lt;br /&gt;
*** Alexa, Licht heller/dunkler&lt;br /&gt;
* Geräte, deren Farbe sich ändern lässt&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Farbtemperatur sich ändern lässt&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, bei denen sich eine Lautstärke einstellen lässt&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, bei denen sich ein prozentualer Wert einstellen lässt&lt;br /&gt;
** Automatisch: wenn &amp;lt;code&amp;gt;dim&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;pct&amp;lt;/code&amp;gt; Kommandos erkannt werden&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* elektrische Türschlösser&lt;br /&gt;
** &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt;: lock&lt;br /&gt;
** homebridgeMapping mit LockCurrentState und LockTargetState&lt;br /&gt;
&lt;br /&gt;
* Thermostate&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; thermostate&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* structure Devices aus FHEM (ab alexa-fhem version 0.5.7)&lt;br /&gt;
** können mit &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; scene als Szene eingebunden werden&lt;br /&gt;
** über &amp;lt;code&amp;gt;alexaRoom&amp;lt;/code&amp;gt; kann der name um einen Ort ergänzt werden&lt;br /&gt;
** Szenen aus einer structure lassen sich ein- und ausschalten&lt;br /&gt;
** Wichtig:&lt;br /&gt;
*** Ein Skill darf nur 12 Szenen automatisch erkennen und einbinden.&lt;br /&gt;
&lt;br /&gt;
* LightScene Devices aus FHEM (ab alexa-fhem version 0.5.8)&lt;br /&gt;
** können mit &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; scene als Szenen eingebunden werden&lt;br /&gt;
** über &amp;lt;code&amp;gt;alexaRoom&amp;lt;/code&amp;gt; kann der name um einen Ort ergänzt werden&lt;br /&gt;
** Szenen aus einer LightScene lassen sich nur einschalten&lt;br /&gt;
** Wichtig:&lt;br /&gt;
*** Ein Skill darf nur 12 Szenen automatisch erkennen und einbinden.&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Kanal sich umschalten lässt (ab alexa-fhem version 0.5.13)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; media&lt;br /&gt;
** homebridgeMapping ChannelController:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt;&lt;br /&gt;
** Erlaubte Werte siehe hier: https://developer.amazon.com/de/docs/device-apis/alexa-channelcontroller.html#changechannel&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Playback status sich schalten lässt (ab alexa-fhem version 0.5.13)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; media&lt;br /&gt;
** homebridgeMapping PlaybackController:playback,values=Play;Pause;Stop;Previous;Next&lt;br /&gt;
** Erlaubte Werte siehe hier: https://developer.amazon.com/de/docs/device-apis/alexa-playbackcontroller.html#discovery&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Eingang sich umschalten lässt (ab alexa-fhem version 0.5.13)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; media&lt;br /&gt;
** homebridgeMapping InputController:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt;,values=HDMI+1;HDMI+2;XBOX&lt;br /&gt;
** Erlaubte Werte siehe hier: https://developer.amazon.com/de/docs/device-apis/alexa-property-schemas.html#input&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Kontaktsensoren (ab alexa-fhem version 0.5.15)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; contact&lt;br /&gt;
** homebridgeMapping ContactSensorState:reading=&amp;lt;reading&amp;gt; oder CurrentDoorState:reading=&amp;lt;reading&amp;gt;&lt;br /&gt;
** Die Anzeige in der Alexa-App funktioniert sofort, die Abfrage per Sprache erst ab Version 0.5.27.&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Lautstärke sich ändern lässt (ab alexa-fhem version 0.5.24)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; speaker&lt;br /&gt;
** Automatisch: es muss ein Reading &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; und/oder &amp;lt;code&amp;gt;mute&amp;lt;/code&amp;gt; geben&lt;br /&gt;
** homebridgeMapping Volume:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt; Mute:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt;&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, die sich ein- (und optional) ausschalten lassen als Szene (ab alexa-fhem version 0.5.26)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; scene&lt;br /&gt;
** Automatisch: Müssen &amp;lt;code&amp;gt;set on&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set off&amp;lt;/code&amp;gt; Kommandos haben&lt;br /&gt;
** homebridgeMapping On:reading=&amp;lt;reading&amp;gt;,cmdOn=&amp;lt;cmd&amp;gt;[,cmdOff=&amp;lt;cmd&amp;gt;]&lt;br /&gt;
** Hinweis: Fehlende Kommandos lassen sich mit cmdalias erzeugen&lt;br /&gt;
** Wichtig:&lt;br /&gt;
*** Ein Skill darf nur 12 Szenen automatisch erkennen und einbinden.&lt;br /&gt;
* Rollläden. Lange ein Problemthema, das nur mit &amp;quot;Schalte auf 0%, schalte auf 100% lief&amp;quot;. Wichtig: &amp;quot;alexa-fhem&amp;quot; ab Version 0.5.39 einsetzen. GenericDevice-Type auf &amp;quot;blind&amp;quot; setzen. Nach Restart von alexa-fhem und neuer Gerätesuche sollte folgendes funktionieren:&lt;br /&gt;
** &amp;quot;..., öffne &amp;lt;Name&amp;gt; ganz&amp;quot;&lt;br /&gt;
** &amp;quot;..., schließe &amp;lt;Name&amp;gt; komplett&amp;quot;&lt;br /&gt;
** &amp;quot;hoch&amp;quot; und &amp;quot;runter&amp;quot; (ohne &amp;quot;ganz&amp;quot; oder &amp;quot;komplett&amp;quot;) schalten jeweils nur einen bestimmten Prozentsatz hoch oder runter. Dieser kann mit &amp;lt;code&amp;gt;attr &amp;lt;name&amp;gt; homebridgeMapping TargetPosition:minStep=&amp;lt;wert&amp;gt;&amp;lt;/code&amp;gt;geändert werden. Aber Achtung: In diesem Intervall kann dann auch nur noch ein absoluter Prozentwert per Sprache oder Slider eingestellt werden! Bei z.B. 25% würden 13% zu 25% aufgerundet, 12% zu 0% abgerundet werden.&lt;br /&gt;
* Kontaktsensoren (ab alexa-fhem version 0.5.47)&lt;br /&gt;
** Automatisch wenn ein Reading &amp;lt;code&amp;gt;motion&amp;lt;/code&amp;gt; vorhanden ist oder es sich um einen Zigbee bewgungsmelder an einer HUE oder deCONZ Bridge handelt&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; MotionSensor&lt;br /&gt;
** homebridgeMapping MotionDetected:reading=&amp;lt;reading&amp;gt;,values=&amp;lt;wert für bewgung&amp;gt;:1;&amp;lt;wert für keine bewegung&amp;gt;:0&lt;br /&gt;
&lt;br /&gt;
* Alarmmelder (noch nicht in Deutschland):&lt;br /&gt;
** genericDeviceType Security&lt;br /&gt;
** homebridgeMapping Alarm=&amp;lt;reading&amp;gt;[,type=[fireAlarm|waterAlarm|burglaryAlarm|carbonMonoxideAlarm]]&lt;br /&gt;
** wenn der type nicht angegeben wird ist fireAlarm der default&lt;br /&gt;
** automatisch werden 0, ok und alles was mit no anfängt als OK erkannt. alles andere gilt als ALARM.&lt;br /&gt;
*Geräte mit mehrstufigen Modi:&lt;br /&gt;
**siehe den zugehörigen Thread im Forum: {{Link2Forum|Topic= 125604}}&lt;br /&gt;
&lt;br /&gt;
Es werden noch einige andere häufig verwendete Geräte (Homematic, hue,...) automatisch erkannt.&lt;br /&gt;
&lt;br /&gt;
to be continued ...&lt;br /&gt;
&lt;br /&gt;
In der [https://developer.amazon.com/docs/device-apis/list-of-interfaces.html List of Capability Interfaces] bei Amazon kann man sehen, welche Möglichkeiten das Smart Home Skill API aktuell in einzelnen Ländern bietet. Leider ohne die jeweiligen landessprachlichen Kommandos.&lt;br /&gt;
&lt;br /&gt;
=== Aktiv Routinen starten ===&lt;br /&gt;
Routinen (eine Funktionalität, die rein - genauso wie &amp;quot;Räume&amp;quot; - bei Amazon liegt und nicht von FHEM Connector beeinflusst wird) waren lange die ewige Antwort auf die Frage: &amp;quot;Meine Frau möchte aber &#039;&#039;&#039;Öffne Rollläden&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; sagen&amp;quot;: In der Alexa-App gibt es im Menü den Punkt &amp;quot;Routinen&amp;quot;, und hier lässt sich eine gewisse Anzahl von Aktionen (unter optionalen Bedingungen) an ein Sprachkommando knüpfen.&lt;br /&gt;
&lt;br /&gt;
Neu: Routinen können inzwischen auch von Skills getriggert werden, und seit Version 0.5.47 (Februar 2020) auch von FHEM Connector. Das braucht niemand, um die Rollläden hochzufahren, denn das kann FHEM ja selber, aber um z.B. eine Ansage auf einem Alexa-Gerät zu triggern. Dafür gibt es auch das FHEM-Modul &amp;quot;echodevice&amp;quot;, aber es erfordert ein paar Klimmzüge. Mit dem aktiven Triggern von Routinen kann FHEM auslösen, dass Alexa ungefragt (!) Dinge wie &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;Die Temperatur in der Tiefkühltruhe hat -16 Grad überschritten&amp;quot;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
in den Raum sagt. Also eine Alternative bzw. Ergänzung zu Alarmen / Erinnerungen per Telegram o.ä.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorgeschichte&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Die Smarthome-Skill-API von Amazon sah schon lange das &amp;quot;proactiveReporting&amp;quot; vor: Also z.B. die gemessene Temperatur nicht erst auf Anfrage hin zu übermitteln, sondern laufend aktiv zu pushen. Aber warum Daten an Amazon senden, wenn es dafür keinen Mehrwert gibt? Beim Öffnen z.B. des Thermostaten in der Alexa-App kommen ohnehin laufend Statusabfragen. Warum also einen Datenpool bei Amazon über die Haustemperatur aufbauen und Änderungen pushen, wenn es keinen Mehrwert dafür gibt? &lt;br /&gt;
&lt;br /&gt;
Inzwischen lassen sich (reale oder vermeintliche) Änderungen von &#039;&#039;Bewegungssensoren&#039;&#039; und &#039;&#039;Fensterkontakten&#039;&#039; als Startbedingung an Alexa-Routinen koppeln. Man kann in der Alexa-App (ggf. fiktive) Öffnen eines Fensterkontaktes an das Aufsagen eines freien Textes durch die Hausbutlerin knüpfen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Umsetzung&#039;&#039;&#039;:&lt;br /&gt;
* Jedes Alexa-Device, dessen Status aktiv zu Amazon gepusht werden soll, im Attribut &amp;quot;alexaProactiveEvents&amp;quot; mit einer &amp;quot;1&amp;quot; versehen. Per Default wird &#039;&#039;kein&#039;&#039; Gerät laufend aktiv zu Amazon gepusht!&lt;br /&gt;
* das geänderte Device einmal zu Amazon pushen &amp;quot;set &amp;lt;alexa&amp;gt; add &amp;lt;device&amp;gt;&amp;quot; (oder &#039;Alexa, suche neue Geräte&#039; murmeln)&lt;br /&gt;
* Das Gerät sollte jetzt beim Anlegen einer neuen Routine (&amp;quot;Neue Routine&amp;quot;, &amp;quot;Wenn Folgendes passiert&amp;quot;, &amp;quot;Smart Home&amp;quot;) als möglicher Triggerpunkt erscheinen.&lt;br /&gt;
&lt;br /&gt;
==== Dummygeräte: ====&lt;br /&gt;
Ein Dummydevice sollte einen Kontaktschalter oder Bewegungssensor simulieren, um dann in FHEM eine beliebige Bedingung als Trigger zu definieren, und eine freie Ansage in Alexa als Routine zu definieren. Hier ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
define voicetrigger1 dummy&lt;br /&gt;
attr voicetrigger1 alexaName alle Fenster&lt;br /&gt;
attr voicetrigger1 alexaProactiveEvents 1&lt;br /&gt;
attr voicetrigger1 genericDeviceType contact&lt;br /&gt;
attr voicetrigger1 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED&lt;br /&gt;
attr voicetrigger1 setList open closed&lt;br /&gt;
&lt;br /&gt;
set alexa add voicetrigger1&lt;br /&gt;
set alexa restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fehlersuche:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Push setzt ein intaktes Push-Token voraus. Sollte im Alexa-Logfile Folgendes erscheinen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;failed to refresh token: invalid_grant: &#039;The request has an invalid grant parameter : refresh_token&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
so ist das Push-Token nicht aktuell. Weil die Auswirkung lange nur war, dass Geräteänderungen nicht aktiv an Amazon gemeldet wurden, gibt es noch keine umfassende Analyse des Problems. Es lässt sich lösen, indem eine oder beide folgenden Aktionen ausgeführt werden:&lt;br /&gt;
* Löschen des &amp;quot;.eventToken&amp;quot; im Alexa-Device über &amp;quot;deletereading&amp;quot;&lt;br /&gt;
* &amp;quot;FHEM-Connector&amp;quot;-Skill auf &amp;quot;alexa.amazon.de&amp;quot; einmal deaktivieren und dann neu verbinden&lt;br /&gt;
&lt;br /&gt;
== Mögliche Probleme und Lösungen ==&lt;br /&gt;
&lt;br /&gt;
Es kann vorkommen, dass Geräte zwar korrekt erkannt werden, aber das durch Alexa erkannte Kommando nicht richtig umgesetzt wird (Beispiel - mittlerweile behoben: {{Link2Forum|Topic=96766}}). Neben dem FHEM-Log gibt es noch das Logfile, welches von alexa-fhem angelegt wird. &lt;br /&gt;
&lt;br /&gt;
=== Fehlersuche über die FHEM-Oberfläche ===&lt;br /&gt;
&lt;br /&gt;
* alexa-fhem Logfile anschauen (Detail-Ansicht des &amp;lt;alexa&amp;gt;-Device aufrufen, klick auf &#039;&#039;&#039;Logfile&#039;&#039;&#039; oben)&lt;br /&gt;
* alexa-fhem im Debug-Modus aufrufen:&lt;br /&gt;
** -D zum alexaFHEM-params attribut hinzufügen&lt;br /&gt;
** Alexa-Befehl auslösen&lt;br /&gt;
** -D aus dem alexaFHEM-params attribut entfernen&lt;br /&gt;
* Die notwendigen Informationen finden sich in dem alexa-Logfile (siehe oben)&lt;br /&gt;
&lt;br /&gt;
=== Fehlersuche über Kommandozeile (lies: Shell) + FHEM-Oberfläche ===&lt;br /&gt;
&lt;br /&gt;
:* set &amp;lt;alexa&amp;gt; stop (FHEM-Oberfläche)&lt;br /&gt;
:* Auf der Kommandozeile &amp;lt;code&amp;gt;alexa-fhem -D -c /opt/fhem/alexa-fhem.cfg &amp;gt; debug.log&amp;lt;/code&amp;gt; starten (dadurch wird die Datei debug.log erzeugt im aktuellen Verzeichnis)&lt;br /&gt;
:* Alexa-Befehl auslösen&lt;br /&gt;
:* alexa-fhem auf der Kommandozeile wieder stoppen (CTRL-C)&lt;br /&gt;
:* set &amp;lt;alexa&amp;gt; start (FHEM-Oberfläche)&lt;br /&gt;
&lt;br /&gt;
Die Datei debug.log sollte Hinweise enthalten, wie das Problem zu lösen ist oder Dich zumindest in die richtige Richtung schieben.&lt;br /&gt;
&lt;br /&gt;
Im Beispiel aus dem Forum fand sich in dem Logfile der Hinweis darauf, dass das Device mit falschen min/max-Werten unterwegs war.&lt;br /&gt;
&lt;br /&gt;
=== Registrierungskey vergessen, Registrierung zurücksetzen ===&lt;br /&gt;
&lt;br /&gt;
Auf der Kommandoshell:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
pi@raspberrypi:~# sudo -u fhem ssh -p 58824 fhem-va.fhem.de status&lt;br /&gt;
Registered.&lt;br /&gt;
Registered on 2019-01-13T15:38:13Z.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
heisst, das der Vereinsserver eigentlich alles hat, was er will. Es wird kein neuer Schlüssel generiert.&lt;br /&gt;
Wenn Du die Situation zurücksetzen möchtest, wäre die hässliche Methode, Deinen SSH-Key zu löschen. Eleganter ist, die Registrierung auf Vereinsseite zu löschen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
pi@raspberrypi:~# sudo -u fhem ssh -p 58824 fhem-va.fhem.de unregister&lt;br /&gt;
Your registration has been removed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
löscht Deinen Schlüssel mitsamt allen dort gespeicherten Daten auf Vereinsseite. Bei Restart von alexa-fhem in FHEM-WEB wird jetzt ein neuer Registrierungskey angefordert.&lt;br /&gt;
&lt;br /&gt;
== Sicherheitskonzept und Secrets ==&lt;br /&gt;
&lt;br /&gt;
Um diesen Abschnitt zu verstehen, solltest Du den Abschnitt &amp;quot;Arbeitsweise&amp;quot; im Kopf haben. Einerseits ist Dir vermutlich einleuchtend, dass ein Server, der per SSH rückwärts nur ausgewählte Kommandos in den Tunnel, den Du aufgebaut hast, leitet, &amp;quot;irgendwie sicherer&amp;quot; ist. Andererseits möchte man nicht blind vertrauen.&lt;br /&gt;
&lt;br /&gt;
=== SSH ===&lt;br /&gt;
==== SSH - macht das nichts Gefährliches? ====&lt;br /&gt;
SSH ist ein Veteran des Internet und entstand, um sich sicher (verschlüsselt) und schnell auf Servern einzuloggen. Schon früh wurde dabei der sogenannte &amp;quot;Reverse-Tunnel&amp;quot; implementiert: Also der vom Client (Deinem Rechner) geäußerte Wunsch: &amp;quot;Bitte leite mir Requests, die bei Dir, Server, auf Port xy eingehen, an meinen lokalen Port yz weiter.&amp;quot;. Dieses Verfahren implementiert der Reverseproxy, wobei tatsächlich auf dem Server für Dich kein echter Port geöffnet wird.&lt;br /&gt;
&lt;br /&gt;
Wie Dir ggf. sicher der Unix-Guru Deines Vertrauens bestätigen wird: Die Kombination&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
ssh -R 1234:localhost:&amp;lt;zufälliger port&amp;gt; zielserver &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
erlaubt keine Ausführung von Shell-Kommandos auf Deinem Server, sondern einzig, dass vom SSH-Programm Verbindungen zu einem lokalen Port auf Deinem Server auf dem alexa-fhem lauscht aufgebaut werden. Du kannst also z.B. mit einem&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 /usr/sbin/tcpdump -X -s 0 -i lo port &amp;lt;zufälliger port&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
vollständig überwachen (oder ggf. permanent aufzeichen), was auf Deinem Server von außen gesteuert passiert.&lt;br /&gt;
&lt;br /&gt;
==== Wie wird bei SSH verschlüsselt? ====&lt;br /&gt;
Im Prinzip wie im Web auf SSL-Seiten, teils mit den gleichen Verschlüsselungsverfahren. Allerdings arbeitet SSH eher wie das im Web recht seltene Verfahren: Bei jeder Verbindung übermitteln sowohl Server wie auch Client den öffentlichen Teil ihres Schlüssels. Anders als im Web wird der Schlüssel aber nicht von einer öffentlichen Zertifizierungsstelle wie &amp;quot;LetsEncrypt&amp;quot; unterschrieben. Stattdessen entscheiden Server wie Client beim ersten Verbindungsaufbau typischerweise per manueller Frage: &amp;quot;Willst Du jetzt und künftig diesem Schlüssel vertrauen?&amp;quot; Bei der Installation wird diese Frage für Deine Seite bejaht, und fortan wird der öffentliche Schlüssel des FHEM-Servers auf Deinem Rechner gespeichert. Ab da bist Du z.B. davor sicher, dass jemand den DNS-Eintrag verbiegt oder sich in den Datenfluss Deines Providers einhängt: Ein geänderter Serverschlüssel würde bemerkt werden.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Soweit klar? Aus Deinem öffentlichen Schlüssel wiederum leitet der Server her: &amp;quot;Das ist definitiv wieder derjenige, der sich damals &amp;quot;registriert&amp;quot; hat&amp;quot;. Und an dieser Stelle kann ich auch den &amp;lt;b&amp;gt;ersten Teil des 3-teiligen Registrierungskeys&amp;lt;/b&amp;gt; erläutern: Die typischerweise 6-stellige Hex-Zahl am Anfang ist der Java-Hashcode Deines öffentlichen Schlüssel. Sie ist damit sozusagen Deine aus Deinem öffentlichen Schlüssel abgeleitete Benutzer-ID.&lt;br /&gt;
&lt;br /&gt;
=== Die Rolle der Secrets ===&lt;br /&gt;
Wenn jetzt klar ist, dass die Verbindung zum Vereinsserver sicher und vertauschungsfrei funktioniert, bleiben noch 2 Probleme zu lösen:&lt;br /&gt;
1) Im Web bei der Skill-Aktivierung musst Du beweisen, dass Du der Mensch am Browser bist, dem der SSH-Tunnel von IP xy mit dem öffentlichen Schlüssel X gehört. Bei der automatischen Registrierung werden lokal auf Deinem Rechner zwei 64-Bit-Secrets generiert:&lt;br /&gt;
* Das &amp;lt;b&amp;gt;Anmelde&amp;lt;/b&amp;gt;-Secret&lt;br /&gt;
* Das &amp;lt;b&amp;gt;Bearer&amp;lt;/b&amp;gt;-Token&lt;br /&gt;
Beim Anmelden des SSH-Keys auf dem öffentlichen Server wird nun der &amp;lt;b&amp;gt;Hashwert&amp;lt;/b&amp;gt; des ersten Secrets übertragen und dort in Verbindung mit Deinem öffentlichen Schlüssel gespeichert. Ein Hashwert bedeutet, dass (sofern das Verfahren, hier SHA256, funktioniert), niemand aus dem Hash das Secret zurückrechnen kann. Ein Datenbankklau auf dem Server gefährdet also nicht die Sicherheit Deines Passwortes.&lt;br /&gt;
&lt;br /&gt;
Wenn Du nun beim Skill-Aktivieren den Registrierungskey eingibst, dann &amp;quot;sieht&amp;quot; der Server zum ersten Mal Dein ausgewürfeltes Secret, vergleicht es mit dem Hashwert und wird es anschließend wieder umgehend vergessen. Anhand des Hashwertes kann der Server aber entscheiden, dass Du der legitime Nutzer zum öffentlichen Schlüssel XY bist.&lt;br /&gt;
&lt;br /&gt;
2) Das zweite Problem ist: Wie soll Amazon &amp;quot;beweisen&amp;quot;, dass sie der legitime Aufrufer sind? Amazon erhält binnen wenigen Sekunden nach dem Klick auf &amp;quot;Activate Skill&amp;quot; den &amp;lt;b&amp;gt;dritten Teil&amp;lt;/b&amp;gt; des Registrierungskeys als sogenanntes Bearer-Token. Zwar läuft er durch den Registrierungsserver, er wird dort, auf dem Registrierungs/Vereinsserver aber nicht gespeichert. Das Bearer-Token wird von Amazon bei allen Requests zu Deinem Server mitgesendet. Da es am Anfang zusätzlich Deine &amp;quot;User-ID&amp;quot; enthält, weiß der Vereinsserver, zu welchem SSH-Tunnel der Request zu senden ist. Aber lokal auf Deinem Rechner wird ausgewertet, ob das Token &amp;quot;stimmt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== alexa-fhem Updaten bzw. &amp;quot;Upgraden&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updaten einer &amp;quot;Connector&amp;quot; Installation:&#039;&#039;&#039;&lt;br /&gt;
* alexa-fhem über FHEM anhalten (Name des Alexa-Device: alexa):&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;set alexa stop&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Auf der Konsole wie anfangs bei der Installation:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;sudo npm update -g alexa-fhem&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Manchmal hat npm Probleme mit einem Update. Dann einfach die aktuelle Version noch mal drüber Installieren: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;sudo npm install -g alexa-fhem&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*alexa-fhem über FHEM wieder starten:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;set alexa start&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Upgraden von einer &amp;quot;Nicht-Connector&amp;quot; Installation (z.B. manuelle Installation per pm-Download):&#039;&#039;&#039;&lt;br /&gt;
* Daten der aktuellen Installation sichern (v.a. config.json / man weiß ja nie)&lt;br /&gt;
* Autostart der aktuellen alexa-fhem Installation deaktivieren:&lt;br /&gt;
** Bei initd: Service deaktivieren mittels: &amp;lt;code&amp;gt;sudo update-rc.d -f alexa remove&amp;lt;/code&amp;gt; Vorher mittels stoppen: &amp;lt;code&amp;gt;sudo service alexa stop&amp;lt;/code&amp;gt; Startscript unter /etc/init.d/ löschen.&lt;br /&gt;
** Bei systemd: Service deaktivieren mittels: &amp;lt;code&amp;gt;sudo systemctl disable alexa&amp;lt;/code&amp;gt; Vorher mittels stoppen: &amp;lt;code&amp;gt;sudo systemctl alexa stop&amp;lt;/code&amp;gt; Startscript unter /etc/systemd/system/ löschen.&lt;br /&gt;
* ALLE vorhandenen alexa-fhem Daten LÖSCHEN! Bleiben Dinge zurück und wird dann laut Connector installiert kann es zu Problemen kommen!&lt;br /&gt;
* (reboot)&lt;br /&gt;
* Installation von alexa-fhem laut Anleitung (Beginn dieses Wiki)&lt;br /&gt;
* Falls eigene Dinge von früher genutzt werden wollen/sollen (z.B. Custom Skill), dann die entsprechenden Einträge aus der gesicherten config.json in die neu angelegte alexa-fhem.cfg (zu finden unter &amp;quot;Edit files&amp;quot;) übernehmen.&lt;br /&gt;
* Werden keine eigenen Dinge verwendet, dann kann der Port (Standard: 3000) geschlossen werden und auch die Daten unter Amazon-Developer können gelöscht werden.&lt;br /&gt;
&lt;br /&gt;
== Bug- und Wunschliste ==&lt;br /&gt;
* Ist beim Start keine Internetverbindung vorhanden, erfolgt kein Retry -- alexa-fhem muss restartet werden (ssh_autoconfig wertet keine temporären Fehler aus)&lt;br /&gt;
&lt;br /&gt;
==Weitergehende Informationen==&lt;br /&gt;
*[[Alexa und Mappings]]&lt;br /&gt;
*[[Alexa Tipps und Kniffe]]&lt;br /&gt;
*[[FHEM Connector for Amazon Alexa]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Sprachsteuerung]]&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hapege</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHEM_Connector_f%C3%BCr_Amazon_Alexa&amp;diff=40437</id>
		<title>FHEM Connector für Amazon Alexa</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FHEM_Connector_f%C3%BCr_Amazon_Alexa&amp;diff=40437"/>
		<updated>2025-10-14T14:00:22Z</updated>

		<summary type="html">&lt;p&gt;Hapege: /* Alexa-FHEM installieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Alexa FHEMlazy&#039;&#039;&#039; war historisch ein Fork des Original [[Alexa-Fhem|alexa-fhem]], der im Januar 2019 mit dem Original zusammengeführt wurde und nun als &#039;&#039;&#039;FHEM Connector&#039;&#039;&#039; verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
Er ermöglicht innerhalb von Minuten die Verknüpfung von FHEM mit einem Amazon Echo Gerät. Auch Geräte anderer Hersteller mit verbauten Mikrofonen und Alexa-Sprachassistenten-Unterstützung sollten problemlos funktionieren. Für folgende Geräte ist dies bspw. der Fall (Falls Ihr andere/weitere Gerätemodelle bzw. Hersteller in Verwendung habt, bitte hier pflegen):&lt;br /&gt;
&lt;br /&gt;
* SONOS Beam und SONOS One   &lt;br /&gt;
&lt;br /&gt;
Gegenüber dem klassischen Ansatz ergeben sich Einschränkungen, so läuft die Software normalerweise unter dem gleichen Benutzer wie FHEM auf dem gleichen Server, und es wird z.Zt. nur der Smarthome-Skill unterstützt (die Variante, bei der die Möglichkeiten der Interaktion von Amazon festgelegt wurden).&lt;br /&gt;
Dafür ist weder ein Developer-Account bei Amazon, eigene Lambda- und Skillfunktionen, noch das Öffnen eines eingehenden Ports aus dem Internet nötig. &lt;br /&gt;
* Die Software integriert einen Installer, der die Erstkonfiguration und Anmeldung übernimmt&lt;br /&gt;
* Die Kommunikation zur Software auf dem heimischen Rechner und dann zu FHEM verläuft über SSH und einen vom FHEM-Verein gehosteten Server&lt;br /&gt;
* Funktioniert mit IPv4, IPv6, echtem Dual Stack und DS-Lite&lt;br /&gt;
* Als Skill bei Amazon wird der Skill &amp;quot;FHEM Connector&amp;quot; verwendet.&lt;br /&gt;
&lt;br /&gt;
Der Thread im Forum zur Software ist hier: {{Link2Forum|Topic=94817}}.&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Einfache Anbindung von FHEM an Amazon Assistent Alexa&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=alexa&lt;br /&gt;
|ModTechName=39_alexa.pm / alexa-fhem&lt;br /&gt;
|ModForumArea=Frontends/Sprachsteuerung&lt;br /&gt;
|ModOwner=gvzdus, André/ justme1968 ({{Link2FU|430|Forum}} / [[Benutzer Diskussion:Justme|Wiki]])&lt;br /&gt;
}} &lt;br /&gt;
==Einführung==&lt;br /&gt;
===Arbeitsweise und Datenfluss===&lt;br /&gt;
Vorläufig ist alexa-fhem im &amp;quot;FHEM Connector-Modus&amp;quot; ein reiner [https://developer.amazon.com/de/docs/smarthome/understand-the-smart-home-skill-api.html SmartHome-Skill].&lt;br /&gt;
SmartHome-Skills erhalten weder die Sprachdaten selber noch das, was Amazon in Textform verstanden hat, sondern vielmehr extrahiert Amazon aus dem verstandenen Text Anweisungen und Abfragen für Geräte, die dann an den Skill übermittelt werden. Charmant ist dabei, dass unmittelbar gefragt werden kann &amp;quot;Alexa, wie ist die Temperatur im Wohnzimmer?&amp;quot;, während andere Skills zunächst explizit angesprochen werden müssen (&amp;quot;Alexa, frage FHEM nach der Temperatur im Wohnzimmer&amp;quot;). Außerdem kann der Nutzer mehrere Smarthome-Skills installieren, und die Geräte werden zu einer Gesamtmenge zusammengefasst.&lt;br /&gt;
&lt;br /&gt;
Gehen wir den Datenfluss bei der konkreten Frage &amp;quot;Wie ist die Temperatur im Wohnzimmer?&amp;quot; durch:&lt;br /&gt;
* Alexa hat bei der Skillinstallation gelernt, dass &amp;quot;FHEM Connector&amp;quot; bei Dir einen Thermostaten im Raum Wohnzimmer kennt. Dadurch wird bei der Sprachanalyse von &amp;quot;Alexa Voice Service&amp;quot; in der Cloud erkannt, dass eine Abfrage an &amp;quot;FHEM Connector&amp;quot; erfolgversprechend ist.&lt;br /&gt;
* Zunächst wird die zentrale &amp;quot;Lambda-Funktion&amp;quot; von &amp;quot;FHEM Connector&amp;quot; aufgerufen. Die Funktion leitet aber im Kern nur den Request unverändert an den vom Verein bereitgestellten Server weiter. Im Request enthalten ist ein Token, das sogenannte &amp;quot;Bearer-Token&amp;quot;.&lt;br /&gt;
* Der &amp;quot;Vereinsserver&amp;quot; prüft anhand dieses Tokens, ob es überhaupt bekannt ist, und zu welchem Nutzer es gehört. Ist dieser Nutzer verbunden, wird der Request wiederum quasi unverändert an den Nutzer weitergeleitet.&lt;br /&gt;
* Diese Weiterleitung passiert über einen sogenannten SSH-Reverse-Tunnel, der von Deiner Seite und der Software auf dem FHEM-Tunnel automatisch aufgebaut wird.&lt;br /&gt;
* Auf Deiner Seite läuft die eigentliche Software, und zwar unter nodeJS. nodeJS ist ein Javascript ausführender Miniserver, der lokal auf einem Zufallsport auf Requests &amp;quot;lauscht&amp;quot;. In der Original-Version  [[Alexa-Fhem|Alexa FHEM]] kommen die Requests aus dem Internet (hoffentlich von der eigenen Lambda-Funktion), hier bei &amp;quot;FHEM Connector&amp;quot; kommen sie ausschließlich aus dem SSH-Tunnel von lokal.&lt;br /&gt;
* Die Software validiert nun diesen Request anhand des Bearer-Tokens. Konkret wird dabei das bei der Installation generierte Token, dass bei der Skill-Aktivierung an Amazon übertragen wurde, mit dem lokal gespeicherten Wert verglichen. Stimmt das Token, wird der Befehl verarbeitet, üblicherweise wird hierbei ein Aufruf an die Webschnittstelle von FHEM abgesetzt.&lt;br /&gt;
* FHEM führt den Befehl aus&lt;br /&gt;
&lt;br /&gt;
Hört sich langsam und kompliziert an? Kompliziert: Okay. Langsam eher nicht, in etlichen Fällen liegt die Gesamtantwortszeit unter 200 ms.&lt;br /&gt;
&lt;br /&gt;
Soweit ein erster Überblick über die Datenflüsse. Im Abschnitt Sicherheit ist das Konzept der Absicherung deutlich genauer und ausführlicher beschrieben.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
Du wirst bei der Installation zuerst auf der Kommandozeile auf Deinem Raspberry (o.ä.) unterwegs sein, anschließend im Webfrontend von FHEM, und zum Schluss auf der Alexa-Konsole im Web.&lt;br /&gt;
&lt;br /&gt;
===node.js installieren===&lt;br /&gt;
&lt;br /&gt;
Ab Jessy liegt NodeJS bereits in einer ausreichend aktuellen Version vor (Stretch und Buster funktionieren ebenfalls). Mit&lt;br /&gt;
&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 install nodejs npm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kannst Du es installieren. Mit &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
node --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
erfährst Du die aktuelle Version - wenn hier etwas mit &amp;quot;8&amp;quot; oder höher vorneweg erscheint, ist alles gut.&lt;br /&gt;
Ansonsten suche Dir bitte eine Anleitung im Web, wie Du NodeJS auf Deinem System auf einen aktuellen Stand bringen kannst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung:&#039;&#039;&#039; diese Aussage bzgl. node-Version (und Jessie/Stretch) stimmt wohl für alexa-fhem Stand heute (12.06.2020) nicht mehr, siehe https://forum.fhem.de/index.php/topic,112025.msg1063218.html#msg1063218&lt;br /&gt;
&lt;br /&gt;
=== Alexa-FHEM installieren ===&lt;br /&gt;
&lt;br /&gt;
Nun installieren wir Alexa-fhem aus dem offiziellen Repository:&lt;br /&gt;
&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 npm install -g alexa-fhem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Vorgang benötigt etwas Zeit.&lt;br /&gt;
&lt;br /&gt;
(Edit: die aktuelle Version 0.5.65 hat ein Problem, wenn ModeController verwendet wird. Wer modes braucht, der sollte die vorherige Version 0.5.64 installieren:&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 npm install -g alexa-fhem@0.5.64)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alexa-FHEM aktivieren ===&lt;br /&gt;
&lt;br /&gt;
Wechsele jetzt in FHEM-Web!&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, dass das Alexa-Modul in der Version ab Januar 2019 vorliegt. Dafür bitte einmal FHEM aktualisieren:&lt;br /&gt;
Speichern der Config nicht vergessen, und&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
update&lt;br /&gt;
shutdown restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alles, was jetzt noch nötig ist, ist das Anlegen eines Alexa-Devices. Gib dafür in der FHEM-Web-Kommandozeile&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
define alexa alexa&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
an. Nun läuft, während Du bereits das neu angelegte Alexa-Devices siehst, ein komplexer Prozess im Hintergrund:&lt;br /&gt;
&lt;br /&gt;
* Falls noch kein SSH-Key für den Benutzer, unter dem FHEM läuft, existiert, wird einer generiert&lt;br /&gt;
* Es wird ein Secret-Key im Prozess generiert, dass den Server nicht verlässt, und der Skillanmeldung dient.&lt;br /&gt;
* Du wirst auf dem Server &amp;quot;va-fhem.fhem.de&amp;quot; des FHEM-Vereins mit dem SSH-Key angemeldet, und der Hash-Wert Deines Secret-Key dort abgelegt.&lt;br /&gt;
&lt;br /&gt;
Und wenn Du diese Sätze gelesen hast, sollte inzwischen sich das Alexa-Device in FHEM-Web aktualisiert haben, und &lt;br /&gt;
ungefähr so aussehen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Alexa-Device-2.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Neben dem Status für alexa-fhem und der Proxyverbindung ist wichtig, dass diese beiden Zeilen beim Reload aufgetaucht sind:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
alexaFHEM.bearerToken crypt:...&lt;br /&gt;
alexaFHEM.skillRegKey crypt:...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ja, und diesen Schlüssel benötigst Du wirklich! Also am besten schon einmal mit &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
get &amp;lt;alexa&amp;gt; proxyKey&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in Klartext anzeigen lassen und in ein Editor-Fenster dauerhaft wegsichern.&lt;br /&gt;
&lt;br /&gt;
Jetzt solltest Du Dein Alexa-Device nicht mehr löschen, denn das im Reading angezeigte &amp;quot;bearerToken&amp;quot; zu löschen bedeutet, dass die Software die Zugriffe von nicht mehr überprüfen kann und keine Kommandos mehr funktionieren. In diesem Fall hilft nur die Neuinstallation des Skills.&lt;br /&gt;
&lt;br /&gt;
==== Fehler bei der Aktivierung ====&lt;br /&gt;
&lt;br /&gt;
Während kompliziertere Fehlerfälle im Abschnitt &amp;quot;Mögliche Probleme und Lösungen&amp;quot; behandelt werden, hier häufige Fälle, warum die kryptischen Zeilen nicht auftauchen:&lt;br /&gt;
&lt;br /&gt;
* Zuerst bitte einfach einmal die Seite neu laden.&lt;br /&gt;
&lt;br /&gt;
===== 401: Authorization Required =====&lt;br /&gt;
&lt;br /&gt;
Wenn Du FHEM-Web mit einem User/Passwort-Schutz versehen hast, wirst du folgende Fehlermeldung sehen: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
alexaFHEM stopped; failed to connect to fhem: 401: Authorization Required&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Regel musst du die Angaben User/Passwort noch einmal explizit setzen. Im Attribute-Abschnitt &amp;quot;alexaFHEM-auth&amp;quot; auswählen, User/Passwort mit &amp;quot;:&amp;quot; getrennt angeben und &amp;quot;attr&amp;quot; anklicken. alexa-fhem wird automatisch neu gestartet. Hier das Ganze in der Text-Variante:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
attr alexa alexaFHEM-auth user:pass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Permission denied =====&lt;br /&gt;
&lt;br /&gt;
Wenn du folgende Fehlermeldungen im Alexa Logfile siehst, wurde das Verzeichnis &amp;quot;/opt/fhem/.ssh/&amp;quot; von dir bei der Arbeit mit &amp;quot;root&amp;quot; oder &amp;quot;sudo&amp;quot; mit den falschen Berechtigungen versehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
[2019-7-25 11:59:12] sshautoconf: aborted with ssh-keygen returned error - key_save_private: Permission denied&lt;br /&gt;
[2019-7-25 11:59:12] *** SSH: proxy configuration failed: ssh-keygen returned error - key_save_private: Permission denied&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prüfen kannst du die Berechtigungen mit folgendem Befehl auf der Shell-Konsole: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
ls -l /opt/fhem/.ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Du solltest dann folgende Ausgabe erhalten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
insgesamt 12&lt;br /&gt;
-rw------- 1 fhem dialout 1675 Jul 12 13:10 id_rsa&lt;br /&gt;
-rw-r--r-- 1 fhem dialout  391 Jul 12 13:10 id_rsa.pub&lt;br /&gt;
-rw-r--r-- 1 fhem dialout  884 Jul 12 13:10 known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Steht in der Ausgabe nicht &amp;quot;fhem dialout&amp;quot; (dein fhem User), sondern bspw. &amp;quot;root root&amp;quot;, dann bspw. mit folgendem Befehl an deinen fhem User anpassen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
chown fhem:dialout /opt/fhem/.ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem ersten Befehl &amp;quot;ls -l ...&amp;quot; kannst du dann nochmal prüfen, ob die Berechtigungen korrekt übernommen wurden. &lt;br /&gt;
&lt;br /&gt;
===== weitere Prüfungen =====&lt;br /&gt;
&lt;br /&gt;
Hast Du noch die Shell-Konsole offen? Dann prüfe bitte noch einmal auf der Konsole, ob nun zwei Prozesse laufen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
ps -ef | egrep &#039;(alexa|ssh)&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sollte Dir idealerweise so etwas anzeigen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
fhem     31322     1 99 13:56 ?        00:00:03 alexa                              &lt;br /&gt;
fhem     31332 31322  8 13:56 ?        00:00:00 /usr/bin/ssh -R 1234:127.0.0.1:&amp;lt;zufälliger port&amp;gt; -oServerAliveInterval=90 -p 58824 fhem-va.fhem.de&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;alexa&amp;quot; ist dabei der Node-JS-Prozess, der ssh-Prozess ist die aufgebaute Verbindung zum Vereinsserver.&lt;br /&gt;
&lt;br /&gt;
Wenn Du diese Prozesse &#039;&#039;&#039;nicht&#039;&#039;&#039; siehst oder das Alexa-Device keinen Registrierungskey anzeigt, dann ist leider der Start nicht glatt verlaufen.&lt;br /&gt;
&lt;br /&gt;
Im Logfile (über den link &amp;lt;code&amp;gt;Logfile&amp;lt;/code&amp;gt; in der Detail-Ansicht über &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;, oder über den Namen bei &#039;&#039;currentlogfile&#039;&#039; in den Internals) findest Du idealerweise selber Hinweise, wo es hakt, oder kannst im Forum nachfragen.&lt;br /&gt;
&lt;br /&gt;
=== Geräte im FHEM-Webfrontend zuweisen ===&lt;br /&gt;
Um das Aha-Erlebnis zu vergrößern, ist jetzt ein guter Zeitpunkt, 1 oder besser mind. 2 Geräte für den Alexa-Dienst zuzuweisen. Von Haus aus wird keines Deiner FHEM-Geräte automatisch Alexa zugewiesen!&lt;br /&gt;
&lt;br /&gt;
Wähle die Geräte aus, rufe sie auf und setze das Attribut &amp;quot;alexaName&amp;quot;. Hierbei in Kürze nur der Hinweis:&lt;br /&gt;
* Keine Angst vor Leerzeichen und Umlauten, funktioniert.&lt;br /&gt;
* Große Angst vor Rechtschreibfehlern (Terrasse, Rollladen) oder komplizierten Wörtern &amp;quot;handgebastelte Martinslaterne im Kinderzimmer Iphigenie-Chantal&amp;quot;.&lt;br /&gt;
* Mehrere Namen für dasselbe Gerät/Device in fhem werden unterstützt. Mehrere Namen werden durch &amp;lt;s&amp;gt;Strichpunkt&amp;lt;/s&amp;gt; Komma getrennt&amp;lt;ref&amp;gt;Feature nicht dokumentiert {{Link2Forum|Topic=74041|LinkText=Forumsthread}}&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* Das Attribut &amp;quot;alexaRoom&amp;quot; ist NUR FÜR DEN CUSTOM SKILL relevant. Ausnahme: structure und LightScene Devices, siehe: [[FHEM_Connector_f%C3%BCr_Amazon_Alexa#Was_geht_alles_.3F]].&lt;br /&gt;
&lt;br /&gt;
Lade die Geräte neu in die Software, indem Du &amp;lt;code&amp;gt;set &amp;lt;alexa&amp;gt; restart&amp;lt;/code&amp;gt; ausführst!&lt;br /&gt;
[[Datei:HowToSet alexaName.png|alternativtext=How to set alexaName|ohne|mini|Wie setzt man das Attribut alexaName]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkungen (weil oft gestellte Fragen im Forum) bzgl. Erkennung von Geräten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Wichtig ist, dass die Filtereinstellung in der alexa-fhem.cfg (zu finden unter &amp;quot;Edit Files&amp;quot;) passt.&lt;br /&gt;
Das, was dort eingetragen ist (Standard: alexaName=..* / also es ist ein alexaName vergeben) auch an den entsprechenden Devices in fhem vorhanden ist.&lt;br /&gt;
Stimmt das nicht überein, kann alexa-fhem keine Devices von fhem abfragen/finden.&lt;br /&gt;
Ob der Filter entsprechend funktioniert kann man wie folgt testen: &#039;&#039;list Filtereinstellung&#039;&#039; beispiel mit Standardfilter: &#039;&#039;list alexaName=..*&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Hat alexa-fhem per Filter Devices aus fhem &amp;quot;gefunden&amp;quot;, geht es weiter mit der &amp;quot;Erkennung&amp;quot;. Also um welches Device (Typ und &amp;quot;Fähigkeiten&amp;quot;) handelt es sich. Dazu gilt folgendes:&lt;br /&gt;
** sind entsprechende Readings beim Device vorhanden (z.B. temperature, state mit on/off, ...) erkennt das alexa-fhem automatisch. Die Liste der automatisch erkannten Readings wächst ständig. Daher erst mal schauen ob das Device bereits entsprechend erkannt (typisiert) wurde. Das kann durch prüfen des alexa-fhem-Logs geschehen (NICHT fhem-log!).&lt;br /&gt;
** sind entsprechende &amp;quot;set-Befehle&amp;quot; erkennbar (oft auch durch Readings). Also ist beispielsweise (wie beim Dummy nötig) ein &#039;&#039;setList&#039;&#039; mit entsprechenden Einträgen vorhanden oder entsprechende Readings, z.B. desired-temp zum Stellen der Temperatur etc.&lt;br /&gt;
** wird das Device nicht richtig oder &amp;quot;unvollständig&amp;quot; erkannt helfen folgende Attribute:&lt;br /&gt;
*** genericDeviceType: hiermit kann alexa-fhem in die gewünschte Richtung &amp;quot;geschubbst&amp;quot; werden. Anmerkung: man kann nicht alles erzwingen, Readings bzw. set-Befehle müssen passen (oder per homebridgeMapping passend gemacht werden). Wenn ein genericDeviceType nicht per &amp;quot;Drop-Down&amp;quot; erscheint, dann kann er auch (wenn bekannt) einfach per WEB-cmd eingegeben werden: &#039;&#039;attr Devicename genericDeviceType media&#039;&#039;&lt;br /&gt;
*** homebridgeMapping: hierdurch kann alexa-fhem bei der Erkennung von Zuständen und möglichen Einstellungen (also WAS kann das Device) unterstützt werden. Mittels homebridgeMapping können vorhandene Readings (Zustände) auf für alexa-fhem bekannte Zustände gemappt werden. Ebenso können damit Standard-fhem-Kommandos von alexa-fhem auf Device-spezifische gemappt werden. Beispiel: on/off auf Ein/Aus (falls das Device statt on/off eben ein Ein/Aus erwartet). Zum Beispiel: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;thermostat&amp;gt; homebridgeMapping TargetTemperature=target::target,minValue=18,maxValue=25,minStep=0.5 CurrentTemperature=myTemp:temperature&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; [https://github.com/justme-1968/homebridge-fhem/blob/master/README.md weitere Beispiele]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&#039;&#039;&#039;Mehrere Namen für dasselbe Gerät/Device in fhem sind möglich.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Die Namen werden durch &amp;lt;s&amp;gt;Strichpunkt&amp;lt;/s&amp;gt; Komma getrennt.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;attr dmLampe alexaName Lichtkuppel,Lichtkugel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung bzgl. genericDeviceType und homebridgeMapping:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* diese Attribute werden von verschiedenen &amp;quot;Sprachsteuerungsmodulen&amp;quot; in fhem verwendet (homebridge [dort wurde es &amp;quot;erfunden&amp;quot;], alexa-fhem, gassistant, ...). Daher ist nicht jedes Mapping für alle &amp;quot;Dienste&amp;quot; verwendbar. Ausprobieren schadet aber nicht.&lt;br /&gt;
* ebenso kann man mit diesen Attributen (homebridgeMapping wird gerne so &amp;quot;missbraucht&amp;quot;) nichts erzwingen, was seitens Amazon/Alexa nicht unterstützt bzw. verstanden wird! D.h. zunächst ist zu prüfen, ob ein bestimmter (gewünschter) Sprachbefehl seitens Amazon/Alexa unterstützt wird! Aktuelles Beispiel (Stand Jan 2020): &amp;quot;Alexa, fahre den Rollo hoch/runter&amp;quot;. Da ist Amazon/Alexa gerade dabei etwas zu tun. Bislang wird das nicht unterstützt, also ist das auch mit einem entsprechenden homebridgeMapping nicht zu erzwingen! Was unterstützt wird kann man bei Amazon nachlesen: [https://developer.amazon.com/es-ES/docs/alexa/device-apis/list-of-interfaces.html]&lt;br /&gt;
&lt;br /&gt;
== Finale: Skill verknüpfen ==&lt;br /&gt;
Suche auf der Alexa-App den Skill &amp;quot;FHEM Connector&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Wenn du noch nicht bei Amazon angemeldet bist, erwartet Amazon zunächst, dass Du Dich normal bei Amazon anmeldest.&lt;br /&gt;
&lt;br /&gt;
Sobald Du &amp;quot;FHEM Connector&amp;quot; aktivierst, öffnet sich ein Browser-Tab mit folgender Maske:&amp;lt;br /&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
[[Datei:FHEMlazy_login.png|240px]]&lt;br /&gt;
&lt;br /&gt;
Hier kopierst Du Deinen Anmeldeschlüssel (im Klartext!) hinein, den du mittels &amp;quot;get alexa proxyKey&amp;quot; erhalten hast, und klickst auf Check. Als glücklicher Mensch ist auf der folgenden Statusseite alles grün:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Datei:FHEMlazy_check.png|240px]]&lt;br /&gt;
&lt;br /&gt;
Im Einzelnen wird hier geprüft, ob Du per SSH verbunden bist (und auch Deine IP zur Sicherheit angezeigt), ob der Reverse-Tunnel steht, ob nodeJS erreichbar ist und wie viele Geräte Alexa gleich finden sollte (in meinem Fall 22).&lt;br /&gt;
&lt;br /&gt;
Sollte etwas nicht grün sein und Du eine Idee zum Fixen haben, kannst Du mit &amp;quot;Retry&amp;quot; neue Versuche auslösen.&lt;br /&gt;
&lt;br /&gt;
Ist alles okay, klicke rechts den Button &amp;quot;Activate Skill&amp;quot;. Du springst damit wieder zurück zu Amazon, die Dir hoffentlich zur erfolgreichen Verknüpfung gratulieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;s&amp;gt;Amazon möchte nun unmittelbar die Gerätesuche starten, und unter SmartHome-Geräte sollten diese nun auftauchen.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Als Abschluss muss man nur noch in ein Echo-Gerät seiner Wahl die Anweisung: &amp;quot;&#039;&#039;Alexa suche smarte Geräte&#039;&#039;&amp;quot; sprechen und schon sollten die oben genannten Geräte gefunden werden und in der APP als Geräte auftauchen.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Was geht alles ? ==&lt;br /&gt;
&lt;br /&gt;
* Geräte, die sich ein- und ausschalten lassen:&lt;br /&gt;
** Automatisch: Müssen &amp;lt;code&amp;gt;set on&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set off&amp;lt;/code&amp;gt; Kommandos haben&lt;br /&gt;
** dummys müssen &amp;lt;code&amp;gt;setList&amp;lt;/code&amp;gt; mit on und off haben&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; switch bzw. light kann bestimmt werden ob es in alexa als Schalter oder Licht behandelt wird.&lt;br /&gt;
** Wenn die Set-Kommandos im FHEM Device anders benannt sind: homebridgeMapping On:cmdOn=&amp;lt;ein&amp;gt;,cmdOff=&amp;lt;aus&amp;gt; setzen&lt;br /&gt;
** Kommandos:&lt;br /&gt;
***Alexa, schalte &amp;lt;name&amp;gt; ein/aus&lt;br /&gt;
***Alexa, Licht an/aus&lt;br /&gt;
***Alexa, schalte &amp;lt;gruppe&amp;gt; ein/aus&lt;br /&gt;
* Geräte, die eine Temperatur messen&lt;br /&gt;
** Automatisch: Es muss ein Reading &amp;lt;code&amp;gt;temperature&amp;lt;/code&amp;gt; geben&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; thermometer&lt;br /&gt;
** Sonst: homebridgeMapping CurrentTemperature:reading=&amp;lt;reading&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Helligkeit sich ändern lässt&lt;br /&gt;
** Automatisch: wenn &amp;lt;code&amp;gt;dim&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;pct&amp;lt;/code&amp;gt; Kommandos erkannt werden&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; light&lt;br /&gt;
** Über homebridgeMapping: Wenn &amp;lt;code&amp;gt;helligkeit&amp;lt;/code&amp;gt; das Reading für die aktuelle Helligkeit enthält und die Helligkeit mit &amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; prozent xxx&amp;lt;/code&amp;gt; gesetzt wird, sieht das homebridgeMapping wie folgt aus: homebridgeMapping Brightness=helligkeit::prozent,minValue=0,maxValue=&amp;lt;maximalwert&amp;gt;&lt;br /&gt;
** Kommandos:&lt;br /&gt;
*** Alexa, mache &amp;lt;name&amp;gt; heller/dunkler&lt;br /&gt;
*** Alexa, Licht heller/dunkler&lt;br /&gt;
* Geräte, deren Farbe sich ändern lässt&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Farbtemperatur sich ändern lässt&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, bei denen sich eine Lautstärke einstellen lässt&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, bei denen sich ein prozentualer Wert einstellen lässt&lt;br /&gt;
** Automatisch: wenn &amp;lt;code&amp;gt;dim&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;pct&amp;lt;/code&amp;gt; Kommandos erkannt werden&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* elektrische Türschlösser&lt;br /&gt;
** &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt;: lock&lt;br /&gt;
** homebridgeMapping mit LockCurrentState und LockTargetState&lt;br /&gt;
&lt;br /&gt;
* Thermostate&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; thermostate&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* structure Devices aus FHEM (ab alexa-fhem version 0.5.7)&lt;br /&gt;
** können mit &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; scene als Szene eingebunden werden&lt;br /&gt;
** über &amp;lt;code&amp;gt;alexaRoom&amp;lt;/code&amp;gt; kann der name um einen Ort ergänzt werden&lt;br /&gt;
** Szenen aus einer structure lassen sich ein- und ausschalten&lt;br /&gt;
** Wichtig:&lt;br /&gt;
*** Ein Skill darf nur 12 Szenen automatisch erkennen und einbinden.&lt;br /&gt;
&lt;br /&gt;
* LightScene Devices aus FHEM (ab alexa-fhem version 0.5.8)&lt;br /&gt;
** können mit &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; scene als Szenen eingebunden werden&lt;br /&gt;
** über &amp;lt;code&amp;gt;alexaRoom&amp;lt;/code&amp;gt; kann der name um einen Ort ergänzt werden&lt;br /&gt;
** Szenen aus einer LightScene lassen sich nur einschalten&lt;br /&gt;
** Wichtig:&lt;br /&gt;
*** Ein Skill darf nur 12 Szenen automatisch erkennen und einbinden.&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Kanal sich umschalten lässt (ab alexa-fhem version 0.5.13)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; media&lt;br /&gt;
** homebridgeMapping ChannelController:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt;&lt;br /&gt;
** Erlaubte Werte siehe hier: https://developer.amazon.com/de/docs/device-apis/alexa-channelcontroller.html#changechannel&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Playback status sich schalten lässt (ab alexa-fhem version 0.5.13)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; media&lt;br /&gt;
** homebridgeMapping PlaybackController:playback,values=Play;Pause;Stop;Previous;Next&lt;br /&gt;
** Erlaubte Werte siehe hier: https://developer.amazon.com/de/docs/device-apis/alexa-playbackcontroller.html#discovery&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Eingang sich umschalten lässt (ab alexa-fhem version 0.5.13)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; media&lt;br /&gt;
** homebridgeMapping InputController:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt;,values=HDMI+1;HDMI+2;XBOX&lt;br /&gt;
** Erlaubte Werte siehe hier: https://developer.amazon.com/de/docs/device-apis/alexa-property-schemas.html#input&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Kontaktsensoren (ab alexa-fhem version 0.5.15)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; contact&lt;br /&gt;
** homebridgeMapping ContactSensorState:reading=&amp;lt;reading&amp;gt; oder CurrentDoorState:reading=&amp;lt;reading&amp;gt;&lt;br /&gt;
** Die Anzeige in der Alexa-App funktioniert sofort, die Abfrage per Sprache erst ab Version 0.5.27.&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Lautstärke sich ändern lässt (ab alexa-fhem version 0.5.24)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; speaker&lt;br /&gt;
** Automatisch: es muss ein Reading &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; und/oder &amp;lt;code&amp;gt;mute&amp;lt;/code&amp;gt; geben&lt;br /&gt;
** homebridgeMapping Volume:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt; Mute:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt;&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, die sich ein- (und optional) ausschalten lassen als Szene (ab alexa-fhem version 0.5.26)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; scene&lt;br /&gt;
** Automatisch: Müssen &amp;lt;code&amp;gt;set on&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set off&amp;lt;/code&amp;gt; Kommandos haben&lt;br /&gt;
** homebridgeMapping On:reading=&amp;lt;reading&amp;gt;,cmdOn=&amp;lt;cmd&amp;gt;[,cmdOff=&amp;lt;cmd&amp;gt;]&lt;br /&gt;
** Hinweis: Fehlende Kommandos lassen sich mit cmdalias erzeugen&lt;br /&gt;
** Wichtig:&lt;br /&gt;
*** Ein Skill darf nur 12 Szenen automatisch erkennen und einbinden.&lt;br /&gt;
* Rollläden. Lange ein Problemthema, das nur mit &amp;quot;Schalte auf 0%, schalte auf 100% lief&amp;quot;. Wichtig: &amp;quot;alexa-fhem&amp;quot; ab Version 0.5.39 einsetzen. GenericDevice-Type auf &amp;quot;blind&amp;quot; setzen. Nach Restart von alexa-fhem und neuer Gerätesuche sollte folgendes funktionieren:&lt;br /&gt;
** &amp;quot;..., öffne &amp;lt;Name&amp;gt; ganz&amp;quot;&lt;br /&gt;
** &amp;quot;..., schließe &amp;lt;Name&amp;gt; komplett&amp;quot;&lt;br /&gt;
** &amp;quot;hoch&amp;quot; und &amp;quot;runter&amp;quot; (ohne &amp;quot;ganz&amp;quot; oder &amp;quot;komplett&amp;quot;) schalten jeweils nur einen bestimmten Prozentsatz hoch oder runter. Dieser kann mit &amp;lt;code&amp;gt;attr &amp;lt;name&amp;gt; homebridgeMapping TargetPosition:minStep=&amp;lt;wert&amp;gt;&amp;lt;/code&amp;gt;geändert werden. Aber Achtung: In diesem Intervall kann dann auch nur noch ein absoluter Prozentwert per Sprache oder Slider eingestellt werden! Bei z.B. 25% würden 13% zu 25% aufgerundet, 12% zu 0% abgerundet werden.&lt;br /&gt;
* Kontaktsensoren (ab alexa-fhem version 0.5.47)&lt;br /&gt;
** Automatisch wenn ein Reading &amp;lt;code&amp;gt;motion&amp;lt;/code&amp;gt; vorhanden ist oder es sich um einen Zigbee bewgungsmelder an einer HUE oder deCONZ Bridge handelt&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; MotionSensor&lt;br /&gt;
** homebridgeMapping MotionDetected:reading=&amp;lt;reading&amp;gt;,values=&amp;lt;wert für bewgung&amp;gt;:1;&amp;lt;wert für keine bewegung&amp;gt;:0&lt;br /&gt;
&lt;br /&gt;
* Alarmmelder (noch nicht in Deutschland):&lt;br /&gt;
** genericDeviceType Security&lt;br /&gt;
** homebridgeMapping Alarm=&amp;lt;reading&amp;gt;[,type=[fireAlarm|waterAlarm|burglaryAlarm|carbonMonoxideAlarm]]&lt;br /&gt;
** wenn der type nicht angegeben wird ist fireAlarm der default&lt;br /&gt;
** automatisch werden 0, ok und alles was mit no anfängt als OK erkannt. alles andere gilt als ALARM.&lt;br /&gt;
*Geräte mit mehrstufigen Modi:&lt;br /&gt;
**siehe den zugehörigen Thread im Forum: {{Link2Forum|Topic= 125604}}&lt;br /&gt;
&lt;br /&gt;
Es werden noch einige andere häufig verwendete Geräte (Homematic, hue,...) automatisch erkannt.&lt;br /&gt;
&lt;br /&gt;
to be continued ...&lt;br /&gt;
&lt;br /&gt;
In der [https://developer.amazon.com/docs/device-apis/list-of-interfaces.html List of Capability Interfaces] bei Amazon kann man sehen, welche Möglichkeiten das Smart Home Skill API aktuell in einzelnen Ländern bietet. Leider ohne die jeweiligen landessprachlichen Kommandos.&lt;br /&gt;
&lt;br /&gt;
=== Aktiv Routinen starten ===&lt;br /&gt;
Routinen (eine Funktionalität, die rein - genauso wie &amp;quot;Räume&amp;quot; - bei Amazon liegt und nicht von FHEM Connector beeinflusst wird) waren lange die ewige Antwort auf die Frage: &amp;quot;Meine Frau möchte aber &#039;&#039;&#039;Öffne Rollläden&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; sagen&amp;quot;: In der Alexa-App gibt es im Menü den Punkt &amp;quot;Routinen&amp;quot;, und hier lässt sich eine gewisse Anzahl von Aktionen (unter optionalen Bedingungen) an ein Sprachkommando knüpfen.&lt;br /&gt;
&lt;br /&gt;
Neu: Routinen können inzwischen auch von Skills getriggert werden, und seit Version 0.5.47 (Februar 2020) auch von FHEM Connector. Das braucht niemand, um die Rollläden hochzufahren, denn das kann FHEM ja selber, aber um z.B. eine Ansage auf einem Alexa-Gerät zu triggern. Dafür gibt es auch das FHEM-Modul &amp;quot;echodevice&amp;quot;, aber es erfordert ein paar Klimmzüge. Mit dem aktiven Triggern von Routinen kann FHEM auslösen, dass Alexa ungefragt (!) Dinge wie &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;Die Temperatur in der Tiefkühltruhe hat -16 Grad überschritten&amp;quot;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
in den Raum sagt. Also eine Alternative bzw. Ergänzung zu Alarmen / Erinnerungen per Telegram o.ä.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorgeschichte&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Die Smarthome-Skill-API von Amazon sah schon lange das &amp;quot;proactiveReporting&amp;quot; vor: Also z.B. die gemessene Temperatur nicht erst auf Anfrage hin zu übermitteln, sondern laufend aktiv zu pushen. Aber warum Daten an Amazon senden, wenn es dafür keinen Mehrwert gibt? Beim Öffnen z.B. des Thermostaten in der Alexa-App kommen ohnehin laufend Statusabfragen. Warum also einen Datenpool bei Amazon über die Haustemperatur aufbauen und Änderungen pushen, wenn es keinen Mehrwert dafür gibt? &lt;br /&gt;
&lt;br /&gt;
Inzwischen lassen sich (reale oder vermeintliche) Änderungen von &#039;&#039;Bewegungssensoren&#039;&#039; und &#039;&#039;Fensterkontakten&#039;&#039; als Startbedingung an Alexa-Routinen koppeln. Man kann in der Alexa-App (ggf. fiktive) Öffnen eines Fensterkontaktes an das Aufsagen eines freien Textes durch die Hausbutlerin knüpfen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Umsetzung&#039;&#039;&#039;:&lt;br /&gt;
* Jedes Alexa-Device, dessen Status aktiv zu Amazon gepusht werden soll, im Attribut &amp;quot;alexaProactiveEvents&amp;quot; mit einer &amp;quot;1&amp;quot; versehen. Per Default wird &#039;&#039;kein&#039;&#039; Gerät laufend aktiv zu Amazon gepusht!&lt;br /&gt;
* das geänderte Device einmal zu Amazon pushen &amp;quot;set &amp;lt;alexa&amp;gt; add &amp;lt;device&amp;gt;&amp;quot; (oder &#039;Alexa, suche neue Geräte&#039; murmeln)&lt;br /&gt;
* Das Gerät sollte jetzt beim Anlegen einer neuen Routine (&amp;quot;Neue Routine&amp;quot;, &amp;quot;Wenn Folgendes passiert&amp;quot;, &amp;quot;Smart Home&amp;quot;) als möglicher Triggerpunkt erscheinen.&lt;br /&gt;
&lt;br /&gt;
==== Dummygeräte: ====&lt;br /&gt;
Ein Dummydevice sollte einen Kontaktschalter oder Bewegungssensor simulieren, um dann in FHEM eine beliebige Bedingung als Trigger zu definieren, und eine freie Ansage in Alexa als Routine zu definieren. Hier ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
define voicetrigger1 dummy&lt;br /&gt;
attr voicetrigger1 alexaName alle Fenster&lt;br /&gt;
attr voicetrigger1 alexaProactiveEvents 1&lt;br /&gt;
attr voicetrigger1 genericDeviceType contact&lt;br /&gt;
attr voicetrigger1 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED&lt;br /&gt;
attr voicetrigger1 setList open closed&lt;br /&gt;
&lt;br /&gt;
set alexa add voicetrigger1&lt;br /&gt;
set alexa restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fehlersuche:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Push setzt ein intaktes Push-Token voraus. Sollte im Alexa-Logfile Folgendes erscheinen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;failed to refresh token: invalid_grant: &#039;The request has an invalid grant parameter : refresh_token&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
so ist das Push-Token nicht aktuell. Weil die Auswirkung lange nur war, dass Geräteänderungen nicht aktiv an Amazon gemeldet wurden, gibt es noch keine umfassende Analyse des Problems. Es lässt sich lösen, indem eine oder beide folgenden Aktionen ausgeführt werden:&lt;br /&gt;
* Löschen des &amp;quot;.eventToken&amp;quot; im Alexa-Device über &amp;quot;deletereading&amp;quot;&lt;br /&gt;
* &amp;quot;FHEM-Connector&amp;quot;-Skill auf &amp;quot;alexa.amazon.de&amp;quot; einmal deaktivieren und dann neu verbinden&lt;br /&gt;
&lt;br /&gt;
== Mögliche Probleme und Lösungen ==&lt;br /&gt;
&lt;br /&gt;
Es kann vorkommen, dass Geräte zwar korrekt erkannt werden, aber das durch Alexa erkannte Kommando nicht richtig umgesetzt wird (Beispiel - mittlerweile behoben: {{Link2Forum|Topic=96766}}). Neben dem FHEM-Log gibt es noch das Logfile, welches von alexa-fhem angelegt wird. &lt;br /&gt;
&lt;br /&gt;
=== Fehlersuche über die FHEM-Oberfläche ===&lt;br /&gt;
&lt;br /&gt;
* alexa-fhem Logfile anschauen (Detail-Ansicht des &amp;lt;alexa&amp;gt;-Device aufrufen, klick auf &#039;&#039;&#039;Logfile&#039;&#039;&#039; oben)&lt;br /&gt;
* alexa-fhem im Debug-Modus aufrufen:&lt;br /&gt;
** -D zum alexaFHEM-params attribut hinzufügen&lt;br /&gt;
** Alexa-Befehl auslösen&lt;br /&gt;
** -D aus dem alexaFHEM-params attribut entfernen&lt;br /&gt;
* Die notwendigen Informationen finden sich in dem alexa-Logfile (siehe oben)&lt;br /&gt;
&lt;br /&gt;
=== Fehlersuche über Kommandozeile (lies: Shell) + FHEM-Oberfläche ===&lt;br /&gt;
&lt;br /&gt;
:* set &amp;lt;alexa&amp;gt; stop (FHEM-Oberfläche)&lt;br /&gt;
:* Auf der Kommandozeile &amp;lt;code&amp;gt;alexa-fhem -D -c /opt/fhem/alexa-fhem.cfg &amp;gt; debug.log&amp;lt;/code&amp;gt; starten (dadurch wird die Datei debug.log erzeugt im aktuellen Verzeichnis)&lt;br /&gt;
:* Alexa-Befehl auslösen&lt;br /&gt;
:* alexa-fhem auf der Kommandozeile wieder stoppen (CTRL-C)&lt;br /&gt;
:* set &amp;lt;alexa&amp;gt; start (FHEM-Oberfläche)&lt;br /&gt;
&lt;br /&gt;
Die Datei debug.log sollte Hinweise enthalten, wie das Problem zu lösen ist oder Dich zumindest in die richtige Richtung schieben.&lt;br /&gt;
&lt;br /&gt;
Im Beispiel aus dem Forum fand sich in dem Logfile der Hinweis darauf, dass das Device mit falschen min/max-Werten unterwegs war.&lt;br /&gt;
&lt;br /&gt;
=== Registrierungskey vergessen, Registrierung zurücksetzen ===&lt;br /&gt;
&lt;br /&gt;
Auf der Kommandoshell:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
pi@raspberrypi:~# sudo -u fhem ssh -p 58824 fhem-va.fhem.de status&lt;br /&gt;
Registered.&lt;br /&gt;
Registered on 2019-01-13T15:38:13Z.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
heisst, das der Vereinsserver eigentlich alles hat, was er will. Es wird kein neuer Schlüssel generiert.&lt;br /&gt;
Wenn Du die Situation zurücksetzen möchtest, wäre die hässliche Methode, Deinen SSH-Key zu löschen. Eleganter ist, die Registrierung auf Vereinsseite zu löschen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
pi@raspberrypi:~# sudo -u fhem ssh -p 58824 fhem-va.fhem.de unregister&lt;br /&gt;
Your registration has been removed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
löscht Deinen Schlüssel mitsamt allen dort gespeicherten Daten auf Vereinsseite. Bei Restart von alexa-fhem in FHEM-WEB wird jetzt ein neuer Registrierungskey angefordert.&lt;br /&gt;
&lt;br /&gt;
== Sicherheitskonzept und Secrets ==&lt;br /&gt;
&lt;br /&gt;
Um diesen Abschnitt zu verstehen, solltest Du den Abschnitt &amp;quot;Arbeitsweise&amp;quot; im Kopf haben. Einerseits ist Dir vermutlich einleuchtend, dass ein Server, der per SSH rückwärts nur ausgewählte Kommandos in den Tunnel, den Du aufgebaut hast, leitet, &amp;quot;irgendwie sicherer&amp;quot; ist. Andererseits möchte man nicht blind vertrauen.&lt;br /&gt;
&lt;br /&gt;
=== SSH ===&lt;br /&gt;
==== SSH - macht das nichts Gefährliches? ====&lt;br /&gt;
SSH ist ein Veteran des Internet und entstand, um sich sicher (verschlüsselt) und schnell auf Servern einzuloggen. Schon früh wurde dabei der sogenannte &amp;quot;Reverse-Tunnel&amp;quot; implementiert: Also der vom Client (Deinem Rechner) geäußerte Wunsch: &amp;quot;Bitte leite mir Requests, die bei Dir, Server, auf Port xy eingehen, an meinen lokalen Port yz weiter.&amp;quot;. Dieses Verfahren implementiert der Reverseproxy, wobei tatsächlich auf dem Server für Dich kein echter Port geöffnet wird.&lt;br /&gt;
&lt;br /&gt;
Wie Dir ggf. sicher der Unix-Guru Deines Vertrauens bestätigen wird: Die Kombination&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
ssh -R 1234:localhost:&amp;lt;zufälliger port&amp;gt; zielserver &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
erlaubt keine Ausführung von Shell-Kommandos auf Deinem Server, sondern einzig, dass vom SSH-Programm Verbindungen zu einem lokalen Port auf Deinem Server auf dem alexa-fhem lauscht aufgebaut werden. Du kannst also z.B. mit einem&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 /usr/sbin/tcpdump -X -s 0 -i lo port &amp;lt;zufälliger port&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
vollständig überwachen (oder ggf. permanent aufzeichen), was auf Deinem Server von außen gesteuert passiert.&lt;br /&gt;
&lt;br /&gt;
==== Wie wird bei SSH verschlüsselt? ====&lt;br /&gt;
Im Prinzip wie im Web auf SSL-Seiten, teils mit den gleichen Verschlüsselungsverfahren. Allerdings arbeitet SSH eher wie das im Web recht seltene Verfahren: Bei jeder Verbindung übermitteln sowohl Server wie auch Client den öffentlichen Teil ihres Schlüssels. Anders als im Web wird der Schlüssel aber nicht von einer öffentlichen Zertifizierungsstelle wie &amp;quot;LetsEncrypt&amp;quot; unterschrieben. Stattdessen entscheiden Server wie Client beim ersten Verbindungsaufbau typischerweise per manueller Frage: &amp;quot;Willst Du jetzt und künftig diesem Schlüssel vertrauen?&amp;quot; Bei der Installation wird diese Frage für Deine Seite bejaht, und fortan wird der öffentliche Schlüssel des FHEM-Servers auf Deinem Rechner gespeichert. Ab da bist Du z.B. davor sicher, dass jemand den DNS-Eintrag verbiegt oder sich in den Datenfluss Deines Providers einhängt: Ein geänderter Serverschlüssel würde bemerkt werden.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Soweit klar? Aus Deinem öffentlichen Schlüssel wiederum leitet der Server her: &amp;quot;Das ist definitiv wieder derjenige, der sich damals &amp;quot;registriert&amp;quot; hat&amp;quot;. Und an dieser Stelle kann ich auch den &amp;lt;b&amp;gt;ersten Teil des 3-teiligen Registrierungskeys&amp;lt;/b&amp;gt; erläutern: Die typischerweise 6-stellige Hex-Zahl am Anfang ist der Java-Hashcode Deines öffentlichen Schlüssel. Sie ist damit sozusagen Deine aus Deinem öffentlichen Schlüssel abgeleitete Benutzer-ID.&lt;br /&gt;
&lt;br /&gt;
=== Die Rolle der Secrets ===&lt;br /&gt;
Wenn jetzt klar ist, dass die Verbindung zum Vereinsserver sicher und vertauschungsfrei funktioniert, bleiben noch 2 Probleme zu lösen:&lt;br /&gt;
1) Im Web bei der Skill-Aktivierung musst Du beweisen, dass Du der Mensch am Browser bist, dem der SSH-Tunnel von IP xy mit dem öffentlichen Schlüssel X gehört. Bei der automatischen Registrierung werden lokal auf Deinem Rechner zwei 64-Bit-Secrets generiert:&lt;br /&gt;
* Das &amp;lt;b&amp;gt;Anmelde&amp;lt;/b&amp;gt;-Secret&lt;br /&gt;
* Das &amp;lt;b&amp;gt;Bearer&amp;lt;/b&amp;gt;-Token&lt;br /&gt;
Beim Anmelden des SSH-Keys auf dem öffentlichen Server wird nun der &amp;lt;b&amp;gt;Hashwert&amp;lt;/b&amp;gt; des ersten Secrets übertragen und dort in Verbindung mit Deinem öffentlichen Schlüssel gespeichert. Ein Hashwert bedeutet, dass (sofern das Verfahren, hier SHA256, funktioniert), niemand aus dem Hash das Secret zurückrechnen kann. Ein Datenbankklau auf dem Server gefährdet also nicht die Sicherheit Deines Passwortes.&lt;br /&gt;
&lt;br /&gt;
Wenn Du nun beim Skill-Aktivieren den Registrierungskey eingibst, dann &amp;quot;sieht&amp;quot; der Server zum ersten Mal Dein ausgewürfeltes Secret, vergleicht es mit dem Hashwert und wird es anschließend wieder umgehend vergessen. Anhand des Hashwertes kann der Server aber entscheiden, dass Du der legitime Nutzer zum öffentlichen Schlüssel XY bist.&lt;br /&gt;
&lt;br /&gt;
2) Das zweite Problem ist: Wie soll Amazon &amp;quot;beweisen&amp;quot;, dass sie der legitime Aufrufer sind? Amazon erhält binnen wenigen Sekunden nach dem Klick auf &amp;quot;Activate Skill&amp;quot; den &amp;lt;b&amp;gt;dritten Teil&amp;lt;/b&amp;gt; des Registrierungskeys als sogenanntes Bearer-Token. Zwar läuft er durch den Registrierungsserver, er wird dort, auf dem Registrierungs/Vereinsserver aber nicht gespeichert. Das Bearer-Token wird von Amazon bei allen Requests zu Deinem Server mitgesendet. Da es am Anfang zusätzlich Deine &amp;quot;User-ID&amp;quot; enthält, weiß der Vereinsserver, zu welchem SSH-Tunnel der Request zu senden ist. Aber lokal auf Deinem Rechner wird ausgewertet, ob das Token &amp;quot;stimmt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== alexa-fhem Updaten bzw. &amp;quot;Upgraden&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updaten einer &amp;quot;Connector&amp;quot; Installation:&#039;&#039;&#039;&lt;br /&gt;
* alexa-fhem über FHEM anhalten (Name des Alexa-Device: alexa):&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;set alexa stop&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Auf der Konsole wie anfangs bei der Installation:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;sudo npm update -g alexa-fhem&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Manchmal hat npm Probleme mit einem Update. Dann einfach die aktuelle Version noch mal drüber Installieren: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;sudo npm install -g alexa-fhem&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*alexa-fhem über FHEM wieder starten:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;set alexa start&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Upgraden von einer &amp;quot;Nicht-Connector&amp;quot; Installation (z.B. manuelle Installation per pm-Download):&#039;&#039;&#039;&lt;br /&gt;
* Daten der aktuellen Installation sichern (v.a. config.json / man weiß ja nie)&lt;br /&gt;
* Autostart der aktuellen alexa-fhem Installation deaktivieren:&lt;br /&gt;
** Bei initd: Service deaktivieren mittels: &amp;lt;code&amp;gt;sudo update-rc.d -f alexa remove&amp;lt;/code&amp;gt; Vorher mittels stoppen: &amp;lt;code&amp;gt;sudo service alexa stop&amp;lt;/code&amp;gt; Startscript unter /etc/init.d/ löschen.&lt;br /&gt;
** Bei systemd: Service deaktivieren mittels: &amp;lt;code&amp;gt;sudo systemctl disable alexa&amp;lt;/code&amp;gt; Vorher mittels stoppen: &amp;lt;code&amp;gt;sudo systemctl alexa stop&amp;lt;/code&amp;gt; Startscript unter /etc/systemd/system/ löschen.&lt;br /&gt;
* ALLE vorhandenen alexa-fhem Daten LÖSCHEN! Bleiben Dinge zurück und wird dann laut Connector installiert kann es zu Problemen kommen!&lt;br /&gt;
* (reboot)&lt;br /&gt;
* Installation von alexa-fhem laut Anleitung (Beginn dieses Wiki)&lt;br /&gt;
* Falls eigene Dinge von früher genutzt werden wollen/sollen (z.B. Custom Skill), dann die entsprechenden Einträge aus der gesicherten config.json in die neu angelegte alexa-fhem.cfg (zu finden unter &amp;quot;Edit files&amp;quot;) übernehmen.&lt;br /&gt;
* Werden keine eigenen Dinge verwendet, dann kann der Port (Standard: 3000) geschlossen werden und auch die Daten unter Amazon-Developer können gelöscht werden.&lt;br /&gt;
&lt;br /&gt;
== Bug- und Wunschliste ==&lt;br /&gt;
* Ist beim Start keine Internetverbindung vorhanden, erfolgt kein Retry -- alexa-fhem muss restartet werden (ssh_autoconfig wertet keine temporären Fehler aus)&lt;br /&gt;
&lt;br /&gt;
==Weitergehende Informationen==&lt;br /&gt;
*[[Alexa und Mappings]]&lt;br /&gt;
*[[Alexa Tipps und Kniffe]]&lt;br /&gt;
*[[FHEM Connector for Amazon Alexa]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Sprachsteuerung]]&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hapege</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHEM_Connector_f%C3%BCr_Amazon_Alexa&amp;diff=40436</id>
		<title>FHEM Connector für Amazon Alexa</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FHEM_Connector_f%C3%BCr_Amazon_Alexa&amp;diff=40436"/>
		<updated>2025-10-14T13:59:20Z</updated>

		<summary type="html">&lt;p&gt;Hapege: Bug in alexa-fhem 0.5.65, siehe https://github.com/justme-1968/alexa-fhem/issues/33, deshalb Hinweis auf die Installation der 0.5.64&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Alexa FHEMlazy&#039;&#039;&#039; war historisch ein Fork des Original [[Alexa-Fhem|alexa-fhem]], der im Januar 2019 mit dem Original zusammengeführt wurde und nun als &#039;&#039;&#039;FHEM Connector&#039;&#039;&#039; verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
Er ermöglicht innerhalb von Minuten die Verknüpfung von FHEM mit einem Amazon Echo Gerät. Auch Geräte anderer Hersteller mit verbauten Mikrofonen und Alexa-Sprachassistenten-Unterstützung sollten problemlos funktionieren. Für folgende Geräte ist dies bspw. der Fall (Falls Ihr andere/weitere Gerätemodelle bzw. Hersteller in Verwendung habt, bitte hier pflegen):&lt;br /&gt;
&lt;br /&gt;
* SONOS Beam und SONOS One   &lt;br /&gt;
&lt;br /&gt;
Gegenüber dem klassischen Ansatz ergeben sich Einschränkungen, so läuft die Software normalerweise unter dem gleichen Benutzer wie FHEM auf dem gleichen Server, und es wird z.Zt. nur der Smarthome-Skill unterstützt (die Variante, bei der die Möglichkeiten der Interaktion von Amazon festgelegt wurden).&lt;br /&gt;
Dafür ist weder ein Developer-Account bei Amazon, eigene Lambda- und Skillfunktionen, noch das Öffnen eines eingehenden Ports aus dem Internet nötig. &lt;br /&gt;
* Die Software integriert einen Installer, der die Erstkonfiguration und Anmeldung übernimmt&lt;br /&gt;
* Die Kommunikation zur Software auf dem heimischen Rechner und dann zu FHEM verläuft über SSH und einen vom FHEM-Verein gehosteten Server&lt;br /&gt;
* Funktioniert mit IPv4, IPv6, echtem Dual Stack und DS-Lite&lt;br /&gt;
* Als Skill bei Amazon wird der Skill &amp;quot;FHEM Connector&amp;quot; verwendet.&lt;br /&gt;
&lt;br /&gt;
Der Thread im Forum zur Software ist hier: {{Link2Forum|Topic=94817}}.&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Einfache Anbindung von FHEM an Amazon Assistent Alexa&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=alexa&lt;br /&gt;
|ModTechName=39_alexa.pm / alexa-fhem&lt;br /&gt;
|ModForumArea=Frontends/Sprachsteuerung&lt;br /&gt;
|ModOwner=gvzdus, André/ justme1968 ({{Link2FU|430|Forum}} / [[Benutzer Diskussion:Justme|Wiki]])&lt;br /&gt;
}} &lt;br /&gt;
==Einführung==&lt;br /&gt;
===Arbeitsweise und Datenfluss===&lt;br /&gt;
Vorläufig ist alexa-fhem im &amp;quot;FHEM Connector-Modus&amp;quot; ein reiner [https://developer.amazon.com/de/docs/smarthome/understand-the-smart-home-skill-api.html SmartHome-Skill].&lt;br /&gt;
SmartHome-Skills erhalten weder die Sprachdaten selber noch das, was Amazon in Textform verstanden hat, sondern vielmehr extrahiert Amazon aus dem verstandenen Text Anweisungen und Abfragen für Geräte, die dann an den Skill übermittelt werden. Charmant ist dabei, dass unmittelbar gefragt werden kann &amp;quot;Alexa, wie ist die Temperatur im Wohnzimmer?&amp;quot;, während andere Skills zunächst explizit angesprochen werden müssen (&amp;quot;Alexa, frage FHEM nach der Temperatur im Wohnzimmer&amp;quot;). Außerdem kann der Nutzer mehrere Smarthome-Skills installieren, und die Geräte werden zu einer Gesamtmenge zusammengefasst.&lt;br /&gt;
&lt;br /&gt;
Gehen wir den Datenfluss bei der konkreten Frage &amp;quot;Wie ist die Temperatur im Wohnzimmer?&amp;quot; durch:&lt;br /&gt;
* Alexa hat bei der Skillinstallation gelernt, dass &amp;quot;FHEM Connector&amp;quot; bei Dir einen Thermostaten im Raum Wohnzimmer kennt. Dadurch wird bei der Sprachanalyse von &amp;quot;Alexa Voice Service&amp;quot; in der Cloud erkannt, dass eine Abfrage an &amp;quot;FHEM Connector&amp;quot; erfolgversprechend ist.&lt;br /&gt;
* Zunächst wird die zentrale &amp;quot;Lambda-Funktion&amp;quot; von &amp;quot;FHEM Connector&amp;quot; aufgerufen. Die Funktion leitet aber im Kern nur den Request unverändert an den vom Verein bereitgestellten Server weiter. Im Request enthalten ist ein Token, das sogenannte &amp;quot;Bearer-Token&amp;quot;.&lt;br /&gt;
* Der &amp;quot;Vereinsserver&amp;quot; prüft anhand dieses Tokens, ob es überhaupt bekannt ist, und zu welchem Nutzer es gehört. Ist dieser Nutzer verbunden, wird der Request wiederum quasi unverändert an den Nutzer weitergeleitet.&lt;br /&gt;
* Diese Weiterleitung passiert über einen sogenannten SSH-Reverse-Tunnel, der von Deiner Seite und der Software auf dem FHEM-Tunnel automatisch aufgebaut wird.&lt;br /&gt;
* Auf Deiner Seite läuft die eigentliche Software, und zwar unter nodeJS. nodeJS ist ein Javascript ausführender Miniserver, der lokal auf einem Zufallsport auf Requests &amp;quot;lauscht&amp;quot;. In der Original-Version  [[Alexa-Fhem|Alexa FHEM]] kommen die Requests aus dem Internet (hoffentlich von der eigenen Lambda-Funktion), hier bei &amp;quot;FHEM Connector&amp;quot; kommen sie ausschließlich aus dem SSH-Tunnel von lokal.&lt;br /&gt;
* Die Software validiert nun diesen Request anhand des Bearer-Tokens. Konkret wird dabei das bei der Installation generierte Token, dass bei der Skill-Aktivierung an Amazon übertragen wurde, mit dem lokal gespeicherten Wert verglichen. Stimmt das Token, wird der Befehl verarbeitet, üblicherweise wird hierbei ein Aufruf an die Webschnittstelle von FHEM abgesetzt.&lt;br /&gt;
* FHEM führt den Befehl aus&lt;br /&gt;
&lt;br /&gt;
Hört sich langsam und kompliziert an? Kompliziert: Okay. Langsam eher nicht, in etlichen Fällen liegt die Gesamtantwortszeit unter 200 ms.&lt;br /&gt;
&lt;br /&gt;
Soweit ein erster Überblick über die Datenflüsse. Im Abschnitt Sicherheit ist das Konzept der Absicherung deutlich genauer und ausführlicher beschrieben.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
Du wirst bei der Installation zuerst auf der Kommandozeile auf Deinem Raspberry (o.ä.) unterwegs sein, anschließend im Webfrontend von FHEM, und zum Schluss auf der Alexa-Konsole im Web.&lt;br /&gt;
&lt;br /&gt;
===node.js installieren===&lt;br /&gt;
&lt;br /&gt;
Ab Jessy liegt NodeJS bereits in einer ausreichend aktuellen Version vor (Stretch und Buster funktionieren ebenfalls). Mit&lt;br /&gt;
&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 install nodejs npm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kannst Du es installieren. Mit &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
node --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
erfährst Du die aktuelle Version - wenn hier etwas mit &amp;quot;8&amp;quot; oder höher vorneweg erscheint, ist alles gut.&lt;br /&gt;
Ansonsten suche Dir bitte eine Anleitung im Web, wie Du NodeJS auf Deinem System auf einen aktuellen Stand bringen kannst.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung:&#039;&#039;&#039; diese Aussage bzgl. node-Version (und Jessie/Stretch) stimmt wohl für alexa-fhem Stand heute (12.06.2020) nicht mehr, siehe https://forum.fhem.de/index.php/topic,112025.msg1063218.html#msg1063218&lt;br /&gt;
&lt;br /&gt;
=== Alexa-FHEM installieren ===&lt;br /&gt;
&lt;br /&gt;
Nun installieren wir Alexa-fhem aus dem offiziellen Repository:&lt;br /&gt;
&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 npm install -g alexa-fhem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Vorgang benötigt etwas Zeit.&lt;br /&gt;
&lt;br /&gt;
(Edit: die aktuelle Version 0.5.65 hat ein Problem, wenn ModeController verwendet wird. Wer modes braucht, der sollte die vorherige Version 0.5.64 installieren: sudo npm install -g alexa-fhem@0.5.64)&lt;br /&gt;
&lt;br /&gt;
=== Alexa-FHEM aktivieren ===&lt;br /&gt;
&lt;br /&gt;
Wechsele jetzt in FHEM-Web!&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, dass das Alexa-Modul in der Version ab Januar 2019 vorliegt. Dafür bitte einmal FHEM aktualisieren:&lt;br /&gt;
Speichern der Config nicht vergessen, und&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
update&lt;br /&gt;
shutdown restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alles, was jetzt noch nötig ist, ist das Anlegen eines Alexa-Devices. Gib dafür in der FHEM-Web-Kommandozeile&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
define alexa alexa&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
an. Nun läuft, während Du bereits das neu angelegte Alexa-Devices siehst, ein komplexer Prozess im Hintergrund:&lt;br /&gt;
&lt;br /&gt;
* Falls noch kein SSH-Key für den Benutzer, unter dem FHEM läuft, existiert, wird einer generiert&lt;br /&gt;
* Es wird ein Secret-Key im Prozess generiert, dass den Server nicht verlässt, und der Skillanmeldung dient.&lt;br /&gt;
* Du wirst auf dem Server &amp;quot;va-fhem.fhem.de&amp;quot; des FHEM-Vereins mit dem SSH-Key angemeldet, und der Hash-Wert Deines Secret-Key dort abgelegt.&lt;br /&gt;
&lt;br /&gt;
Und wenn Du diese Sätze gelesen hast, sollte inzwischen sich das Alexa-Device in FHEM-Web aktualisiert haben, und &lt;br /&gt;
ungefähr so aussehen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Alexa-Device-2.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Neben dem Status für alexa-fhem und der Proxyverbindung ist wichtig, dass diese beiden Zeilen beim Reload aufgetaucht sind:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
alexaFHEM.bearerToken crypt:...&lt;br /&gt;
alexaFHEM.skillRegKey crypt:...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ja, und diesen Schlüssel benötigst Du wirklich! Also am besten schon einmal mit &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
get &amp;lt;alexa&amp;gt; proxyKey&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in Klartext anzeigen lassen und in ein Editor-Fenster dauerhaft wegsichern.&lt;br /&gt;
&lt;br /&gt;
Jetzt solltest Du Dein Alexa-Device nicht mehr löschen, denn das im Reading angezeigte &amp;quot;bearerToken&amp;quot; zu löschen bedeutet, dass die Software die Zugriffe von nicht mehr überprüfen kann und keine Kommandos mehr funktionieren. In diesem Fall hilft nur die Neuinstallation des Skills.&lt;br /&gt;
&lt;br /&gt;
==== Fehler bei der Aktivierung ====&lt;br /&gt;
&lt;br /&gt;
Während kompliziertere Fehlerfälle im Abschnitt &amp;quot;Mögliche Probleme und Lösungen&amp;quot; behandelt werden, hier häufige Fälle, warum die kryptischen Zeilen nicht auftauchen:&lt;br /&gt;
&lt;br /&gt;
* Zuerst bitte einfach einmal die Seite neu laden.&lt;br /&gt;
&lt;br /&gt;
===== 401: Authorization Required =====&lt;br /&gt;
&lt;br /&gt;
Wenn Du FHEM-Web mit einem User/Passwort-Schutz versehen hast, wirst du folgende Fehlermeldung sehen: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
alexaFHEM stopped; failed to connect to fhem: 401: Authorization Required&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Regel musst du die Angaben User/Passwort noch einmal explizit setzen. Im Attribute-Abschnitt &amp;quot;alexaFHEM-auth&amp;quot; auswählen, User/Passwort mit &amp;quot;:&amp;quot; getrennt angeben und &amp;quot;attr&amp;quot; anklicken. alexa-fhem wird automatisch neu gestartet. Hier das Ganze in der Text-Variante:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
attr alexa alexaFHEM-auth user:pass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Permission denied =====&lt;br /&gt;
&lt;br /&gt;
Wenn du folgende Fehlermeldungen im Alexa Logfile siehst, wurde das Verzeichnis &amp;quot;/opt/fhem/.ssh/&amp;quot; von dir bei der Arbeit mit &amp;quot;root&amp;quot; oder &amp;quot;sudo&amp;quot; mit den falschen Berechtigungen versehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
[2019-7-25 11:59:12] sshautoconf: aborted with ssh-keygen returned error - key_save_private: Permission denied&lt;br /&gt;
[2019-7-25 11:59:12] *** SSH: proxy configuration failed: ssh-keygen returned error - key_save_private: Permission denied&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prüfen kannst du die Berechtigungen mit folgendem Befehl auf der Shell-Konsole: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
ls -l /opt/fhem/.ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Du solltest dann folgende Ausgabe erhalten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
insgesamt 12&lt;br /&gt;
-rw------- 1 fhem dialout 1675 Jul 12 13:10 id_rsa&lt;br /&gt;
-rw-r--r-- 1 fhem dialout  391 Jul 12 13:10 id_rsa.pub&lt;br /&gt;
-rw-r--r-- 1 fhem dialout  884 Jul 12 13:10 known_hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Steht in der Ausgabe nicht &amp;quot;fhem dialout&amp;quot; (dein fhem User), sondern bspw. &amp;quot;root root&amp;quot;, dann bspw. mit folgendem Befehl an deinen fhem User anpassen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
chown fhem:dialout /opt/fhem/.ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem ersten Befehl &amp;quot;ls -l ...&amp;quot; kannst du dann nochmal prüfen, ob die Berechtigungen korrekt übernommen wurden. &lt;br /&gt;
&lt;br /&gt;
===== weitere Prüfungen =====&lt;br /&gt;
&lt;br /&gt;
Hast Du noch die Shell-Konsole offen? Dann prüfe bitte noch einmal auf der Konsole, ob nun zwei Prozesse laufen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
ps -ef | egrep &#039;(alexa|ssh)&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sollte Dir idealerweise so etwas anzeigen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
fhem     31322     1 99 13:56 ?        00:00:03 alexa                              &lt;br /&gt;
fhem     31332 31322  8 13:56 ?        00:00:00 /usr/bin/ssh -R 1234:127.0.0.1:&amp;lt;zufälliger port&amp;gt; -oServerAliveInterval=90 -p 58824 fhem-va.fhem.de&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;alexa&amp;quot; ist dabei der Node-JS-Prozess, der ssh-Prozess ist die aufgebaute Verbindung zum Vereinsserver.&lt;br /&gt;
&lt;br /&gt;
Wenn Du diese Prozesse &#039;&#039;&#039;nicht&#039;&#039;&#039; siehst oder das Alexa-Device keinen Registrierungskey anzeigt, dann ist leider der Start nicht glatt verlaufen.&lt;br /&gt;
&lt;br /&gt;
Im Logfile (über den link &amp;lt;code&amp;gt;Logfile&amp;lt;/code&amp;gt; in der Detail-Ansicht über &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;, oder über den Namen bei &#039;&#039;currentlogfile&#039;&#039; in den Internals) findest Du idealerweise selber Hinweise, wo es hakt, oder kannst im Forum nachfragen.&lt;br /&gt;
&lt;br /&gt;
=== Geräte im FHEM-Webfrontend zuweisen ===&lt;br /&gt;
Um das Aha-Erlebnis zu vergrößern, ist jetzt ein guter Zeitpunkt, 1 oder besser mind. 2 Geräte für den Alexa-Dienst zuzuweisen. Von Haus aus wird keines Deiner FHEM-Geräte automatisch Alexa zugewiesen!&lt;br /&gt;
&lt;br /&gt;
Wähle die Geräte aus, rufe sie auf und setze das Attribut &amp;quot;alexaName&amp;quot;. Hierbei in Kürze nur der Hinweis:&lt;br /&gt;
* Keine Angst vor Leerzeichen und Umlauten, funktioniert.&lt;br /&gt;
* Große Angst vor Rechtschreibfehlern (Terrasse, Rollladen) oder komplizierten Wörtern &amp;quot;handgebastelte Martinslaterne im Kinderzimmer Iphigenie-Chantal&amp;quot;.&lt;br /&gt;
* Mehrere Namen für dasselbe Gerät/Device in fhem werden unterstützt. Mehrere Namen werden durch &amp;lt;s&amp;gt;Strichpunkt&amp;lt;/s&amp;gt; Komma getrennt&amp;lt;ref&amp;gt;Feature nicht dokumentiert {{Link2Forum|Topic=74041|LinkText=Forumsthread}}&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* Das Attribut &amp;quot;alexaRoom&amp;quot; ist NUR FÜR DEN CUSTOM SKILL relevant. Ausnahme: structure und LightScene Devices, siehe: [[FHEM_Connector_f%C3%BCr_Amazon_Alexa#Was_geht_alles_.3F]].&lt;br /&gt;
&lt;br /&gt;
Lade die Geräte neu in die Software, indem Du &amp;lt;code&amp;gt;set &amp;lt;alexa&amp;gt; restart&amp;lt;/code&amp;gt; ausführst!&lt;br /&gt;
[[Datei:HowToSet alexaName.png|alternativtext=How to set alexaName|ohne|mini|Wie setzt man das Attribut alexaName]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkungen (weil oft gestellte Fragen im Forum) bzgl. Erkennung von Geräten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Wichtig ist, dass die Filtereinstellung in der alexa-fhem.cfg (zu finden unter &amp;quot;Edit Files&amp;quot;) passt.&lt;br /&gt;
Das, was dort eingetragen ist (Standard: alexaName=..* / also es ist ein alexaName vergeben) auch an den entsprechenden Devices in fhem vorhanden ist.&lt;br /&gt;
Stimmt das nicht überein, kann alexa-fhem keine Devices von fhem abfragen/finden.&lt;br /&gt;
Ob der Filter entsprechend funktioniert kann man wie folgt testen: &#039;&#039;list Filtereinstellung&#039;&#039; beispiel mit Standardfilter: &#039;&#039;list alexaName=..*&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Hat alexa-fhem per Filter Devices aus fhem &amp;quot;gefunden&amp;quot;, geht es weiter mit der &amp;quot;Erkennung&amp;quot;. Also um welches Device (Typ und &amp;quot;Fähigkeiten&amp;quot;) handelt es sich. Dazu gilt folgendes:&lt;br /&gt;
** sind entsprechende Readings beim Device vorhanden (z.B. temperature, state mit on/off, ...) erkennt das alexa-fhem automatisch. Die Liste der automatisch erkannten Readings wächst ständig. Daher erst mal schauen ob das Device bereits entsprechend erkannt (typisiert) wurde. Das kann durch prüfen des alexa-fhem-Logs geschehen (NICHT fhem-log!).&lt;br /&gt;
** sind entsprechende &amp;quot;set-Befehle&amp;quot; erkennbar (oft auch durch Readings). Also ist beispielsweise (wie beim Dummy nötig) ein &#039;&#039;setList&#039;&#039; mit entsprechenden Einträgen vorhanden oder entsprechende Readings, z.B. desired-temp zum Stellen der Temperatur etc.&lt;br /&gt;
** wird das Device nicht richtig oder &amp;quot;unvollständig&amp;quot; erkannt helfen folgende Attribute:&lt;br /&gt;
*** genericDeviceType: hiermit kann alexa-fhem in die gewünschte Richtung &amp;quot;geschubbst&amp;quot; werden. Anmerkung: man kann nicht alles erzwingen, Readings bzw. set-Befehle müssen passen (oder per homebridgeMapping passend gemacht werden). Wenn ein genericDeviceType nicht per &amp;quot;Drop-Down&amp;quot; erscheint, dann kann er auch (wenn bekannt) einfach per WEB-cmd eingegeben werden: &#039;&#039;attr Devicename genericDeviceType media&#039;&#039;&lt;br /&gt;
*** homebridgeMapping: hierdurch kann alexa-fhem bei der Erkennung von Zuständen und möglichen Einstellungen (also WAS kann das Device) unterstützt werden. Mittels homebridgeMapping können vorhandene Readings (Zustände) auf für alexa-fhem bekannte Zustände gemappt werden. Ebenso können damit Standard-fhem-Kommandos von alexa-fhem auf Device-spezifische gemappt werden. Beispiel: on/off auf Ein/Aus (falls das Device statt on/off eben ein Ein/Aus erwartet). Zum Beispiel: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;thermostat&amp;gt; homebridgeMapping TargetTemperature=target::target,minValue=18,maxValue=25,minStep=0.5 CurrentTemperature=myTemp:temperature&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; [https://github.com/justme-1968/homebridge-fhem/blob/master/README.md weitere Beispiele]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&#039;&#039;&#039;Mehrere Namen für dasselbe Gerät/Device in fhem sind möglich.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Die Namen werden durch &amp;lt;s&amp;gt;Strichpunkt&amp;lt;/s&amp;gt; Komma getrennt.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;attr dmLampe alexaName Lichtkuppel,Lichtkugel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung bzgl. genericDeviceType und homebridgeMapping:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* diese Attribute werden von verschiedenen &amp;quot;Sprachsteuerungsmodulen&amp;quot; in fhem verwendet (homebridge [dort wurde es &amp;quot;erfunden&amp;quot;], alexa-fhem, gassistant, ...). Daher ist nicht jedes Mapping für alle &amp;quot;Dienste&amp;quot; verwendbar. Ausprobieren schadet aber nicht.&lt;br /&gt;
* ebenso kann man mit diesen Attributen (homebridgeMapping wird gerne so &amp;quot;missbraucht&amp;quot;) nichts erzwingen, was seitens Amazon/Alexa nicht unterstützt bzw. verstanden wird! D.h. zunächst ist zu prüfen, ob ein bestimmter (gewünschter) Sprachbefehl seitens Amazon/Alexa unterstützt wird! Aktuelles Beispiel (Stand Jan 2020): &amp;quot;Alexa, fahre den Rollo hoch/runter&amp;quot;. Da ist Amazon/Alexa gerade dabei etwas zu tun. Bislang wird das nicht unterstützt, also ist das auch mit einem entsprechenden homebridgeMapping nicht zu erzwingen! Was unterstützt wird kann man bei Amazon nachlesen: [https://developer.amazon.com/es-ES/docs/alexa/device-apis/list-of-interfaces.html]&lt;br /&gt;
&lt;br /&gt;
== Finale: Skill verknüpfen ==&lt;br /&gt;
Suche auf der Alexa-App den Skill &amp;quot;FHEM Connector&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Wenn du noch nicht bei Amazon angemeldet bist, erwartet Amazon zunächst, dass Du Dich normal bei Amazon anmeldest.&lt;br /&gt;
&lt;br /&gt;
Sobald Du &amp;quot;FHEM Connector&amp;quot; aktivierst, öffnet sich ein Browser-Tab mit folgender Maske:&amp;lt;br /&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
[[Datei:FHEMlazy_login.png|240px]]&lt;br /&gt;
&lt;br /&gt;
Hier kopierst Du Deinen Anmeldeschlüssel (im Klartext!) hinein, den du mittels &amp;quot;get alexa proxyKey&amp;quot; erhalten hast, und klickst auf Check. Als glücklicher Mensch ist auf der folgenden Statusseite alles grün:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Datei:FHEMlazy_check.png|240px]]&lt;br /&gt;
&lt;br /&gt;
Im Einzelnen wird hier geprüft, ob Du per SSH verbunden bist (und auch Deine IP zur Sicherheit angezeigt), ob der Reverse-Tunnel steht, ob nodeJS erreichbar ist und wie viele Geräte Alexa gleich finden sollte (in meinem Fall 22).&lt;br /&gt;
&lt;br /&gt;
Sollte etwas nicht grün sein und Du eine Idee zum Fixen haben, kannst Du mit &amp;quot;Retry&amp;quot; neue Versuche auslösen.&lt;br /&gt;
&lt;br /&gt;
Ist alles okay, klicke rechts den Button &amp;quot;Activate Skill&amp;quot;. Du springst damit wieder zurück zu Amazon, die Dir hoffentlich zur erfolgreichen Verknüpfung gratulieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;s&amp;gt;Amazon möchte nun unmittelbar die Gerätesuche starten, und unter SmartHome-Geräte sollten diese nun auftauchen.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Als Abschluss muss man nur noch in ein Echo-Gerät seiner Wahl die Anweisung: &amp;quot;&#039;&#039;Alexa suche smarte Geräte&#039;&#039;&amp;quot; sprechen und schon sollten die oben genannten Geräte gefunden werden und in der APP als Geräte auftauchen.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Was geht alles ? ==&lt;br /&gt;
&lt;br /&gt;
* Geräte, die sich ein- und ausschalten lassen:&lt;br /&gt;
** Automatisch: Müssen &amp;lt;code&amp;gt;set on&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set off&amp;lt;/code&amp;gt; Kommandos haben&lt;br /&gt;
** dummys müssen &amp;lt;code&amp;gt;setList&amp;lt;/code&amp;gt; mit on und off haben&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; switch bzw. light kann bestimmt werden ob es in alexa als Schalter oder Licht behandelt wird.&lt;br /&gt;
** Wenn die Set-Kommandos im FHEM Device anders benannt sind: homebridgeMapping On:cmdOn=&amp;lt;ein&amp;gt;,cmdOff=&amp;lt;aus&amp;gt; setzen&lt;br /&gt;
** Kommandos:&lt;br /&gt;
***Alexa, schalte &amp;lt;name&amp;gt; ein/aus&lt;br /&gt;
***Alexa, Licht an/aus&lt;br /&gt;
***Alexa, schalte &amp;lt;gruppe&amp;gt; ein/aus&lt;br /&gt;
* Geräte, die eine Temperatur messen&lt;br /&gt;
** Automatisch: Es muss ein Reading &amp;lt;code&amp;gt;temperature&amp;lt;/code&amp;gt; geben&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; thermometer&lt;br /&gt;
** Sonst: homebridgeMapping CurrentTemperature:reading=&amp;lt;reading&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Helligkeit sich ändern lässt&lt;br /&gt;
** Automatisch: wenn &amp;lt;code&amp;gt;dim&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;pct&amp;lt;/code&amp;gt; Kommandos erkannt werden&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; light&lt;br /&gt;
** Über homebridgeMapping: Wenn &amp;lt;code&amp;gt;helligkeit&amp;lt;/code&amp;gt; das Reading für die aktuelle Helligkeit enthält und die Helligkeit mit &amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; prozent xxx&amp;lt;/code&amp;gt; gesetzt wird, sieht das homebridgeMapping wie folgt aus: homebridgeMapping Brightness=helligkeit::prozent,minValue=0,maxValue=&amp;lt;maximalwert&amp;gt;&lt;br /&gt;
** Kommandos:&lt;br /&gt;
*** Alexa, mache &amp;lt;name&amp;gt; heller/dunkler&lt;br /&gt;
*** Alexa, Licht heller/dunkler&lt;br /&gt;
* Geräte, deren Farbe sich ändern lässt&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Farbtemperatur sich ändern lässt&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, bei denen sich eine Lautstärke einstellen lässt&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, bei denen sich ein prozentualer Wert einstellen lässt&lt;br /&gt;
** Automatisch: wenn &amp;lt;code&amp;gt;dim&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;pct&amp;lt;/code&amp;gt; Kommandos erkannt werden&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* elektrische Türschlösser&lt;br /&gt;
** &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt;: lock&lt;br /&gt;
** homebridgeMapping mit LockCurrentState und LockTargetState&lt;br /&gt;
&lt;br /&gt;
* Thermostate&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; thermostate&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* structure Devices aus FHEM (ab alexa-fhem version 0.5.7)&lt;br /&gt;
** können mit &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; scene als Szene eingebunden werden&lt;br /&gt;
** über &amp;lt;code&amp;gt;alexaRoom&amp;lt;/code&amp;gt; kann der name um einen Ort ergänzt werden&lt;br /&gt;
** Szenen aus einer structure lassen sich ein- und ausschalten&lt;br /&gt;
** Wichtig:&lt;br /&gt;
*** Ein Skill darf nur 12 Szenen automatisch erkennen und einbinden.&lt;br /&gt;
&lt;br /&gt;
* LightScene Devices aus FHEM (ab alexa-fhem version 0.5.8)&lt;br /&gt;
** können mit &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; scene als Szenen eingebunden werden&lt;br /&gt;
** über &amp;lt;code&amp;gt;alexaRoom&amp;lt;/code&amp;gt; kann der name um einen Ort ergänzt werden&lt;br /&gt;
** Szenen aus einer LightScene lassen sich nur einschalten&lt;br /&gt;
** Wichtig:&lt;br /&gt;
*** Ein Skill darf nur 12 Szenen automatisch erkennen und einbinden.&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Kanal sich umschalten lässt (ab alexa-fhem version 0.5.13)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; media&lt;br /&gt;
** homebridgeMapping ChannelController:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt;&lt;br /&gt;
** Erlaubte Werte siehe hier: https://developer.amazon.com/de/docs/device-apis/alexa-channelcontroller.html#changechannel&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Playback status sich schalten lässt (ab alexa-fhem version 0.5.13)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; media&lt;br /&gt;
** homebridgeMapping PlaybackController:playback,values=Play;Pause;Stop;Previous;Next&lt;br /&gt;
** Erlaubte Werte siehe hier: https://developer.amazon.com/de/docs/device-apis/alexa-playbackcontroller.html#discovery&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Eingang sich umschalten lässt (ab alexa-fhem version 0.5.13)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; media&lt;br /&gt;
** homebridgeMapping InputController:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt;,values=HDMI+1;HDMI+2;XBOX&lt;br /&gt;
** Erlaubte Werte siehe hier: https://developer.amazon.com/de/docs/device-apis/alexa-property-schemas.html#input&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Kontaktsensoren (ab alexa-fhem version 0.5.15)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; contact&lt;br /&gt;
** homebridgeMapping ContactSensorState:reading=&amp;lt;reading&amp;gt; oder CurrentDoorState:reading=&amp;lt;reading&amp;gt;&lt;br /&gt;
** Die Anzeige in der Alexa-App funktioniert sofort, die Abfrage per Sprache erst ab Version 0.5.27.&lt;br /&gt;
&lt;br /&gt;
* Geräte, deren Lautstärke sich ändern lässt (ab alexa-fhem version 0.5.24)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; speaker&lt;br /&gt;
** Automatisch: es muss ein Reading &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; und/oder &amp;lt;code&amp;gt;mute&amp;lt;/code&amp;gt; geben&lt;br /&gt;
** homebridgeMapping Volume:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt; Mute:reading=&amp;lt;reading&amp;gt;,cmd=&amp;lt;cmd&amp;gt;&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
* Geräte, die sich ein- (und optional) ausschalten lassen als Szene (ab alexa-fhem version 0.5.26)&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; scene&lt;br /&gt;
** Automatisch: Müssen &amp;lt;code&amp;gt;set on&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set off&amp;lt;/code&amp;gt; Kommandos haben&lt;br /&gt;
** homebridgeMapping On:reading=&amp;lt;reading&amp;gt;,cmdOn=&amp;lt;cmd&amp;gt;[,cmdOff=&amp;lt;cmd&amp;gt;]&lt;br /&gt;
** Hinweis: Fehlende Kommandos lassen sich mit cmdalias erzeugen&lt;br /&gt;
** Wichtig:&lt;br /&gt;
*** Ein Skill darf nur 12 Szenen automatisch erkennen und einbinden.&lt;br /&gt;
* Rollläden. Lange ein Problemthema, das nur mit &amp;quot;Schalte auf 0%, schalte auf 100% lief&amp;quot;. Wichtig: &amp;quot;alexa-fhem&amp;quot; ab Version 0.5.39 einsetzen. GenericDevice-Type auf &amp;quot;blind&amp;quot; setzen. Nach Restart von alexa-fhem und neuer Gerätesuche sollte folgendes funktionieren:&lt;br /&gt;
** &amp;quot;..., öffne &amp;lt;Name&amp;gt; ganz&amp;quot;&lt;br /&gt;
** &amp;quot;..., schließe &amp;lt;Name&amp;gt; komplett&amp;quot;&lt;br /&gt;
** &amp;quot;hoch&amp;quot; und &amp;quot;runter&amp;quot; (ohne &amp;quot;ganz&amp;quot; oder &amp;quot;komplett&amp;quot;) schalten jeweils nur einen bestimmten Prozentsatz hoch oder runter. Dieser kann mit &amp;lt;code&amp;gt;attr &amp;lt;name&amp;gt; homebridgeMapping TargetPosition:minStep=&amp;lt;wert&amp;gt;&amp;lt;/code&amp;gt;geändert werden. Aber Achtung: In diesem Intervall kann dann auch nur noch ein absoluter Prozentwert per Sprache oder Slider eingestellt werden! Bei z.B. 25% würden 13% zu 25% aufgerundet, 12% zu 0% abgerundet werden.&lt;br /&gt;
* Kontaktsensoren (ab alexa-fhem version 0.5.47)&lt;br /&gt;
** Automatisch wenn ein Reading &amp;lt;code&amp;gt;motion&amp;lt;/code&amp;gt; vorhanden ist oder es sich um einen Zigbee bewgungsmelder an einer HUE oder deCONZ Bridge handelt&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; MotionSensor&lt;br /&gt;
** homebridgeMapping MotionDetected:reading=&amp;lt;reading&amp;gt;,values=&amp;lt;wert für bewgung&amp;gt;:1;&amp;lt;wert für keine bewegung&amp;gt;:0&lt;br /&gt;
&lt;br /&gt;
* Alarmmelder (noch nicht in Deutschland):&lt;br /&gt;
** genericDeviceType Security&lt;br /&gt;
** homebridgeMapping Alarm=&amp;lt;reading&amp;gt;[,type=[fireAlarm|waterAlarm|burglaryAlarm|carbonMonoxideAlarm]]&lt;br /&gt;
** wenn der type nicht angegeben wird ist fireAlarm der default&lt;br /&gt;
** automatisch werden 0, ok und alles was mit no anfängt als OK erkannt. alles andere gilt als ALARM.&lt;br /&gt;
*Geräte mit mehrstufigen Modi:&lt;br /&gt;
**siehe den zugehörigen Thread im Forum: {{Link2Forum|Topic= 125604}}&lt;br /&gt;
&lt;br /&gt;
Es werden noch einige andere häufig verwendete Geräte (Homematic, hue,...) automatisch erkannt.&lt;br /&gt;
&lt;br /&gt;
to be continued ...&lt;br /&gt;
&lt;br /&gt;
In der [https://developer.amazon.com/docs/device-apis/list-of-interfaces.html List of Capability Interfaces] bei Amazon kann man sehen, welche Möglichkeiten das Smart Home Skill API aktuell in einzelnen Ländern bietet. Leider ohne die jeweiligen landessprachlichen Kommandos.&lt;br /&gt;
&lt;br /&gt;
=== Aktiv Routinen starten ===&lt;br /&gt;
Routinen (eine Funktionalität, die rein - genauso wie &amp;quot;Räume&amp;quot; - bei Amazon liegt und nicht von FHEM Connector beeinflusst wird) waren lange die ewige Antwort auf die Frage: &amp;quot;Meine Frau möchte aber &#039;&#039;&#039;Öffne Rollläden&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; sagen&amp;quot;: In der Alexa-App gibt es im Menü den Punkt &amp;quot;Routinen&amp;quot;, und hier lässt sich eine gewisse Anzahl von Aktionen (unter optionalen Bedingungen) an ein Sprachkommando knüpfen.&lt;br /&gt;
&lt;br /&gt;
Neu: Routinen können inzwischen auch von Skills getriggert werden, und seit Version 0.5.47 (Februar 2020) auch von FHEM Connector. Das braucht niemand, um die Rollläden hochzufahren, denn das kann FHEM ja selber, aber um z.B. eine Ansage auf einem Alexa-Gerät zu triggern. Dafür gibt es auch das FHEM-Modul &amp;quot;echodevice&amp;quot;, aber es erfordert ein paar Klimmzüge. Mit dem aktiven Triggern von Routinen kann FHEM auslösen, dass Alexa ungefragt (!) Dinge wie &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;Die Temperatur in der Tiefkühltruhe hat -16 Grad überschritten&amp;quot;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
in den Raum sagt. Also eine Alternative bzw. Ergänzung zu Alarmen / Erinnerungen per Telegram o.ä.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorgeschichte&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Die Smarthome-Skill-API von Amazon sah schon lange das &amp;quot;proactiveReporting&amp;quot; vor: Also z.B. die gemessene Temperatur nicht erst auf Anfrage hin zu übermitteln, sondern laufend aktiv zu pushen. Aber warum Daten an Amazon senden, wenn es dafür keinen Mehrwert gibt? Beim Öffnen z.B. des Thermostaten in der Alexa-App kommen ohnehin laufend Statusabfragen. Warum also einen Datenpool bei Amazon über die Haustemperatur aufbauen und Änderungen pushen, wenn es keinen Mehrwert dafür gibt? &lt;br /&gt;
&lt;br /&gt;
Inzwischen lassen sich (reale oder vermeintliche) Änderungen von &#039;&#039;Bewegungssensoren&#039;&#039; und &#039;&#039;Fensterkontakten&#039;&#039; als Startbedingung an Alexa-Routinen koppeln. Man kann in der Alexa-App (ggf. fiktive) Öffnen eines Fensterkontaktes an das Aufsagen eines freien Textes durch die Hausbutlerin knüpfen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Umsetzung&#039;&#039;&#039;:&lt;br /&gt;
* Jedes Alexa-Device, dessen Status aktiv zu Amazon gepusht werden soll, im Attribut &amp;quot;alexaProactiveEvents&amp;quot; mit einer &amp;quot;1&amp;quot; versehen. Per Default wird &#039;&#039;kein&#039;&#039; Gerät laufend aktiv zu Amazon gepusht!&lt;br /&gt;
* das geänderte Device einmal zu Amazon pushen &amp;quot;set &amp;lt;alexa&amp;gt; add &amp;lt;device&amp;gt;&amp;quot; (oder &#039;Alexa, suche neue Geräte&#039; murmeln)&lt;br /&gt;
* Das Gerät sollte jetzt beim Anlegen einer neuen Routine (&amp;quot;Neue Routine&amp;quot;, &amp;quot;Wenn Folgendes passiert&amp;quot;, &amp;quot;Smart Home&amp;quot;) als möglicher Triggerpunkt erscheinen.&lt;br /&gt;
&lt;br /&gt;
==== Dummygeräte: ====&lt;br /&gt;
Ein Dummydevice sollte einen Kontaktschalter oder Bewegungssensor simulieren, um dann in FHEM eine beliebige Bedingung als Trigger zu definieren, und eine freie Ansage in Alexa als Routine zu definieren. Hier ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
define voicetrigger1 dummy&lt;br /&gt;
attr voicetrigger1 alexaName alle Fenster&lt;br /&gt;
attr voicetrigger1 alexaProactiveEvents 1&lt;br /&gt;
attr voicetrigger1 genericDeviceType contact&lt;br /&gt;
attr voicetrigger1 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED&lt;br /&gt;
attr voicetrigger1 setList open closed&lt;br /&gt;
&lt;br /&gt;
set alexa add voicetrigger1&lt;br /&gt;
set alexa restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fehlersuche:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Push setzt ein intaktes Push-Token voraus. Sollte im Alexa-Logfile Folgendes erscheinen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;failed to refresh token: invalid_grant: &#039;The request has an invalid grant parameter : refresh_token&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
so ist das Push-Token nicht aktuell. Weil die Auswirkung lange nur war, dass Geräteänderungen nicht aktiv an Amazon gemeldet wurden, gibt es noch keine umfassende Analyse des Problems. Es lässt sich lösen, indem eine oder beide folgenden Aktionen ausgeführt werden:&lt;br /&gt;
* Löschen des &amp;quot;.eventToken&amp;quot; im Alexa-Device über &amp;quot;deletereading&amp;quot;&lt;br /&gt;
* &amp;quot;FHEM-Connector&amp;quot;-Skill auf &amp;quot;alexa.amazon.de&amp;quot; einmal deaktivieren und dann neu verbinden&lt;br /&gt;
&lt;br /&gt;
== Mögliche Probleme und Lösungen ==&lt;br /&gt;
&lt;br /&gt;
Es kann vorkommen, dass Geräte zwar korrekt erkannt werden, aber das durch Alexa erkannte Kommando nicht richtig umgesetzt wird (Beispiel - mittlerweile behoben: {{Link2Forum|Topic=96766}}). Neben dem FHEM-Log gibt es noch das Logfile, welches von alexa-fhem angelegt wird. &lt;br /&gt;
&lt;br /&gt;
=== Fehlersuche über die FHEM-Oberfläche ===&lt;br /&gt;
&lt;br /&gt;
* alexa-fhem Logfile anschauen (Detail-Ansicht des &amp;lt;alexa&amp;gt;-Device aufrufen, klick auf &#039;&#039;&#039;Logfile&#039;&#039;&#039; oben)&lt;br /&gt;
* alexa-fhem im Debug-Modus aufrufen:&lt;br /&gt;
** -D zum alexaFHEM-params attribut hinzufügen&lt;br /&gt;
** Alexa-Befehl auslösen&lt;br /&gt;
** -D aus dem alexaFHEM-params attribut entfernen&lt;br /&gt;
* Die notwendigen Informationen finden sich in dem alexa-Logfile (siehe oben)&lt;br /&gt;
&lt;br /&gt;
=== Fehlersuche über Kommandozeile (lies: Shell) + FHEM-Oberfläche ===&lt;br /&gt;
&lt;br /&gt;
:* set &amp;lt;alexa&amp;gt; stop (FHEM-Oberfläche)&lt;br /&gt;
:* Auf der Kommandozeile &amp;lt;code&amp;gt;alexa-fhem -D -c /opt/fhem/alexa-fhem.cfg &amp;gt; debug.log&amp;lt;/code&amp;gt; starten (dadurch wird die Datei debug.log erzeugt im aktuellen Verzeichnis)&lt;br /&gt;
:* Alexa-Befehl auslösen&lt;br /&gt;
:* alexa-fhem auf der Kommandozeile wieder stoppen (CTRL-C)&lt;br /&gt;
:* set &amp;lt;alexa&amp;gt; start (FHEM-Oberfläche)&lt;br /&gt;
&lt;br /&gt;
Die Datei debug.log sollte Hinweise enthalten, wie das Problem zu lösen ist oder Dich zumindest in die richtige Richtung schieben.&lt;br /&gt;
&lt;br /&gt;
Im Beispiel aus dem Forum fand sich in dem Logfile der Hinweis darauf, dass das Device mit falschen min/max-Werten unterwegs war.&lt;br /&gt;
&lt;br /&gt;
=== Registrierungskey vergessen, Registrierung zurücksetzen ===&lt;br /&gt;
&lt;br /&gt;
Auf der Kommandoshell:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
pi@raspberrypi:~# sudo -u fhem ssh -p 58824 fhem-va.fhem.de status&lt;br /&gt;
Registered.&lt;br /&gt;
Registered on 2019-01-13T15:38:13Z.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
heisst, das der Vereinsserver eigentlich alles hat, was er will. Es wird kein neuer Schlüssel generiert.&lt;br /&gt;
Wenn Du die Situation zurücksetzen möchtest, wäre die hässliche Methode, Deinen SSH-Key zu löschen. Eleganter ist, die Registrierung auf Vereinsseite zu löschen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:90%;&amp;quot;&amp;gt;&lt;br /&gt;
pi@raspberrypi:~# sudo -u fhem ssh -p 58824 fhem-va.fhem.de unregister&lt;br /&gt;
Your registration has been removed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
löscht Deinen Schlüssel mitsamt allen dort gespeicherten Daten auf Vereinsseite. Bei Restart von alexa-fhem in FHEM-WEB wird jetzt ein neuer Registrierungskey angefordert.&lt;br /&gt;
&lt;br /&gt;
== Sicherheitskonzept und Secrets ==&lt;br /&gt;
&lt;br /&gt;
Um diesen Abschnitt zu verstehen, solltest Du den Abschnitt &amp;quot;Arbeitsweise&amp;quot; im Kopf haben. Einerseits ist Dir vermutlich einleuchtend, dass ein Server, der per SSH rückwärts nur ausgewählte Kommandos in den Tunnel, den Du aufgebaut hast, leitet, &amp;quot;irgendwie sicherer&amp;quot; ist. Andererseits möchte man nicht blind vertrauen.&lt;br /&gt;
&lt;br /&gt;
=== SSH ===&lt;br /&gt;
==== SSH - macht das nichts Gefährliches? ====&lt;br /&gt;
SSH ist ein Veteran des Internet und entstand, um sich sicher (verschlüsselt) und schnell auf Servern einzuloggen. Schon früh wurde dabei der sogenannte &amp;quot;Reverse-Tunnel&amp;quot; implementiert: Also der vom Client (Deinem Rechner) geäußerte Wunsch: &amp;quot;Bitte leite mir Requests, die bei Dir, Server, auf Port xy eingehen, an meinen lokalen Port yz weiter.&amp;quot;. Dieses Verfahren implementiert der Reverseproxy, wobei tatsächlich auf dem Server für Dich kein echter Port geöffnet wird.&lt;br /&gt;
&lt;br /&gt;
Wie Dir ggf. sicher der Unix-Guru Deines Vertrauens bestätigen wird: Die Kombination&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
ssh -R 1234:localhost:&amp;lt;zufälliger port&amp;gt; zielserver &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
erlaubt keine Ausführung von Shell-Kommandos auf Deinem Server, sondern einzig, dass vom SSH-Programm Verbindungen zu einem lokalen Port auf Deinem Server auf dem alexa-fhem lauscht aufgebaut werden. Du kannst also z.B. mit einem&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 /usr/sbin/tcpdump -X -s 0 -i lo port &amp;lt;zufälliger port&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
vollständig überwachen (oder ggf. permanent aufzeichen), was auf Deinem Server von außen gesteuert passiert.&lt;br /&gt;
&lt;br /&gt;
==== Wie wird bei SSH verschlüsselt? ====&lt;br /&gt;
Im Prinzip wie im Web auf SSL-Seiten, teils mit den gleichen Verschlüsselungsverfahren. Allerdings arbeitet SSH eher wie das im Web recht seltene Verfahren: Bei jeder Verbindung übermitteln sowohl Server wie auch Client den öffentlichen Teil ihres Schlüssels. Anders als im Web wird der Schlüssel aber nicht von einer öffentlichen Zertifizierungsstelle wie &amp;quot;LetsEncrypt&amp;quot; unterschrieben. Stattdessen entscheiden Server wie Client beim ersten Verbindungsaufbau typischerweise per manueller Frage: &amp;quot;Willst Du jetzt und künftig diesem Schlüssel vertrauen?&amp;quot; Bei der Installation wird diese Frage für Deine Seite bejaht, und fortan wird der öffentliche Schlüssel des FHEM-Servers auf Deinem Rechner gespeichert. Ab da bist Du z.B. davor sicher, dass jemand den DNS-Eintrag verbiegt oder sich in den Datenfluss Deines Providers einhängt: Ein geänderter Serverschlüssel würde bemerkt werden.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Soweit klar? Aus Deinem öffentlichen Schlüssel wiederum leitet der Server her: &amp;quot;Das ist definitiv wieder derjenige, der sich damals &amp;quot;registriert&amp;quot; hat&amp;quot;. Und an dieser Stelle kann ich auch den &amp;lt;b&amp;gt;ersten Teil des 3-teiligen Registrierungskeys&amp;lt;/b&amp;gt; erläutern: Die typischerweise 6-stellige Hex-Zahl am Anfang ist der Java-Hashcode Deines öffentlichen Schlüssel. Sie ist damit sozusagen Deine aus Deinem öffentlichen Schlüssel abgeleitete Benutzer-ID.&lt;br /&gt;
&lt;br /&gt;
=== Die Rolle der Secrets ===&lt;br /&gt;
Wenn jetzt klar ist, dass die Verbindung zum Vereinsserver sicher und vertauschungsfrei funktioniert, bleiben noch 2 Probleme zu lösen:&lt;br /&gt;
1) Im Web bei der Skill-Aktivierung musst Du beweisen, dass Du der Mensch am Browser bist, dem der SSH-Tunnel von IP xy mit dem öffentlichen Schlüssel X gehört. Bei der automatischen Registrierung werden lokal auf Deinem Rechner zwei 64-Bit-Secrets generiert:&lt;br /&gt;
* Das &amp;lt;b&amp;gt;Anmelde&amp;lt;/b&amp;gt;-Secret&lt;br /&gt;
* Das &amp;lt;b&amp;gt;Bearer&amp;lt;/b&amp;gt;-Token&lt;br /&gt;
Beim Anmelden des SSH-Keys auf dem öffentlichen Server wird nun der &amp;lt;b&amp;gt;Hashwert&amp;lt;/b&amp;gt; des ersten Secrets übertragen und dort in Verbindung mit Deinem öffentlichen Schlüssel gespeichert. Ein Hashwert bedeutet, dass (sofern das Verfahren, hier SHA256, funktioniert), niemand aus dem Hash das Secret zurückrechnen kann. Ein Datenbankklau auf dem Server gefährdet also nicht die Sicherheit Deines Passwortes.&lt;br /&gt;
&lt;br /&gt;
Wenn Du nun beim Skill-Aktivieren den Registrierungskey eingibst, dann &amp;quot;sieht&amp;quot; der Server zum ersten Mal Dein ausgewürfeltes Secret, vergleicht es mit dem Hashwert und wird es anschließend wieder umgehend vergessen. Anhand des Hashwertes kann der Server aber entscheiden, dass Du der legitime Nutzer zum öffentlichen Schlüssel XY bist.&lt;br /&gt;
&lt;br /&gt;
2) Das zweite Problem ist: Wie soll Amazon &amp;quot;beweisen&amp;quot;, dass sie der legitime Aufrufer sind? Amazon erhält binnen wenigen Sekunden nach dem Klick auf &amp;quot;Activate Skill&amp;quot; den &amp;lt;b&amp;gt;dritten Teil&amp;lt;/b&amp;gt; des Registrierungskeys als sogenanntes Bearer-Token. Zwar läuft er durch den Registrierungsserver, er wird dort, auf dem Registrierungs/Vereinsserver aber nicht gespeichert. Das Bearer-Token wird von Amazon bei allen Requests zu Deinem Server mitgesendet. Da es am Anfang zusätzlich Deine &amp;quot;User-ID&amp;quot; enthält, weiß der Vereinsserver, zu welchem SSH-Tunnel der Request zu senden ist. Aber lokal auf Deinem Rechner wird ausgewertet, ob das Token &amp;quot;stimmt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== alexa-fhem Updaten bzw. &amp;quot;Upgraden&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updaten einer &amp;quot;Connector&amp;quot; Installation:&#039;&#039;&#039;&lt;br /&gt;
* alexa-fhem über FHEM anhalten (Name des Alexa-Device: alexa):&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;set alexa stop&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Auf der Konsole wie anfangs bei der Installation:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;sudo npm update -g alexa-fhem&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Manchmal hat npm Probleme mit einem Update. Dann einfach die aktuelle Version noch mal drüber Installieren: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;sudo npm install -g alexa-fhem&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*alexa-fhem über FHEM wieder starten:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;set alexa start&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Upgraden von einer &amp;quot;Nicht-Connector&amp;quot; Installation (z.B. manuelle Installation per pm-Download):&#039;&#039;&#039;&lt;br /&gt;
* Daten der aktuellen Installation sichern (v.a. config.json / man weiß ja nie)&lt;br /&gt;
* Autostart der aktuellen alexa-fhem Installation deaktivieren:&lt;br /&gt;
** Bei initd: Service deaktivieren mittels: &amp;lt;code&amp;gt;sudo update-rc.d -f alexa remove&amp;lt;/code&amp;gt; Vorher mittels stoppen: &amp;lt;code&amp;gt;sudo service alexa stop&amp;lt;/code&amp;gt; Startscript unter /etc/init.d/ löschen.&lt;br /&gt;
** Bei systemd: Service deaktivieren mittels: &amp;lt;code&amp;gt;sudo systemctl disable alexa&amp;lt;/code&amp;gt; Vorher mittels stoppen: &amp;lt;code&amp;gt;sudo systemctl alexa stop&amp;lt;/code&amp;gt; Startscript unter /etc/systemd/system/ löschen.&lt;br /&gt;
* ALLE vorhandenen alexa-fhem Daten LÖSCHEN! Bleiben Dinge zurück und wird dann laut Connector installiert kann es zu Problemen kommen!&lt;br /&gt;
* (reboot)&lt;br /&gt;
* Installation von alexa-fhem laut Anleitung (Beginn dieses Wiki)&lt;br /&gt;
* Falls eigene Dinge von früher genutzt werden wollen/sollen (z.B. Custom Skill), dann die entsprechenden Einträge aus der gesicherten config.json in die neu angelegte alexa-fhem.cfg (zu finden unter &amp;quot;Edit files&amp;quot;) übernehmen.&lt;br /&gt;
* Werden keine eigenen Dinge verwendet, dann kann der Port (Standard: 3000) geschlossen werden und auch die Daten unter Amazon-Developer können gelöscht werden.&lt;br /&gt;
&lt;br /&gt;
== Bug- und Wunschliste ==&lt;br /&gt;
* Ist beim Start keine Internetverbindung vorhanden, erfolgt kein Retry -- alexa-fhem muss restartet werden (ssh_autoconfig wertet keine temporären Fehler aus)&lt;br /&gt;
&lt;br /&gt;
==Weitergehende Informationen==&lt;br /&gt;
*[[Alexa und Mappings]]&lt;br /&gt;
*[[Alexa Tipps und Kniffe]]&lt;br /&gt;
*[[FHEM Connector for Amazon Alexa]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Sprachsteuerung]]&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hapege</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Broadlink&amp;diff=39336</id>
		<title>Broadlink</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Broadlink&amp;diff=39336"/>
		<updated>2024-05-18T11:18:42Z</updated>

		<summary type="html">&lt;p&gt;Hapege: /* Skripte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Beschreibung ==&lt;br /&gt;
Die chinesische Firma BroadLink stellt unter Anderem auch Gateways her, die sich per Wifi ansprechen lassen und Infrator (38KHz-IR) bzw. RF (433/315 MHz-RF) Komponenten fernsteuern können (https://www.ibroadlink.com/productinfo/762672.html).&lt;br /&gt;
&lt;br /&gt;
Die Gateways werden mit Hilfe einer Android- oder iOS-App (&amp;quot;Intelligent Home Center for EU (IHC) oder &amp;quot;BroadLink - Universal TV Remote&amp;quot;) angelernt.&lt;br /&gt;
&lt;br /&gt;
Danach stellen sie die Möglichkeit bereit, &lt;br /&gt;
* Infrarot- (und ggf. RF-) Codes bzw. Code-Sequenzen zu erfassen und via WLAN als Parameter zu übermitteln und&lt;br /&gt;
* (gelernte) Codes an kompatible IR- bzw. RF-Empfänger zu versenden. &lt;br /&gt;
&lt;br /&gt;
Die dazugehörige openAPI ist nicht öffentlich und unterliegt einer BroadLink NDA.&lt;br /&gt;
&lt;br /&gt;
Zur praktischen Verwendung gibt es mehrere Schnittstellen:&lt;br /&gt;
# die offizielle App (https://www.ibroadlink.com/bleapp), mit der Codes angelernt, in der App gespeichert und im lokalen WLAN über die RM versendet werden können,&lt;br /&gt;
# die &#039;&#039;[http://rm-bridge.fun2code.de/ RM Bridge]&#039;&#039; für Android-Geräte, die eine HTTP REST web API auf dem Androidgerät als Webservice bereitstellt,&lt;br /&gt;
# die &#039;&#039;Python-Bibliothek [https://github.com/mjg59/python-broadlink python-broadlink]&#039;&#039; von Matthew Garrett (mjg59) für Server, auf denen Python lauffähig ist. Diese kann dann direkt per (Shell-)Skript [https://forum.fhem.de/index.php/topic,54334.15.html aufgerufen werden] aber auch noch schön gekapselt werden:&lt;br /&gt;
# &#039;&#039;{{Link2Forum|Topic=38231|Message=581909|LinkText=Webservice für Python fähige Server}}&#039;&#039;. In dieser Form sind dann gelernte Sendebefehle elegant als [[HTTPMOD]] Objekte in FHEM integrierbar.&lt;br /&gt;
&lt;br /&gt;
=== BroadLink RM mini ===&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=RMmini.png&lt;br /&gt;
|Bildbeschreibung= BroadLink RM mini 3&lt;br /&gt;
|HWProtocol= Infrarot&lt;br /&gt;
|HWType= Gateway&lt;br /&gt;
|HWCategory= Infrarot&lt;br /&gt;
|HWComm= Infrarot 38 KHz&amp;lt;br /&amp;gt;Wifi 2.4GHz b/g/n &lt;br /&gt;
|HWChannels= 1&lt;br /&gt;
|HWVoltage= 5V&lt;br /&gt;
|HWPowerConsumption= max. 2,5W (max. 0,5A)&amp;lt;br /&amp;gt;standby ca. 0.85W&lt;br /&gt;
|HWPoweredBy= Micro USB&lt;br /&gt;
|HWSize= 5.5 x 5.5 x 6.45 cm&lt;br /&gt;
|HWDeviceFHEM= Broadlink&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer= [http://www.ibroadlink.com/rmMini3/ BroadLink]&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der BroadLink RM mini 3 (wird nicht mehr hergestellt, evtl. noch bei Amazon / ebay erhätlich) ist ein WLAN zu Infrarot Gateway (ohne RF, vgl. [[#BroadLink RM Pro|RM Pro]]). Im Vergleich zum RM Pro ist die Sendeleistung deutlich schwächer, da nur ein IR-Transmitter verbaut ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BroadLink RM Pro ===&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=RMPro.png&lt;br /&gt;
|Bildbeschreibung= BroadLink RM Pro&lt;br /&gt;
|HWProtocol= Infrarot, RF&lt;br /&gt;
|HWType= Gateway&lt;br /&gt;
|HWCategory= Infrarot, RF&lt;br /&gt;
|HWComm= Infrarot 38 KHz&amp;lt;br /&amp;gt;RF 433/315 MHz&amp;lt;br /&amp;gt;Wifi 2.4GHz b/g/n &lt;br /&gt;
|HWChannels= 2&lt;br /&gt;
|HWVoltage= 5V&lt;br /&gt;
|HWPowerConsumption= max. 5W (max. 1A)&amp;lt;br /&amp;gt;ca. 1W standby&lt;br /&gt;
|HWPoweredBy= Micro USB&lt;br /&gt;
|HWSize= 11 x 3,5 x 11,5 cm &lt;br /&gt;
|HWDeviceFHEM= Broadlink&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer= [http://www.ibroadlink.com/rmPro/ BroadLink]&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der BroadLink RM Pro/RM3 (wird nicht mehr hergestellt, evtl. noch bei Amazon / ebay erhältlich) ist ein WLAN zu Infrarot- und RF Gateway. Der aktuelle Nachfolger ist der RMpro 4 (https://www.ibroadlink.com/productinfo/762672.html).&lt;br /&gt;
&lt;br /&gt;
Der RM Pro verfügt im Vergleich zum [[#BroadLink RM mini|RM mini]] über eine größere Reichweite, da 6+1 (Kreis und Mitte) IR-Transmitter verbaut sind.&lt;br /&gt;
&lt;br /&gt;
(In der Version RM3 soll der unterstützte RF-Bereich inoffiziell sogar 142...1050 MHz betragen.)&lt;br /&gt;
&lt;br /&gt;
Der RM Pro enthält auch einen Temperatursensor, der mindestens über die App ausgelesen und für Aktions-Regeln verwendet werden kann. Der Sensor ist offenbar nicht in allen Versionen verbaut bzw. kann oft nur als externer Sensor angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Es gab/gibt Vorgängerversionen:&lt;br /&gt;
* RM Home/RM1: &amp;quot;rote Version&amp;quot;; nur IR, ohne RF; schwache Sendeleistung&lt;br /&gt;
* RM Pro/RM2: &amp;quot;schwarze Version&amp;quot;; ID 10&amp;amp;nbsp;002; IR und RF 433/315MHz; verstärkte IR-Sendeleistung (7 IR-Transmitter)&lt;br /&gt;
* (OEM Version) RM Plus: schwarz, keine Aufkleber, keine Beschriftungen, gerade, nicht abgerundete Oberseite... (soll intern baugleich mit RM Pro/RM3 sein).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nutzung in FHEM ==&lt;br /&gt;
=== Modul ===&lt;br /&gt;
&#039;&#039;&#039;Achtung: Das Modul wird offenbar nicht mehr gepflegt und funktioniert bei vielen Nutzern nicht bzw. (nach Rücksetzen des Gateways) nicht mehr. Empfohlen wird aktuell der Einsatz der unten genannten python Module und der dort hinterlegten Skripte.&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es gibt das {{Link2CmdRef|Lang=de|Label=Modul Broadlink|Anker=Broadlink}}, mit dem Broadlink-Geräte in FHEM eingebunden werden können:&lt;br /&gt;
* rmpro  (RM Pro) &lt;br /&gt;
* rmmini (RM mini)&lt;br /&gt;
* sp3 (SP3 - Schalter)&lt;br /&gt;
* sp3s (SP3S - Schalter mit aktueller Energieverbrauchsmessung)&lt;br /&gt;
&lt;br /&gt;
s.a.: [https://forum.fhem.de/index.php/topic,71972.msg Forenthread]&lt;br /&gt;
&lt;br /&gt;
=== Webservice ===&lt;br /&gt;
Es gibt den Ansatz, [https://forum.fhem.de/index.php/topic,38231.msg581909.html#msg581909 auf dem FHEM-Server einen Webservice (pro Gateway) zu installieren] und via [[HTTPMOD]] Befehle abzusetzen.&lt;br /&gt;
&lt;br /&gt;
=== Skripte ===&lt;br /&gt;
Auf dem FHEM-Server werden die python Module mit den integrierten Skripten installiert und nur jeweils bei Bedarf angestoßen. So wird keine permanente Systemlast produziert. Die Reaktionsgeschwindigkeit ist nicht überwältigend, aber praxistauglich. (Ca 2-3 sec).&lt;br /&gt;
&lt;br /&gt;
:: &#039;&#039;&#039;Credits&#039;&#039;&#039;&lt;br /&gt;
:: &lt;br /&gt;
:: Die Python-API ist von [https://github.com/mjg59/python-broadlink dieser Github-Seite].&lt;br /&gt;
&lt;br /&gt;
== Hinweis ==&lt;br /&gt;
Mit diesem Vorgehen unterstützt das BroadLink sowohl IR als auch RF.&lt;br /&gt;
&lt;br /&gt;
== Vorgehen (Skripte) ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
Zunächst wird der Broadlink mit der App ins eigene Netz eingebunden. Hierzu der Anleitung in der App folgen.&lt;br /&gt;
&lt;br /&gt;
Alternativ und ohne Notwendigkeit die App zu installieren kann der Broadlink auch über die python Skripte ins WLan gebracht werden, siehe https://github.com/mjg59/python-broadlink.&lt;br /&gt;
&lt;br /&gt;
Auf dem FHEM-Rechner (z.B. Raspi) muss python (python3) und am besten git installiert sein. Ggf. muss auch noch simplejson und pip installiert werden.&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install python git pip&lt;br /&gt;
 sudo pip install simplejson&lt;br /&gt;
&lt;br /&gt;
Verzeichnis erstellen und die Bibliothek installieren&lt;br /&gt;
 sudo mkdir /opt/BroadLink&lt;br /&gt;
 sudo chown fhem.dialout /opt/BroadLink&lt;br /&gt;
 cd /opt/BroadLink&lt;br /&gt;
 sudo git clone https://github.com/mjg59/python-broadlink.git&lt;br /&gt;
 cd python-broadlink&lt;br /&gt;
 sudo python setup.py install&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
== Skripte ==&lt;br /&gt;
Die python Module bringen eigene Skripte zum Anlernen und Senden von IR/RF commands mit. Sie liegen im Verzeichnis /opt/BroadLink/python-broadlink/cli. Die Verwendung wird hier beschrieben: https://github.com/mjg59/python-broadlink/tree/master/cli&lt;br /&gt;
&lt;br /&gt;
Anleitung im Forum dazu: https://forum.fhem.de/index.php?topic=71972.msg1313044#msg1313044&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;In a nutshell:&#039;&#039;&#039; &lt;br /&gt;
Broadlink finden: &amp;lt;syntaxhighlight&amp;gt; broadlink_discovery &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Daten des gefundene Gerätes in einem File speichern (siehe Shell Ausgabe), als Beispiel: &amp;lt;syntaxhighlight&amp;gt;rmpro.device&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Command anlernen und in File speichern: &amp;lt;syntaxhighlight&amp;gt;broadlink_cli --device @rmpro.device --rflearn --learnfile TVon&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Command senden: &amp;lt;syntaxhighlight&amp;gt;broadlink_cli --device @rmpro.device --send @TVon&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Integration in notify/DOIF: &amp;lt;syntaxhighlight&amp;gt;{system(&amp;quot;/opt/BroadLink/python-broadlink/cli/broadlink_cli --device \@/opt/BroadLink/python-broadlink/cli/rmpro.device --send \@/opt/BroadLink/python-broadlink/cli/TVOn&amp;quot;)}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;== Die folgenden Skripte bzw der ganze Abschnitt ist veraltet ==&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die hier zitierten Skripte laufen nicht mehr unter python3. Sie sind auch nicht mehr erforderlich, da die python Module eigene Skripte mitbringen. Diese liegen im Verzeichnis /opt/BroadLink/python-broadlink/cli. Die Verwendung wird hier beschrieben: https://github.com/mjg59/python-broadlink/tree/master/cli&lt;br /&gt;
  &lt;br /&gt;
In das Verzeichnis dann noch die vier Skripte kopieren.&lt;br /&gt;
&lt;br /&gt;
1. search-bl.sh&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
#Script to locate Broadlink devices on local network by Graeme Brown Dec 23 2016&lt;br /&gt;
#These must be set up using the Broadlink app first!&lt;br /&gt;
&lt;br /&gt;
import broadlink&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;************************************************&amp;quot;&lt;br /&gt;
print &amp;quot;Using python library created by Matthew Garrett&amp;quot;&lt;br /&gt;
print &amp;quot;https://github.com/mjg59/python-broadlink&amp;quot;&lt;br /&gt;
print &amp;quot;************************************************&amp;quot;&lt;br /&gt;
print &amp;quot;Scanning network for Broadlink devices....&amp;quot;&lt;br /&gt;
&lt;br /&gt;
mydevices = broadlink.discover(timeout=5)&lt;br /&gt;
print &amp;quot;Found &amp;quot; + str(len(mydevices )) + &amp;quot; broadlink devices&amp;quot;&lt;br /&gt;
time.sleep(1)&lt;br /&gt;
print &amp;quot;...............&amp;quot;&lt;br /&gt;
&lt;br /&gt;
for index, item in enumerate(mydevices):&lt;br /&gt;
&lt;br /&gt;
  mydevices[index].auth()&lt;br /&gt;
&lt;br /&gt;
  ipadd = mydevices[index].host&lt;br /&gt;
  ipadd = str(ipadd)&lt;br /&gt;
  print &amp;quot;Device &amp;quot; + str(index + 1) +&amp;quot; Host address = &amp;quot; + ipadd[1:19]&lt;br /&gt;
  macadd = &#039;&#039;.join(format(x, &#039;02x&#039;) for x in mydevices[index].mac[::-1])&lt;br /&gt;
  macadd = str(macadd)&lt;br /&gt;
 &lt;br /&gt;
  mymacadd = macadd[:2] + &amp;quot; &amp;quot; + macadd[2:4] + &amp;quot; &amp;quot; + macadd[4:6] + &amp;quot; &amp;quot; + macadd[6:8] + &amp;quot; &amp;quot; + macadd[8:10] + &amp;quot; &amp;quot; + macadd[10:12]&lt;br /&gt;
  print &amp;quot;Device &amp;quot; + str(index + 1) +&amp;quot; MAC address = &amp;quot; + mymacadd&lt;br /&gt;
  print &amp;quot;...............&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. learn-bl.sh&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
import broadlink&lt;br /&gt;
import time&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
device = broadlink.rm(host=(&amp;quot;&amp;lt;your RM3 IP address&amp;gt;&amp;quot;,80), mac=bytearray.fromhex(&amp;quot;&amp;lt;your RM3 mac&amp;gt;&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Connecting to Broadlink device....&amp;quot;&lt;br /&gt;
device.auth()&lt;br /&gt;
time.sleep(1)&lt;br /&gt;
print &amp;quot;Connected....&amp;quot;&lt;br /&gt;
&lt;br /&gt;
codeName = raw_input(&amp;quot;Bitte Namen f. den Code eingeben, z.B. tvOff &amp;quot;)&lt;br /&gt;
time.sleep(1)&lt;br /&gt;
print &amp;quot;Wenn die LED am Broadlink angeht, innerhalb von 5 Sek die FB-Taste druecken &amp;quot;&lt;br /&gt;
&lt;br /&gt;
device.host&lt;br /&gt;
device.enter_learning()&lt;br /&gt;
time.sleep(5)&lt;br /&gt;
ir_packet = device.check_data()&lt;br /&gt;
#convert code to hex&lt;br /&gt;
myhex = str(ir_packet).encode(&#039;hex&#039;);&lt;br /&gt;
&lt;br /&gt;
if ir_packet == None:&lt;br /&gt;
   print &amp;quot;Kein Code empfangen - Ende&amp;quot;&lt;br /&gt;
   sys.exit()&lt;br /&gt;
else:&lt;br /&gt;
&lt;br /&gt;
# record learned hex code to file&lt;br /&gt;
   f = open(codeName +&amp;quot;.txt&amp;quot;,&#039;w&#039;)&lt;br /&gt;
f.write(myhex)&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Hex code gespeichert unter &amp;quot; + codeName + &amp;quot;.txt&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. send-bl.sh&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
import broadlink&lt;br /&gt;
import time&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    fileName = sys.argv[1]&lt;br /&gt;
except IndexError:&lt;br /&gt;
    fileName = &#039;null&#039;&lt;br /&gt;
&lt;br /&gt;
if fileName == &#039;null&#039;:&lt;br /&gt;
   print &amp;quot;Error - kein Dateiname angegeben&amp;quot;&lt;br /&gt;
   sys.exit()&lt;br /&gt;
else:&lt;br /&gt;
&lt;br /&gt;
   device = broadlink.rm(host=(&amp;quot;&amp;lt;your RM3 IP address&amp;gt;&amp;quot;,80), mac=bytearray.fromhex(&amp;quot;&amp;lt;your RM3 mac&amp;gt;&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Connecting to Broadlink device....&amp;quot;&lt;br /&gt;
device.auth()&lt;br /&gt;
time.sleep(1)&lt;br /&gt;
print &amp;quot;Connected....&amp;quot;&lt;br /&gt;
time.sleep(1)&lt;br /&gt;
device.host&lt;br /&gt;
&lt;br /&gt;
file = open(fileName, &#039;r&#039;)&lt;br /&gt;
&lt;br /&gt;
myhex = file.read()&lt;br /&gt;
&lt;br /&gt;
device.send_data(myhex.decode(&#039;hex&#039;))&lt;br /&gt;
print &amp;quot;Code Sent....&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
4. sendmore-bl.sh&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
import broadlink&lt;br /&gt;
import time&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    fileName = sys.argv[1]&lt;br /&gt;
except IndexError:&lt;br /&gt;
    fileName = &#039;null&#039;&lt;br /&gt;
&lt;br /&gt;
if fileName == &#039;null&#039;:&lt;br /&gt;
   print &amp;quot;Error - kein Dateiname angegeben&amp;quot;&lt;br /&gt;
   sys.exit()&lt;br /&gt;
else:&lt;br /&gt;
 device = broadlink.rm(host=(&amp;quot;&amp;lt;your RM3 IP address&amp;gt;&amp;quot;,80), mac=bytearray.fromhex(&amp;quot;&amp;lt;your RM3 mac&amp;gt;&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
# print &amp;quot;Connecting to Broadlink device....&amp;quot;&lt;br /&gt;
 device.auth()&lt;br /&gt;
 time.sleep(1)&lt;br /&gt;
# print &amp;quot;Connected....&amp;quot;&lt;br /&gt;
 device.host&lt;br /&gt;
&lt;br /&gt;
# Pfad aus Aufruf extrahieren und dann den Befehl selbst vom Stapel nehmen&lt;br /&gt;
 Parameter = sys.argv&lt;br /&gt;
 # Name des Befehls selbst&lt;br /&gt;
 filename1 = Parameter[0]&lt;br /&gt;
 # Gesamtlaenge&lt;br /&gt;
 FileNameLaenge = len(filename1)&lt;br /&gt;
 # in Bestandteile aufteilen&lt;br /&gt;
 filearray = filename1.split(&amp;quot;/&amp;quot;)&lt;br /&gt;
 # den letzten identifizieren. Das ist der eigentliche Befehl&lt;br /&gt;
 splitNo = len(filename1.split(&amp;quot;/&amp;quot;))&lt;br /&gt;
 lastElement = filearray[splitNo-1]&lt;br /&gt;
 # den vom Aufruf wegschneiden, um den Pfad zu bekommen&lt;br /&gt;
 FileNameAbzug = len(lastElement)&lt;br /&gt;
 Ende = FileNameLaenge - FileNameAbzug&lt;br /&gt;
 Pfad = filename1[0:Ende]&lt;br /&gt;
 # Befehl aus der Liste loeschen, damit die Parameter bleiben&lt;br /&gt;
 Parameter.pop(0)&lt;br /&gt;
&lt;br /&gt;
 # repeat for each argument&lt;br /&gt;
 for argument in Parameter:&lt;br /&gt;
    fileName = Pfad + argument +&amp;quot;.txt&amp;quot;&lt;br /&gt;
    file = open(fileName, &#039;r&#039;)&lt;br /&gt;
    myhex = file.read()&lt;br /&gt;
    device.send_data(myhex.decode(&#039;hex&#039;))&lt;br /&gt;
    time.sleep(0.5)&lt;br /&gt;
# print &amp;quot;Code Sent....&amp;quot;&lt;br /&gt;
sys.exit()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dann in dem Verzeichnis noch die Dateibesitzer wechseln und die Skripte ausführbar machen:&lt;br /&gt;
&lt;br /&gt;
 sudo chown fhem.dialout *.sh&lt;br /&gt;
 sudo chmod 744 *.sh&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration === &lt;br /&gt;
&lt;br /&gt;
Nun gilt es, die IP und MAC-Adresse des Broadlink herauszufinden. Entweder man schaut im Router nach, benutzt die Android-App FING oder das Script &amp;quot;search-bl.sh&amp;quot;. Dazu&lt;br /&gt;
&lt;br /&gt;
 sudo ./search-bl.sh&lt;br /&gt;
&lt;br /&gt;
Beispielhaft kommt dann:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 ************************************************&lt;br /&gt;
 Using python library created by Matthew Garrett&lt;br /&gt;
 https://github.com/mjg59/python-broadlink&lt;br /&gt;
 ************************************************&lt;br /&gt;
 Scanning network for Broadlink devices....&lt;br /&gt;
 Found 1 broadlink devices&lt;br /&gt;
 ...............&lt;br /&gt;
 Device 1 Host address = &#039;192.168.1.16&#039;, 8&lt;br /&gt;
 Device 1 MAC address = b4 43 0d aa b3 54&lt;br /&gt;
 ...............&lt;br /&gt;
&lt;br /&gt;
Für später sind die IP Adresse und die MAC Adresse wichtig. Diese müssen im zweiten bis vierten Script eingetragen werden!! Ich benutze da den Editor nano.&lt;br /&gt;
 sudo nano ./learn-bl.sh&lt;br /&gt;
 sudo nano ./send-bl.sh&lt;br /&gt;
 sudo nano ./sendmore-bl.sh&lt;br /&gt;
&lt;br /&gt;
Dabei die doppelten Anführungszeichen stehen lassen und an der passenden Stelle jeweils die IP und an der anderen die MAC-Adresse (mit Leerzeichen anstelle der Doppelpunkte) eintragen. Das erste Script liefert die auch so formatiert. Wenn man sie aber aus dem Router hat oder so, dann eben beachten!&lt;br /&gt;
&lt;br /&gt;
Das zweite Script dient zum Anlernen des Fernbedienungscodes und Abspeichern in jeweils einer txt Datei. Das Script verbindet sich mit dem Broadlink und erwartet einen Namen für den Code. Dann hat man 5 Sec Zeit, um die entsprechende Fernbedienungstaste zu drücken, um den Code anzulernen. Dieser wird dann in eine Datei mit dem Codenamen gespeichert. So kann man alle seine zu verwendenden Codes nacheinander anlernen.&lt;br /&gt;
&lt;br /&gt;
 sudo ./learn-bl.sh&lt;br /&gt;
&lt;br /&gt;
zeigt Folgendes an:&lt;br /&gt;
&lt;br /&gt;
 Connecting to Broadlink device....&lt;br /&gt;
 Connected....&lt;br /&gt;
 Bitte Namen für den Code eingeben, z.B. tvOff test&lt;br /&gt;
 Wenn die LED am Broadlink angeht, innerhalb von 5 Sek die FB-Taste drücken &lt;br /&gt;
 Hex code gespeichert unter test.txt&lt;br /&gt;
&lt;br /&gt;
=== Betrieb ===&lt;br /&gt;
&lt;br /&gt;
Mit dem dritten und vierten Script kann man den Code wieder senden. Auch hier wieder die eigene IP Adresse und MAC Adresse des Broadlink von oben eintragen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Aufruf im Terminal ist für das dritte Skript: &lt;br /&gt;
 sudo /opt/BroadLink/send-bl.sh /opt/BroadLink/test.txt &lt;br /&gt;
&lt;br /&gt;
Wichtig ist bei diesem Skript, für das Textfile den ganzen Pfad anzugeben, und der in test.txt gelernte Befehl wird gesendet.&lt;br /&gt;
&lt;br /&gt;
Aus FHEM heraus kann dann z.B. auf der Eingabezeile gesendet werden:&lt;br /&gt;
  &amp;quot;/opt/BroadLink/send-bl.sh /opt/BroadLink/test.txt&amp;quot;&lt;br /&gt;
Dabei sind die &amp;quot; &amp;quot; wichtig, da es sich um einen Shell-Befehl handelt.&lt;br /&gt;
 &lt;br /&gt;
So kann man das dann auch in at-, notify- oder DOIFs verwenden. Hier mal ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
 define atAbendsLichtAn at *19:00:00 &amp;quot;/opt/BroadLink/send-bl.sh /opt/BroadLink/FB1An.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das 4. Skript &amp;quot;sendmore-bl.sh&amp;quot; ist eine Modifikation des Send-Skripts. Die Unterschiede sind:&lt;br /&gt;
&lt;br /&gt;
1. Es sendet auch mehrere Codes nacheinander, also z. B. auch Zahlenfolgen wie &amp;quot;0202&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
2. Es nimmt an, dass die Codes als .txt-Dateien im selben Verzeichnis liegen wie das Skript.&lt;br /&gt;
&lt;br /&gt;
3. Das Skript gibt keine Meldungen aus. Die sind beim Aufruf aus FHEM heraus auch unnötig.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Skript extrahiert aus dem Befehlsaufruf den Pfad und ergänzt ihn jeweils bei den Parametern sowie um die Dateierweiterung &amp;quot;.txt&amp;quot;. Daher kann der Aufruf dann kürzer sein. Angenommen, es sind die Code-Dateien 1.txt, 2.txt, 3.txt usw. im selben Verzeichnis wie die Skripte vorhanden, lautet der Aufruf im Terminal dann z.B. nur noch:&lt;br /&gt;
&lt;br /&gt;
 /opt/BroadLink/sendmore-bl.sh 1 2 3 2&lt;br /&gt;
&lt;br /&gt;
Im &amp;quot;define&amp;quot; lautet das oben genannte Beispiel:&lt;br /&gt;
 define atAbendsLichtAn at *19:00:00 &amp;quot;/opt/BroadLink/sendmore-bl.sh FB1An&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Feintuning ===&lt;br /&gt;
Im 4. Skript definiert die Zeile (kurz vor Ende)&lt;br /&gt;
     time.sleep(0.5)&lt;br /&gt;
die Wartezeit zwischen zwei gesendeten &amp;quot;Tasten&amp;quot;. Bei vielen Geräten funktioniert das auch, wenn man die Zeile auskommentiert oder löscht. Dann werden die Signale schneller hintereinander gesendet.&lt;br /&gt;
Man kann hier natürlich auch den Wert 0.5 verändern. Einfach ausprobieren!&lt;br /&gt;
&lt;br /&gt;
== Mehrere Bridges betreiben ==&lt;br /&gt;
&lt;br /&gt;
Um mehrere Bridges nebeneinander zu betreiben, braucht man für jedes Gerät das dritte oder vierte Skript unter eigenem Namen, also z.B. sendmore-bl-WoZi.sh und sendmore-bl-SchlafZi.sh und sendmore-bl-Kueche.sh. In diese müssen die jeweils zugehörenden IP- und MAC-Adressen eingetragen werden. Dann entscheidet man über den Aufruf, welche Bridge den Befehl bekommt. Dabei kann man die gelernten Codes für alle Bridges nutzen und muss sie nicht für jede Bridge neu anlernen.&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Man kann mit dem dritten Skript nur einzelne Tastendrücke senden. Und der Aufruf von mehreren Befehlen nacheinander liegt so weit auseinander, dass das nicht als Folge von Befehlen ankommt, sondern jeweils als Einzelbefehle. Dafür kann man das 4. Skript ausprobieren.&lt;br /&gt;
&lt;br /&gt;
Einige User berichten von diesem Fehler:&lt;br /&gt;
  Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;/opt/BroadLink/send-bl.sh&amp;quot;, line 34, in &amp;lt;module&amp;gt;&lt;br /&gt;
    device.send_data(myhex.decode(&#039;hex&#039;))&lt;br /&gt;
  File &amp;quot;/usr/local/lib/python2.7/dist-packages/broadlink-0.3-py2.7.egg/broadlink/__init__.py&amp;quot;, line 455, in send_data&lt;br /&gt;
    self.send_packet(0x6a, packet)&lt;br /&gt;
  File &amp;quot;/usr/local/lib/python2.7/dist-packages/broadlink-0.3-py2.7.egg/broadlink/__init__.py&amp;quot;, line 250, in send_packet&lt;br /&gt;
    response = self.cs.recvfrom(1024)&lt;br /&gt;
  socket.timeout: timed out&lt;br /&gt;
&lt;br /&gt;
Abhilfe schafft, in der Datei &amp;quot;/usr/local/lib/python2.7/dist-packages/broadlink-0.3-py2.7.egg/broadlink/__init__.py&amp;quot; Zeile 249&lt;br /&gt;
den Timeout von 1 Sekunde auf z.B. 5 Sekunden zu stellen: self.cs.settimeout(5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei der Einrichtung via Smartphone-App gibt den AP-Modus: in diesem wird im Gateway ein WLAN-AP aktiviert, &#039;&#039;&#039;unverschlüsselt&#039;&#039;&#039;, mit dem sich das Smartphone dann verbindet. Über das für Sniffer offene WLAN wird dann SSID und Passwort des lokalen WLAN übermittelt, worauf sich das Gateway versucht dort anzumelden. &#039;&#039;&#039;&#039;&#039;Die Einrichtung über diesen Weg legt das WLAN Passwort für Sniffer ohne weiteren Aufwand offen. Das Risiko ist auf diese eine Übertragung begrenzt.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hinweis ==&lt;br /&gt;
Wenn alles funktioniert, kann man aus dem dritten Skript natürlich die Bildschirmausgaben löschen, da es ja in FHEM im Hintergrund aufgerufen wird. Umgekehrt kann man sie auch im 4. Skript wieder &amp;quot;freischalten&amp;quot;, indem man die # vor den &amp;quot;print&amp;quot;-Anweisungen löscht.&lt;br /&gt;
&lt;br /&gt;
Gelegentlich auftretende Fehlermeldungen (die nur im Terminal sichtbar sind), tun der Funktion (bei mir) keinen Abbruch.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Infrarot]]&lt;/div&gt;</summary>
		<author><name>Hapege</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Broadlink&amp;diff=39335</id>
		<title>Broadlink</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Broadlink&amp;diff=39335"/>
		<updated>2024-05-18T11:18:07Z</updated>

		<summary type="html">&lt;p&gt;Hapege: Text und Links aktualisiert, Beschreibung und Verwendung der Skripte aktualisiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Beschreibung ==&lt;br /&gt;
Die chinesische Firma BroadLink stellt unter Anderem auch Gateways her, die sich per Wifi ansprechen lassen und Infrator (38KHz-IR) bzw. RF (433/315 MHz-RF) Komponenten fernsteuern können (https://www.ibroadlink.com/productinfo/762672.html).&lt;br /&gt;
&lt;br /&gt;
Die Gateways werden mit Hilfe einer Android- oder iOS-App (&amp;quot;Intelligent Home Center for EU (IHC) oder &amp;quot;BroadLink - Universal TV Remote&amp;quot;) angelernt.&lt;br /&gt;
&lt;br /&gt;
Danach stellen sie die Möglichkeit bereit, &lt;br /&gt;
* Infrarot- (und ggf. RF-) Codes bzw. Code-Sequenzen zu erfassen und via WLAN als Parameter zu übermitteln und&lt;br /&gt;
* (gelernte) Codes an kompatible IR- bzw. RF-Empfänger zu versenden. &lt;br /&gt;
&lt;br /&gt;
Die dazugehörige openAPI ist nicht öffentlich und unterliegt einer BroadLink NDA.&lt;br /&gt;
&lt;br /&gt;
Zur praktischen Verwendung gibt es mehrere Schnittstellen:&lt;br /&gt;
# die offizielle App (https://www.ibroadlink.com/bleapp), mit der Codes angelernt, in der App gespeichert und im lokalen WLAN über die RM versendet werden können,&lt;br /&gt;
# die &#039;&#039;[http://rm-bridge.fun2code.de/ RM Bridge]&#039;&#039; für Android-Geräte, die eine HTTP REST web API auf dem Androidgerät als Webservice bereitstellt,&lt;br /&gt;
# die &#039;&#039;Python-Bibliothek [https://github.com/mjg59/python-broadlink python-broadlink]&#039;&#039; von Matthew Garrett (mjg59) für Server, auf denen Python lauffähig ist. Diese kann dann direkt per (Shell-)Skript [https://forum.fhem.de/index.php/topic,54334.15.html aufgerufen werden] aber auch noch schön gekapselt werden:&lt;br /&gt;
# &#039;&#039;{{Link2Forum|Topic=38231|Message=581909|LinkText=Webservice für Python fähige Server}}&#039;&#039;. In dieser Form sind dann gelernte Sendebefehle elegant als [[HTTPMOD]] Objekte in FHEM integrierbar.&lt;br /&gt;
&lt;br /&gt;
=== BroadLink RM mini ===&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=RMmini.png&lt;br /&gt;
|Bildbeschreibung= BroadLink RM mini 3&lt;br /&gt;
|HWProtocol= Infrarot&lt;br /&gt;
|HWType= Gateway&lt;br /&gt;
|HWCategory= Infrarot&lt;br /&gt;
|HWComm= Infrarot 38 KHz&amp;lt;br /&amp;gt;Wifi 2.4GHz b/g/n &lt;br /&gt;
|HWChannels= 1&lt;br /&gt;
|HWVoltage= 5V&lt;br /&gt;
|HWPowerConsumption= max. 2,5W (max. 0,5A)&amp;lt;br /&amp;gt;standby ca. 0.85W&lt;br /&gt;
|HWPoweredBy= Micro USB&lt;br /&gt;
|HWSize= 5.5 x 5.5 x 6.45 cm&lt;br /&gt;
|HWDeviceFHEM= Broadlink&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer= [http://www.ibroadlink.com/rmMini3/ BroadLink]&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der BroadLink RM mini 3 (wird nicht mehr hergestellt, evtl. noch bei Amazon / ebay erhätlich) ist ein WLAN zu Infrarot Gateway (ohne RF, vgl. [[#BroadLink RM Pro|RM Pro]]). Im Vergleich zum RM Pro ist die Sendeleistung deutlich schwächer, da nur ein IR-Transmitter verbaut ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BroadLink RM Pro ===&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=RMPro.png&lt;br /&gt;
|Bildbeschreibung= BroadLink RM Pro&lt;br /&gt;
|HWProtocol= Infrarot, RF&lt;br /&gt;
|HWType= Gateway&lt;br /&gt;
|HWCategory= Infrarot, RF&lt;br /&gt;
|HWComm= Infrarot 38 KHz&amp;lt;br /&amp;gt;RF 433/315 MHz&amp;lt;br /&amp;gt;Wifi 2.4GHz b/g/n &lt;br /&gt;
|HWChannels= 2&lt;br /&gt;
|HWVoltage= 5V&lt;br /&gt;
|HWPowerConsumption= max. 5W (max. 1A)&amp;lt;br /&amp;gt;ca. 1W standby&lt;br /&gt;
|HWPoweredBy= Micro USB&lt;br /&gt;
|HWSize= 11 x 3,5 x 11,5 cm &lt;br /&gt;
|HWDeviceFHEM= Broadlink&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer= [http://www.ibroadlink.com/rmPro/ BroadLink]&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der BroadLink RM Pro/RM3 (wird nicht mehr hergestellt, evtl. noch bei Amazon / ebay erhältlich) ist ein WLAN zu Infrarot- und RF Gateway. Der aktuelle Nachfolger ist der RMpro 4 (https://www.ibroadlink.com/productinfo/762672.html).&lt;br /&gt;
&lt;br /&gt;
Der RM Pro verfügt im Vergleich zum [[#BroadLink RM mini|RM mini]] über eine größere Reichweite, da 6+1 (Kreis und Mitte) IR-Transmitter verbaut sind.&lt;br /&gt;
&lt;br /&gt;
(In der Version RM3 soll der unterstützte RF-Bereich inoffiziell sogar 142...1050 MHz betragen.)&lt;br /&gt;
&lt;br /&gt;
Der RM Pro enthält auch einen Temperatursensor, der mindestens über die App ausgelesen und für Aktions-Regeln verwendet werden kann. Der Sensor ist offenbar nicht in allen Versionen verbaut bzw. kann oft nur als externer Sensor angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Es gab/gibt Vorgängerversionen:&lt;br /&gt;
* RM Home/RM1: &amp;quot;rote Version&amp;quot;; nur IR, ohne RF; schwache Sendeleistung&lt;br /&gt;
* RM Pro/RM2: &amp;quot;schwarze Version&amp;quot;; ID 10&amp;amp;nbsp;002; IR und RF 433/315MHz; verstärkte IR-Sendeleistung (7 IR-Transmitter)&lt;br /&gt;
* (OEM Version) RM Plus: schwarz, keine Aufkleber, keine Beschriftungen, gerade, nicht abgerundete Oberseite... (soll intern baugleich mit RM Pro/RM3 sein).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nutzung in FHEM ==&lt;br /&gt;
=== Modul ===&lt;br /&gt;
&#039;&#039;&#039;Achtung: Das Modul wird offenbar nicht mehr gepflegt und funktioniert bei vielen Nutzern nicht bzw. (nach Rücksetzen des Gateways) nicht mehr. Empfohlen wird aktuell der Einsatz der unten genannten python Module und der dort hinterlegten Skripte.&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es gibt das {{Link2CmdRef|Lang=de|Label=Modul Broadlink|Anker=Broadlink}}, mit dem Broadlink-Geräte in FHEM eingebunden werden können:&lt;br /&gt;
* rmpro  (RM Pro) &lt;br /&gt;
* rmmini (RM mini)&lt;br /&gt;
* sp3 (SP3 - Schalter)&lt;br /&gt;
* sp3s (SP3S - Schalter mit aktueller Energieverbrauchsmessung)&lt;br /&gt;
&lt;br /&gt;
s.a.: [https://forum.fhem.de/index.php/topic,71972.msg Forenthread]&lt;br /&gt;
&lt;br /&gt;
=== Webservice ===&lt;br /&gt;
Es gibt den Ansatz, [https://forum.fhem.de/index.php/topic,38231.msg581909.html#msg581909 auf dem FHEM-Server einen Webservice (pro Gateway) zu installieren] und via [[HTTPMOD]] Befehle abzusetzen.&lt;br /&gt;
&lt;br /&gt;
=== Skripte ===&lt;br /&gt;
Auf dem FHEM-Server werden die python Module mit den integrierten Skripten installiert und nur jeweils bei Bedarf angestoßen. So wird keine permanente Systemlast produziert. Die Reaktionsgeschwindigkeit ist nicht überwältigend, aber praxistauglich. (Ca 2-3 sec).&lt;br /&gt;
&lt;br /&gt;
:: &#039;&#039;&#039;Credits&#039;&#039;&#039;&lt;br /&gt;
:: &lt;br /&gt;
:: Die Python-API ist von [https://github.com/mjg59/python-broadlink dieser Github-Seite].&lt;br /&gt;
&lt;br /&gt;
== Hinweis ==&lt;br /&gt;
Mit diesem Vorgehen unterstützt das BroadLink sowohl IR als auch RF.&lt;br /&gt;
&lt;br /&gt;
== Vorgehen (Skripte) ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
Zunächst wird der Broadlink mit der App ins eigene Netz eingebunden. Hierzu der Anleitung in der App folgen.&lt;br /&gt;
&lt;br /&gt;
Alternativ und ohne Notwendigkeit die App zu installieren kann der Broadlink auch über die python Skripte ins WLan gebracht werden, siehe https://github.com/mjg59/python-broadlink.&lt;br /&gt;
&lt;br /&gt;
Auf dem FHEM-Rechner (z.B. Raspi) muss python (python3) und am besten git installiert sein. Ggf. muss auch noch simplejson und pip installiert werden.&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install python git pip&lt;br /&gt;
 sudo pip install simplejson&lt;br /&gt;
&lt;br /&gt;
Verzeichnis erstellen und die Bibliothek installieren&lt;br /&gt;
 sudo mkdir /opt/BroadLink&lt;br /&gt;
 sudo chown fhem.dialout /opt/BroadLink&lt;br /&gt;
 cd /opt/BroadLink&lt;br /&gt;
 sudo git clone https://github.com/mjg59/python-broadlink.git&lt;br /&gt;
 cd python-broadlink&lt;br /&gt;
 sudo python setup.py install&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
== Skripte ==&lt;br /&gt;
Die python Midule bringen eigene Skripte zum Anlernen und Senden von IR/RF commands mit. Sie liegen im Verzeichnis /opt/BroadLink/python-broadlink/cli. Die Verwendung wird hier beschrieben: https://github.com/mjg59/python-broadlink/tree/master/cli&lt;br /&gt;
&lt;br /&gt;
Anleitung im Forum dazu: https://forum.fhem.de/index.php?topic=71972.msg1313044#msg1313044&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;In a nutshell:&#039;&#039;&#039; &lt;br /&gt;
Broadlink finden: &amp;lt;syntaxhighlight&amp;gt; broadlink_discovery &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Daten des gefundene Gerätes in einem File speichern (siehe Shell Ausgabe), als Beispiel: &amp;lt;syntaxhighlight&amp;gt;rmpro.device&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Command anlernen und in File speichern: &amp;lt;syntaxhighlight&amp;gt;broadlink_cli --device @rmpro.device --rflearn --learnfile TVon&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Command senden: &amp;lt;syntaxhighlight&amp;gt;broadlink_cli --device @rmpro.device --send @TVon&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Integration in notify/DOIF: &amp;lt;syntaxhighlight&amp;gt;{system(&amp;quot;/opt/BroadLink/python-broadlink/cli/broadlink_cli --device \@/opt/BroadLink/python-broadlink/cli/rmpro.device --send \@/opt/BroadLink/python-broadlink/cli/TVOn&amp;quot;)}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;== Die folgenden Skripte bzw der ganze Abschnitt ist veraltet ==&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die hier zitierten Skripte laufen nicht mehr unter python3. Sie sind auch nicht mehr erforderlich, da die python Module eigene Skripte mitbringen. Diese liegen im Verzeichnis /opt/BroadLink/python-broadlink/cli. Die Verwendung wird hier beschrieben: https://github.com/mjg59/python-broadlink/tree/master/cli&lt;br /&gt;
  &lt;br /&gt;
In das Verzeichnis dann noch die vier Skripte kopieren.&lt;br /&gt;
&lt;br /&gt;
1. search-bl.sh&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
#Script to locate Broadlink devices on local network by Graeme Brown Dec 23 2016&lt;br /&gt;
#These must be set up using the Broadlink app first!&lt;br /&gt;
&lt;br /&gt;
import broadlink&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;************************************************&amp;quot;&lt;br /&gt;
print &amp;quot;Using python library created by Matthew Garrett&amp;quot;&lt;br /&gt;
print &amp;quot;https://github.com/mjg59/python-broadlink&amp;quot;&lt;br /&gt;
print &amp;quot;************************************************&amp;quot;&lt;br /&gt;
print &amp;quot;Scanning network for Broadlink devices....&amp;quot;&lt;br /&gt;
&lt;br /&gt;
mydevices = broadlink.discover(timeout=5)&lt;br /&gt;
print &amp;quot;Found &amp;quot; + str(len(mydevices )) + &amp;quot; broadlink devices&amp;quot;&lt;br /&gt;
time.sleep(1)&lt;br /&gt;
print &amp;quot;...............&amp;quot;&lt;br /&gt;
&lt;br /&gt;
for index, item in enumerate(mydevices):&lt;br /&gt;
&lt;br /&gt;
  mydevices[index].auth()&lt;br /&gt;
&lt;br /&gt;
  ipadd = mydevices[index].host&lt;br /&gt;
  ipadd = str(ipadd)&lt;br /&gt;
  print &amp;quot;Device &amp;quot; + str(index + 1) +&amp;quot; Host address = &amp;quot; + ipadd[1:19]&lt;br /&gt;
  macadd = &#039;&#039;.join(format(x, &#039;02x&#039;) for x in mydevices[index].mac[::-1])&lt;br /&gt;
  macadd = str(macadd)&lt;br /&gt;
 &lt;br /&gt;
  mymacadd = macadd[:2] + &amp;quot; &amp;quot; + macadd[2:4] + &amp;quot; &amp;quot; + macadd[4:6] + &amp;quot; &amp;quot; + macadd[6:8] + &amp;quot; &amp;quot; + macadd[8:10] + &amp;quot; &amp;quot; + macadd[10:12]&lt;br /&gt;
  print &amp;quot;Device &amp;quot; + str(index + 1) +&amp;quot; MAC address = &amp;quot; + mymacadd&lt;br /&gt;
  print &amp;quot;...............&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. learn-bl.sh&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
import broadlink&lt;br /&gt;
import time&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
device = broadlink.rm(host=(&amp;quot;&amp;lt;your RM3 IP address&amp;gt;&amp;quot;,80), mac=bytearray.fromhex(&amp;quot;&amp;lt;your RM3 mac&amp;gt;&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Connecting to Broadlink device....&amp;quot;&lt;br /&gt;
device.auth()&lt;br /&gt;
time.sleep(1)&lt;br /&gt;
print &amp;quot;Connected....&amp;quot;&lt;br /&gt;
&lt;br /&gt;
codeName = raw_input(&amp;quot;Bitte Namen f. den Code eingeben, z.B. tvOff &amp;quot;)&lt;br /&gt;
time.sleep(1)&lt;br /&gt;
print &amp;quot;Wenn die LED am Broadlink angeht, innerhalb von 5 Sek die FB-Taste druecken &amp;quot;&lt;br /&gt;
&lt;br /&gt;
device.host&lt;br /&gt;
device.enter_learning()&lt;br /&gt;
time.sleep(5)&lt;br /&gt;
ir_packet = device.check_data()&lt;br /&gt;
#convert code to hex&lt;br /&gt;
myhex = str(ir_packet).encode(&#039;hex&#039;);&lt;br /&gt;
&lt;br /&gt;
if ir_packet == None:&lt;br /&gt;
   print &amp;quot;Kein Code empfangen - Ende&amp;quot;&lt;br /&gt;
   sys.exit()&lt;br /&gt;
else:&lt;br /&gt;
&lt;br /&gt;
# record learned hex code to file&lt;br /&gt;
   f = open(codeName +&amp;quot;.txt&amp;quot;,&#039;w&#039;)&lt;br /&gt;
f.write(myhex)&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Hex code gespeichert unter &amp;quot; + codeName + &amp;quot;.txt&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. send-bl.sh&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
import broadlink&lt;br /&gt;
import time&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    fileName = sys.argv[1]&lt;br /&gt;
except IndexError:&lt;br /&gt;
    fileName = &#039;null&#039;&lt;br /&gt;
&lt;br /&gt;
if fileName == &#039;null&#039;:&lt;br /&gt;
   print &amp;quot;Error - kein Dateiname angegeben&amp;quot;&lt;br /&gt;
   sys.exit()&lt;br /&gt;
else:&lt;br /&gt;
&lt;br /&gt;
   device = broadlink.rm(host=(&amp;quot;&amp;lt;your RM3 IP address&amp;gt;&amp;quot;,80), mac=bytearray.fromhex(&amp;quot;&amp;lt;your RM3 mac&amp;gt;&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Connecting to Broadlink device....&amp;quot;&lt;br /&gt;
device.auth()&lt;br /&gt;
time.sleep(1)&lt;br /&gt;
print &amp;quot;Connected....&amp;quot;&lt;br /&gt;
time.sleep(1)&lt;br /&gt;
device.host&lt;br /&gt;
&lt;br /&gt;
file = open(fileName, &#039;r&#039;)&lt;br /&gt;
&lt;br /&gt;
myhex = file.read()&lt;br /&gt;
&lt;br /&gt;
device.send_data(myhex.decode(&#039;hex&#039;))&lt;br /&gt;
print &amp;quot;Code Sent....&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
4. sendmore-bl.sh&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
import broadlink&lt;br /&gt;
import time&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    fileName = sys.argv[1]&lt;br /&gt;
except IndexError:&lt;br /&gt;
    fileName = &#039;null&#039;&lt;br /&gt;
&lt;br /&gt;
if fileName == &#039;null&#039;:&lt;br /&gt;
   print &amp;quot;Error - kein Dateiname angegeben&amp;quot;&lt;br /&gt;
   sys.exit()&lt;br /&gt;
else:&lt;br /&gt;
 device = broadlink.rm(host=(&amp;quot;&amp;lt;your RM3 IP address&amp;gt;&amp;quot;,80), mac=bytearray.fromhex(&amp;quot;&amp;lt;your RM3 mac&amp;gt;&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
# print &amp;quot;Connecting to Broadlink device....&amp;quot;&lt;br /&gt;
 device.auth()&lt;br /&gt;
 time.sleep(1)&lt;br /&gt;
# print &amp;quot;Connected....&amp;quot;&lt;br /&gt;
 device.host&lt;br /&gt;
&lt;br /&gt;
# Pfad aus Aufruf extrahieren und dann den Befehl selbst vom Stapel nehmen&lt;br /&gt;
 Parameter = sys.argv&lt;br /&gt;
 # Name des Befehls selbst&lt;br /&gt;
 filename1 = Parameter[0]&lt;br /&gt;
 # Gesamtlaenge&lt;br /&gt;
 FileNameLaenge = len(filename1)&lt;br /&gt;
 # in Bestandteile aufteilen&lt;br /&gt;
 filearray = filename1.split(&amp;quot;/&amp;quot;)&lt;br /&gt;
 # den letzten identifizieren. Das ist der eigentliche Befehl&lt;br /&gt;
 splitNo = len(filename1.split(&amp;quot;/&amp;quot;))&lt;br /&gt;
 lastElement = filearray[splitNo-1]&lt;br /&gt;
 # den vom Aufruf wegschneiden, um den Pfad zu bekommen&lt;br /&gt;
 FileNameAbzug = len(lastElement)&lt;br /&gt;
 Ende = FileNameLaenge - FileNameAbzug&lt;br /&gt;
 Pfad = filename1[0:Ende]&lt;br /&gt;
 # Befehl aus der Liste loeschen, damit die Parameter bleiben&lt;br /&gt;
 Parameter.pop(0)&lt;br /&gt;
&lt;br /&gt;
 # repeat for each argument&lt;br /&gt;
 for argument in Parameter:&lt;br /&gt;
    fileName = Pfad + argument +&amp;quot;.txt&amp;quot;&lt;br /&gt;
    file = open(fileName, &#039;r&#039;)&lt;br /&gt;
    myhex = file.read()&lt;br /&gt;
    device.send_data(myhex.decode(&#039;hex&#039;))&lt;br /&gt;
    time.sleep(0.5)&lt;br /&gt;
# print &amp;quot;Code Sent....&amp;quot;&lt;br /&gt;
sys.exit()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dann in dem Verzeichnis noch die Dateibesitzer wechseln und die Skripte ausführbar machen:&lt;br /&gt;
&lt;br /&gt;
 sudo chown fhem.dialout *.sh&lt;br /&gt;
 sudo chmod 744 *.sh&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration === &lt;br /&gt;
&lt;br /&gt;
Nun gilt es, die IP und MAC-Adresse des Broadlink herauszufinden. Entweder man schaut im Router nach, benutzt die Android-App FING oder das Script &amp;quot;search-bl.sh&amp;quot;. Dazu&lt;br /&gt;
&lt;br /&gt;
 sudo ./search-bl.sh&lt;br /&gt;
&lt;br /&gt;
Beispielhaft kommt dann:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 ************************************************&lt;br /&gt;
 Using python library created by Matthew Garrett&lt;br /&gt;
 https://github.com/mjg59/python-broadlink&lt;br /&gt;
 ************************************************&lt;br /&gt;
 Scanning network for Broadlink devices....&lt;br /&gt;
 Found 1 broadlink devices&lt;br /&gt;
 ...............&lt;br /&gt;
 Device 1 Host address = &#039;192.168.1.16&#039;, 8&lt;br /&gt;
 Device 1 MAC address = b4 43 0d aa b3 54&lt;br /&gt;
 ...............&lt;br /&gt;
&lt;br /&gt;
Für später sind die IP Adresse und die MAC Adresse wichtig. Diese müssen im zweiten bis vierten Script eingetragen werden!! Ich benutze da den Editor nano.&lt;br /&gt;
 sudo nano ./learn-bl.sh&lt;br /&gt;
 sudo nano ./send-bl.sh&lt;br /&gt;
 sudo nano ./sendmore-bl.sh&lt;br /&gt;
&lt;br /&gt;
Dabei die doppelten Anführungszeichen stehen lassen und an der passenden Stelle jeweils die IP und an der anderen die MAC-Adresse (mit Leerzeichen anstelle der Doppelpunkte) eintragen. Das erste Script liefert die auch so formatiert. Wenn man sie aber aus dem Router hat oder so, dann eben beachten!&lt;br /&gt;
&lt;br /&gt;
Das zweite Script dient zum Anlernen des Fernbedienungscodes und Abspeichern in jeweils einer txt Datei. Das Script verbindet sich mit dem Broadlink und erwartet einen Namen für den Code. Dann hat man 5 Sec Zeit, um die entsprechende Fernbedienungstaste zu drücken, um den Code anzulernen. Dieser wird dann in eine Datei mit dem Codenamen gespeichert. So kann man alle seine zu verwendenden Codes nacheinander anlernen.&lt;br /&gt;
&lt;br /&gt;
 sudo ./learn-bl.sh&lt;br /&gt;
&lt;br /&gt;
zeigt Folgendes an:&lt;br /&gt;
&lt;br /&gt;
 Connecting to Broadlink device....&lt;br /&gt;
 Connected....&lt;br /&gt;
 Bitte Namen für den Code eingeben, z.B. tvOff test&lt;br /&gt;
 Wenn die LED am Broadlink angeht, innerhalb von 5 Sek die FB-Taste drücken &lt;br /&gt;
 Hex code gespeichert unter test.txt&lt;br /&gt;
&lt;br /&gt;
=== Betrieb ===&lt;br /&gt;
&lt;br /&gt;
Mit dem dritten und vierten Script kann man den Code wieder senden. Auch hier wieder die eigene IP Adresse und MAC Adresse des Broadlink von oben eintragen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Aufruf im Terminal ist für das dritte Skript: &lt;br /&gt;
 sudo /opt/BroadLink/send-bl.sh /opt/BroadLink/test.txt &lt;br /&gt;
&lt;br /&gt;
Wichtig ist bei diesem Skript, für das Textfile den ganzen Pfad anzugeben, und der in test.txt gelernte Befehl wird gesendet.&lt;br /&gt;
&lt;br /&gt;
Aus FHEM heraus kann dann z.B. auf der Eingabezeile gesendet werden:&lt;br /&gt;
  &amp;quot;/opt/BroadLink/send-bl.sh /opt/BroadLink/test.txt&amp;quot;&lt;br /&gt;
Dabei sind die &amp;quot; &amp;quot; wichtig, da es sich um einen Shell-Befehl handelt.&lt;br /&gt;
 &lt;br /&gt;
So kann man das dann auch in at-, notify- oder DOIFs verwenden. Hier mal ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
 define atAbendsLichtAn at *19:00:00 &amp;quot;/opt/BroadLink/send-bl.sh /opt/BroadLink/FB1An.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das 4. Skript &amp;quot;sendmore-bl.sh&amp;quot; ist eine Modifikation des Send-Skripts. Die Unterschiede sind:&lt;br /&gt;
&lt;br /&gt;
1. Es sendet auch mehrere Codes nacheinander, also z. B. auch Zahlenfolgen wie &amp;quot;0202&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
2. Es nimmt an, dass die Codes als .txt-Dateien im selben Verzeichnis liegen wie das Skript.&lt;br /&gt;
&lt;br /&gt;
3. Das Skript gibt keine Meldungen aus. Die sind beim Aufruf aus FHEM heraus auch unnötig.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Skript extrahiert aus dem Befehlsaufruf den Pfad und ergänzt ihn jeweils bei den Parametern sowie um die Dateierweiterung &amp;quot;.txt&amp;quot;. Daher kann der Aufruf dann kürzer sein. Angenommen, es sind die Code-Dateien 1.txt, 2.txt, 3.txt usw. im selben Verzeichnis wie die Skripte vorhanden, lautet der Aufruf im Terminal dann z.B. nur noch:&lt;br /&gt;
&lt;br /&gt;
 /opt/BroadLink/sendmore-bl.sh 1 2 3 2&lt;br /&gt;
&lt;br /&gt;
Im &amp;quot;define&amp;quot; lautet das oben genannte Beispiel:&lt;br /&gt;
 define atAbendsLichtAn at *19:00:00 &amp;quot;/opt/BroadLink/sendmore-bl.sh FB1An&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Feintuning ===&lt;br /&gt;
Im 4. Skript definiert die Zeile (kurz vor Ende)&lt;br /&gt;
     time.sleep(0.5)&lt;br /&gt;
die Wartezeit zwischen zwei gesendeten &amp;quot;Tasten&amp;quot;. Bei vielen Geräten funktioniert das auch, wenn man die Zeile auskommentiert oder löscht. Dann werden die Signale schneller hintereinander gesendet.&lt;br /&gt;
Man kann hier natürlich auch den Wert 0.5 verändern. Einfach ausprobieren!&lt;br /&gt;
&lt;br /&gt;
== Mehrere Bridges betreiben ==&lt;br /&gt;
&lt;br /&gt;
Um mehrere Bridges nebeneinander zu betreiben, braucht man für jedes Gerät das dritte oder vierte Skript unter eigenem Namen, also z.B. sendmore-bl-WoZi.sh und sendmore-bl-SchlafZi.sh und sendmore-bl-Kueche.sh. In diese müssen die jeweils zugehörenden IP- und MAC-Adressen eingetragen werden. Dann entscheidet man über den Aufruf, welche Bridge den Befehl bekommt. Dabei kann man die gelernten Codes für alle Bridges nutzen und muss sie nicht für jede Bridge neu anlernen.&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Man kann mit dem dritten Skript nur einzelne Tastendrücke senden. Und der Aufruf von mehreren Befehlen nacheinander liegt so weit auseinander, dass das nicht als Folge von Befehlen ankommt, sondern jeweils als Einzelbefehle. Dafür kann man das 4. Skript ausprobieren.&lt;br /&gt;
&lt;br /&gt;
Einige User berichten von diesem Fehler:&lt;br /&gt;
  Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;/opt/BroadLink/send-bl.sh&amp;quot;, line 34, in &amp;lt;module&amp;gt;&lt;br /&gt;
    device.send_data(myhex.decode(&#039;hex&#039;))&lt;br /&gt;
  File &amp;quot;/usr/local/lib/python2.7/dist-packages/broadlink-0.3-py2.7.egg/broadlink/__init__.py&amp;quot;, line 455, in send_data&lt;br /&gt;
    self.send_packet(0x6a, packet)&lt;br /&gt;
  File &amp;quot;/usr/local/lib/python2.7/dist-packages/broadlink-0.3-py2.7.egg/broadlink/__init__.py&amp;quot;, line 250, in send_packet&lt;br /&gt;
    response = self.cs.recvfrom(1024)&lt;br /&gt;
  socket.timeout: timed out&lt;br /&gt;
&lt;br /&gt;
Abhilfe schafft, in der Datei &amp;quot;/usr/local/lib/python2.7/dist-packages/broadlink-0.3-py2.7.egg/broadlink/__init__.py&amp;quot; Zeile 249&lt;br /&gt;
den Timeout von 1 Sekunde auf z.B. 5 Sekunden zu stellen: self.cs.settimeout(5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei der Einrichtung via Smartphone-App gibt den AP-Modus: in diesem wird im Gateway ein WLAN-AP aktiviert, &#039;&#039;&#039;unverschlüsselt&#039;&#039;&#039;, mit dem sich das Smartphone dann verbindet. Über das für Sniffer offene WLAN wird dann SSID und Passwort des lokalen WLAN übermittelt, worauf sich das Gateway versucht dort anzumelden. &#039;&#039;&#039;&#039;&#039;Die Einrichtung über diesen Weg legt das WLAN Passwort für Sniffer ohne weiteren Aufwand offen. Das Risiko ist auf diese eine Übertragung begrenzt.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hinweis ==&lt;br /&gt;
Wenn alles funktioniert, kann man aus dem dritten Skript natürlich die Bildschirmausgaben löschen, da es ja in FHEM im Hintergrund aufgerufen wird. Umgekehrt kann man sie auch im 4. Skript wieder &amp;quot;freischalten&amp;quot;, indem man die # vor den &amp;quot;print&amp;quot;-Anweisungen löscht.&lt;br /&gt;
&lt;br /&gt;
Gelegentlich auftretende Fehlermeldungen (die nur im Terminal sichtbar sind), tun der Funktion (bei mir) keinen Abbruch.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Infrarot]]&lt;/div&gt;</summary>
		<author><name>Hapege</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Broadlink&amp;diff=39334</id>
		<title>Broadlink</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Broadlink&amp;diff=39334"/>
		<updated>2024-05-18T11:16:59Z</updated>

		<summary type="html">&lt;p&gt;Hapege: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Beschreibung ==&lt;br /&gt;
Die chinesische Firma BroadLink stellt unter Anderem auch Gateways her, die sich per Wifi ansprechen lassen und Infrator (38KHz-IR) bzw. RF (433/315 MHz-RF) Komponenten fernsteuern können (https://www.ibroadlink.com/productinfo/762672.html).&lt;br /&gt;
&lt;br /&gt;
Die Gateways werden mit Hilfe einer Android- oder iOS-App (&amp;quot;Intelligent Home Center for EU (IHC) oder &amp;quot;BroadLink - Universal TV Remote&amp;quot;) angelernt.&lt;br /&gt;
&lt;br /&gt;
Danach stellen sie die Möglichkeit bereit, &lt;br /&gt;
* Infrarot- (und ggf. RF-) Codes bzw. Code-Sequenzen zu erfassen und via WLAN als Parameter zu übermitteln und&lt;br /&gt;
* (gelernte) Codes an kompatible IR- bzw. RF-Empfänger zu versenden. &lt;br /&gt;
&lt;br /&gt;
Die dazugehörige openAPI ist nicht öffentlich und unterliegt einer BroadLink NDA.&lt;br /&gt;
&lt;br /&gt;
Zur praktischen Verwendung gibt es mehrere Schnittstellen:&lt;br /&gt;
# die offizielle App (https://www.ibroadlink.com/bleapp), mit der Codes angelernt, in der App gespeichert und im lokalen WLAN über die RM versendet werden können,&lt;br /&gt;
# die &#039;&#039;[http://rm-bridge.fun2code.de/ RM Bridge]&#039;&#039; für Android-Geräte, die eine HTTP REST web API auf dem Androidgerät als Webservice bereitstellt,&lt;br /&gt;
# die &#039;&#039;Python-Bibliothek [https://github.com/mjg59/python-broadlink python-broadlink]&#039;&#039; von Matthew Garrett (mjg59) für Server, auf denen Python lauffähig ist. Diese kann dann direkt per (Shell-)Skript [https://forum.fhem.de/index.php/topic,54334.15.html aufgerufen werden] aber auch noch schön gekapselt werden:&lt;br /&gt;
# &#039;&#039;{{Link2Forum|Topic=38231|Message=581909|LinkText=Webservice für Python fähige Server}}&#039;&#039;. In dieser Form sind dann gelernte Sendebefehle elegant als [[HTTPMOD]] Objekte in FHEM integrierbar.&lt;br /&gt;
&lt;br /&gt;
=== BroadLink RM mini ===&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=RMmini.png&lt;br /&gt;
|Bildbeschreibung= BroadLink RM mini 3&lt;br /&gt;
|HWProtocol= Infrarot&lt;br /&gt;
|HWType= Gateway&lt;br /&gt;
|HWCategory= Infrarot&lt;br /&gt;
|HWComm= Infrarot 38 KHz&amp;lt;br /&amp;gt;Wifi 2.4GHz b/g/n &lt;br /&gt;
|HWChannels= 1&lt;br /&gt;
|HWVoltage= 5V&lt;br /&gt;
|HWPowerConsumption= max. 2,5W (max. 0,5A)&amp;lt;br /&amp;gt;standby ca. 0.85W&lt;br /&gt;
|HWPoweredBy= Micro USB&lt;br /&gt;
|HWSize= 5.5 x 5.5 x 6.45 cm&lt;br /&gt;
|HWDeviceFHEM= Broadlink&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer= [http://www.ibroadlink.com/rmMini3/ BroadLink]&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der BroadLink RM mini 3 (wird nicht mehr hergestellt, evtl. noch bei Amazon / ebay erhätlich) ist ein WLAN zu Infrarot Gateway (ohne RF, vgl. [[#BroadLink RM Pro|RM Pro]]). Im Vergleich zum RM Pro ist die Sendeleistung deutlich schwächer, da nur ein IR-Transmitter verbaut ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BroadLink RM Pro ===&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=RMPro.png&lt;br /&gt;
|Bildbeschreibung= BroadLink RM Pro&lt;br /&gt;
|HWProtocol= Infrarot, RF&lt;br /&gt;
|HWType= Gateway&lt;br /&gt;
|HWCategory= Infrarot, RF&lt;br /&gt;
|HWComm= Infrarot 38 KHz&amp;lt;br /&amp;gt;RF 433/315 MHz&amp;lt;br /&amp;gt;Wifi 2.4GHz b/g/n &lt;br /&gt;
|HWChannels= 2&lt;br /&gt;
|HWVoltage= 5V&lt;br /&gt;
|HWPowerConsumption= max. 5W (max. 1A)&amp;lt;br /&amp;gt;ca. 1W standby&lt;br /&gt;
|HWPoweredBy= Micro USB&lt;br /&gt;
|HWSize= 11 x 3,5 x 11,5 cm &lt;br /&gt;
|HWDeviceFHEM= Broadlink&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer= [http://www.ibroadlink.com/rmPro/ BroadLink]&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der BroadLink RM Pro/RM3 (wird nicht mehr hergestellt, evtl. noch bei Amazon / ebay erhältlich) ist ein WLAN zu Infrarot- und RF Gateway. Der aktuelle Nachfolger ist der RMpro 4 (https://www.ibroadlink.com/productinfo/762672.html).&lt;br /&gt;
&lt;br /&gt;
Der RM Pro verfügt im Vergleich zum [[#BroadLink RM mini|RM mini]] über eine größere Reichweite, da 6+1 (Kreis und Mitte) IR-Transmitter verbaut sind.&lt;br /&gt;
&lt;br /&gt;
(In der Version RM3 soll der unterstützte RF-Bereich inoffiziell sogar 142...1050 MHz betragen.)&lt;br /&gt;
&lt;br /&gt;
Der RM Pro enthält auch einen Temperatursensor, der mindestens über die App ausgelesen und für Aktions-Regeln verwendet werden kann. Der Sensor ist offenbar nicht in allen Versionen verbaut bzw. kann oft nur als externer Sensor angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Es gab/gibt Vorgängerversionen:&lt;br /&gt;
* RM Home/RM1: &amp;quot;rote Version&amp;quot;; nur IR, ohne RF; schwache Sendeleistung&lt;br /&gt;
* RM Pro/RM2: &amp;quot;schwarze Version&amp;quot;; ID 10&amp;amp;nbsp;002; IR und RF 433/315MHz; verstärkte IR-Sendeleistung (7 IR-Transmitter)&lt;br /&gt;
* (OEM Version) RM Plus: schwarz, keine Aufkleber, keine Beschriftungen, gerade, nicht abgerundete Oberseite... (soll intern baugleich mit RM Pro/RM3 sein).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nutzung in FHEM ==&lt;br /&gt;
=== Modul ===&lt;br /&gt;
&#039;&#039;&#039;Achtung: Das Modul wird offenbar nicht mehr gepflegt und funktioniert bei vielen Nutzern nicht bzw. (nach Rücksetzen des Gateways) nicht mehr. Empfohlen wird aktuell der Einsatz der unten genannten python Module und der dort hinterlegten Skripte.&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es gibt das {{Link2CmdRef|Lang=de|Label=Modul Broadlink|Anker=Broadlink}}, mit dem Broadlink-Geräte in FHEM eingebunden werden können:&lt;br /&gt;
* rmpro  (RM Pro) &lt;br /&gt;
* rmmini (RM mini)&lt;br /&gt;
* sp3 (SP3 - Schalter)&lt;br /&gt;
* sp3s (SP3S - Schalter mit aktueller Energieverbrauchsmessung)&lt;br /&gt;
&lt;br /&gt;
s.a.: [https://forum.fhem.de/index.php/topic,71972.msg Forenthread]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung: Das Modul wird offenbar nicht mehr gepflegt und funktioniert bei vielen Nutzern nicht bzw. (nach Rücksetzen des Gateways) nicht mehr. Empfohlen wird aktuell der Einsatz der unten genannten python Module und der dort hinterlegten Skripte.&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
=== Webservice ===&lt;br /&gt;
Es gibt den Ansatz, [https://forum.fhem.de/index.php/topic,38231.msg581909.html#msg581909 auf dem FHEM-Server einen Webservice (pro Gateway) zu installieren] und via [[HTTPMOD]] Befehle abzusetzen.&lt;br /&gt;
&lt;br /&gt;
=== Skripte ===&lt;br /&gt;
Auf dem FHEM-Server werden die python Module mit den integrierten Skripten installiert und nur jeweils bei Bedarf angestoßen. So wird keine permanente Systemlast produziert. Die Reaktionsgeschwindigkeit ist nicht überwältigend, aber praxistauglich. (Ca 2-3 sec).&lt;br /&gt;
&lt;br /&gt;
:: &#039;&#039;&#039;Credits&#039;&#039;&#039;&lt;br /&gt;
:: &lt;br /&gt;
:: Die Python-API ist von [https://github.com/mjg59/python-broadlink dieser Github-Seite].&lt;br /&gt;
&lt;br /&gt;
== Hinweis ==&lt;br /&gt;
Mit diesem Vorgehen unterstützt das BroadLink sowohl IR als auch RF.&lt;br /&gt;
&lt;br /&gt;
== Vorgehen (Skripte) ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
Zunächst wird der Broadlink mit der App ins eigene Netz eingebunden. Hierzu der Anleitung in der App folgen.&lt;br /&gt;
&lt;br /&gt;
Alternativ und ohne Notwendigkeit die App zu installieren kann der Broadlink auch über die python Skripte ins WLan gebracht werden, siehe https://github.com/mjg59/python-broadlink.&lt;br /&gt;
&lt;br /&gt;
Auf dem FHEM-Rechner (z.B. Raspi) muss python (python3) und am besten git installiert sein. Ggf. muss auch noch simplejson und pip installiert werden.&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install python git pip&lt;br /&gt;
 sudo pip install simplejson&lt;br /&gt;
&lt;br /&gt;
Verzeichnis erstellen und die Bibliothek installieren&lt;br /&gt;
 sudo mkdir /opt/BroadLink&lt;br /&gt;
 sudo chown fhem.dialout /opt/BroadLink&lt;br /&gt;
 cd /opt/BroadLink&lt;br /&gt;
 sudo git clone https://github.com/mjg59/python-broadlink.git&lt;br /&gt;
 cd python-broadlink&lt;br /&gt;
 sudo python setup.py install&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
== Skripte ==&lt;br /&gt;
Die python Midule bringen eigene Skripte zum Anlernen und Senden von IR/RF commands mit. Sie liegen im Verzeichnis /opt/BroadLink/python-broadlink/cli. Die Verwendung wird hier beschrieben: https://github.com/mjg59/python-broadlink/tree/master/cli&lt;br /&gt;
&lt;br /&gt;
Anleitung im Forum dazu: https://forum.fhem.de/index.php?topic=71972.msg1313044#msg1313044&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;In a nutshell:&#039;&#039;&#039; &lt;br /&gt;
Broadlink finden: &amp;lt;syntaxhighlight&amp;gt; broadlink_discovery &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Daten des gefundene Gerätes in einem File speichern (siehe Shell Ausgabe), als Beispiel: &amp;lt;syntaxhighlight&amp;gt;rmpro.device&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Command anlernen und in File speichern: &amp;lt;syntaxhighlight&amp;gt;broadlink_cli --device @rmpro.device --rflearn --learnfile TVon&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Command senden: &amp;lt;syntaxhighlight&amp;gt;broadlink_cli --device @rmpro.device --send @TVon&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Integration in notify/DOIF: &amp;lt;syntaxhighlight&amp;gt;{system(&amp;quot;/opt/BroadLink/python-broadlink/cli/broadlink_cli --device \@/opt/BroadLink/python-broadlink/cli/rmpro.device --send \@/opt/BroadLink/python-broadlink/cli/TVOn&amp;quot;)}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;== Die folgenden Skripte bzw der ganze Abschnitt ist veraltet ==&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die hier zitierten Skripte laufen nicht mehr unter python3. Sie sind auch nicht mehr erforderlich, da die python Module eigene Skripte mitbringen. Diese liegen im Verzeichnis /opt/BroadLink/python-broadlink/cli. Die Verwendung wird hier beschrieben: https://github.com/mjg59/python-broadlink/tree/master/cli&lt;br /&gt;
  &lt;br /&gt;
In das Verzeichnis dann noch die vier Skripte kopieren.&lt;br /&gt;
&lt;br /&gt;
1. search-bl.sh&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
#Script to locate Broadlink devices on local network by Graeme Brown Dec 23 2016&lt;br /&gt;
#These must be set up using the Broadlink app first!&lt;br /&gt;
&lt;br /&gt;
import broadlink&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;************************************************&amp;quot;&lt;br /&gt;
print &amp;quot;Using python library created by Matthew Garrett&amp;quot;&lt;br /&gt;
print &amp;quot;https://github.com/mjg59/python-broadlink&amp;quot;&lt;br /&gt;
print &amp;quot;************************************************&amp;quot;&lt;br /&gt;
print &amp;quot;Scanning network for Broadlink devices....&amp;quot;&lt;br /&gt;
&lt;br /&gt;
mydevices = broadlink.discover(timeout=5)&lt;br /&gt;
print &amp;quot;Found &amp;quot; + str(len(mydevices )) + &amp;quot; broadlink devices&amp;quot;&lt;br /&gt;
time.sleep(1)&lt;br /&gt;
print &amp;quot;...............&amp;quot;&lt;br /&gt;
&lt;br /&gt;
for index, item in enumerate(mydevices):&lt;br /&gt;
&lt;br /&gt;
  mydevices[index].auth()&lt;br /&gt;
&lt;br /&gt;
  ipadd = mydevices[index].host&lt;br /&gt;
  ipadd = str(ipadd)&lt;br /&gt;
  print &amp;quot;Device &amp;quot; + str(index + 1) +&amp;quot; Host address = &amp;quot; + ipadd[1:19]&lt;br /&gt;
  macadd = &#039;&#039;.join(format(x, &#039;02x&#039;) for x in mydevices[index].mac[::-1])&lt;br /&gt;
  macadd = str(macadd)&lt;br /&gt;
 &lt;br /&gt;
  mymacadd = macadd[:2] + &amp;quot; &amp;quot; + macadd[2:4] + &amp;quot; &amp;quot; + macadd[4:6] + &amp;quot; &amp;quot; + macadd[6:8] + &amp;quot; &amp;quot; + macadd[8:10] + &amp;quot; &amp;quot; + macadd[10:12]&lt;br /&gt;
  print &amp;quot;Device &amp;quot; + str(index + 1) +&amp;quot; MAC address = &amp;quot; + mymacadd&lt;br /&gt;
  print &amp;quot;...............&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. learn-bl.sh&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
import broadlink&lt;br /&gt;
import time&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
device = broadlink.rm(host=(&amp;quot;&amp;lt;your RM3 IP address&amp;gt;&amp;quot;,80), mac=bytearray.fromhex(&amp;quot;&amp;lt;your RM3 mac&amp;gt;&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Connecting to Broadlink device....&amp;quot;&lt;br /&gt;
device.auth()&lt;br /&gt;
time.sleep(1)&lt;br /&gt;
print &amp;quot;Connected....&amp;quot;&lt;br /&gt;
&lt;br /&gt;
codeName = raw_input(&amp;quot;Bitte Namen f. den Code eingeben, z.B. tvOff &amp;quot;)&lt;br /&gt;
time.sleep(1)&lt;br /&gt;
print &amp;quot;Wenn die LED am Broadlink angeht, innerhalb von 5 Sek die FB-Taste druecken &amp;quot;&lt;br /&gt;
&lt;br /&gt;
device.host&lt;br /&gt;
device.enter_learning()&lt;br /&gt;
time.sleep(5)&lt;br /&gt;
ir_packet = device.check_data()&lt;br /&gt;
#convert code to hex&lt;br /&gt;
myhex = str(ir_packet).encode(&#039;hex&#039;);&lt;br /&gt;
&lt;br /&gt;
if ir_packet == None:&lt;br /&gt;
   print &amp;quot;Kein Code empfangen - Ende&amp;quot;&lt;br /&gt;
   sys.exit()&lt;br /&gt;
else:&lt;br /&gt;
&lt;br /&gt;
# record learned hex code to file&lt;br /&gt;
   f = open(codeName +&amp;quot;.txt&amp;quot;,&#039;w&#039;)&lt;br /&gt;
f.write(myhex)&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Hex code gespeichert unter &amp;quot; + codeName + &amp;quot;.txt&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. send-bl.sh&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
import broadlink&lt;br /&gt;
import time&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    fileName = sys.argv[1]&lt;br /&gt;
except IndexError:&lt;br /&gt;
    fileName = &#039;null&#039;&lt;br /&gt;
&lt;br /&gt;
if fileName == &#039;null&#039;:&lt;br /&gt;
   print &amp;quot;Error - kein Dateiname angegeben&amp;quot;&lt;br /&gt;
   sys.exit()&lt;br /&gt;
else:&lt;br /&gt;
&lt;br /&gt;
   device = broadlink.rm(host=(&amp;quot;&amp;lt;your RM3 IP address&amp;gt;&amp;quot;,80), mac=bytearray.fromhex(&amp;quot;&amp;lt;your RM3 mac&amp;gt;&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Connecting to Broadlink device....&amp;quot;&lt;br /&gt;
device.auth()&lt;br /&gt;
time.sleep(1)&lt;br /&gt;
print &amp;quot;Connected....&amp;quot;&lt;br /&gt;
time.sleep(1)&lt;br /&gt;
device.host&lt;br /&gt;
&lt;br /&gt;
file = open(fileName, &#039;r&#039;)&lt;br /&gt;
&lt;br /&gt;
myhex = file.read()&lt;br /&gt;
&lt;br /&gt;
device.send_data(myhex.decode(&#039;hex&#039;))&lt;br /&gt;
print &amp;quot;Code Sent....&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
4. sendmore-bl.sh&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
import broadlink&lt;br /&gt;
import time&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    fileName = sys.argv[1]&lt;br /&gt;
except IndexError:&lt;br /&gt;
    fileName = &#039;null&#039;&lt;br /&gt;
&lt;br /&gt;
if fileName == &#039;null&#039;:&lt;br /&gt;
   print &amp;quot;Error - kein Dateiname angegeben&amp;quot;&lt;br /&gt;
   sys.exit()&lt;br /&gt;
else:&lt;br /&gt;
 device = broadlink.rm(host=(&amp;quot;&amp;lt;your RM3 IP address&amp;gt;&amp;quot;,80), mac=bytearray.fromhex(&amp;quot;&amp;lt;your RM3 mac&amp;gt;&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
# print &amp;quot;Connecting to Broadlink device....&amp;quot;&lt;br /&gt;
 device.auth()&lt;br /&gt;
 time.sleep(1)&lt;br /&gt;
# print &amp;quot;Connected....&amp;quot;&lt;br /&gt;
 device.host&lt;br /&gt;
&lt;br /&gt;
# Pfad aus Aufruf extrahieren und dann den Befehl selbst vom Stapel nehmen&lt;br /&gt;
 Parameter = sys.argv&lt;br /&gt;
 # Name des Befehls selbst&lt;br /&gt;
 filename1 = Parameter[0]&lt;br /&gt;
 # Gesamtlaenge&lt;br /&gt;
 FileNameLaenge = len(filename1)&lt;br /&gt;
 # in Bestandteile aufteilen&lt;br /&gt;
 filearray = filename1.split(&amp;quot;/&amp;quot;)&lt;br /&gt;
 # den letzten identifizieren. Das ist der eigentliche Befehl&lt;br /&gt;
 splitNo = len(filename1.split(&amp;quot;/&amp;quot;))&lt;br /&gt;
 lastElement = filearray[splitNo-1]&lt;br /&gt;
 # den vom Aufruf wegschneiden, um den Pfad zu bekommen&lt;br /&gt;
 FileNameAbzug = len(lastElement)&lt;br /&gt;
 Ende = FileNameLaenge - FileNameAbzug&lt;br /&gt;
 Pfad = filename1[0:Ende]&lt;br /&gt;
 # Befehl aus der Liste loeschen, damit die Parameter bleiben&lt;br /&gt;
 Parameter.pop(0)&lt;br /&gt;
&lt;br /&gt;
 # repeat for each argument&lt;br /&gt;
 for argument in Parameter:&lt;br /&gt;
    fileName = Pfad + argument +&amp;quot;.txt&amp;quot;&lt;br /&gt;
    file = open(fileName, &#039;r&#039;)&lt;br /&gt;
    myhex = file.read()&lt;br /&gt;
    device.send_data(myhex.decode(&#039;hex&#039;))&lt;br /&gt;
    time.sleep(0.5)&lt;br /&gt;
# print &amp;quot;Code Sent....&amp;quot;&lt;br /&gt;
sys.exit()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dann in dem Verzeichnis noch die Dateibesitzer wechseln und die Skripte ausführbar machen:&lt;br /&gt;
&lt;br /&gt;
 sudo chown fhem.dialout *.sh&lt;br /&gt;
 sudo chmod 744 *.sh&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration === &lt;br /&gt;
&lt;br /&gt;
Nun gilt es, die IP und MAC-Adresse des Broadlink herauszufinden. Entweder man schaut im Router nach, benutzt die Android-App FING oder das Script &amp;quot;search-bl.sh&amp;quot;. Dazu&lt;br /&gt;
&lt;br /&gt;
 sudo ./search-bl.sh&lt;br /&gt;
&lt;br /&gt;
Beispielhaft kommt dann:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 ************************************************&lt;br /&gt;
 Using python library created by Matthew Garrett&lt;br /&gt;
 https://github.com/mjg59/python-broadlink&lt;br /&gt;
 ************************************************&lt;br /&gt;
 Scanning network for Broadlink devices....&lt;br /&gt;
 Found 1 broadlink devices&lt;br /&gt;
 ...............&lt;br /&gt;
 Device 1 Host address = &#039;192.168.1.16&#039;, 8&lt;br /&gt;
 Device 1 MAC address = b4 43 0d aa b3 54&lt;br /&gt;
 ...............&lt;br /&gt;
&lt;br /&gt;
Für später sind die IP Adresse und die MAC Adresse wichtig. Diese müssen im zweiten bis vierten Script eingetragen werden!! Ich benutze da den Editor nano.&lt;br /&gt;
 sudo nano ./learn-bl.sh&lt;br /&gt;
 sudo nano ./send-bl.sh&lt;br /&gt;
 sudo nano ./sendmore-bl.sh&lt;br /&gt;
&lt;br /&gt;
Dabei die doppelten Anführungszeichen stehen lassen und an der passenden Stelle jeweils die IP und an der anderen die MAC-Adresse (mit Leerzeichen anstelle der Doppelpunkte) eintragen. Das erste Script liefert die auch so formatiert. Wenn man sie aber aus dem Router hat oder so, dann eben beachten!&lt;br /&gt;
&lt;br /&gt;
Das zweite Script dient zum Anlernen des Fernbedienungscodes und Abspeichern in jeweils einer txt Datei. Das Script verbindet sich mit dem Broadlink und erwartet einen Namen für den Code. Dann hat man 5 Sec Zeit, um die entsprechende Fernbedienungstaste zu drücken, um den Code anzulernen. Dieser wird dann in eine Datei mit dem Codenamen gespeichert. So kann man alle seine zu verwendenden Codes nacheinander anlernen.&lt;br /&gt;
&lt;br /&gt;
 sudo ./learn-bl.sh&lt;br /&gt;
&lt;br /&gt;
zeigt Folgendes an:&lt;br /&gt;
&lt;br /&gt;
 Connecting to Broadlink device....&lt;br /&gt;
 Connected....&lt;br /&gt;
 Bitte Namen für den Code eingeben, z.B. tvOff test&lt;br /&gt;
 Wenn die LED am Broadlink angeht, innerhalb von 5 Sek die FB-Taste drücken &lt;br /&gt;
 Hex code gespeichert unter test.txt&lt;br /&gt;
&lt;br /&gt;
=== Betrieb ===&lt;br /&gt;
&lt;br /&gt;
Mit dem dritten und vierten Script kann man den Code wieder senden. Auch hier wieder die eigene IP Adresse und MAC Adresse des Broadlink von oben eintragen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Aufruf im Terminal ist für das dritte Skript: &lt;br /&gt;
 sudo /opt/BroadLink/send-bl.sh /opt/BroadLink/test.txt &lt;br /&gt;
&lt;br /&gt;
Wichtig ist bei diesem Skript, für das Textfile den ganzen Pfad anzugeben, und der in test.txt gelernte Befehl wird gesendet.&lt;br /&gt;
&lt;br /&gt;
Aus FHEM heraus kann dann z.B. auf der Eingabezeile gesendet werden:&lt;br /&gt;
  &amp;quot;/opt/BroadLink/send-bl.sh /opt/BroadLink/test.txt&amp;quot;&lt;br /&gt;
Dabei sind die &amp;quot; &amp;quot; wichtig, da es sich um einen Shell-Befehl handelt.&lt;br /&gt;
 &lt;br /&gt;
So kann man das dann auch in at-, notify- oder DOIFs verwenden. Hier mal ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
 define atAbendsLichtAn at *19:00:00 &amp;quot;/opt/BroadLink/send-bl.sh /opt/BroadLink/FB1An.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das 4. Skript &amp;quot;sendmore-bl.sh&amp;quot; ist eine Modifikation des Send-Skripts. Die Unterschiede sind:&lt;br /&gt;
&lt;br /&gt;
1. Es sendet auch mehrere Codes nacheinander, also z. B. auch Zahlenfolgen wie &amp;quot;0202&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
2. Es nimmt an, dass die Codes als .txt-Dateien im selben Verzeichnis liegen wie das Skript.&lt;br /&gt;
&lt;br /&gt;
3. Das Skript gibt keine Meldungen aus. Die sind beim Aufruf aus FHEM heraus auch unnötig.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Skript extrahiert aus dem Befehlsaufruf den Pfad und ergänzt ihn jeweils bei den Parametern sowie um die Dateierweiterung &amp;quot;.txt&amp;quot;. Daher kann der Aufruf dann kürzer sein. Angenommen, es sind die Code-Dateien 1.txt, 2.txt, 3.txt usw. im selben Verzeichnis wie die Skripte vorhanden, lautet der Aufruf im Terminal dann z.B. nur noch:&lt;br /&gt;
&lt;br /&gt;
 /opt/BroadLink/sendmore-bl.sh 1 2 3 2&lt;br /&gt;
&lt;br /&gt;
Im &amp;quot;define&amp;quot; lautet das oben genannte Beispiel:&lt;br /&gt;
 define atAbendsLichtAn at *19:00:00 &amp;quot;/opt/BroadLink/sendmore-bl.sh FB1An&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Feintuning ===&lt;br /&gt;
Im 4. Skript definiert die Zeile (kurz vor Ende)&lt;br /&gt;
     time.sleep(0.5)&lt;br /&gt;
die Wartezeit zwischen zwei gesendeten &amp;quot;Tasten&amp;quot;. Bei vielen Geräten funktioniert das auch, wenn man die Zeile auskommentiert oder löscht. Dann werden die Signale schneller hintereinander gesendet.&lt;br /&gt;
Man kann hier natürlich auch den Wert 0.5 verändern. Einfach ausprobieren!&lt;br /&gt;
&lt;br /&gt;
== Mehrere Bridges betreiben ==&lt;br /&gt;
&lt;br /&gt;
Um mehrere Bridges nebeneinander zu betreiben, braucht man für jedes Gerät das dritte oder vierte Skript unter eigenem Namen, also z.B. sendmore-bl-WoZi.sh und sendmore-bl-SchlafZi.sh und sendmore-bl-Kueche.sh. In diese müssen die jeweils zugehörenden IP- und MAC-Adressen eingetragen werden. Dann entscheidet man über den Aufruf, welche Bridge den Befehl bekommt. Dabei kann man die gelernten Codes für alle Bridges nutzen und muss sie nicht für jede Bridge neu anlernen.&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Man kann mit dem dritten Skript nur einzelne Tastendrücke senden. Und der Aufruf von mehreren Befehlen nacheinander liegt so weit auseinander, dass das nicht als Folge von Befehlen ankommt, sondern jeweils als Einzelbefehle. Dafür kann man das 4. Skript ausprobieren.&lt;br /&gt;
&lt;br /&gt;
Einige User berichten von diesem Fehler:&lt;br /&gt;
  Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;/opt/BroadLink/send-bl.sh&amp;quot;, line 34, in &amp;lt;module&amp;gt;&lt;br /&gt;
    device.send_data(myhex.decode(&#039;hex&#039;))&lt;br /&gt;
  File &amp;quot;/usr/local/lib/python2.7/dist-packages/broadlink-0.3-py2.7.egg/broadlink/__init__.py&amp;quot;, line 455, in send_data&lt;br /&gt;
    self.send_packet(0x6a, packet)&lt;br /&gt;
  File &amp;quot;/usr/local/lib/python2.7/dist-packages/broadlink-0.3-py2.7.egg/broadlink/__init__.py&amp;quot;, line 250, in send_packet&lt;br /&gt;
    response = self.cs.recvfrom(1024)&lt;br /&gt;
  socket.timeout: timed out&lt;br /&gt;
&lt;br /&gt;
Abhilfe schafft, in der Datei &amp;quot;/usr/local/lib/python2.7/dist-packages/broadlink-0.3-py2.7.egg/broadlink/__init__.py&amp;quot; Zeile 249&lt;br /&gt;
den Timeout von 1 Sekunde auf z.B. 5 Sekunden zu stellen: self.cs.settimeout(5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei der Einrichtung via Smartphone-App gibt den AP-Modus: in diesem wird im Gateway ein WLAN-AP aktiviert, &#039;&#039;&#039;unverschlüsselt&#039;&#039;&#039;, mit dem sich das Smartphone dann verbindet. Über das für Sniffer offene WLAN wird dann SSID und Passwort des lokalen WLAN übermittelt, worauf sich das Gateway versucht dort anzumelden. &#039;&#039;&#039;&#039;&#039;Die Einrichtung über diesen Weg legt das WLAN Passwort für Sniffer ohne weiteren Aufwand offen. Das Risiko ist auf diese eine Übertragung begrenzt.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hinweis ==&lt;br /&gt;
Wenn alles funktioniert, kann man aus dem dritten Skript natürlich die Bildschirmausgaben löschen, da es ja in FHEM im Hintergrund aufgerufen wird. Umgekehrt kann man sie auch im 4. Skript wieder &amp;quot;freischalten&amp;quot;, indem man die # vor den &amp;quot;print&amp;quot;-Anweisungen löscht.&lt;br /&gt;
&lt;br /&gt;
Gelegentlich auftretende Fehlermeldungen (die nur im Terminal sichtbar sind), tun der Funktion (bei mir) keinen Abbruch.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Infrarot]]&lt;/div&gt;</summary>
		<author><name>Hapege</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Broadlink&amp;diff=39333</id>
		<title>Broadlink</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Broadlink&amp;diff=39333"/>
		<updated>2024-05-18T11:16:24Z</updated>

		<summary type="html">&lt;p&gt;Hapege: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Beschreibung ==&lt;br /&gt;
Die chinesische Firma BroadLink stellt unter Anderem auch Gateways her, die sich per Wifi ansprechen lassen und Infrator (38KHz-IR) bzw. RF (433/315 MHz-RF) Komponenten fernsteuern können (https://www.ibroadlink.com/productinfo/762672.html).&lt;br /&gt;
&lt;br /&gt;
Die Gateways werden mit Hilfe einer Android- oder iOS-App (&amp;quot;Intelligent Home Center for EU (IHC) oder &amp;quot;BroadLink - Universal TV Remote&amp;quot;) angelernt.&lt;br /&gt;
&lt;br /&gt;
Danach stellen sie die Möglichkeit bereit, &lt;br /&gt;
* Infrarot- (und ggf. RF-) Codes bzw. Code-Sequenzen zu erfassen und via WLAN als Parameter zu übermitteln und&lt;br /&gt;
* (gelernte) Codes an kompatible IR- bzw. RF-Empfänger zu versenden. &lt;br /&gt;
&lt;br /&gt;
Die dazugehörige openAPI ist nicht öffentlich und unterliegt einer BroadLink NDA.&lt;br /&gt;
&lt;br /&gt;
Zur praktischen Verwendung gibt es mehrere Schnittstellen:&lt;br /&gt;
# die offizielle App (https://www.ibroadlink.com/bleapp), mit der Codes angelernt, in der App gespeichert und im lokalen WLAN über die RM versendet werden können,&lt;br /&gt;
# die &#039;&#039;[http://rm-bridge.fun2code.de/ RM Bridge]&#039;&#039; für Android-Geräte, die eine HTTP REST web API auf dem Androidgerät als Webservice bereitstellt,&lt;br /&gt;
# die &#039;&#039;Python-Bibliothek [https://github.com/mjg59/python-broadlink python-broadlink]&#039;&#039; von Matthew Garrett (mjg59) für Server, auf denen Python lauffähig ist. Diese kann dann direkt per (Shell-)Skript [https://forum.fhem.de/index.php/topic,54334.15.html aufgerufen werden] aber auch noch schön gekapselt werden:&lt;br /&gt;
# &#039;&#039;{{Link2Forum|Topic=38231|Message=581909|LinkText=Webservice für Python fähige Server}}&#039;&#039;. In dieser Form sind dann gelernte Sendebefehle elegant als [[HTTPMOD]] Objekte in FHEM integrierbar.&lt;br /&gt;
&lt;br /&gt;
=== BroadLink RM mini ===&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=RMmini.png&lt;br /&gt;
|Bildbeschreibung= BroadLink RM mini 3&lt;br /&gt;
|HWProtocol= Infrarot&lt;br /&gt;
|HWType= Gateway&lt;br /&gt;
|HWCategory= Infrarot&lt;br /&gt;
|HWComm= Infrarot 38 KHz&amp;lt;br /&amp;gt;Wifi 2.4GHz b/g/n &lt;br /&gt;
|HWChannels= 1&lt;br /&gt;
|HWVoltage= 5V&lt;br /&gt;
|HWPowerConsumption= max. 2,5W (max. 0,5A)&amp;lt;br /&amp;gt;standby ca. 0.85W&lt;br /&gt;
|HWPoweredBy= Micro USB&lt;br /&gt;
|HWSize= 5.5 x 5.5 x 6.45 cm&lt;br /&gt;
|HWDeviceFHEM= Broadlink&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer= [http://www.ibroadlink.com/rmMini3/ BroadLink]&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der BroadLink RM mini 3 (wird nicht mehr hergestellt, evtl. noch bei Amazon / ebay erhätlich) ist ein WLAN zu Infrarot Gateway (ohne RF, vgl. [[#BroadLink RM Pro|RM Pro]]). Im Vergleich zum RM Pro ist die Sendeleistung deutlich schwächer, da nur ein IR-Transmitter verbaut ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BroadLink RM Pro ===&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=RMPro.png&lt;br /&gt;
|Bildbeschreibung= BroadLink RM Pro&lt;br /&gt;
|HWProtocol= Infrarot, RF&lt;br /&gt;
|HWType= Gateway&lt;br /&gt;
|HWCategory= Infrarot, RF&lt;br /&gt;
|HWComm= Infrarot 38 KHz&amp;lt;br /&amp;gt;RF 433/315 MHz&amp;lt;br /&amp;gt;Wifi 2.4GHz b/g/n &lt;br /&gt;
|HWChannels= 2&lt;br /&gt;
|HWVoltage= 5V&lt;br /&gt;
|HWPowerConsumption= max. 5W (max. 1A)&amp;lt;br /&amp;gt;ca. 1W standby&lt;br /&gt;
|HWPoweredBy= Micro USB&lt;br /&gt;
|HWSize= 11 x 3,5 x 11,5 cm &lt;br /&gt;
|HWDeviceFHEM= Broadlink&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer= [http://www.ibroadlink.com/rmPro/ BroadLink]&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der BroadLink RM Pro/RM3 (wird nicht mehr hergestellt, evtl. noch bei Amazon / ebay erhältlich) ist ein WLAN zu Infrarot- und RF Gateway. Der aktuelle Nachfolger ist der RMpro 4 (https://www.ibroadlink.com/productinfo/762672.html).&lt;br /&gt;
&lt;br /&gt;
Der RM Pro verfügt im Vergleich zum [[#BroadLink RM mini|RM mini]] über eine größere Reichweite, da 6+1 (Kreis und Mitte) IR-Transmitter verbaut sind.&lt;br /&gt;
&lt;br /&gt;
(In der Version RM3 soll der unterstützte RF-Bereich inoffiziell sogar 142...1050 MHz betragen.)&lt;br /&gt;
&lt;br /&gt;
Der RM Pro enthält auch einen Temperatursensor, der mindestens über die App ausgelesen und für Aktions-Regeln verwendet werden kann. Der Sensor ist offenbar nicht in allen Versionen verbaut bzw. kann oft nur als externer Sensor angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Es gab/gibt Vorgängerversionen:&lt;br /&gt;
* RM Home/RM1: &amp;quot;rote Version&amp;quot;; nur IR, ohne RF; schwache Sendeleistung&lt;br /&gt;
* RM Pro/RM2: &amp;quot;schwarze Version&amp;quot;; ID 10&amp;amp;nbsp;002; IR und RF 433/315MHz; verstärkte IR-Sendeleistung (7 IR-Transmitter)&lt;br /&gt;
* (OEM Version) RM Plus: schwarz, keine Aufkleber, keine Beschriftungen, gerade, nicht abgerundete Oberseite... (soll intern baugleich mit RM Pro/RM3 sein).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nutzung in FHEM ==&lt;br /&gt;
=== Modul ===&lt;br /&gt;
Es gibt das {{Link2CmdRef|Lang=de|Label=Modul Broadlink|Anker=Broadlink}}, mit dem Broadlink-Geräte in FHEM eingebunden werden können:&lt;br /&gt;
* rmpro  (RM Pro) &lt;br /&gt;
* rmmini (RM mini)&lt;br /&gt;
* sp3 (SP3 - Schalter)&lt;br /&gt;
* sp3s (SP3S - Schalter mit aktueller Energieverbrauchsmessung)&lt;br /&gt;
&lt;br /&gt;
s.a.: [https://forum.fhem.de/index.php/topic,71972.msg Forenthread]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung: Das Modul wird offenbar nicht mehr gepflegt und funktioniert bei vielen Nutzern nicht bzw. (nach Rücksetzen des Gateways) nicht mehr. Empfohlen wird aktuell der Einsatz der unten genannten python Module und der dort hinterlegten Skripte.&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
=== Webservice ===&lt;br /&gt;
Es gibt den Ansatz, [https://forum.fhem.de/index.php/topic,38231.msg581909.html#msg581909 auf dem FHEM-Server einen Webservice (pro Gateway) zu installieren] und via [[HTTPMOD]] Befehle abzusetzen.&lt;br /&gt;
&lt;br /&gt;
=== Skripte ===&lt;br /&gt;
Auf dem FHEM-Server werden die python Module mit den integrierten Skripten installiert und nur jeweils bei Bedarf angestoßen. So wird keine permanente Systemlast produziert. Die Reaktionsgeschwindigkeit ist nicht überwältigend, aber praxistauglich. (Ca 2-3 sec).&lt;br /&gt;
&lt;br /&gt;
:: &#039;&#039;&#039;Credits&#039;&#039;&#039;&lt;br /&gt;
:: &lt;br /&gt;
:: Die Python-API ist von [https://github.com/mjg59/python-broadlink dieser Github-Seite].&lt;br /&gt;
&lt;br /&gt;
== Hinweis ==&lt;br /&gt;
Mit diesem Vorgehen unterstützt das BroadLink sowohl IR als auch RF.&lt;br /&gt;
&lt;br /&gt;
== Vorgehen (Skripte) ==&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
Zunächst wird der Broadlink mit der App ins eigene Netz eingebunden. Hierzu der Anleitung in der App folgen.&lt;br /&gt;
&lt;br /&gt;
Alternativ und ohne Notwendigkeit die App zu installieren kann der Broadlink auch über die python Skripte ins WLan gebracht werden, siehe https://github.com/mjg59/python-broadlink.&lt;br /&gt;
&lt;br /&gt;
Auf dem FHEM-Rechner (z.B. Raspi) muss python (python3) und am besten git installiert sein. Ggf. muss auch noch simplejson und pip installiert werden.&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install python git pip&lt;br /&gt;
 sudo pip install simplejson&lt;br /&gt;
&lt;br /&gt;
Verzeichnis erstellen und die Bibliothek installieren&lt;br /&gt;
 sudo mkdir /opt/BroadLink&lt;br /&gt;
 sudo chown fhem.dialout /opt/BroadLink&lt;br /&gt;
 cd /opt/BroadLink&lt;br /&gt;
 sudo git clone https://github.com/mjg59/python-broadlink.git&lt;br /&gt;
 cd python-broadlink&lt;br /&gt;
 sudo python setup.py install&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
== Skripte ==&lt;br /&gt;
Die python Midule bringen eigene Skripte zum Anlernen und Senden von IR/RF commands mit. Sie liegen im Verzeichnis /opt/BroadLink/python-broadlink/cli. Die Verwendung wird hier beschrieben: https://github.com/mjg59/python-broadlink/tree/master/cli&lt;br /&gt;
&lt;br /&gt;
Anleitung im Forum dazu: https://forum.fhem.de/index.php?topic=71972.msg1313044#msg1313044&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;In a nutshell:&#039;&#039;&#039; &lt;br /&gt;
Broadlink finden: &amp;lt;syntaxhighlight&amp;gt; broadlink_discovery &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Daten des gefundene Gerätes in einem File speichern (siehe Shell Ausgabe), als Beispiel: &amp;lt;syntaxhighlight&amp;gt;rmpro.device&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Command anlernen und in File speichern: &amp;lt;syntaxhighlight&amp;gt;broadlink_cli --device @rmpro.device --rflearn --learnfile TVon&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Command senden: &amp;lt;syntaxhighlight&amp;gt;broadlink_cli --device @rmpro.device --send @TVon&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Integration in notify/DOIF: &amp;lt;syntaxhighlight&amp;gt;{system(&amp;quot;/opt/BroadLink/python-broadlink/cli/broadlink_cli --device \@/opt/BroadLink/python-broadlink/cli/rmpro.device --send \@/opt/BroadLink/python-broadlink/cli/TVOn&amp;quot;)}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;== Die folgenden Skripte bzw der ganze Abschnitt ist veraltet ==&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die hier zitierten Skripte laufen nicht mehr unter python3. Sie sind auch nicht mehr erforderlich, da die python Module eigene Skripte mitbringen. Diese liegen im Verzeichnis /opt/BroadLink/python-broadlink/cli. Die Verwendung wird hier beschrieben: https://github.com/mjg59/python-broadlink/tree/master/cli&lt;br /&gt;
  &lt;br /&gt;
In das Verzeichnis dann noch die vier Skripte kopieren.&lt;br /&gt;
&lt;br /&gt;
1. search-bl.sh&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
#Script to locate Broadlink devices on local network by Graeme Brown Dec 23 2016&lt;br /&gt;
#These must be set up using the Broadlink app first!&lt;br /&gt;
&lt;br /&gt;
import broadlink&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;************************************************&amp;quot;&lt;br /&gt;
print &amp;quot;Using python library created by Matthew Garrett&amp;quot;&lt;br /&gt;
print &amp;quot;https://github.com/mjg59/python-broadlink&amp;quot;&lt;br /&gt;
print &amp;quot;************************************************&amp;quot;&lt;br /&gt;
print &amp;quot;Scanning network for Broadlink devices....&amp;quot;&lt;br /&gt;
&lt;br /&gt;
mydevices = broadlink.discover(timeout=5)&lt;br /&gt;
print &amp;quot;Found &amp;quot; + str(len(mydevices )) + &amp;quot; broadlink devices&amp;quot;&lt;br /&gt;
time.sleep(1)&lt;br /&gt;
print &amp;quot;...............&amp;quot;&lt;br /&gt;
&lt;br /&gt;
for index, item in enumerate(mydevices):&lt;br /&gt;
&lt;br /&gt;
  mydevices[index].auth()&lt;br /&gt;
&lt;br /&gt;
  ipadd = mydevices[index].host&lt;br /&gt;
  ipadd = str(ipadd)&lt;br /&gt;
  print &amp;quot;Device &amp;quot; + str(index + 1) +&amp;quot; Host address = &amp;quot; + ipadd[1:19]&lt;br /&gt;
  macadd = &#039;&#039;.join(format(x, &#039;02x&#039;) for x in mydevices[index].mac[::-1])&lt;br /&gt;
  macadd = str(macadd)&lt;br /&gt;
 &lt;br /&gt;
  mymacadd = macadd[:2] + &amp;quot; &amp;quot; + macadd[2:4] + &amp;quot; &amp;quot; + macadd[4:6] + &amp;quot; &amp;quot; + macadd[6:8] + &amp;quot; &amp;quot; + macadd[8:10] + &amp;quot; &amp;quot; + macadd[10:12]&lt;br /&gt;
  print &amp;quot;Device &amp;quot; + str(index + 1) +&amp;quot; MAC address = &amp;quot; + mymacadd&lt;br /&gt;
  print &amp;quot;...............&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. learn-bl.sh&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
import broadlink&lt;br /&gt;
import time&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
device = broadlink.rm(host=(&amp;quot;&amp;lt;your RM3 IP address&amp;gt;&amp;quot;,80), mac=bytearray.fromhex(&amp;quot;&amp;lt;your RM3 mac&amp;gt;&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Connecting to Broadlink device....&amp;quot;&lt;br /&gt;
device.auth()&lt;br /&gt;
time.sleep(1)&lt;br /&gt;
print &amp;quot;Connected....&amp;quot;&lt;br /&gt;
&lt;br /&gt;
codeName = raw_input(&amp;quot;Bitte Namen f. den Code eingeben, z.B. tvOff &amp;quot;)&lt;br /&gt;
time.sleep(1)&lt;br /&gt;
print &amp;quot;Wenn die LED am Broadlink angeht, innerhalb von 5 Sek die FB-Taste druecken &amp;quot;&lt;br /&gt;
&lt;br /&gt;
device.host&lt;br /&gt;
device.enter_learning()&lt;br /&gt;
time.sleep(5)&lt;br /&gt;
ir_packet = device.check_data()&lt;br /&gt;
#convert code to hex&lt;br /&gt;
myhex = str(ir_packet).encode(&#039;hex&#039;);&lt;br /&gt;
&lt;br /&gt;
if ir_packet == None:&lt;br /&gt;
   print &amp;quot;Kein Code empfangen - Ende&amp;quot;&lt;br /&gt;
   sys.exit()&lt;br /&gt;
else:&lt;br /&gt;
&lt;br /&gt;
# record learned hex code to file&lt;br /&gt;
   f = open(codeName +&amp;quot;.txt&amp;quot;,&#039;w&#039;)&lt;br /&gt;
f.write(myhex)&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Hex code gespeichert unter &amp;quot; + codeName + &amp;quot;.txt&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. send-bl.sh&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
import broadlink&lt;br /&gt;
import time&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    fileName = sys.argv[1]&lt;br /&gt;
except IndexError:&lt;br /&gt;
    fileName = &#039;null&#039;&lt;br /&gt;
&lt;br /&gt;
if fileName == &#039;null&#039;:&lt;br /&gt;
   print &amp;quot;Error - kein Dateiname angegeben&amp;quot;&lt;br /&gt;
   sys.exit()&lt;br /&gt;
else:&lt;br /&gt;
&lt;br /&gt;
   device = broadlink.rm(host=(&amp;quot;&amp;lt;your RM3 IP address&amp;gt;&amp;quot;,80), mac=bytearray.fromhex(&amp;quot;&amp;lt;your RM3 mac&amp;gt;&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Connecting to Broadlink device....&amp;quot;&lt;br /&gt;
device.auth()&lt;br /&gt;
time.sleep(1)&lt;br /&gt;
print &amp;quot;Connected....&amp;quot;&lt;br /&gt;
time.sleep(1)&lt;br /&gt;
device.host&lt;br /&gt;
&lt;br /&gt;
file = open(fileName, &#039;r&#039;)&lt;br /&gt;
&lt;br /&gt;
myhex = file.read()&lt;br /&gt;
&lt;br /&gt;
device.send_data(myhex.decode(&#039;hex&#039;))&lt;br /&gt;
print &amp;quot;Code Sent....&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
4. sendmore-bl.sh&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
import broadlink&lt;br /&gt;
import time&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    fileName = sys.argv[1]&lt;br /&gt;
except IndexError:&lt;br /&gt;
    fileName = &#039;null&#039;&lt;br /&gt;
&lt;br /&gt;
if fileName == &#039;null&#039;:&lt;br /&gt;
   print &amp;quot;Error - kein Dateiname angegeben&amp;quot;&lt;br /&gt;
   sys.exit()&lt;br /&gt;
else:&lt;br /&gt;
 device = broadlink.rm(host=(&amp;quot;&amp;lt;your RM3 IP address&amp;gt;&amp;quot;,80), mac=bytearray.fromhex(&amp;quot;&amp;lt;your RM3 mac&amp;gt;&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
# print &amp;quot;Connecting to Broadlink device....&amp;quot;&lt;br /&gt;
 device.auth()&lt;br /&gt;
 time.sleep(1)&lt;br /&gt;
# print &amp;quot;Connected....&amp;quot;&lt;br /&gt;
 device.host&lt;br /&gt;
&lt;br /&gt;
# Pfad aus Aufruf extrahieren und dann den Befehl selbst vom Stapel nehmen&lt;br /&gt;
 Parameter = sys.argv&lt;br /&gt;
 # Name des Befehls selbst&lt;br /&gt;
 filename1 = Parameter[0]&lt;br /&gt;
 # Gesamtlaenge&lt;br /&gt;
 FileNameLaenge = len(filename1)&lt;br /&gt;
 # in Bestandteile aufteilen&lt;br /&gt;
 filearray = filename1.split(&amp;quot;/&amp;quot;)&lt;br /&gt;
 # den letzten identifizieren. Das ist der eigentliche Befehl&lt;br /&gt;
 splitNo = len(filename1.split(&amp;quot;/&amp;quot;))&lt;br /&gt;
 lastElement = filearray[splitNo-1]&lt;br /&gt;
 # den vom Aufruf wegschneiden, um den Pfad zu bekommen&lt;br /&gt;
 FileNameAbzug = len(lastElement)&lt;br /&gt;
 Ende = FileNameLaenge - FileNameAbzug&lt;br /&gt;
 Pfad = filename1[0:Ende]&lt;br /&gt;
 # Befehl aus der Liste loeschen, damit die Parameter bleiben&lt;br /&gt;
 Parameter.pop(0)&lt;br /&gt;
&lt;br /&gt;
 # repeat for each argument&lt;br /&gt;
 for argument in Parameter:&lt;br /&gt;
    fileName = Pfad + argument +&amp;quot;.txt&amp;quot;&lt;br /&gt;
    file = open(fileName, &#039;r&#039;)&lt;br /&gt;
    myhex = file.read()&lt;br /&gt;
    device.send_data(myhex.decode(&#039;hex&#039;))&lt;br /&gt;
    time.sleep(0.5)&lt;br /&gt;
# print &amp;quot;Code Sent....&amp;quot;&lt;br /&gt;
sys.exit()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dann in dem Verzeichnis noch die Dateibesitzer wechseln und die Skripte ausführbar machen:&lt;br /&gt;
&lt;br /&gt;
 sudo chown fhem.dialout *.sh&lt;br /&gt;
 sudo chmod 744 *.sh&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration === &lt;br /&gt;
&lt;br /&gt;
Nun gilt es, die IP und MAC-Adresse des Broadlink herauszufinden. Entweder man schaut im Router nach, benutzt die Android-App FING oder das Script &amp;quot;search-bl.sh&amp;quot;. Dazu&lt;br /&gt;
&lt;br /&gt;
 sudo ./search-bl.sh&lt;br /&gt;
&lt;br /&gt;
Beispielhaft kommt dann:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 ************************************************&lt;br /&gt;
 Using python library created by Matthew Garrett&lt;br /&gt;
 https://github.com/mjg59/python-broadlink&lt;br /&gt;
 ************************************************&lt;br /&gt;
 Scanning network for Broadlink devices....&lt;br /&gt;
 Found 1 broadlink devices&lt;br /&gt;
 ...............&lt;br /&gt;
 Device 1 Host address = &#039;192.168.1.16&#039;, 8&lt;br /&gt;
 Device 1 MAC address = b4 43 0d aa b3 54&lt;br /&gt;
 ...............&lt;br /&gt;
&lt;br /&gt;
Für später sind die IP Adresse und die MAC Adresse wichtig. Diese müssen im zweiten bis vierten Script eingetragen werden!! Ich benutze da den Editor nano.&lt;br /&gt;
 sudo nano ./learn-bl.sh&lt;br /&gt;
 sudo nano ./send-bl.sh&lt;br /&gt;
 sudo nano ./sendmore-bl.sh&lt;br /&gt;
&lt;br /&gt;
Dabei die doppelten Anführungszeichen stehen lassen und an der passenden Stelle jeweils die IP und an der anderen die MAC-Adresse (mit Leerzeichen anstelle der Doppelpunkte) eintragen. Das erste Script liefert die auch so formatiert. Wenn man sie aber aus dem Router hat oder so, dann eben beachten!&lt;br /&gt;
&lt;br /&gt;
Das zweite Script dient zum Anlernen des Fernbedienungscodes und Abspeichern in jeweils einer txt Datei. Das Script verbindet sich mit dem Broadlink und erwartet einen Namen für den Code. Dann hat man 5 Sec Zeit, um die entsprechende Fernbedienungstaste zu drücken, um den Code anzulernen. Dieser wird dann in eine Datei mit dem Codenamen gespeichert. So kann man alle seine zu verwendenden Codes nacheinander anlernen.&lt;br /&gt;
&lt;br /&gt;
 sudo ./learn-bl.sh&lt;br /&gt;
&lt;br /&gt;
zeigt Folgendes an:&lt;br /&gt;
&lt;br /&gt;
 Connecting to Broadlink device....&lt;br /&gt;
 Connected....&lt;br /&gt;
 Bitte Namen für den Code eingeben, z.B. tvOff test&lt;br /&gt;
 Wenn die LED am Broadlink angeht, innerhalb von 5 Sek die FB-Taste drücken &lt;br /&gt;
 Hex code gespeichert unter test.txt&lt;br /&gt;
&lt;br /&gt;
=== Betrieb ===&lt;br /&gt;
&lt;br /&gt;
Mit dem dritten und vierten Script kann man den Code wieder senden. Auch hier wieder die eigene IP Adresse und MAC Adresse des Broadlink von oben eintragen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Aufruf im Terminal ist für das dritte Skript: &lt;br /&gt;
 sudo /opt/BroadLink/send-bl.sh /opt/BroadLink/test.txt &lt;br /&gt;
&lt;br /&gt;
Wichtig ist bei diesem Skript, für das Textfile den ganzen Pfad anzugeben, und der in test.txt gelernte Befehl wird gesendet.&lt;br /&gt;
&lt;br /&gt;
Aus FHEM heraus kann dann z.B. auf der Eingabezeile gesendet werden:&lt;br /&gt;
  &amp;quot;/opt/BroadLink/send-bl.sh /opt/BroadLink/test.txt&amp;quot;&lt;br /&gt;
Dabei sind die &amp;quot; &amp;quot; wichtig, da es sich um einen Shell-Befehl handelt.&lt;br /&gt;
 &lt;br /&gt;
So kann man das dann auch in at-, notify- oder DOIFs verwenden. Hier mal ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
 define atAbendsLichtAn at *19:00:00 &amp;quot;/opt/BroadLink/send-bl.sh /opt/BroadLink/FB1An.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das 4. Skript &amp;quot;sendmore-bl.sh&amp;quot; ist eine Modifikation des Send-Skripts. Die Unterschiede sind:&lt;br /&gt;
&lt;br /&gt;
1. Es sendet auch mehrere Codes nacheinander, also z. B. auch Zahlenfolgen wie &amp;quot;0202&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
2. Es nimmt an, dass die Codes als .txt-Dateien im selben Verzeichnis liegen wie das Skript.&lt;br /&gt;
&lt;br /&gt;
3. Das Skript gibt keine Meldungen aus. Die sind beim Aufruf aus FHEM heraus auch unnötig.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Skript extrahiert aus dem Befehlsaufruf den Pfad und ergänzt ihn jeweils bei den Parametern sowie um die Dateierweiterung &amp;quot;.txt&amp;quot;. Daher kann der Aufruf dann kürzer sein. Angenommen, es sind die Code-Dateien 1.txt, 2.txt, 3.txt usw. im selben Verzeichnis wie die Skripte vorhanden, lautet der Aufruf im Terminal dann z.B. nur noch:&lt;br /&gt;
&lt;br /&gt;
 /opt/BroadLink/sendmore-bl.sh 1 2 3 2&lt;br /&gt;
&lt;br /&gt;
Im &amp;quot;define&amp;quot; lautet das oben genannte Beispiel:&lt;br /&gt;
 define atAbendsLichtAn at *19:00:00 &amp;quot;/opt/BroadLink/sendmore-bl.sh FB1An&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Feintuning ===&lt;br /&gt;
Im 4. Skript definiert die Zeile (kurz vor Ende)&lt;br /&gt;
     time.sleep(0.5)&lt;br /&gt;
die Wartezeit zwischen zwei gesendeten &amp;quot;Tasten&amp;quot;. Bei vielen Geräten funktioniert das auch, wenn man die Zeile auskommentiert oder löscht. Dann werden die Signale schneller hintereinander gesendet.&lt;br /&gt;
Man kann hier natürlich auch den Wert 0.5 verändern. Einfach ausprobieren!&lt;br /&gt;
&lt;br /&gt;
== Mehrere Bridges betreiben ==&lt;br /&gt;
&lt;br /&gt;
Um mehrere Bridges nebeneinander zu betreiben, braucht man für jedes Gerät das dritte oder vierte Skript unter eigenem Namen, also z.B. sendmore-bl-WoZi.sh und sendmore-bl-SchlafZi.sh und sendmore-bl-Kueche.sh. In diese müssen die jeweils zugehörenden IP- und MAC-Adressen eingetragen werden. Dann entscheidet man über den Aufruf, welche Bridge den Befehl bekommt. Dabei kann man die gelernten Codes für alle Bridges nutzen und muss sie nicht für jede Bridge neu anlernen.&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Man kann mit dem dritten Skript nur einzelne Tastendrücke senden. Und der Aufruf von mehreren Befehlen nacheinander liegt so weit auseinander, dass das nicht als Folge von Befehlen ankommt, sondern jeweils als Einzelbefehle. Dafür kann man das 4. Skript ausprobieren.&lt;br /&gt;
&lt;br /&gt;
Einige User berichten von diesem Fehler:&lt;br /&gt;
  Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;/opt/BroadLink/send-bl.sh&amp;quot;, line 34, in &amp;lt;module&amp;gt;&lt;br /&gt;
    device.send_data(myhex.decode(&#039;hex&#039;))&lt;br /&gt;
  File &amp;quot;/usr/local/lib/python2.7/dist-packages/broadlink-0.3-py2.7.egg/broadlink/__init__.py&amp;quot;, line 455, in send_data&lt;br /&gt;
    self.send_packet(0x6a, packet)&lt;br /&gt;
  File &amp;quot;/usr/local/lib/python2.7/dist-packages/broadlink-0.3-py2.7.egg/broadlink/__init__.py&amp;quot;, line 250, in send_packet&lt;br /&gt;
    response = self.cs.recvfrom(1024)&lt;br /&gt;
  socket.timeout: timed out&lt;br /&gt;
&lt;br /&gt;
Abhilfe schafft, in der Datei &amp;quot;/usr/local/lib/python2.7/dist-packages/broadlink-0.3-py2.7.egg/broadlink/__init__.py&amp;quot; Zeile 249&lt;br /&gt;
den Timeout von 1 Sekunde auf z.B. 5 Sekunden zu stellen: self.cs.settimeout(5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei der Einrichtung via Smartphone-App gibt den AP-Modus: in diesem wird im Gateway ein WLAN-AP aktiviert, &#039;&#039;&#039;unverschlüsselt&#039;&#039;&#039;, mit dem sich das Smartphone dann verbindet. Über das für Sniffer offene WLAN wird dann SSID und Passwort des lokalen WLAN übermittelt, worauf sich das Gateway versucht dort anzumelden. &#039;&#039;&#039;&#039;&#039;Die Einrichtung über diesen Weg legt das WLAN Passwort für Sniffer ohne weiteren Aufwand offen. Das Risiko ist auf diese eine Übertragung begrenzt.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hinweis ==&lt;br /&gt;
Wenn alles funktioniert, kann man aus dem dritten Skript natürlich die Bildschirmausgaben löschen, da es ja in FHEM im Hintergrund aufgerufen wird. Umgekehrt kann man sie auch im 4. Skript wieder &amp;quot;freischalten&amp;quot;, indem man die # vor den &amp;quot;print&amp;quot;-Anweisungen löscht.&lt;br /&gt;
&lt;br /&gt;
Gelegentlich auftretende Fehlermeldungen (die nur im Terminal sichtbar sind), tun der Funktion (bei mir) keinen Abbruch.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Infrarot]]&lt;/div&gt;</summary>
		<author><name>Hapege</name></author>
	</entry>
</feed>