<?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=Hoppel118</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=Hoppel118"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Hoppel118"/>
	<updated>2026-04-13T06:37:56Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HomeConnect&amp;diff=31420</id>
		<title>HomeConnect</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HomeConnect&amp;diff=31420"/>
		<updated>2019-10-24T13:33:04Z</updated>

		<summary type="html">&lt;p&gt;Hoppel118: Neues Kapitel &amp;quot;Fehler während der Installation&amp;quot; ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Anbindung von Hausgeräten mit Home Connect Schnittstelle&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Home Connect&lt;br /&gt;
|ModTechName=48_HomeConnectConnection.pm 48_HomeConnect.pm&lt;br /&gt;
|ModOwner=swhome&lt;br /&gt;
}}&lt;br /&gt;
==Übersicht==&lt;br /&gt;
Mit den beiden Modulen HomeConnectConnection und HomeConnect können in FHEM Devices für [http://www.home-connect.com/de/de/ Home Connect Hausgeräte] angelegt werden, die an einem Home Connect Account angemeldet sind. Mögliche Hausgeräte sind aktuell Backöfen, Spülmaschinen, Kühlschränke, Waschmaschinen, Wäschetrockner und Kaffeemaschinen der Marken Bosch, Siemens und Neff.&lt;br /&gt;
&lt;br /&gt;
Wann verwendet man HomeConnectConnection, wann HomeConnect?&lt;br /&gt;
&lt;br /&gt;
Das Modul HomeConnectConnection verwaltet die Verbindung zwischen FHEM und einem Home Connect Account. Es legt die HomeConnect Devices für die einzelnen Hausgeräte an.&lt;br /&gt;
&lt;br /&gt;
==Aktueller Status des Moduls==&lt;br /&gt;
Die beiden Module befinden sich aktuell im Betatest. Jeder Tester muss sich bei Home Connect als Entwickler anmelden und den Login-Namen seines Home Connect App Accounts hinterlegen. Was jeder auch ohne eigene Geräte probieren kann ist der Hausgeräte-Simulator. Allerdings kann man damit in der Praxis nicht viel anfangen...&lt;br /&gt;
&lt;br /&gt;
==Definition von FHEM Devices==&lt;br /&gt;
===Modul-Installation===&lt;br /&gt;
Zur Installation (oder zum Update) einfach diesen Befehl in der FHEM Kommandozeile eingeben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
update all https://raw.githubusercontent.com/sw-home/FHEM-HomeConnect/master/controls_homeconnect.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach FHEM neu starten.&lt;br /&gt;
&lt;br /&gt;
Damit das Modul auch bei einem normale &amp;quot;update check&amp;quot; mit geprüft wird, muss folgendes ergänzt werden&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
update add https://raw.githubusercontent.com/sw-home/FHEM-HomeConnect/master/controls_homeconnect.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Basisdefinition===&lt;br /&gt;
Um mit dem Simulator zu testen, braucht Ihr einen [https://developer.home-connect.com/ Entwickleraccount bei HomeConnect]&lt;br /&gt;
&lt;br /&gt;
Man braucht zwingend einen Advanced Account um Geräte fernstarten zu dürfen. Das kostet nichts, es wird jedoch eine Namensverifikation durchgeführt.&lt;br /&gt;
&lt;br /&gt;
Im Entwickleraccount muss eine Applikation generiert werden, als „Company Name“ im Home Connect Developer Portal bitte “FHEM Betatester“ angeben. Die wichtigste Einstellung der Applikation ist die Redirect URL. Diese URL muss den Host enthalten, den Ihr in Eurer Umgebung für den Zugriff auf FHEM verwendet, also localhost oder 192.168.x.y, und sie muss ein Kommando in dem definierten HomeConnectConnection Modul aufrufen. Die URL sieht dann z.B. so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost:8083/fhem?cmd.Test=set%20hcconn%20auth%20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die identische URL muss sowohl auf der Home Connect Seite in der Applikation angegeben werden, als auch bei der Definition in FHEM. Dazu kommen noch der generierte API Key und das Client Secret:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define hcconn HomeConnectConnection API-KEY REDIRECT-URL simulator CLIENT-SECRET&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also zum Beispiel&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define hcconn HomeConnectConnection D239EBCABC99994D239EBCABC999B3D2393204 &lt;br /&gt;
http://localhost:8083/fhem?cmd.Test=set%20hcconn%20auth%20 simulator 994D239EBCABCBCABC999B3D&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach findet Ihr in dem neuen Device hcconn einen Link namens Home Connect Login. Diesen klicken und die Anmeldung wird durchgeführt. Danach im hcconn-Device noch scanDevices ausführen und Ihr solltet eine stattliche Anzahl Hausgeräte finden.&lt;br /&gt;
&lt;br /&gt;
Um mit echten Geräten zu arbeiten, muss das Wort simulator in der Definition entfernt werden.&lt;br /&gt;
&lt;br /&gt;
====Fehler während der Installation====&lt;br /&gt;
&lt;br /&gt;
Kam es beim vorangegangenen define zu folgender Fehlermeldung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cannot load module HomeConnectConnection&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dann ist die Perl-Bibliothek &amp;quot;libswitch-perl&amp;quot; zu installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libswitch-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sicherheitsfunktion csrfToken in FHEM==&lt;br /&gt;
Neueste Versionen von FHEM verwenden eine [[csrfToken-HowTo|XSRF Schutzfunktion]]. Wer diese benutzen möchte, muss ein statisches Token definieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr WEB csrfToken myToken123&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
und muss dann an seine redirectURL noch diesen Teil anhängen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;fwcsrf=myToken123&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define hcconn HomeConnectConnection D239EBCABC99994D239EBCABC999B3D2393204 &lt;br /&gt;
http://localhost:8083/fhem?cmd.Test=set%20hcconn%20auth%20&amp;amp;fwcsrf=myToken123 simulator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wichtig wie immer: Die Redirect URL muss sowohl im Home Connect Developer Program als auch in der Definition des FHEM HomeConnectConnection devices geändert werden.&lt;br /&gt;
&lt;br /&gt;
==Problembehandlung==&lt;br /&gt;
Frage: Wenn ich Zuhause bin, erreiche ich meinen FHEM-Server unter: https:// 192.168.x.x:8083/fhem. &lt;br /&gt;
Aus dem Internet erreiche ich FHEM  über eine statische IP und Port-forwarding. Funktioniert das dann auch?&lt;br /&gt;
&lt;br /&gt;
Antwort: Es muss kein Zugriff aus dem Internet auf den lokalen Server freigeschaltet werden, der Redirect passiert im eigenen Browser. &lt;br /&gt;
Aktuell ist nur eine redirect URL möglich, daher müsstest Du dich beim Home Connect Login für eine Variante entscheiden. Man muss sich ja nicht ständig neu einloggen. Ich habe aber gehört dass zukünftig mal eine Liste von URL&#039;s hinterlegt werden kann.&lt;br /&gt;
&lt;br /&gt;
Frage: Ich bekomme &#039;&#039;&#039;vor&#039;&#039;&#039; dem Home Connect Login eine Fehlermeldung, sofort nach dem Klick auf &amp;quot;Home Connect Login&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Antwort: Entweder ist der API Key falsch oder die Redirect URL. Letztere muss den korrekten Hostnamen und Port enthalten, und auch den Namen des HomeConnectConnection device in der FHEM Installation. Diese URL muss identisch in der Home Connect App Definition und in der FHEM Definition eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
Frage: Ich bekomme &#039;&#039;&#039;nach&#039;&#039;&#039; dem Home Connect Login &amp;quot;Error&amp;quot; als Meldung in FHEM&lt;br /&gt;
&lt;br /&gt;
Antwort: Dann hat Deine Redirect URL gestimmt und es ist was faul mit dem Api Key. &lt;br /&gt;
&lt;br /&gt;
- Inspiziere mal genau die URL der Seite wo &amp;quot;Error&amp;quot; steht, vielleicht findest Du dort noch eine Fehlermeldung. &lt;br /&gt;
&lt;br /&gt;
- Hast Du das Wort simulator in der Definition mit angegeben? Nur freigeschaltete Betatester können echte Hausgeräte steuern.&lt;br /&gt;
&lt;br /&gt;
- Hast Du einen Advanced Account? Wenn nicht, können die Rechte von FHEM so eingeschränkt werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr hcconn accessScope IdentifyAppliance Monitor &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Frage: Die Geräte werden angelegt, aber das einzige, was ich angeboten bekomme ist: StartProgram RemoteProgramNotEnabled&lt;br /&gt;
&lt;br /&gt;
Antwort: Du musst den Fernstart der Spülmaschine aktivieren, erst danach darf FHEM sie starten.&lt;br /&gt;
&lt;br /&gt;
Frage: Nach dem Erlauben des Zugriffs bei HomeConnect erscheint nur ein weißer Bildschirm.&lt;br /&gt;
&lt;br /&gt;
Antwort: Du musst das Attribut csrfToken deines FHEMWEB auf none setzen (oder wie oben beschrieben ein statisches Token installieren)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr WEB csrfToken none&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Unterstützte Geräte==&lt;br /&gt;
Grundsätzlich funktionieren alle Home Connect Geräte, d.h. sie werden zumindest in FHEM angelegt und ihr Status wird sichtbar. Steuern kann man sie aktuell jedoch noch nicht alle.&lt;br /&gt;
===Backofen===&lt;br /&gt;
Steuerung aktuell nicht möglich, aber der Status wird angezeigt&lt;br /&gt;
===Geschirrspüler===&lt;br /&gt;
Steuerung möglich, Status wird angezeigt. Die Programmoption BSH.Common.Option.StartInRelative kann vor dem Programmstart auf eine Anzahl Sekunden gesetzt werden, um die der Start verzögert werden soll.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Hoppel118</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HomeConnect&amp;diff=31419</id>
		<title>HomeConnect</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HomeConnect&amp;diff=31419"/>
		<updated>2019-10-24T13:29:58Z</updated>

		<summary type="html">&lt;p&gt;Hoppel118: Paket &amp;quot;libswitch-perl&amp;quot; aus Kapitel &amp;quot;Modul-Installation&amp;quot; entfernt und in &amp;quot;Basisdefinition&amp;quot; hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Anbindung von Hausgeräten mit Home Connect Schnittstelle&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Home Connect&lt;br /&gt;
|ModTechName=48_HomeConnectConnection.pm 48_HomeConnect.pm&lt;br /&gt;
|ModOwner=swhome&lt;br /&gt;
}}&lt;br /&gt;
==Übersicht==&lt;br /&gt;
Mit den beiden Modulen HomeConnectConnection und HomeConnect können in FHEM Devices für [http://www.home-connect.com/de/de/ Home Connect Hausgeräte] angelegt werden, die an einem Home Connect Account angemeldet sind. Mögliche Hausgeräte sind aktuell Backöfen, Spülmaschinen, Kühlschränke, Waschmaschinen, Wäschetrockner und Kaffeemaschinen der Marken Bosch, Siemens und Neff.&lt;br /&gt;
&lt;br /&gt;
Wann verwendet man HomeConnectConnection, wann HomeConnect?&lt;br /&gt;
&lt;br /&gt;
Das Modul HomeConnectConnection verwaltet die Verbindung zwischen FHEM und einem Home Connect Account. Es legt die HomeConnect Devices für die einzelnen Hausgeräte an.&lt;br /&gt;
&lt;br /&gt;
==Aktueller Status des Moduls==&lt;br /&gt;
Die beiden Module befinden sich aktuell im Betatest. Jeder Tester muss sich bei Home Connect als Entwickler anmelden und den Login-Namen seines Home Connect App Accounts hinterlegen. Was jeder auch ohne eigene Geräte probieren kann ist der Hausgeräte-Simulator. Allerdings kann man damit in der Praxis nicht viel anfangen...&lt;br /&gt;
&lt;br /&gt;
==Definition von FHEM Devices==&lt;br /&gt;
===Modul-Installation===&lt;br /&gt;
Zur Installation (oder zum Update) einfach diesen Befehl in der FHEM Kommandozeile eingeben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
update all https://raw.githubusercontent.com/sw-home/FHEM-HomeConnect/master/controls_homeconnect.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach FHEM neu starten.&lt;br /&gt;
&lt;br /&gt;
Damit das Modul auch bei einem normale &amp;quot;update check&amp;quot; mit geprüft wird, muss folgendes ergänzt werden&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
update add https://raw.githubusercontent.com/sw-home/FHEM-HomeConnect/master/controls_homeconnect.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Basisdefinition===&lt;br /&gt;
Um mit dem Simulator zu testen, braucht Ihr einen [https://developer.home-connect.com/ Entwickleraccount bei HomeConnect]&lt;br /&gt;
&lt;br /&gt;
Man braucht zwingend einen Advanced Account um Geräte fernstarten zu dürfen. Das kostet nichts, es wird jedoch eine Namensverifikation durchgeführt.&lt;br /&gt;
&lt;br /&gt;
Im Entwickleraccount muss eine Applikation generiert werden, als „Company Name“ im Home Connect Developer Portal bitte “FHEM Betatester“ angeben. Die wichtigste Einstellung der Applikation ist die Redirect URL. Diese URL muss den Host enthalten, den Ihr in Eurer Umgebung für den Zugriff auf FHEM verwendet, also localhost oder 192.168.x.y, und sie muss ein Kommando in dem definierten HomeConnectConnection Modul aufrufen. Die URL sieht dann z.B. so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost:8083/fhem?cmd.Test=set%20hcconn%20auth%20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die identische URL muss sowohl auf der Home Connect Seite in der Applikation angegeben werden, als auch bei der Definition in FHEM. Dazu kommen noch der generierte API Key und das Client Secret:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define hcconn HomeConnectConnection API-KEY REDIRECT-URL simulator CLIENT-SECRET&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also zum Beispiel&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define hcconn HomeConnectConnection D239EBCABC99994D239EBCABC999B3D2393204 &lt;br /&gt;
http://localhost:8083/fhem?cmd.Test=set%20hcconn%20auth%20 simulator 994D239EBCABCBCABC999B3D&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach findet Ihr in dem neuen Device hcconn einen Link namens Home Connect Login. Diesen klicken und die Anmeldung wird durchgeführt. Danach im hcconn-Device noch scanDevices ausführen und Ihr solltet eine stattliche Anzahl Hausgeräte finden.&lt;br /&gt;
&lt;br /&gt;
Kam es beim vorangegangenen define zu folgender Fehlermeldung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cannot load module HomeConnectConnection&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dann ist die Perl-Bibliothek &amp;quot;libswitch-perl&amp;quot; zu installieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libswitch-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um mit echten Geräten zu arbeiten, muss das Wort simulator in der Definition entfernt werden.&lt;br /&gt;
&lt;br /&gt;
==Sicherheitsfunktion csrfToken in FHEM==&lt;br /&gt;
Neueste Versionen von FHEM verwenden eine [[csrfToken-HowTo|XSRF Schutzfunktion]]. Wer diese benutzen möchte, muss ein statisches Token definieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr WEB csrfToken myToken123&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
und muss dann an seine redirectURL noch diesen Teil anhängen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;fwcsrf=myToken123&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define hcconn HomeConnectConnection D239EBCABC99994D239EBCABC999B3D2393204 &lt;br /&gt;
http://localhost:8083/fhem?cmd.Test=set%20hcconn%20auth%20&amp;amp;fwcsrf=myToken123 simulator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wichtig wie immer: Die Redirect URL muss sowohl im Home Connect Developer Program als auch in der Definition des FHEM HomeConnectConnection devices geändert werden.&lt;br /&gt;
&lt;br /&gt;
==Problembehandlung==&lt;br /&gt;
Frage: Wenn ich Zuhause bin, erreiche ich meinen FHEM-Server unter: https:// 192.168.x.x:8083/fhem. &lt;br /&gt;
Aus dem Internet erreiche ich FHEM  über eine statische IP und Port-forwarding. Funktioniert das dann auch?&lt;br /&gt;
&lt;br /&gt;
Antwort: Es muss kein Zugriff aus dem Internet auf den lokalen Server freigeschaltet werden, der Redirect passiert im eigenen Browser. &lt;br /&gt;
Aktuell ist nur eine redirect URL möglich, daher müsstest Du dich beim Home Connect Login für eine Variante entscheiden. Man muss sich ja nicht ständig neu einloggen. Ich habe aber gehört dass zukünftig mal eine Liste von URL&#039;s hinterlegt werden kann.&lt;br /&gt;
&lt;br /&gt;
Frage: Ich bekomme &#039;&#039;&#039;vor&#039;&#039;&#039; dem Home Connect Login eine Fehlermeldung, sofort nach dem Klick auf &amp;quot;Home Connect Login&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Antwort: Entweder ist der API Key falsch oder die Redirect URL. Letztere muss den korrekten Hostnamen und Port enthalten, und auch den Namen des HomeConnectConnection device in der FHEM Installation. Diese URL muss identisch in der Home Connect App Definition und in der FHEM Definition eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
Frage: Ich bekomme &#039;&#039;&#039;nach&#039;&#039;&#039; dem Home Connect Login &amp;quot;Error&amp;quot; als Meldung in FHEM&lt;br /&gt;
&lt;br /&gt;
Antwort: Dann hat Deine Redirect URL gestimmt und es ist was faul mit dem Api Key. &lt;br /&gt;
&lt;br /&gt;
- Inspiziere mal genau die URL der Seite wo &amp;quot;Error&amp;quot; steht, vielleicht findest Du dort noch eine Fehlermeldung. &lt;br /&gt;
&lt;br /&gt;
- Hast Du das Wort simulator in der Definition mit angegeben? Nur freigeschaltete Betatester können echte Hausgeräte steuern.&lt;br /&gt;
&lt;br /&gt;
- Hast Du einen Advanced Account? Wenn nicht, können die Rechte von FHEM so eingeschränkt werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr hcconn accessScope IdentifyAppliance Monitor &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Frage: Die Geräte werden angelegt, aber das einzige, was ich angeboten bekomme ist: StartProgram RemoteProgramNotEnabled&lt;br /&gt;
&lt;br /&gt;
Antwort: Du musst den Fernstart der Spülmaschine aktivieren, erst danach darf FHEM sie starten.&lt;br /&gt;
&lt;br /&gt;
Frage: Nach dem Erlauben des Zugriffs bei HomeConnect erscheint nur ein weißer Bildschirm.&lt;br /&gt;
&lt;br /&gt;
Antwort: Du musst das Attribut csrfToken deines FHEMWEB auf none setzen (oder wie oben beschrieben ein statisches Token installieren)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr WEB csrfToken none&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Unterstützte Geräte==&lt;br /&gt;
Grundsätzlich funktionieren alle Home Connect Geräte, d.h. sie werden zumindest in FHEM angelegt und ihr Status wird sichtbar. Steuern kann man sie aktuell jedoch noch nicht alle.&lt;br /&gt;
===Backofen===&lt;br /&gt;
Steuerung aktuell nicht möglich, aber der Status wird angezeigt&lt;br /&gt;
===Geschirrspüler===&lt;br /&gt;
Steuerung möglich, Status wird angezeigt. Die Programmoption BSH.Common.Option.StartInRelative kann vor dem Programmstart auf eine Anzahl Sekunden gesetzt werden, um die der Start verzögert werden soll.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Hoppel118</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHEM_Connector_f%C3%BCr_Amazon_Alexa&amp;diff=31080</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=31080"/>
		<updated>2019-08-05T07:12:05Z</updated>

		<summary type="html">&lt;p&gt;Hoppel118: Kapitel &amp;quot;Fehler bei Aktivierung&amp;quot; neu strukturiert und &amp;quot;Permission denied&amp;quot; ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&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;
&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;
&lt;br /&gt;
&lt;br /&gt;
==Einführung==&lt;br /&gt;
&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 Port 3000 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;
Bei Jessy liegt NodeJS bereits in einer ausreichend aktuellen Version vor. 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; 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;
=== 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;
=== 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 14. 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 &amp;lt;it&amp;gt;currentlogfile&amp;lt;/it&amp;gt; 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;
* 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;
&lt;br /&gt;
== Finale: Skill verknüpfen ==&lt;br /&gt;
Suche im WebFrontend oder der Alexa-App den Skill &amp;quot;FHEM Connector&amp;quot;. Für nicht-Mac/iOS Anwerder empfiehlt das WebFrontend (https://alexa.amazon.de) statt die App, damit Du den Anmeldeschlüssel auch bequem kopieren kannst.&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;&lt;br /&gt;
[[Datei:FHEMlazy_login.png|240px]]&lt;br /&gt;
&lt;br /&gt;
Hier kopierst Du Deinen Anmeldeschlüssel (im Klartext!) hinein 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;
Amazon möchte nun unmittelbar die Gerätesuche starten, und unter SmartHome-Geräte sollten diese nun auftauchen.&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: hombridgeMapping 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;
&lt;br /&gt;
* Geräte, die eine Temperatur messen&lt;br /&gt;
** Automatisch: Es muss ein Reading temperature geben&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; thermometer&lt;br /&gt;
** Sonst: hombridgeMapping 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:&lt;br /&gt;
*** homebridgeMapping Brightness=helligkeit::prozent,minValue=0,maxValue=&amp;lt;maximalwert&amp;gt;&lt;br /&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;
&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;
** hombridgeMapping 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;
&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;
&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;
&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;
** hombridgeMapping 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;
** hombridgeMapping 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;
** hombridgeMapping 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;
&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;
** hombridgeMapping 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;
&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;
** hombridgeMapping 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;
&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;
** hombridgeMapping 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;
&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;
== 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 ==&lt;br /&gt;
* alexa-fhem über FHEM anhalten:&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;
== 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;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Sprachsteuerung]]&lt;/div&gt;</summary>
		<author><name>Hoppel118</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHEM_Connector_f%C3%BCr_Amazon_Alexa&amp;diff=31079</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=31079"/>
		<updated>2019-07-31T11:11:03Z</updated>

		<summary type="html">&lt;p&gt;Hoppel118: Hinweis zu alexaRoom in Kapitel &amp;quot;Geräte im FHEM-Webfrontend zuweisen&amp;quot; ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&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;
&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;
&lt;br /&gt;
&lt;br /&gt;
==Einführung==&lt;br /&gt;
&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 Port 3000 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;
Bei Jessy liegt NodeJS bereits in einer ausreichend aktuellen Version vor. 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; 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;
=== 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;
=== 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 14. 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;
==== 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;
* 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;
* 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 &amp;lt;it&amp;gt;currentlogfile&amp;lt;/it&amp;gt; in den Internals) findest Du idealerweise selber Hinweise, wo es hakt, oder kannst im Forum nachfragen.&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;
=== 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;
* 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;
&lt;br /&gt;
== Finale: Skill verknüpfen ==&lt;br /&gt;
Suche im WebFrontend oder der Alexa-App den Skill &amp;quot;FHEM Connector&amp;quot;. Für nicht-Mac/iOS Anwerder empfiehlt das WebFrontend (https://alexa.amazon.de) statt die App, damit Du den Anmeldeschlüssel auch bequem kopieren kannst.&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;&lt;br /&gt;
[[Datei:FHEMlazy_login.png|240px]]&lt;br /&gt;
&lt;br /&gt;
Hier kopierst Du Deinen Anmeldeschlüssel (im Klartext!) hinein 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;
Amazon möchte nun unmittelbar die Gerätesuche starten, und unter SmartHome-Geräte sollten diese nun auftauchen.&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: hombridgeMapping 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;
&lt;br /&gt;
* Geräte, die eine Temperatur messen&lt;br /&gt;
** Automatisch: Es muss ein Reading temperature geben&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; thermometer&lt;br /&gt;
** Sonst: hombridgeMapping 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:&lt;br /&gt;
*** homebridgeMapping Brightness=helligkeit::prozent,minValue=0,maxValue=&amp;lt;maximalwert&amp;gt;&lt;br /&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;
&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;
** hombridgeMapping 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;
&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;
&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;
&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;
** hombridgeMapping 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;
** hombridgeMapping 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;
** hombridgeMapping 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;
&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;
** hombridgeMapping 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;
&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;
** hombridgeMapping 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;
&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;
** hombridgeMapping 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;
&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;
== 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 ==&lt;br /&gt;
* alexa-fhem über FHEM anhalten:&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;
== 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;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Sprachsteuerung]]&lt;/div&gt;</summary>
		<author><name>Hoppel118</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHEM_Connector_f%C3%BCr_Amazon_Alexa&amp;diff=31037</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=31037"/>
		<updated>2019-07-25T14:55:55Z</updated>

		<summary type="html">&lt;p&gt;Hoppel118: Fehlermeldung &amp;quot;401: Authorization Required&amp;quot; bei Aktivierung und SONOS als mögliche Devices im ersten Abschnitt ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&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;
&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;
&lt;br /&gt;
&lt;br /&gt;
==Einführung==&lt;br /&gt;
&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 Port 3000 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;
Bei Jessy liegt NodeJS bereits in einer ausreichend aktuellen Version vor. 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; 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;
=== 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;
=== 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 14. 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;
==== 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;
* 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;
* 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 &amp;lt;it&amp;gt;currentlogfile&amp;lt;/it&amp;gt; in den Internals) findest Du idealerweise selber Hinweise, wo es hakt, oder kannst im Forum nachfragen.&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;
=== 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;
&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;
&lt;br /&gt;
== Finale: Skill verknüpfen ==&lt;br /&gt;
Suche im WebFrontend oder der Alexa-App den Skill &amp;quot;FHEM Connector&amp;quot;. Für nicht-Mac/iOS Anwerder empfiehlt das WebFrontend (https://alexa.amazon.de) statt die App, damit Du den Anmeldeschlüssel auch bequem kopieren kannst.&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;&lt;br /&gt;
[[Datei:FHEMlazy_login.png|240px]]&lt;br /&gt;
&lt;br /&gt;
Hier kopierst Du Deinen Anmeldeschlüssel (im Klartext!) hinein 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;
Amazon möchte nun unmittelbar die Gerätesuche starten, und unter SmartHome-Geräte sollten diese nun auftauchen.&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: hombridgeMapping 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;
&lt;br /&gt;
* Geräte, die eine Temperatur messen&lt;br /&gt;
** Automatisch: Es muss ein Reading temperature geben&lt;br /&gt;
** Über &amp;lt;code&amp;gt;genericDeviceType&amp;lt;/code&amp;gt; thermometer&lt;br /&gt;
** Sonst: hombridgeMapping 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:&lt;br /&gt;
*** homebridgeMapping Brightness=helligkeit::prozent,minValue=0,maxValue=&amp;lt;maximalwert&amp;gt;&lt;br /&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;
&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;
** hombridgeMapping 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;
&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;
&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;
&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;
** hombridgeMapping 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;
** hombridgeMapping 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;
** hombridgeMapping 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;
&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;
** hombridgeMapping 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;
&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;
** hombridgeMapping 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;
&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;
** hombridgeMapping 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;
&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;
== 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 ==&lt;br /&gt;
* alexa-fhem über FHEM anhalten:&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;
==Weitergehende Informationen==&lt;br /&gt;
*[[Alexa_und_Mappings]]&lt;br /&gt;
*[[Alexa_Tipps_und_Kniffe]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Sprachsteuerung]]&lt;/div&gt;</summary>
		<author><name>Hoppel118</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Yowsup&amp;diff=30847</id>
		<title>Yowsup</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Yowsup&amp;diff=30847"/>
		<updated>2019-06-28T06:35:41Z</updated>

		<summary type="html">&lt;p&gt;Hoppel118: WARNUNG ergänzt -&amp;gt; Blocken von Rufnummern bei yowsup Registrierungen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:yowsup}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Schnittstelle, um WhatsApp-Nachrichten empfangen und senden zu können. &lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=yowsup&lt;br /&gt;
|ModFTopic=27543&lt;br /&gt;
|ModForumArea=Unterstuetzende Dienste&lt;br /&gt;
|ModTechName=32_yowsup.pm&lt;br /&gt;
|ModOwner=André / justme1968 ({{Link2FU|430|Forum}} / [[Benutzer Diskussion:justme|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[yowsup]] dient dazu, WhatsApp-Nachrichten zu empfangen und zu senden. Nachrichten können sein:&lt;br /&gt;
* &#039;&#039;&#039;Text&#039;&#039;&#039;: senden und empfangen, z.b.: Infonachrichten senden, FHEM-Kommandos empfangen&lt;br /&gt;
* &#039;&#039;&#039;Bilder&#039;&#039;&#039;: senden und empfangen, z.b.: Webcambilder nach Bewegungserkennung versenden&lt;br /&gt;
* &#039;&#039;&#039;Audio&#039;&#039;&#039;: empfangen, z.b.: Sprachdurchsagen empfangen und über SONOS abspielen&lt;br /&gt;
&lt;br /&gt;
== WARNUNG ==&lt;br /&gt;
&lt;br /&gt;
Momentan wird beim Registrierungsprozess anscheinend erkannt, dass es sich um yowsup handelt. Dies führt dann nach Versand des des Registrierungscodes per SMS/Voice zur direkten Sperrung der Rufnummer. Bis auf weiteres ist es also nicht empfehlenswert, Registrierungen vorzunehmen. Der Status dazu kann auf Github verfolgt werden: https://github.com/tgalal/yowsup/issues/2829&lt;br /&gt;
&lt;br /&gt;
Diese Warnung wird wieder entfernt, wenn das Problem gelöst ist. &lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
* Die Funktionalität ist vermutlich auf Linux/Unix Systeme beschränkt.&lt;br /&gt;
* Nach der Erstinstallation/-einrichtung &#039;&#039;&#039;muss&#039;&#039;&#039; zwingend das &#039;&#039;cmd&#039;&#039; Attribut korrekt gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
== Installation == &lt;br /&gt;
Die ursprüngliche Einrichtung wurde {{Link2Forum|Topic=27543|Message=204426|LinkText=hier beschrieben}}, jedoch sind noch einige wichtige Dinge zu setzen. Mit der Version 3.0.0 vom 24. April 2019 hat sich einiges in der Kommunikation mit WhatsApp geändert. Diese Änderungen führen dazu, dass alles komplett neu installiert und registriert werden muss.&lt;br /&gt;
&lt;br /&gt;
=== Yowsup Installation ===&lt;br /&gt;
Bevor man loslegt sollte man wie immer sicherstellen, dass Debian auf dem aktuellen Stand ist:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get dist-upgrade&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man Bilder verarbeiten, so braucht man noch ein paar Pakete mehr:&lt;br /&gt;
* Paketinstallationen:&lt;br /&gt;
** Unter Debian Wheezy: &amp;lt;code&amp;gt;sudo apt-get install libtiff4-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk&amp;lt;/code&amp;gt;&lt;br /&gt;
** Unter Debian Jessie: &amp;lt;code&amp;gt;sudo apt-get install libtiff5-dev libjpeg-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk&amp;lt;/code&amp;gt;&lt;br /&gt;
** Unter Debian Stretch: &amp;lt;code&amp;gt;sudo apt-get install libtiff5-dev libjpeg-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Python 2.7 ==== &lt;br /&gt;
Los gehts mit den Paketen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-soappy python-dateutil python-pip python-dev build-essential libssl-dev libffi-dev libncurses5-dev&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erstmal pip updaten:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install --upgrade pip&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
yowsup benötigt zwingend von six die Version 1.10 (unter /usr/local/lib/python2.7/dist-packages prüfen, ob eine andere Version von six installiert ist. Diese erst löschen):&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip uninstall six&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install six==1.10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und dann Axolotl, argparse, readline installieren (das dauert ne Weile):&amp;lt;br&amp;gt;&lt;br /&gt;
(eventuell wird auch noch appdirs benötigt)&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install argparse&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install setuptools&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install readline&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install appdirs&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install python-axolotl&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install pillow&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zudem wird neben den Python Modulen noch eine Lib&#039;s von tgalal benötigt:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /opt/fhem/yowsup&lt;br /&gt;
sudo wget https://github.com/tgalal/python-axolotl/archive/master.zip&lt;br /&gt;
sudo unzip master.zip&lt;br /&gt;
cd python-axolotl-master&lt;br /&gt;
sudo python setup.py install&lt;br /&gt;
cd ..&lt;br /&gt;
rm master.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /opt/fhem/yowsup&lt;br /&gt;
sudo wget https://github.com/tgalal/dissononce/archive/master.zip&lt;br /&gt;
sudo unzip master.zip&lt;br /&gt;
cd dissononce-master&lt;br /&gt;
sudo python setup.py install&lt;br /&gt;
cd ..&lt;br /&gt;
rm master.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /opt/fhem/yowsup&lt;br /&gt;
sudo wget https://github.com/tgalal/consonance/archive/master.zip&lt;br /&gt;
sudo unzip master.zip&lt;br /&gt;
cd consonance-master&lt;br /&gt;
sudo python setup.py install&lt;br /&gt;
cd ..&lt;br /&gt;
rm master.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Desweiteren muss man nun yowsup installieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt&lt;br /&gt;
sudo mkdir yowsup-config&lt;br /&gt;
sudo wget -N https://github.com/tgalal/yowsup/archive/master.zip&lt;br /&gt;
sudo unzip -o master.zip&lt;br /&gt;
cd yowsup-master&lt;br /&gt;
sudo python setup.py install&lt;br /&gt;
cd ..&lt;br /&gt;
rm master.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Python 3.5 ====&lt;br /&gt;
Bevor man loslegt sollte man wie immer sicherstellen, dass Debian auf dem aktuellen Stand ist:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get dist-upgrade&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los gehts mit den Paketen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python3-pip python3-dev python3-setuptools python-soappy python-dateutil build-essential libssl-dev libffi-dev libncurses5-dev&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erstmal pip updaten:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip3 install --upgrade pip&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
yowsup benötigt zwingend von six die Version 1.10 (unter /usr/local/lib/python3.5/dist-packages prüfen, ob eine andere Version von six installiert ist. Diese erst löschen):&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip3 uninstall six&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip3 install six==1.10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und dann Axolotl, argparse, readline installieren (das dauert ne Weile):&amp;lt;br&amp;gt;&lt;br /&gt;
(eventuell wird auch noch appdirs benötigt)&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip3 install argparse&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip3 install setuptools&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip3 install readline&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip3 install appdirs&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip3 install python-axolotl&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip3 install pillow&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zudem wird neben den Python Modulen noch Lib&#039;s von tgalal benötigt:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /opt/fhem/yowsup&lt;br /&gt;
sudo wget https://github.com/tgalal/python-axolotl/archive/master.zip&lt;br /&gt;
sudo unzip master.zip&lt;br /&gt;
cd python-axolotl-master&lt;br /&gt;
sudo python3 setup.py install&lt;br /&gt;
cd ..&lt;br /&gt;
rm master.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /opt/fhem/yowsup&lt;br /&gt;
sudo wget https://github.com/tgalal/dissononce/archive/master.zip&lt;br /&gt;
sudo unzip master.zip&lt;br /&gt;
cd dissononce-master&lt;br /&gt;
sudo python3 setup.py install&lt;br /&gt;
cd ..&lt;br /&gt;
rm master.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /opt/fhem/yowsup&lt;br /&gt;
sudo wget https://github.com/tgalal/consonance/archive/master.zip&lt;br /&gt;
sudo unzip master.zip&lt;br /&gt;
cd consonance-master&lt;br /&gt;
sudo python3 setup.py install&lt;br /&gt;
cd ..&lt;br /&gt;
rm master.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Desweiteren muss man nun yowsup installieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt&lt;br /&gt;
sudo mkdir yowsup-config&lt;br /&gt;
sudo wget -N https://github.com/tgalal/yowsup/archive/master.zip&lt;br /&gt;
sudo unzip -o master.zip&lt;br /&gt;
cd yowsup-master&lt;br /&gt;
sudo python3 setup.py install&lt;br /&gt;
cd ..&lt;br /&gt;
rm master.zip&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fhem vorbereiten ====&lt;br /&gt;
Vor den weiteren Schritten sollte geprüft werden, ob dem User fhem eine Loginshell zugewiesen ist:&lt;br /&gt;
:&amp;lt;code&amp;gt;getent passwd fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
Wird hier am Ende /bin/false ausgegeben, so muss dies angepasst werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo chsh -s /bin/bash fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mittels &#039;&#039;getent passwd fhem&#039;&#039; kann auch bereits das Home-Verzeichnis ausgelesen werden, dies steht in der ausgegebenen Doppelpunkt-separierten Liste an vorletzter Stelle. &lt;br /&gt;
&lt;br /&gt;
Nun loggt man sich unter dem User ein, unter dem fhem läuft (in den folgenden Beispielen werden die vom fhem-Setup-Script generierten Defaults verwendet: User=fhem , home=/opt/fhem Gruppe=dialout) und liest dort die $HOME-Variable aus und prüft das Home-Verzeichnis:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo su - fhem&lt;br /&gt;
echo $HOME&lt;br /&gt;
cd $HOME&lt;br /&gt;
logout&amp;lt;/pre&amp;gt;&lt;br /&gt;
Diesen Wert braucht man später - gut merken. Sollte hier ein Fehler auftreten (z.B. das home nicht vorhanden), so muss dies zuerst korrigiert werden.&lt;br /&gt;
&lt;br /&gt;
Vor den weiteren Schritten sollte man nun erstmal die yowsup Verzeichnisse dem fhem-user zugängig machen:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo chown -R fhem:dialout /opt/yowsup-master /opt/yowsup-config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die folgenden Schritte würde ich auf den FHEM-Nutzer wechseln:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo su - fhem&lt;br /&gt;
cd /opt/yowsup-master&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== WhatsApp einrichten ====&lt;br /&gt;
Bitte daran denken...&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo su - fhem&lt;br /&gt;
cd /opt/yowsup-master&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Anmeldung am WhatsApp-Server. Dies kann man nun via &amp;lt;code&amp;gt;voice&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;sms&amp;lt;/code&amp;gt; machen. Bei einem Handy bietet sich SMS an, bei Festnetzanschlüssen sollte voice gewählt werden, wenn man sich nicht sicher ist, dass der Anschluss die Funktion &#039;SMS im Festnetz&#039; unterstützt. Dann wird der Bestätigungscode zwar auf Englisch vorgelesen, dafür ist die Zuverlässigkeit des Registrierungsvorganges zuverlässiger. Bei Festnetznummern sollte man unbedingt etwas zum Schreiben bereit halten! (49XXXXXXXX durch Eure Telefonnummer ersetzen.)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Python 2.5&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;yowsup-cli registration --requestcode sms --config-phone 49XXXXXXXX --config-cc 49&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Python 3.5&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;python3 yowsup-cli registration --requestcode sms --config-phone 49XXXXXXXX --config-cc 49&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückmeldung ist nun entscheidend. Wenn man diese zurückbekommt:&lt;br /&gt;
&amp;lt;pre&amp;gt;de sms&lt;br /&gt;
status: fail&lt;br /&gt;
retry_after: 3600&lt;br /&gt;
reason: no_routes&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dann ist die Nummer so nicht kompatibel. Was man dann noch probieren kann, ist die registration via voice - meistens ist das aber vergebene Liebesmüh&#039;.&lt;br /&gt;
&lt;br /&gt;
Wenn man folgende Rückmeldung bekommt:&lt;br /&gt;
&amp;lt;pre&amp;gt;I 2019-04-24 15:05:22,368 yowsup.common.http.warequest - {&amp;quot;login&amp;quot;:&amp;quot;49xxxxxxxxxx&amp;quot;,&amp;quot;status&amp;quot;:&amp;quot;sent&amp;quot;,&amp;quot;length&amp;quot;:6,&amp;quot;method&amp;quot;:&amp;quot;sms&amp;quot;,&amp;quot;retry_after&amp;quot;:65,&amp;quot;sms_wait&amp;quot;:65,&amp;quot;voice_wait&amp;quot;:65}&lt;br /&gt;
&lt;br /&gt;
status: sent&lt;br /&gt;
voice_wait: 65&lt;br /&gt;
retry_after: 65&lt;br /&gt;
sms_wait: 65&lt;br /&gt;
length: 6&lt;br /&gt;
login: 49xxxxxxxxxx&lt;br /&gt;
method: sms&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So ist alles gut gelaufen und man sollte kurz später eine SMS bekommen. Darin ist ein Text, der am Ende z.B. 123-456 lautet. Diesen fügt man ohne Bindestrich am Ende des folgenden Befehls ein (49XXXXXXXX durch Eure Telefonnummer ersetzen.):&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Python 2.5&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;python3 yowsup-cli registration  --config-phone 49XXXXXXXX -R 123456&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Python 3.5&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;python3 yowsup-cli registration  --config-phone 49XXXXXXXX -R 123456&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kommt ein Text der etwa so aussehen sollte:&lt;br /&gt;
&amp;lt;pre&amp;gt;I 2019-04-24 15:15:09,118 yowsup.common.http.warequest - {&amp;quot;status&amp;quot;:&amp;quot;ok&amp;quot;,&amp;quot;login&amp;quot;:&amp;quot;49xxxxxxxxxx&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;existing&amp;quot;,&amp;quot;edge_routing_info&amp;quot;:&amp;quot;CAUIAg==&amp;quot;,&amp;quot;chat_dns_domain&amp;quot;:&amp;quot;fb&amp;quot;,&amp;quot;security_code_set&amp;quot;:false}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;__version__&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;cc&amp;quot;: &amp;quot;49&amp;quot;,&lt;br /&gt;
    &amp;quot;client_static_keypair&amp;quot;: &amp;quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;quot;,&lt;br /&gt;
    &amp;quot;expid&amp;quot;: &amp;quot;xxxxxxxxxxxxxxxxxxxxxxxx&amp;quot;,&lt;br /&gt;
    &amp;quot;fdid&amp;quot;: &amp;quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;quot;,&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;quot;,&lt;br /&gt;
    &amp;quot;mcc&amp;quot;: &amp;quot;000&amp;quot;,&lt;br /&gt;
    &amp;quot;mnc&amp;quot;: &amp;quot;000&amp;quot;,&lt;br /&gt;
    &amp;quot;phone&amp;quot;: &amp;quot;49xxxxxxxxxx&amp;quot;,&lt;br /&gt;
    &amp;quot;sim_mcc&amp;quot;: &amp;quot;000&amp;quot;,&lt;br /&gt;
    &amp;quot;sim_mnc&amp;quot;: &amp;quot;000&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Yowsup legt eine neue Konfigurationsdatei im unter $HOME/.config/49xxxxxxxxxx/. Diese wird automatisch herangezogen, wenn die entsprechende Telefonnummer mit --config-phone 49XXXXXXXX angegeben wird.&lt;br /&gt;
&lt;br /&gt;
Nun mal ein schneller Test an die eigene Nummer (im Beispiel 491751234567):&lt;br /&gt;
&amp;lt;pre&amp;gt;python[3] yowsup-cli demos --config-phone 49XXXXXXXX -s 491751234567 &amp;quot;Das ist ein Test&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier seht ihr nun einen Status (die Anzahl prekeys wird hoch gezählt):&lt;br /&gt;
&amp;lt;pre&amp;gt;I 2019-04-24 15:33:58,647 yowsup.layers.network.layer - Connecting to e7.whatsapp.net:443&lt;br /&gt;
I 2019-04-24 15:33:59,230 yowsup.axolotl.manager - Generating 812 prekeys&lt;br /&gt;
I 2019-04-24 15:34:15,590 yowsup.axolotl.manager - Storing 812 prekeys&lt;br /&gt;
I 2019-04-24 15:35:03,100 yowsup.axolotl.manager - Loaded 812 unsent prekeys&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das sollte dir eine Nachricht einbringen. Wenn du darauf antwortest, kommt diese allerdings noch nicht an - der Client hat sich nach dem Befehl sofort beendet. Damit dieser dauerhaft im Hintergrund läuft legen wir nun in FHEM ein Gerät an, welches dies steuert.&lt;br /&gt;
&lt;br /&gt;
=== FHEM Define ===&lt;br /&gt;
* FHEM Device anlegen: &amp;lt;code&amp;gt; define &amp;lt;name&amp;gt; yowsup&amp;lt;/code&amp;gt;, also z.B. &amp;lt;code&amp;gt;define WhatsApp yowsup&amp;lt;/code&amp;gt;&lt;br /&gt;
* Nun muss man den Pfad zu yowsup anpassen: &lt;br /&gt;
* Python 2.7&lt;br /&gt;
* &amp;lt;code&amp;gt;attr WhatsApp cmd /opt/yowsup-master/yowsup-cli demos --config-phone 49XXXXXXXX --yowsup&amp;lt;/code&amp;gt;&lt;br /&gt;
* Python 3.5&lt;br /&gt;
* &amp;lt;code&amp;gt;attr WhatsApp cmd python3 /opt/yowsup-master/yowsup-cli demos --config-phone 49XXXXXXXX --yowsup&amp;lt;/code&amp;gt;&lt;br /&gt;
* Und das Home directory mit dem Pfad zum Home des fhem users: &amp;lt;code&amp;gt;attr WhatsApp home PWD&amp;lt;/code&amp;gt;&lt;br /&gt;
* Wenn alles gut geht, gibt es danach im Device ein internal PID und das Reading &#039;&#039;state&#039;&#039;&lt;br /&gt;
* Im Whatsapp Client auf dem Handy sollte man sehen, dass FHEM online ist&lt;br /&gt;
* Zum Senden aus FHEM kann man das Kommando &amp;lt;code&amp;gt;set WhatsApp send &amp;lt;nummer&amp;gt; &amp;lt;text&amp;gt;&amp;lt;/code&amp;gt; verwenden&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
Bitte sieh immer in der {{Link2CmdRef|Anker=yowsup}} nach - diese hier könnten veraltet sein.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cmd&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;komplettes Kommando, um den yowsup Client zu starten. z.B.: &amp;lt;code&amp;gt;attr WhatsApp cmd /opt/yowsup-master/yowsup-cli demos -c /opt/yowsup-config/yowsup.config --yowsup&amp;lt;/code&amp;gt;. Wenn die ab  yowsup-Version 2.4 standartmässig aktivierte Verschlüsselung abgeschaltet werden muss weil die entsprechenden Libs nicht installiert sind: &amp;lt;code&amp;gt;attr WhatsApp cmd /opt/local/bin/yowsup-cli demos -c /root/yowsup-config --yowsup -M&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;acceptFrom&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;kommagetrennte Liste von Kontakten (Nummern), von denen Nachrichten akzeptiert werden. Ist das Attribut nicht gesetzt, so werden die Nachrichten von jedem akzeptiert.&lt;br /&gt;
* &amp;lt;code&amp;gt;commandPrefix&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;nicht gesetzt -&amp;gt; es werden keine Befehle akzeptiert.&amp;lt;br /&amp;gt;0 -&amp;gt; es werden keine Befehle akzeptiert.&amp;lt;br /&amp;gt;1 -&amp;gt; erlaubt Befehle, jede Nachricht wird als FHEM-Befehl interpretiert.&amp;lt;br /&amp;gt;alles andere -&amp;gt; Wenn die Nachricht mit diesem Prefix startet, wird alles weitere als Befehle interpretiert.&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=&#039;&#039;&#039;allowedCommands&#039;&#039;&#039; should work as intended, but no guarantee can be given, that there is no way to circumvent it.}}&lt;br /&gt;
* &amp;lt;code&amp;gt;allowedCommands&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Eine Komma-getrennte Liste von zulässigen Befehlen für diesen Kontakt. Wenn die Liste leer ist (z.B. nur ein Komma), dann werden keine Befehle akzeptiert.&lt;br /&gt;
* &amp;lt;code&amp;gt;home&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Setzt das Home-directory welches für yowsup verwendet werden soll.&lt;br /&gt;
&lt;br /&gt;
== Befehle ==&lt;br /&gt;
* image -&amp;gt; Über diesen Befehl können Bilder gesendet werden.&lt;br /&gt;
&lt;br /&gt;
* raw -&amp;gt; Status ändern :  &lt;br /&gt;
&amp;lt;code&amp;gt;set WhatsApp raw /profile setStatus &#039;mein Status&#039;    &amp;lt;--- die &#039; &#039; müssen bleiben&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Name der angezeigt werden soll, wenn eine Nachricht z.B. ans iPhone geschickt wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set WhatsApp raw /presence name &amp;lt;DeinNick&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anzeige online :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set WhatsApp raw /presence available&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Profilbild ändern :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set WhatsApp raw /profile setPicture &#039;/opt/fhem/fhem_logo.png&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;--- der gesamte Pfad zum Bild muss angegeben werden und Rechte müssen ggfs. bei fhem liegen&lt;br /&gt;
&lt;br /&gt;
Falls es nicht funktioniert disconnect/connect probieren.&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
Da am WhatsApp ständig geschraubt wird, bedarf es eines Updates des Yowsup, wenn keine Funktion mehr gegeben ist:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /opt&lt;br /&gt;
sudo rm master.zip&lt;br /&gt;
sudo mv yowsup-master yowsup-master-alt&lt;br /&gt;
sudo wget -N https://github.com/tgalal/yowsup/archive/master.zip&lt;br /&gt;
#alternativ sudo wget https://github.com/jlguardi/yowsup/archive/master.zip (Stand März 2016 aktueller)&lt;br /&gt;
sudo unzip master.zip&lt;br /&gt;
sudo chown fhem yowsup-master -R&lt;br /&gt;
sudo chgrp dialout yowsup-master -R&amp;lt;/pre&amp;gt;Danach muss FHEM mittels &#039;shutdown restart&#039; neu gestartet werden.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispielnachricht ===&lt;br /&gt;
Beim Empfang einer Nachricht wird automatisch ein FHEM Device für diesen Kontakt angelegt. In diesem Device gibt es das Reading &#039;&#039;&#039;message&#039;&#039;&#039; für die empfangene Nachricht und ab der ersten Nachricht auch das Reading &#039;&#039;&#039;chatstate&#039;&#039;&#039;, in dem zu sehen ist, ob gerade getippt wird.&lt;br /&gt;
Nachdem ein Device für einen Kontakt angelegt ist, lässt sich auch direkt dieses Device zum Senden verwenden: &lt;br /&gt;
:&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; send &amp;lt;text&amp;gt;&amp;lt;/code&amp;gt;, &lt;br /&gt;
d.h., man spart sich die Angabe der Nummer.&lt;br /&gt;
&lt;br /&gt;
=== Gruppen ===&lt;br /&gt;
Gruppen müssen über die App (Smartphone / Tablet) angelegt werden. Nach dem Empfang einer entsprechenden Nachricht werden Gruppen genauso behandelt, wie einfache Teilnehmer.&lt;br /&gt;
&lt;br /&gt;
=== Broadcast ===&lt;br /&gt;
Beim Senden über das Masterdevice lassen sich mehrere Empfänger mit Komma (und ohne Leerzeichen) getrennt angeben. Die entsprechenden Nachrichten werden dann per Broadcast an alle Teilnehmer gesendet. Die Broadcastempfänger müssen zuvor mindestens eine normale Nachricht erhalten haben.&lt;br /&gt;
&lt;br /&gt;
=== Komponenten steuern ===&lt;br /&gt;
Um ein [[notify]] anlegen zu können, müssen wir zuerst eine Nachricht vom Handy an FHEM senden. Dadurch wird ein Device mit der Nummer als Namen angelegt. Danach sollte das Device umbenannt werden, da einige Befehle einen Namen ausschließlich aus Ziffern nicht akzeptieren. Dies geschieht wie folgt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;rename 49123456789 HandySeppel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach kann ein &#039;&#039;notify&#039;&#039; angelegt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
 define notifySeppelLicht notify HandySeppel:message.* {&lt;br /&gt;
 if( $EVENT eq &#039;message: Licht an&#039; ) {&lt;br /&gt;
   fhem &amp;quot;set HandySeppel send Licht ist nun an...&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;set FS20_a5d800 dim100%&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
 } elsif( $EVENT eq &#039;message: Licht aus&#039; ) {&lt;br /&gt;
     fhem &amp;quot;set HandySeppel send Licht ist nun aus...&amp;quot;;&lt;br /&gt;
     fhem &amp;quot;set FS20_a5d800 dim0%&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
 } else {&lt;br /&gt;
     fhem &amp;quot;set HandySeppel send Wie bitte?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Natürlich ist dieses &#039;&#039;notify&#039;&#039; noch auf die eigenen Wünsche anzupassen.&lt;br /&gt;
&lt;br /&gt;
=== Autoresponder ===&lt;br /&gt;
Nachdem man nun seine Festnetznummer bei WhatsApp registriert hat, wird auch diese natürlich als erreichbares Ziel auf jedem Gerät angezeigt, auf dem sie gespeichert ist. So kann es passieren, dass WhatsApp-Nachrichten nicht gelesen werden. Hier schafft ein Autoresponder Abhilfe:&lt;br /&gt;
:&amp;lt;code&amp;gt;define not_WhatsApp_Autoresponder notify 491.*:message.* set  $NAME send Hallo, Du hast eine Nachricht an unsere Festnetznummer geschickt. Da ist aber nur ein kleiner Computer auf Empfang, der Dir nur diese Antwort schicken kann. Bitte benutze unsere Mobilnummern, wenn Du willst, dass Deine Nachricht auch gelesen wird!&amp;lt;/code&amp;gt;&lt;br /&gt;
Das Problem hierbei ist, dass noch nicht bekannt ist, wer etwas sendet und so der Kontakt u.U. noch nicht angelegt ist. Daher wird im obigen Beispiel auf 491*:message.* reagiert. So bekommen nur deutsche Mobilrufnummern die Antwort. Um das noch globaler zu fassen, könnte z.B. auf \d*.*:message.* reagiert werden, was aber voraussetzt, dass keine weiteren Modulnamen (die das Reading message haben) mit einer Ziffer beginnen.&lt;br /&gt;
Alle Kontakte, welche nicht den Autoresponder erhalten sollen, müssen wie oben beschrieben entspr. umbenannt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;rename 49123456789 HandySeppel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Probleme und Lösungen ==&lt;br /&gt;
=== Immer wieder offline ===&lt;br /&gt;
Das WhatsApp Device geht immer wieder offline und im Log wird folgendes protokolliert:&lt;br /&gt;
&lt;br /&gt;
... yowsup.layers.axolotl.layer_receive:invalidmessage or keyid for ...&lt;br /&gt;
&lt;br /&gt;
Lösung:&lt;br /&gt;
&lt;br /&gt;
Verzeichnis .yowsup in /root löschen.&lt;br /&gt;
Das Verzeichnis entsteht durch das Testen auf der Konsole und verträgt sich dann nicht mit dem im Attribut home hinterlegten Verzeichnis.&lt;br /&gt;
&lt;br /&gt;
=== UTF-8 Fehler ===&lt;br /&gt;
&lt;br /&gt;
Lösung: https://forum.fhem.de/index.php/topic,27543.msg773746.html#msg773746&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=27543|LinkText=Forenthread}}, in dem die Whatsapp Anwendung beschrieben wird&lt;br /&gt;
* {{Link2Forum|Topic=27543|Message=299292|LinkText=Foreneintrag}}, ab dem das yowsup Modul beschrieben wird&lt;br /&gt;
* Die Python Whatsapp Library auf [https://github.com/tgalal/yowsup github]&lt;br /&gt;
* Imagehandling Bugfix [https://github.com/tgalal/yowsup/issues/901 github]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:WhatsApp]]&lt;/div&gt;</summary>
		<author><name>Hoppel118</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Homebridge_User_Configs&amp;diff=30839</id>
		<title>Homebridge User Configs</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Homebridge_User_Configs&amp;diff=30839"/>
		<updated>2019-06-25T20:07:04Z</updated>

		<summary type="html">&lt;p&gt;Hoppel118: Kopierfehler Homematic Thermostat behoben&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Eintrag dient zur Sammlung funktionsfähiger Homebridge Configs.&lt;br /&gt;
&lt;br /&gt;
Bitte immer die FHEM Version und Homebridge Version angegeben.&lt;br /&gt;
&lt;br /&gt;
Sehr gute Hinweise gibt es hier: http://www.meintechblog.de/2015/10/mit-siri-und-fhem-das-gesamte-smart-home-per-stimme-steuern/&lt;br /&gt;
== Mögliche Mappings ==&lt;br /&gt;
Die Möglichen Mappings können hier nachgelesen werden https://github.com/KhaosT/HAP-NodeJS/blob/master/lib/gen/HomeKitTypes.js&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel:&lt;br /&gt;
 Characteristic.Brightness = function() {&lt;br /&gt;
  Characteristic.call(this, &#039;Brightness&#039;, &#039;00000008-0000-1000-8000-0026BB765291&#039;);&lt;br /&gt;
  this.setProps({&lt;br /&gt;
    format: Characteristic.Formats.INT,&lt;br /&gt;
    unit: Characteristic.Units.PERCENTAGE,&lt;br /&gt;
    maxValue: 100,&lt;br /&gt;
    minValue: 0,&lt;br /&gt;
    minStep: 1,&lt;br /&gt;
    perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY]&lt;br /&gt;
  });&lt;br /&gt;
  this.value = this.getDefaultValue();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Das Mapping in diesem Fall, hat den Titel Brightness.&lt;br /&gt;
&lt;br /&gt;
Die Werte können in 1er Schritten zwischen 0 und 100 liegen (max und min Value)&lt;br /&gt;
== Erstellung eines HomebridgeMappings am Beispiel &amp;quot;Feuchtesensor&amp;quot; ==&lt;br /&gt;
Zum Einstieg etwas leicht nachvollziehbares. &lt;br /&gt;
&lt;br /&gt;
Feuchtesensoren haben in der Regel ein &amp;quot;humidity&amp;quot; Reading, im Falle des Opus XT300 Bodenfeuchtesensors auch Temperatur und Batterie Level. Homekit unterstützt einen &amp;quot;HumiditySensor&amp;quot; Service. Dieser ist in homebridge-fhem nicht standardmäßig vorhanden (kann also nicht aus dem dropdown ausgewählt werden, sondern muss über das Befehlsfeld zugewiesen werden):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr meinSensor genericDeviceType HumiditySensor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden die Readings gemappt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr meinSensor homebridgeMapping clear CurrentRelativeHumidity=humidity StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW CurrentTemperature=temperature&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;clear&amp;lt;/code&amp;gt;löscht default mappings - das wird in der Regel nicht notwendig sein, schadet aber nicht&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;CurrentRelativeHumidity&amp;lt;/code&amp;gt; ist die relevante Homekit Characteristic - wird mit dem entsprechenden Reading des Sensors gemappt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;StatusLowBattery&amp;lt;/code&amp;gt; erwartet entweder BATTERY_LEVEL_NORMAL oder _LOW. Mein Sensor liefert ok zurück, wenn alles gut ist, also wird &amp;quot;ok&amp;quot; auf _NORMAL gemappt, alles andere auf _LOW. &lt;br /&gt;
&lt;br /&gt;
Der Opus XT300 Bodenfeuchtesensors liefert auch noch die Temperatur - der HumiditySensor Service sieht das eigentlich nicht vor, daher wird die Temperatur auch nicht in der Apple &amp;quot;Home&amp;quot; App angezeigt. Bei Eve wird die Temperatur hingegen berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
== BRAVIA Fernseher ==&lt;br /&gt;
Ein Beispiel homebridgeMapping für Sony Bravia Fernseher (iOS 12.2 beta!) und genericDeviceType Television:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
clear&lt;br /&gt;
ConfiguredName:model&lt;br /&gt;
Active:state,values=off:INACTIVE;on:ACTIVE,cmds=ACTIVE:on;INACTIVE:off&lt;br /&gt;
RemoteKey:key,cmds=REWIND:remoteControl+Rewind;FAST_FORWARD:remoteControl+FastForward;NEXT_TRACK:remoteControl+NEXT_TRACK;PREVIOUS_TRACK:remoteControl+PREVIOUS_TRACK;ARROW_UP:remoteControl+Up;ARROW_DOWN:remoteControl+Down;ARROW_LEFT:remoteControl+Left;ARROW_RIGHT:remoteControl+Right;SELECT:remoteControl+Ok;BACK:remoteControl+RETURN;EXIT:remoteControl+Exit;PLAY_PAUSE:remoteControl+Play;INFORMATION:remoteControl+Info&lt;br /&gt;
SleepDiscoveryMode:default=ALWAYS_DISCOVERABLE&lt;br /&gt;
ClosedCaptions:default=0&lt;br /&gt;
DisplayOrder:default=Test1&lt;br /&gt;
CurrentMediaState:default=0:currentTitle&lt;br /&gt;
TargetMediaState:default=0,cmds=PLAY:remoteControl+play;PAUSE:remoteControl+pause;STOP:remoteControl+stop;&lt;br /&gt;
PictureMode:default=1&lt;br /&gt;
PowerModeSelection:default=1,cmds=0:remoteControl+options&lt;br /&gt;
ActiveIdentifier:input,default=0,values=/tv.dvbt|TV...DVB-T/:1;/HDMI.3/:2,cmds=1:input+TV+/+DVB-T;2:input+HDMI+3/ARC;3:application+Plex&lt;br /&gt;
TelevisionSpeaker#Mute=mute&lt;br /&gt;
 Active:default=ACTIVE&lt;br /&gt;
 VolumeSelector:volume,cmds=INCREMENT:VolumeUp;DECREMENT:VolumeDown&lt;br /&gt;
 VolumeControlType:default=RELATIVE_WITH_CURRENT&lt;br /&gt;
 linkedTo=Television&lt;br /&gt;
InputSource(1)#Identifier:default=1&lt;br /&gt;
 ConfiguredName:default=TV&lt;br /&gt;
 IsConfigured:default=CONFIGURED&lt;br /&gt;
 InputSourceType:default=TUNER&lt;br /&gt;
 CurrentVisibilityState:default=SHOWN&lt;br /&gt;
 linkedTo=Television&lt;br /&gt;
InputSource(2)#Identifier:default=2&lt;br /&gt;
 ConfiguredName:default=APPLE+TV&lt;br /&gt;
 IsConfigured:default=CONFIGURED&lt;br /&gt;
 InputSourceType:default=HDMI&lt;br /&gt;
 CurrentVisibilityState:default=SHOWN&lt;br /&gt;
 linkedTo=Television&lt;br /&gt;
InputSource(3)#Identifier:default=3&lt;br /&gt;
 ConfiguredName:default=PLEX&lt;br /&gt;
 IsConfigured:default=CONFIGURED&lt;br /&gt;
 InputSourceType:default=APPLICATION&lt;br /&gt;
 CurrentVisibilityState:default=SHOWN&lt;br /&gt;
 linkedTo=Television&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
damit lässt sich der Fernseher über Siri/Homekit ein- und ausschalten sowie über das appleTV Control-Center Widget steuern.&lt;br /&gt;
&lt;br /&gt;
== EnOcean STM 250 Tür-/Fensterkontakt ==&lt;br /&gt;
Der STM 250 liefert als Status in FHEM &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;, wenn das Fenster offen und damit der Kontakt &amp;quot;offen&amp;quot; ist. Analog liefert er &amp;lt;code&amp;gt;closed&amp;lt;/code&amp;gt; wenn das Fenster geschlossen und damit auch der Kontakt geschlossen ist. Diese Statusangaben sind sehr intuitiv zu verstehen und zu interpretieren. &lt;br /&gt;
&lt;br /&gt;
Die characteristic &amp;lt;code&amp;gt;ContactSensorState&amp;lt;/code&amp;gt; von HomeKit liefert entweder den Wert &amp;lt;code&amp;gt;CONTACT_DETECTED=0&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;CONTACT_NOT_DETECTED=1&amp;lt;/code&amp;gt; zurück. Wobei &amp;lt;code&amp;gt;CONTACT_DETECTED&amp;lt;/code&amp;gt; bedeutet, dass der Kontakt geschlossen ist. Je nach Darstellung in der HomeKit-fähigen App muss dieses Verhalten bei der Interpretation berücksichtigt werden. Die App Eve von Elgato zum Beispiel liefert für Kontaktsensoren &amp;quot;JA&amp;quot; oder &amp;quot;NEIN&amp;quot; mit der Bedeutung &amp;lt;code&amp;gt;CONTACT_DETECTED=0=JA&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;CONTACT_NOT_DETECTED=1=NEIN&amp;lt;/code&amp;gt; zurück.&lt;br /&gt;
&lt;br /&gt;
Noch ein wichtiger Punkt: Um einen Sensorkontakt sinnvoll einzurichten sollte als zusätzlicher Wert für das Attribut &amp;lt;code&amp;gt;genericdeviceType&amp;lt;/code&amp;gt; der Wert &amp;lt;code&amp;gt;ContactSensor&amp;lt;/code&amp;gt; hinzugefügt werden. Wie das geht ist im Eintrag [[Homebridge_einrichten#FHEM_konfigurieren | Homebridge einrichten]] ausführlicher beschrieben.&lt;br /&gt;
&lt;br /&gt;
Folgende Attribute dann hinzufügen:&lt;br /&gt;
 attr STM250 genericDeviceType ContactSensor&lt;br /&gt;
 attr STM250 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 9893&lt;br /&gt;
 Homebridge 0.2.16&lt;br /&gt;
 homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}&lt;br /&gt;
&lt;br /&gt;
== Modul RESIDENTS für Anwesenheitserkennung und Steuerung der Anwesenheit benutzen ==&lt;br /&gt;
[[Datei:Homebridge_bewohner_zu_szene.jpeg|mini|Schaltzustand eines Bewohners zu einer Szene hinzufügen]]&lt;br /&gt;
Aus den einzelnen Komponenten des Moduls RESIDENTS, homebridge sowie der characteristic &amp;lt;code&amp;gt;On&amp;lt;/code&amp;gt; und der Szenensteuerung lässt sich eine gleichzeitige Steuerung der Anwesenheit und Anwesenheitserkennung basteln.&lt;br /&gt;
&lt;br /&gt;
Dazu müssen folgende Schritte unternommen werden:&lt;br /&gt;
* einem Bewohner aus dem Modul ROOMMATE die Steuerung über homebridgeMapping hinzufügen&lt;br /&gt;
* Szene für &amp;quot;Ich bin zu Hause&amp;quot; und &amp;quot;Ich gehe jetzt&amp;quot; in einer HomeKit-fähigen App wie z.B. Eve einrichten&lt;br /&gt;
&lt;br /&gt;
Man kann einen beliebigen Bewohner aus dem Modul ROOMMATE nehmen und ihn über die characteristic &amp;lt;code&amp;gt;On&amp;lt;/code&amp;gt; in Form eines Schalters sozusagen schaltbar machen. Nur wird das Ein- und Ausschalten des Bewohners über HomeKit in FHEM auf den Status home bzw. absent gemappt. Seit dem 06.02.2016 werden RESIDENTS automatisch als Occupancy Sensor für HomeKit annonciert. Nun noch die Attribute des ROOMMATE wie folgt setzen:&lt;br /&gt;
 attr &amp;lt;ROOMMATE&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;ROOMMATE&amp;gt; homebridgeMapping On=state,valueOn=/home|awoken|asleep|gotosleep/,valueOff=/gone|absent/,cmdOn=home,cmdOff=absent&lt;br /&gt;
&lt;br /&gt;
Natürlich muss der Bewohner noch dem Filter von homebridge hinzugefügt und homebridge neu gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Anschließend geht es in der HomeKit-fähigen App Deiner Wahl weiter. In Eve von Elgato ist von vornherein zum Beispiel vorgesehen, dass man zwei Szenen &amp;quot;Ich bin zuhause&amp;quot; und &amp;quot;Ich verlasse das Haus&amp;quot; hat. Zu diesen Szenen wird eine Aktion hinzugefügt indem der Bewohner, den das ROOMMATE-Modul meldet zur Szene hinzugefügt wird und beim Nachhausekommen &amp;quot;eingeschaltet&amp;quot; wird. Genauso wird mit der Szene &amp;quot;Ich verlasse das Haus&amp;quot; verfahren: Bewohner zur Szene hinzufügen und den Schaltvorgang auf &amp;quot;ausschalten&amp;quot; setzen.&lt;br /&gt;
&lt;br /&gt;
Mit den Sprachbefehlen &amp;quot;Ich bin zuhause&amp;quot; oder &amp;quot;Ich verlasse das Haus&amp;quot; wird die entsprechende Szene eingeschaltet, homebridge schaltet über das &amp;lt;code&amp;gt;homebridgeMapping&amp;lt;/code&amp;gt; Attribut dann den Bewohner auf &amp;quot;home&amp;quot; oder &amp;quot;absent&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 9893&lt;br /&gt;
 Homebridge 0.2.16&lt;br /&gt;
 homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}&lt;br /&gt;
&lt;br /&gt;
Eine noch etwas bessere Schaltmöglichkeit bietet &#039;&#039;&#039;genericDeviceType security&#039;&#039;&#039;.&lt;br /&gt;
Das Mapping für ROOMMATE sieht wie folgt aus:&lt;br /&gt;
 attr TYPE=ROOMMATE genericDeviceType security&lt;br /&gt;
 attr TYPE=ROOMMATE homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;gone:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+gone,delay=1&lt;br /&gt;
für GUEST:&lt;br /&gt;
 attr TYPE=GUEST genericDeviceType security&lt;br /&gt;
 attr TYPE=GUEST homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;none:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+none,delay=1&lt;br /&gt;
&lt;br /&gt;
== Homematic Luftfeuchtigkeits- und Tmeperatursensoren ==&lt;br /&gt;
&lt;br /&gt;
Mit folgenden Geräten wurde folgendes Mapping erstellt und somit erfolgreich getestet:&lt;br /&gt;
&lt;br /&gt;
 - HM-WDS10-TH-O&lt;br /&gt;
 - HM-WDS40-TH-I&lt;br /&gt;
 - HM-WDS40-TH-I-2&lt;br /&gt;
&lt;br /&gt;
Achtung: Hier wird genericDeviceType &amp;quot;TemperatureSensor&amp;quot; verwendet, um eine history in EVE zu erhalten. Mit einem &amp;quot;HumiditySensor&amp;quot; funktionierte dies bei den Tests (Februar 2019) nicht.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;THSensor&amp;gt; genericDeviceType TemperatureSensor&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;THSensor&amp;gt;      CurrentRelativeHumidity=humidity&lt;br /&gt;
                      CurrentTemperature=temperature&lt;br /&gt;
                      StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;/^.*/:BATTERY_LEVEL_LOW&lt;br /&gt;
                      history:size=1024&lt;br /&gt;
&lt;br /&gt;
== Homematic SmokeDetector HM-SEC-SD und HM-SEC-SD2 ==&lt;br /&gt;
 [[Datei:Homebridge-Homematic-Smokedetector-Gen1.jpg|mini|Homebridge-Homematic-Smokedetector-Gen1 in EVE]]&lt;br /&gt;
Es sind keine Homebridge Mappings für die Rauch Meldung erforderlich.&lt;br /&gt;
&lt;br /&gt;
Allerdings ist ein Mapping für den Batterie Zustand nötig, siehe Unten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;SmokeDetector&amp;gt; genericDeviceType SmokeSensor&lt;br /&gt;
 attr &amp;lt;SmokeDetector&amp;gt; subType smokeDetector&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;SmokeDetector&amp;gt; homebridgeMapping StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW&lt;br /&gt;
&lt;br /&gt;
== Homematic Heizkörperthermostat HM-CC-RT-DN ==&lt;br /&gt;
[[Datei:HM-CC-RT-DN-Eve.PNG|mini|Darstellung des HM-CC-RT-DN in der iOS App Eve]]&lt;br /&gt;
 attr &amp;lt;HMCCRTDN_Channel2_Clima&amp;gt; homebridgeMapping TargetTemperature=desired-temp::desired-temp,minValue=5,maxValue=35,minStep=0.5,nocache=1&lt;br /&gt;
                      CurrentTemperature=BU_Heizung_01_Clima:measured-temp,nocache=1&lt;br /&gt;
                      StatusLowBattery=BU_Heizung_01:battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW&lt;br /&gt;
                      TargetHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:3,cmds=OFF:controlManu+off;;HEAT:controlMode+boost;;AUTO:controlMode+auto;;COOL:controlManu+17.0&lt;br /&gt;
                      CurrentHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:0,valud=OFF&lt;br /&gt;
 attr &amp;lt;HMCCRTDN_Channel2_Clima&amp;gt; siriName Robby&lt;br /&gt;
Dieses Mapping bezieht sich auf ein vorhandenes &#039;&#039;userReading&#039;&#039; mit dem Namen &amp;lt;code&amp;gt;heatingState&amp;lt;/code&amp;gt;, womit Homekit die einzelnen Status nachher unterscheidet.&lt;br /&gt;
 attr &amp;lt;HM-CC-RT-DN_Clima&amp;gt; userReadings heatingState {(ReadingsVal($NAME,&amp;quot;ValvePosition&amp;quot;,0) &amp;gt; 0 || ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;on&amp;quot;) ? &amp;quot;HEAT&amp;quot; : ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;off&amp;quot; ? &amp;quot;OFF&amp;quot; : ReadingsVal($NAME,&amp;quot;controlMode&amp;quot;,&amp;quot;auto&amp;quot;) eq &amp;quot;auto&amp;quot; ? &amp;quot;AUTO&amp;quot; : (ReadingsVal($NAME,&amp;quot;measured-temp&amp;quot;,20) &amp;gt; ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,20)) ? &amp;quot;COOL&amp;quot; : &amp;quot;AUTO&amp;quot;}&lt;br /&gt;
Global auf alle in FHEM angelegten HM-CC-RT-DN, lässt sich mit folgendem Befehl das &#039;&#039;userReading&#039;&#039; anlegen.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,59211.msg505986.html#msg505986 Forumsthread].&lt;br /&gt;
&lt;br /&gt;
 attr TYPE=CUL_HM:FILTER=model=HM-CC-RT-DN:FILTER=chanNo=04 userReadings heatingState {(ReadingsVal($NAME,&amp;quot;ValvePosition&amp;quot;,0) &amp;gt; 0 || ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;on&amp;quot;) ? &amp;quot;HEAT&amp;quot; : ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;off&amp;quot; ? &amp;quot;OFF&amp;quot; : ReadingsVal($NAME,&amp;quot;controlMode&amp;quot;,&amp;quot;auto&amp;quot;) eq &amp;quot;auto&amp;quot; ? &amp;quot;AUTO&amp;quot; : (ReadingsVal($NAME,&amp;quot;measured-temp&amp;quot;,20) &amp;gt; ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,20)) ? &amp;quot;COOL&amp;quot; : &amp;quot;AUTO&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Homematic Wetterstation OC3 HM-WDS100-C6-O-2 ==&lt;br /&gt;
[[Datei: homebridge-wetter.jpg|mini|Wetterstation in EVE]]&lt;br /&gt;
Mit der EVE und den hier: [https://github.com/naofireblade/homebridge-weather-plus/blob/master/util/characteristics.js] beschriebenen Characteristics lässt sich eine lokale Homematic OC3 Wetterstation aus FHEM einbinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
clear&lt;br /&gt;
CurrentTemperature:temperature&lt;br /&gt;
CurrentRelativeHumidity:humidity&lt;br /&gt;
49C8AE5A-A3A5-41AB-BF1F-12D5654F9F41:windSpeed,name=WINDGESCHWINDIGKEIT,format=FLOAT,unit=kmh,maxValue=250,minValue=0,minStep=1&lt;br /&gt;
46f1284c-1912-421b-82f5-eb75008b167e:windDirection,name=WINDRICHTUNG,format=UINT8,unit=ARC_DEGREE,maxValue=360,minValue=0,minStep=1&lt;br /&gt;
StatusLowBattery:battery,values=ok:BATTERY_LEVEL_NORMAL;/^.*/:BATTERY_LEVEL_LOW &lt;br /&gt;
ccc04890-565b-4376-b39a-3113341d9e0f:RegenmengeLast24Hours:state,name=REGEN_24h,format=FLOAT,unit=mm,maxValue=100,minValue=0,minStep=1 &lt;br /&gt;
10c88f40-7ec4-478c-8d5a-bd0c3cce14b7:RegenmengeLast1Hours:state,name=REGEN_1h,format=FLOAT,unit=mm,maxValue=100,minValue=0,minStep=1 &lt;br /&gt;
0000006B-0000-1000-8000-0026BB765291:brightness,name=BRIGHTNESS,format=FLOAT,unit=LUX,maxValue=10000,minValue=0,minStep=.0001 &lt;br /&gt;
cd65a9ab-85ad-494a-b2bd-2f380084134c:isRaining,name=BEDINGUNGKATEGORIE,values=0:0;1:2,format=UINT8,maxValue=3,minValue=0,minStep=1 &lt;br /&gt;
cd65a9ab-85ad-494a-b2bd-2f380084134d:isRaining,name=BEDINGUNG,format=STRING,values=0:-;/.*/:Regen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Roomba über THINKINGCLEANER Modul ==&lt;br /&gt;
 attr &amp;lt;THINKINGCLEANER&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;THINKINGCLEANER&amp;gt; homebridgeMapping clear On=state,valueOn=/^(on|dock)/,cmdOn=on,cmdOff=off,nocache=1 ChargingState=deviceStatus,values=/(_recon|_full|_trickle)$/:CHARGING;/^.*/:NOT_CHARGING&lt;br /&gt;
 attr &amp;lt;THINKINGCLEANER&amp;gt; siriName Robby&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 12680&lt;br /&gt;
 homebridge 0.4.11&lt;br /&gt;
 homebridge-fhem 0.2.66&lt;br /&gt;
&lt;br /&gt;
== Vallox Belüftungsanlage ==&lt;br /&gt;
Die Steuerung der Lüftungsgeschwindigkeit ist nur in Prozent möglich. Die Umrechnung erfolgt im [[Vallox]] Modul.&lt;br /&gt;
Hierzu wurde das Reading &#039;&#039;FanSpeedPct&#039;&#039; hinzugefügt.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;Vallox&amp;gt; genericDeviceType Fan&lt;br /&gt;
 attr &amp;lt;Vallox&amp;gt; homebridgeMapping clear&lt;br /&gt;
                      model=Vallox&lt;br /&gt;
                      On=PowerState,valueOn=1,readOnly=1&lt;br /&gt;
                      RotationSpeed=FanSpeedPct,minValue=1,maxValue=100,cmd=FanSpeedPct,delay=1&lt;br /&gt;
&lt;br /&gt;
== Xiaomi Vacuum Cleaner 1. Generation ==&lt;br /&gt;
[[Datei:XIAOMI_VACUUM_CLEANER-Gen1.jpg|mini|XIAOMI VACUUM 1. GEN in EVE]]&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping On=state,valueOn=Cleaning,cmdOn=start,cmdOff=charge&lt;br /&gt;
                      RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1&lt;br /&gt;
                      BatteryLevel=batteryLevel,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW&lt;br /&gt;
                      ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/.*/:NOT_CHARGEABLE&lt;br /&gt;
                      OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/.*/:OCCUPANCY_NOT_DETECTED&lt;br /&gt;
                      FilterLifeLevel=consumables_filter,minValue=0,maxValue=100&lt;br /&gt;
                      FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER&lt;br /&gt;
&lt;br /&gt;
== Roborock S50 (2. Generation des Xiaomi Vacuum Cleaners) ==&lt;br /&gt;
[[Datei:Roborock S50.png|mini]]&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
Das folgende Mapping für den Roborook S50 beinhaltet neben den Characteristics der 1. Genration des Xiaomi Vacuum Cleaners weitere Custom Mappings. Diese werden auch auf dem Bild dargestellt. Falls das einem zu viele Informationen sind, können diese beim Einfügen einfach weggelassen oder in EVE ausgeblendet werden.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping On=state,valueOn=Cleaning,cmdOn=start,cmdOff=charge&lt;br /&gt;
                      RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1&lt;br /&gt;
                      BatteryLevel=batteryPercent,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      StatusLowBattery=batteryState,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW&lt;br /&gt;
                      ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/.*/:NOT_CHARGEABLE&lt;br /&gt;
                      OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/.*/:OCCUPANCY_NOT_DETECTED&lt;br /&gt;
                      2af6d0d0-3691-4f0d-9c9c-c1098295b1cb=consumables_sensors,name=Reinigung+Sensoren,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      fd11b965-052e-430f-b08f-206287d8bc00=consumables_filter,name=Austausch+Filter,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      fe7a8dac-dff3-4a07-8a5e-0d6abbf0df0c=consumables_main_brush,name=Austausch+Hauptbürste,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      4f9b2a22-b764-4fc1-8cd2-99383924394c=consumables_side_brush,name=Austausch+Seitenbürste,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      FilterLifeLevel=consumables_filter,minValue=0,maxValue=100&lt;br /&gt;
                      FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER&lt;br /&gt;
                      4896763a-26f7-400b-9734-2ce6564ceba2=total_clean_time,name=Lebenszeitersparnis,format=FLOAT,minStep=1,unit=h&lt;br /&gt;
                      82af5fd7-50a3-4ab3-81d3-1f7903de612a=total_clean_area,name=Gereinigte+Fläche,format=FLOAT,minStep=1,unit=m²&lt;br /&gt;
                      00d2ef14-b429-4569-8af3-c342d41cf383=total_cleans,name=Reinigungsvorgänge,format=FLOAT,minStep=1&lt;br /&gt;
                      e8d1027e-b068-40d5-9efd-f161b1b52774=device_firmware,name=Firmware,format=STRING&lt;br /&gt;
&lt;br /&gt;
== Xiaomi Fan (ältere Generationen mit Luftfeuchtigkeits- und Temperatursensor und Battery-Readings) ==&lt;br /&gt;
[[Datei:Xiaomi DC Pedestal Fan.png|mini]]&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Ventilator mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
Die ältere Generation enthält Sensoren und somit Readings für Luftfeuchtigkeit, Temperatur und auch Batteriestatus. Diese fehlen bei den neueren Generation dieses Ventilators, siehe Bilder. Da anscheinend jedes Jahr neue Generationen dieses Ventilators herausgekommen sind, ist nicht klar bis zu welcher Generation diese Sensoren enthalten waren.&lt;br /&gt;
&lt;br /&gt;
Mit folgenden Geräten wurde folgendes Mapping erstellt und somit erfolgreich getestet:&lt;br /&gt;
&lt;br /&gt;
 - Xiaomi DC Pedestal Fan (FHEM model fehlt, Default Hostname am Router: zhimi-fan-v3)&lt;br /&gt;
 - Liste bitte ergänzen!&lt;br /&gt;
&lt;br /&gt;
Um möglichst viele Funktionen bereitzustellen, wurden auch Characteristics von anderen DeviceTypes verwendet. Erklärung zu den Characteristics:&lt;br /&gt;
&lt;br /&gt;
 - Die Kindersicherung (LockPhysicalControls) ist in Eve über das kleine Einstellungssymbol zu finden. &lt;br /&gt;
 - Mit AudioFeedback/Audio-Bestätigung werden die Töne des Lüfters ein bzw. ausgeschaltet.&lt;br /&gt;
 - Mit NightVision/Nachtsicht werden die LEDs ein (bright) bzw. ausgeschaltet (off).&lt;br /&gt;
 - Mit Mute/Audio wird der Windmodus von Straight zu Natural geschaltet.&lt;br /&gt;
 - Mit TargetTiltAngle/Neigung kann der Schwenkwinkel justiert werden.&lt;br /&gt;
 - Mit SwingMode/Schwenken kann der Schwenkmodus ein bzw. ausgeschaltet werden.&lt;br /&gt;
 - Der Rest ist selbsterklärend.&lt;br /&gt;
&lt;br /&gt;
homebridgeMapping:&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType Fan&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping&lt;br /&gt;
                      clear&lt;br /&gt;
                      On:power,cmdOn=on,cmdOff=off,valueOn=on,valueOff=off&lt;br /&gt;
                      LockPhysicalControls=child_lock,values=on:CONTROL_LOCK_ENABLED;;off:CONTROL_LOCK_DISABLED,cmds=CONTROL_LOCK_ENABLED:child_lock+on;CONTROL_LOCK_DISABLED:child_lock+off&lt;br /&gt;
                      RotationSpeed=level,minValue=0,maxValue=100,cmd=level,delay=1&lt;br /&gt;
                      TargetTiltAngle=angle,minValue=30,maxValue=120,minStep=30,cmd=angle&lt;br /&gt;
                      SwingMode=angle_enable,values=on:SWING_ENABLED;;off:SWING_DISABLED,cmdOn=angle_enable+on,cmdOff=angle_enable+off&lt;br /&gt;
                      CurrentRelativeHumidity=humidity&lt;br /&gt;
                      CurrentTemperature=temperature&lt;br /&gt;
                      BatteryLevel=batteryPercent,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      StatusLowBattery=batteryState,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW&lt;br /&gt;
                      ChargingState=charging,values=complete:NOT_CHARGING;;progress:CHARGING;;/.*/:NOT_CHARGEABLE&lt;br /&gt;
                      AudioFeedback:buzzer,cmdOn=buzzer+on,cmdOff=buzzer+off,valueOn=on,valueOff=off&lt;br /&gt;
                      NightVision:led,cmdOn=led+off,cmdOff=led+bright,valueOn=off,valueOff=bright&lt;br /&gt;
                      Mute:mode,cmdOn=mode+straight,cmdOff=mode+natural,valueOn=straight,valueOff=natural&lt;br /&gt;
                      CurrentFanState:power,values=on:BLOWING_AIR;;off:INACTIVE;;/.*/:IDLE&lt;br /&gt;
&lt;br /&gt;
== Xiaomi Fan (neuere Generationen ohne Luftfeuchtigkeits- und Temperatursensor und Battery-Readings) ==&lt;br /&gt;
[[Datei:Xiaomi Standing Fan 2 bzw. 2S.png|mini]]&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Ventilator mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
Den neueren Generationen dieses Ventilators fehlen Sensoren und somit Readings für Luftfeuchtigkeit, Temperatur und auch Batteriestatus. Diese sind bei der älteren Generation dieses Ventilators enthalten, siehe vorangegangenes Beispiel.&lt;br /&gt;
&lt;br /&gt;
Dieses Mapping wurde mit dem &amp;quot;2S&amp;quot; erstellt. Es sollte aber mindestens auch mit einem &amp;quot;Xiaomi Standing Fan 2&amp;quot; (ohne Akku) funktionieren, da auch der &amp;quot;Xiaomi Standing Fan 2S&amp;quot; (mit Akku) kein Reading für die Batterie bereitstellt. Ansonsten gibt es wohl auch noch Generationen zwischen dem &amp;quot;Xiaomi DC Pedestal Fan&amp;quot; und den &amp;quot;Xiaomi Standing Fan 2/2S&amp;quot;. Es ist davon auszugehen, dass dieses Beispiel genauso auch bei diesen Modellen funktioniert.&lt;br /&gt;
&lt;br /&gt;
Mit folgenden Geräten wurde folgendes Mapping erstellt und somit erfolgreich getestet:&lt;br /&gt;
&lt;br /&gt;
 - 2019 Xiaomi Standing Fan 2S (FHEM model bzw. Default Hostname am Router: zhimi-fan-za4)&lt;br /&gt;
 - 2018 Xiaomi ZhiMiDCVariableFrequencyFan ZRFFS01ZM (FHEM model bzw. Default Hostname am Router: zhimi-fan-za1)&lt;br /&gt;
 - Liste bitte ergänzen!&lt;br /&gt;
&lt;br /&gt;
Um möglichst viele Funktionen bereitzustellen, wurden auch Characteristics von anderen DeviceTypes verwendet. Erklärung zu den Characteristics:&lt;br /&gt;
&lt;br /&gt;
 - Die Kindersicherung (LockPhysicalControls) ist in Eve über das kleine Einstellungssymbol zu finden. &lt;br /&gt;
 - Mit AudioFeedback/Audio-Bestätigung werden die Töne des Lüfters ein bzw. ausgeschaltet.&lt;br /&gt;
 - Mit NightVision/Nachtsicht werden die LEDs ein (bright) bzw. ausgeschaltet (off).&lt;br /&gt;
 - Mit Mute/Audio wird der Windmodus von Straight zu Natural geschaltet.&lt;br /&gt;
 - Mit TargetTiltAngle/Neigung kann der Schwenkwinkel justiert werden.&lt;br /&gt;
 - Mit SwingMode/Schwenken kann der Schwenkmodus ein bzw. ausgeschaltet werden.&lt;br /&gt;
 - Der Rest ist selbsterklärend.&lt;br /&gt;
&lt;br /&gt;
homebridgeMapping:&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType Fan&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping &lt;br /&gt;
                      clear&lt;br /&gt;
                      On:power,cmdOn=on,cmdOff=off,valueOn=on,valueOff=off&lt;br /&gt;
                      LockPhysicalControls=child_lock,values=on:CONTROL_LOCK_ENABLED;;off:CONTROL_LOCK_DISABLED,cmds=CONTROL_LOCK_ENABLED:child_lock+on;CONTROL_LOCK_DISABLED:child_lock+off&lt;br /&gt;
                      RotationSpeed=level,minValue=0,maxValue=100,cmd=level,delay=1&lt;br /&gt;
                      TargetTiltAngle=angle,minValue=30,maxValue=120,minStep=30,cmd=angle&lt;br /&gt;
                      SwingMode=angle_enable,values=on:SWING_ENABLED;;off:SWING_DISABLED,cmdOn=angle_enable+on,cmdOff=angle_enable+off&lt;br /&gt;
                      AudioFeedback:buzzer,cmdOn=buzzer+on,cmdOff=buzzer+off,valueOn=on,valueOff=off&lt;br /&gt;
                      NightVision:led,cmdOn=led+off,cmdOff=led+bright,valueOn=off,valueOff=bright&lt;br /&gt;
                      Mute:mode,cmdOn=mode+straight,cmdOff=mode+natural,valueOn=straight,valueOff=natural&lt;br /&gt;
                      CurrentFanState:power,values=on:BLOWING_AIR;;off:INACTIVE;;/.*/:IDLE&lt;br /&gt;
&lt;br /&gt;
== ZWave Türschloss Vision ZM1701 einbinden ==&lt;br /&gt;
Das ZWave Türschloss ZM1701 von der Firma Vision sendet seinen aktuellen Schließstatus in ein einzelnes Reading wie &amp;quot;lock&amp;quot;, sondern schickt eine ganze Reihe von Informationen über den Zustand in das Reading &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt;. Das Schließen und Öffnen der Türschlosses wird auch nicht mit einem Setzen des &amp;lt;code&amp;gt;state&amp;lt;/code&amp;gt; erreicht, sondern mit dem Setzen von &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt;. Das macht das Einbinden in homebridge nicht trivial, funktioniert aber über folgendes Homebridge-Mapping:&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; genericDeviceType lock&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open&lt;br /&gt;
&lt;br /&gt;
Kurz zur Erklärung: Um ein Schloss über HomeKit steuern zu können braucht es zwei characteristics. LockCurrentState zeigt an, ob das Schloss geöffnet oder geschlossen ist. Und mit LockTargetState wird das Schloss geöffnet oder geschlossen. Damit der aktuelle Status des Schlosses ausgelesen werden kann, muss aus dem FHEM-Reading &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt; die Zeichenfolge &amp;lt;code&amp;gt; secured&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;unsecured&amp;lt;/code&amp;gt; extrahiert werden, daher die beiden regulären Ausdrücke &amp;lt;code&amp;gt;/\ssecured/&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;/unsecured/&amp;lt;/code&amp;gt;. In der characteristic &amp;lt;code&amp;gt;LockTargetState&amp;lt;/code&amp;gt; muss sowohl der aktuelle Status des Schlosses als auch das Kommando angegeben werden, schließlich möchte man ein geschlossenes Schloss nicht nochmal schließen. Daher wird erst aus dem Reading &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt; der aktuelle Status des Schlosses ausgelesen und die damit korrespondierenden Befehle über &amp;lt;code&amp;gt;cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open&amp;lt;/code&amp;gt; generiert.&lt;br /&gt;
&lt;br /&gt;
Wer es in FHEM über ein webCmd einfacher zu bedienen haben möchte, fügt bitte noch die dafür notwendigen Attribute und die leicht geänderten homebridgeMappings wie folgt ein:&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; genericDeviceType lock&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:close;UNSECURED:open&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; /doorLockOperation open:open/doorLockOperation close:close&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; webCmd open:close&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 12191&lt;br /&gt;
 homebridge 0.4.6&lt;br /&gt;
 homebridge-fhem 0.2.48&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Hoppel118</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Homebridge_einrichten&amp;diff=30838</id>
		<title>Homebridge einrichten</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Homebridge_einrichten&amp;diff=30838"/>
		<updated>2019-06-25T15:19:43Z</updated>

		<summary type="html">&lt;p&gt;Hoppel118: Bravia Fernseher und Wetterstation hier entfernt und nach Homebridge_User_Configs verschoben&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieses HOWTO zeigt die Installation und Erstinbetriebnahme von Homebridge. &lt;br /&gt;
&lt;br /&gt;
Damit kann Siri benutzt werden, um FHEM-Devices zu steuern. So können Devices angesprochen werden, die offiziell HomeKit nicht unterstützen (die Vorgehensweise wurde auf einem Intel NUC mit Ubuntu Server 14.04 LTS und auf einem Raspberry Pi mit Raspbian getestet). Der Wiki-Eintrag bezieht sich hauptsächlich auf eine {{Link2Forum|Topic=32652|LinkText=Diskussion im FHEM-Forum}}. Ein Riesendank gilt vor allem {{Link2FU|430|Andre (justme1968)}}.&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration der inzwischen aktuellen zweiten Version des Homekit-Plugins ist in einem neuen {{Link2Forum|Topic= 48558 |LinkText=Thread im FHEM-Forum}} beschrieben. Hinzugekommen ist vor allem die freie Konfigurierbarkeit der Zuordnung zwischen FHEM Device und Homekit Accessory/Service, zwischen FHEM Reading und Homekit Characteristic, das mapping vom FHEM Readingwerten zu Homekit Werten sowie das Mapping von Homekit Werten zu FHEM Set-Kommandos und Werten.&lt;br /&gt;
&lt;br /&gt;
Eine Sammlung funktionsfähiger Homebridge FHEM Konfigurationen kann hier gefunden werden: [[Homebridge User Configs]]. Die Sammlung befindet sich noch im Aufbau.&lt;br /&gt;
&lt;br /&gt;
= Vorbereitung der Umgebung =&lt;br /&gt;
&lt;br /&gt;
== NodeJS installieren ==&lt;br /&gt;
&#039;&#039;Die nachfolgenden Befehle sind alle mit &amp;quot;sudo&amp;quot; prefixed. Wenn du unter &amp;quot;root&amp;quot; arbeitest oder deine Distribution einen anderen Mechanismus verwendet, so kannst du dies natürlich weglassen.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Zunächst wird das Betriebssystem (in diesem Falle Debian oder Ubuntu) auf den aktuellen Stand gebracht:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get upgrade&lt;br /&gt;
sudo apt-get install build-essential libssl-dev&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun muss NodeJS installiert werden. Leider ist die Version im Debian Repository deutlich zu alt, daher wird mit den folgenden Befehlen das Node Repository hinzugefügt und NodeJS (in der LTS Version) entsprechend installiert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NodeJS V4&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -&lt;br /&gt;
sudo apt-get install -y nodejs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Bei Installation von NodeJS auf einem &amp;quot;alten&amp;quot; RasPi (B) bitte die besonderen Hinweise in {{Link2Forum|Topic=32652|Message=419325|LinkText=diesem Forenbeitrag}} beachten.}}&lt;br /&gt;
&#039;&#039;&#039;NodeJS V5&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%&amp;quot;&amp;gt;&lt;br /&gt;
curl -sL https://deb.nodesource.com/setup_5.x | sudo -E bash -&lt;br /&gt;
sudo apt-get install -y nodejs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NodeJS V6&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%&amp;quot;&amp;gt;&lt;br /&gt;
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -&lt;br /&gt;
sudo apt-get install -y nodejs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NodeJS V11&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%&amp;quot;&amp;gt;&lt;br /&gt;
curl -sL https://deb.nodesource.com/setup_11.x | sudo -E bash -&lt;br /&gt;
sudo apt-get install -y nodejs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei Ubunutu ist es noch nötig apt-get wie folgt auszuführen.&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 -y nodejs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist NodeJS installiert.&lt;br /&gt;
&lt;br /&gt;
== Python, g++, MDNS 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 apt-get install python g++ libavahi-compat-libdnssd-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun sind alle Voraussetzungen geschaffen.&lt;br /&gt;
&lt;br /&gt;
= Installation von Homebridge &amp;amp; notwendiger Shims =&lt;br /&gt;
Im nachfolgenden Absatz wird die Installation von Homebridge sowie des notwendigen Plugins (Shim) für FHEM erläutert. &lt;br /&gt;
Eventuell muss vor die Befehle ein&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&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
vorangestellt werden.&lt;br /&gt;
== Homebridge installieren ==&lt;br /&gt;
Die aktuelle Homebridge version wird 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;
npm install -g --unsafe-perm homebridge&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
installiert, was eine Weile dauert. Anschließend wird der FHEM platform shim mit:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:60%;&amp;quot;&amp;gt;&lt;br /&gt;
npm install -g homebridge-fhem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
installiert.&lt;br /&gt;
&lt;br /&gt;
=== Fehler während der Installation ===&lt;br /&gt;
Bei folgendem Fehler ist das Abrufen von Github nicht möglich.&lt;br /&gt;
&amp;lt;pre&amp;gt;npm ERR! git clone --template=/home/hs-server-admin/.npm/_git-remotes/_templates --mirror &lt;br /&gt;
git://github.com/KhaosT/ed25519.git /home/hs-server-admin/.npm/_git-remotes/git-github-com-KhaosT-ed25519-git-d8bdee1d: &lt;br /&gt;
github.com[0: 192.30.252.128]: errno=Die Wartezeit für die Verbindung ist abgelaufen&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fehler könnte hier durch eine aktive Firewall verursacht werden.&lt;br /&gt;
&lt;br /&gt;
Kommt eine DNS Fehlermeldung fehlt meistens der AVAHI-DAEMON, zu installieren via&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 avahi-daemon&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn npm beim Kompilieren von mdns mit der Meldung abbricht, dass &amp;quot;dns_sd.h&amp;quot; nicht gefunden wird, fehlt das Paket libavahi-compat-libdnssd-dev, zu installieren via&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 libavahi-compat-libdnssd-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Homebridge aktualisieren ==&lt;br /&gt;
Prüfen, ob es Updates gibt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
npm -g outdated&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die aktuelle Homebridge version wird 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;
npm -g update homebridge&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
installiert, was eine Weile dauert. Anschließend wird der FHEM platform shim mit:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:60%;&amp;quot;&amp;gt;&lt;br /&gt;
npm -g update homebridge-fhem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
installiert.&lt;br /&gt;
&lt;br /&gt;
Sollte dies nicht funktionieren, kann mit&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:60%;&amp;quot;&amp;gt;&lt;br /&gt;
npm -g install homebridge&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
bzw. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:60%;&amp;quot;&amp;gt;&lt;br /&gt;
npm -g install homebridge-fhem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
das Update installiert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um eine spezielle Version zu installieren, können die Installationsbefehle, von oben, wie folgt angepasst werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:60%;&amp;quot;&amp;gt;&lt;br /&gt;
npm -g install homebridge-fhem@0.4.5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Homebridge konfigurieren =&lt;br /&gt;
&#039;&#039;Wichtig: Für die weiteren Schritte sollte man nicht root verwenden, sondern beispielsweise einen dedizierten Nutzer für homebridge oder der Einfachheit halber den Nutzer, unter dem auch FHEM läuft (meist &amp;quot;fhem&amp;quot;).&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einstellungen für homebridge ==&lt;br /&gt;
Zunächst wird das Verzeichnis für die Konfigurationsdatei erstellt und in dieses gewechselt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p ~/.homebridge&lt;br /&gt;
cd ~/.homebridge/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun muss darin noch die config.json erstellt bzw. angepasst werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
nano ~/.homebridge/config.json&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweise zur Konfiguration:&lt;br /&gt;
* &amp;quot;&#039;&#039;bridge&#039;&#039;&amp;quot;:&lt;br /&gt;
** &amp;quot;&#039;&#039;username&#039;&#039;&amp;quot;: Sollte so belassen werden. Sollte später auf dem iOS Device keine Homebridge gefunden werden, so kann man hier beispielsweise den String auf 31 statt 30 enden lassen um so eine neue Homebridge vorzutäuschen.&lt;br /&gt;
** &amp;quot;&#039;&#039;port&#039;&#039;&amp;quot;: Sollte so belassen werden&lt;br /&gt;
** &amp;quot;&#039;&#039;pin&#039;&#039;&amp;quot;: Der PIN kann beliebig in dem Format xxx-xx-xxx angepasst werden. Dieser muss nur einmal bei der Einrichtung in iOS eingegeben werden.&lt;br /&gt;
* &amp;quot;&#039;&#039;platforms&#039;&#039;&amp;quot;: &lt;br /&gt;
** &amp;quot;&#039;&#039;platform&#039;&#039;&amp;quot;: Hier muss &amp;quot;FHEM&amp;quot; beibehalten werden.&lt;br /&gt;
** &amp;quot;&#039;&#039;server&#039;&#039;&amp;quot;: Hier muss die IP des FHEM-Servers eingetragen werden. Dabei muss Homebridge nicht auf dem selben Server laufen wie FHEM, kann aber. Wenn es auf dem gleichen Rechner läuft, dann bietet es sich an, die IP 127.0.0.1 zu verwenden.&lt;br /&gt;
** &amp;quot;&#039;&#039;port&#039;&#039;&amp;quot;: Hier muss der Port des gewählten FHEMWEBs eingetragen werden (muss nicht das &amp;quot;normale&amp;quot; sein, kann eine extra Instanz sein)&lt;br /&gt;
** &amp;quot;&#039;&#039;auth&#039;&#039;&amp;quot;: Ist FHEM nicht mit Nutzername/Password abgesichert, so kann man diese Zeile einfach entfernen.&lt;br /&gt;
** &amp;quot;&#039;&#039;filter&#039;&#039;&amp;quot;: Damit nicht alle Devices von Homebridge berücksichtigt werden, bietet es sich an, die Devices zu filtern. In diesem Beispiel wurden alle Devices, die über Siri steuerbar sein sollen, zusätzlich in den Raum Homekit konfiguriert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;bridge&amp;quot;: {&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;Homebridge&amp;quot;,&lt;br /&gt;
        &amp;quot;username&amp;quot;: &amp;quot;CC:22:3D:E3:CE:30&amp;quot;,&lt;br /&gt;
        &amp;quot;port&amp;quot;: 51826,&lt;br /&gt;
        &amp;quot;pin&amp;quot;: &amp;quot;031-45-154&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;platforms&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;platform&amp;quot;: &amp;quot;FHEM&amp;quot;,&lt;br /&gt;
            &amp;quot;name&amp;quot;: &amp;quot;FHEM&amp;quot;,&lt;br /&gt;
            &amp;quot;server&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
            &amp;quot;port&amp;quot;: &amp;quot;8083&amp;quot;,&lt;br /&gt;
            &amp;quot;auth&amp;quot;: {&amp;quot;user&amp;quot;: &amp;quot;FhemUser&amp;quot;, &amp;quot;pass&amp;quot;: &amp;quot;XXX&amp;quot;},&lt;br /&gt;
            &amp;quot;filter&amp;quot;: &amp;quot;room=Homekit&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;accessories&amp;quot;: []&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn für FHEMWEB kein user/password vergeben ist muss die &amp;quot;auth&amp;quot; Zeile weggelassen werden.&lt;br /&gt;
Wird FHEM mit SSL abgesichert, so muss zusätzlich in der Sektion &amp;quot;platforms&amp;quot; noch diese Zeile (nach &amp;quot;port&amp;quot;) eingefügt werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;quot;ssl&amp;quot;: true,&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wenn man SSL ohne user/password benutzt, muss man &amp;quot;auth&amp;quot; Zeile einfugen, wobei die Werte weggelassen werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;quot;auth&amp;quot;: {&amp;quot;user&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;pass&amp;quot;: &amp;quot;&amp;quot;},&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Natürlich kann man auch nach beliebigen anderen Kriterien filtern. z.b. nach Device TYPE, nach subtype Attribut, ... Es können mehrere FHEM platforms Abschnitte mit eigenem Filter im config file stehen (dabei das Komma zwischen den einzelnen Abschnitten nicht vergessen!) .  Auch Geräte auf die mehr als ein Filterausdruck matched werden dabei nur einmal hinzugefügt.&lt;br /&gt;
&lt;br /&gt;
= FHEM konfigurieren =&lt;br /&gt;
Es empfiehlt sich ein siri Gerät in FHEM anzulegen.&lt;br /&gt;
 define siri siri&lt;br /&gt;
&lt;br /&gt;
Die benötigten Attribute werden inzwischen beim ersten Start von homebridge-fhem automatisch auf FHEM Seite eingetragen.&lt;br /&gt;
&lt;br /&gt;
Mehr zu den inzwischen verfügbaren Konfigurationsmöglichkeiten findet sich auf den github und npmjs Seiten des Plugins und im ersten Beitrag des zugehörigen Thread im {{Link2Forum|Topic= 48558 |LinkText=Diskussion im FHEM-Forum}}&lt;br /&gt;
&lt;br /&gt;
= Start von Homebridge =&lt;br /&gt;
&lt;br /&gt;
== Hinweis ==&lt;br /&gt;
Nach allen Änderungen die in FHEM gemacht werden, welche Homebridge betreffen, muss Homebridge neu gestartet werden. Wie der Neustart erfolgen muss, ist abhängig davon, wie man Homebridge gestartet hat. Bitte den entsprechenden Methoden entnehmen.&lt;br /&gt;
&lt;br /&gt;
== Einmaliger Manueller Start ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
homebridge&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Homebridge sollte nun laufen. Hier kann man die Kommunikation nachverfolgen. Abbrechen kann das ganze mit CTRL+c (es sind dann auch keine Befehle mehr mit Siri möglich). Damit Siri auch Befehle ohne ständig offenes Terminal bearbeiten kann, bitte nächsten Punkt beachten.&lt;br /&gt;
&lt;br /&gt;
=== Fehler während des Manuellen Starts ===&lt;br /&gt;
Kommt ein Fehler der ähnlich aussieht wie folgender, sollte zuerst die Nodesversion geprüft werden.&lt;br /&gt;
Die Nodes version kann durch ein System Update auf eine niedrigere Version wie benötigt gedowngraded werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width=50%&amp;quot;&amp;gt;&lt;br /&gt;
Error: Module version mismatch. Expected 47, got 46.&lt;br /&gt;
    at Error (native)&lt;br /&gt;
    at Object.Module._extensions..node (module.js:450:18)&lt;br /&gt;
    at Module.load (module.js:356:32)&lt;br /&gt;
    at Function.Module._load (module.js:313:12)&lt;br /&gt;
    at Module.require (module.js:366:17)&lt;br /&gt;
    at require (module.js:385:17)&lt;br /&gt;
    at Object.&amp;lt;anonymous&amp;gt; (/usr/lib/node_modules/homebridge/node_modules/mdns/lib/dns_sd.js:24:20)&lt;br /&gt;
    at Module._compile (module.js:425:26)&lt;br /&gt;
    at Object.Module._extensions..js (module.js:432:10)&lt;br /&gt;
    at Module.load (module.js:356:32)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Geprüft werden kann die Nodes Version mit:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width=50%&amp;quot;&amp;gt;node -v zeigt mir: v0.10.28, nodejs -v: v5.11.1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Hier ist die Version v0.10.28 wobei v0.12 Mindestvorraussetzung ist.&lt;br /&gt;
Die Installation der richtigen Nodes Version kann oben am Anhang des Wiki Artikels entnommen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Homebridge automatisch starten ==&lt;br /&gt;
Es gibt verschiedene Methoden, Homebridge automatisch zu starten.&lt;br /&gt;
&lt;br /&gt;
=== Steuerung via FHEM ===&lt;br /&gt;
Auf Basis der unten stehenden &#039;&#039;Alternativen Methode&#039;&#039; wurde eine Version entwickelt, mit der man auch den Status einsehen und den Restart des Dienstes aus FHEM heraus erledigen kann. Diese Version ist auf der Seite [[Homebridge Start und Status in FHEM]] im Detail beschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Alternative Methode: Init-Skript ===&lt;br /&gt;
Dies startet homebridge als einen Service.&lt;br /&gt;
&lt;br /&gt;
==== Service anlegen ====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sudo nano /etc/init.d/homebridge&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Code einfügen (startet den Homebridge Server als Benutzer &amp;quot;pi&amp;quot; und nimmt an, dass sich .homebridge/config.json in seinem Homeverzeichnis unter /home/pi/ befindet):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides: homebridge&lt;br /&gt;
# Required-Start: $network $remote_fs $syslog&lt;br /&gt;
# Required-Stop: $remote_fs $syslog&lt;br /&gt;
# Default-Start: 2 3 4 5&lt;br /&gt;
# Default-Stop: 0 1 6&lt;br /&gt;
# Short-Description: Start daemon at boot time for homebridge&lt;br /&gt;
# Description: Enable service provided by daemon.&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
export PATH=$PATH:/usr/local/bin&lt;br /&gt;
export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules&lt;br /&gt;
PID=`pidof homebridge`&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
start)&lt;br /&gt;
if ps -p $PID &amp;gt; /dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
        echo &amp;quot;Homebridge is already running&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
        su - pi -c &amp;quot;homebridge &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&amp;quot;&lt;br /&gt;
        echo &amp;quot;Homebridge starting&amp;quot;&lt;br /&gt;
        $0 status&lt;br /&gt;
fi&lt;br /&gt;
;;&lt;br /&gt;
stop)&lt;br /&gt;
if ! ps -p $PID &amp;gt; /dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
        echo &amp;quot;Homebridge is not running&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
        kill $PID&lt;br /&gt;
        echo &amp;quot;Homebridge closed&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
;;&lt;br /&gt;
restart)&lt;br /&gt;
if ! ps -p $PID &amp;gt; /dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
        $0 start&lt;br /&gt;
else&lt;br /&gt;
        $0 stop&lt;br /&gt;
        $0 start&lt;br /&gt;
fi&lt;br /&gt;
;;&lt;br /&gt;
status)&lt;br /&gt;
if ps -p $PID &amp;gt; /dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
        echo &amp;quot;Homebridge is running PID $PID&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
        echo &amp;quot;Homebridge is not running&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
;;&lt;br /&gt;
*)&lt;br /&gt;
echo &amp;quot;Usage: $0 {start|stop|status|restart}&amp;quot;&lt;br /&gt;
exit 1&lt;br /&gt;
;;&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Autostart aktivieren ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sudo chmod 755 /etc/init.d/homebridge&lt;br /&gt;
&lt;br /&gt;
sudo update-rc.d homebridge defaults&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun kann man mit &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sudo service homebridge start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sudo /etc/init.d/homebridge start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
den Dienst starten&lt;br /&gt;
&lt;br /&gt;
=== Alternative Methode: systemd ===&lt;br /&gt;
&lt;br /&gt;
Während das Init-Skript grundsätzlich auch mit systemd funktioniert, kann man natürlich für Homebridge auch ein systemd-Skript anlegen. Wie das geht, ist im [https://github.com/nfarina/homebridge/wiki/Running-HomeBridge-on-a-Raspberry-Pi#running-homebridge-on-bootup-systemd Wiki zu Homebridge] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== FHEM Device Einstellungen ==&lt;br /&gt;
Damit die zu schaltenden Geräte überhaupt in der Homebridge aufgenommen werden, muss man sie im Raum Homekit hinzufügen.&lt;br /&gt;
&lt;br /&gt;
Um HM-CC-RT-DN Thermostate steuern zu können, muss wie oben beschrieben folgendes attribute gesetzt werden (hier als Beispiel das Device &amp;quot;Heizung&amp;quot;):&lt;br /&gt;
# attr Heizung subtype thermostat&lt;br /&gt;
Für einen Dummy muss man den genericDeviceType setzen, also beispielsweise:&lt;br /&gt;
# attr Dummy genericDeviceType switch&lt;br /&gt;
# attr Dummy setList on off&lt;br /&gt;
&lt;br /&gt;
Wie bereits vorher angemerkt: fügt man ein Device hinzu oder führt eine Änderung an einem Device durch, so sollte homebridge neu gestartet werden.&lt;br /&gt;
&lt;br /&gt;
= HomeKit in iOS =&lt;br /&gt;
&lt;br /&gt;
== Einrichtung ==&lt;br /&gt;
Um FHEM über Homebridge in iOS nutzen zu können, muss HomeKit eingerichtet werden. &lt;br /&gt;
&lt;br /&gt;
Es gibt verschiedene Apps. Im Folgenden wird die App EVE von Elgato empfohlen, die aus dem App-Store geladen werden muss.&lt;br /&gt;
In der App auf:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
Gerät hinzufügen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Es sollte ein Gerät mit der Bezeichnung &amp;quot;Homebridge&amp;quot; zur Auswahl erscheinen. Zur Ersteinrichtung auf PIN manuell eingeben gehen und (falls in der config.json nicht geändert):&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
031-45-154&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
eingeben.&lt;br /&gt;
&lt;br /&gt;
Im Anschluss können die Devices nach Belieben verschiedenen Räumen zugeteilt werden, sowie Szenen und Bereiche erstellt werden.&lt;br /&gt;
&lt;br /&gt;
== Schalten mit Siri ==&lt;br /&gt;
&#039;&#039;&#039;HolyMoly&#039;&#039;&#039; aus dem FHEM-Forum hat ein paar Beispiele gegeben, wie man Siri dazu bringt Devices zu schalten:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;Schalte alle Lampen im Obergeschoss ein.&amp;quot;&lt;br /&gt;
&amp;quot;Schalte Chloes Licht aus.&amp;quot;&lt;br /&gt;
&amp;quot;Dimme das Licht in der Küche.&amp;quot;&lt;br /&gt;
&amp;quot;Dimme das Licht im Esszimmer auf 50 %.&amp;quot;&lt;br /&gt;
&amp;quot;Stelle das Licht in der Küche am hellsten ein.&amp;quot;&lt;br /&gt;
&amp;quot;Stelle die Temperatur im Tahoe-Haus auf 22 °C ein.&amp;quot;&lt;br /&gt;
&amp;quot;Stelle das Thermostat im Erdgeschoss auf 21 °C ein.&lt;br /&gt;
&amp;quot;Schalte den Drucker im Büro ein.&amp;quot;&lt;br /&gt;
&amp;quot;Siri, bereite alles für eine Party vor.&amp;quot;&lt;br /&gt;
&amp;quot;Bereite das Ambiente fürs Abendessen vor.&amp;quot;&lt;br /&gt;
&amp;quot;Aktiviere den Nachtruhemodus.&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mittlerweile kann Siri auch noch die Lichtfarbe von LEDs ändern.&lt;br /&gt;
&lt;br /&gt;
= Hinweise =&lt;br /&gt;
&lt;br /&gt;
== Unterstützte Geräte ==&lt;br /&gt;
Das FHEM Plugin von {{Link2FU|430|Andre (justme1968)}} unterstützt automatisch mindestens die folgenden Geräte:&lt;br /&gt;
&lt;br /&gt;
    switches (devices with set on and set off commands)&lt;br /&gt;
    lights (devices with set on and set off commands)&lt;br /&gt;
    HomeMatic, FS20 and ZWave dimmers (devices with set on, set off and set dim or set pct commands)&lt;br /&gt;
    HUE, WifiLight, MilightDevice, SWAP_0000002200000003 (hue, sat, bri, rgb)&lt;br /&gt;
    homematic, max and pid20 thermostats&lt;br /&gt;
    homematic, DUOFERN and FS20/IT(?) blinds&lt;br /&gt;
    homematic, MAX and FHTTK contact sensors (door, window)&lt;br /&gt;
    HM-SEC-WIN, HM-SEC-KEY&lt;br /&gt;
    presence, ROOMMATE&lt;br /&gt;
    SONOS (power, volume)&lt;br /&gt;
    harmony scenes&lt;br /&gt;
    temperaturecw and humidity sensors&lt;br /&gt;
    CO20 air quality sensor&lt;br /&gt;
    probably some more ...&lt;br /&gt;
&lt;br /&gt;
Über eine entsprechende Konfiguration lässt sich darüber hinaus jedes mit FHEM steuerbare Gerät auf die unterstützten Homekit-Typen abbilden.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Liste und eine Beschreibung der Konfigurationsmöglichkeiten findet sich [https://www.npmjs.com/package/homebridge-fhem auf den npmjs seiten] bzw. [https://github.com/justme-1968/homebridge-fhem auf github].&lt;br /&gt;
&lt;br /&gt;
Mehr zum homebridgeMapping findet sich hier: [[Alexa_und_Mappings#homebridgeMapping]]&lt;br /&gt;
&lt;br /&gt;
Mehr zu den unterstützen Services und Characteristics findet sich hier: [https://github.com/KhaosT/HAP-NodeJS/blob/master/lib/gen/HomeKitTypes.js]&lt;br /&gt;
&lt;br /&gt;
Über eine &#039;&#039;&#039;history&#039;&#039;&#039; Characteristic lässt sich für bestimmte Service-Typen eine Eve-Kompatible history aktivieren:&lt;br /&gt;
  ... history:size=1024 ...&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
&lt;br /&gt;
Gesammelte Beispiele funktionierender HomebridgeMappings sind hier zu finden: [[Homebridge_User_Configs]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zusätzliche Plugins ==&lt;br /&gt;
Für manche der über FHEM steuerbaren Geräte wie z.b. MiLight, Harmony Hub, Philips Hue, Sonos,... gibt es eigene homekit plugins. Wenn immer möglich, empfiehlt es sich aber diese &#039;&#039;&#039;nicht&#039;&#039;&#039; zu verwenden, sondern die Steuerung über die FHEM-Integration zu realisieren, da&lt;br /&gt;
* diese in der Regel sehr viel mächtiger und frei konfigurierbar ist&lt;br /&gt;
* es FHEM erlaubt, als zentrale Instanz den Überblick über den aktuellen Gesamtzustand zu haben (wichtig bei Geräten, die gepollt werden) &lt;br /&gt;
* die Ressourcen auf den angesteuerten Geräten schont, da Werte optimal gecached werden und nur eine einzige Verbindung aufgebaut wird&lt;br /&gt;
&lt;br /&gt;
== Hinweis für alte homebridge Versionen ==&lt;br /&gt;
UPDATE: Homebridge funktioniert mit einer kleinen Einschränkung nun auch mit node 4.0.0. Laut&lt;br /&gt;
[https://github.com/cflurin/homebridge-shims/wiki/Minimalist-Homebridge-on-a-Raspberry-Pi Homebridge on a Raspberry Pi] müssen die folgenden Abhängigkeiten (Dependencies) aus der &#039;&#039;&#039;package.json&#039;&#039;&#039; entfernt werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;harmonyhubjs-client&amp;quot;: &amp;quot;^1.1.4&amp;quot;,&lt;br /&gt;
&amp;quot;harmonyhubjs-discover&amp;quot;: &amp;quot;git+https://github.com/swissmanu/harmonyhubjs-discover.git&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hinweis zur Geschwindigkeitsoptimierung auf einem Raspberry PI ==&lt;br /&gt;
Damit es auf einem Raspberry schneller läuft, wird darüber hinaus empfohlen, auch diverse Abhängigkeiten aus der &#039;&#039;&#039;package.json&#039;&#039;&#039; zu entfernen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;ad2usb&amp;quot;: &amp;quot;git+https://github.com/alistairg/node-ad2usb.git#local&amp;quot;,&lt;br /&gt;
&amp;quot;carwingsjs&amp;quot;: &amp;quot;0.0.x&amp;quot;,&lt;br /&gt;
&amp;quot;chokidar&amp;quot;: &amp;quot;^1.0.5&amp;quot;,&lt;br /&gt;
&amp;quot;eibd&amp;quot;: &amp;quot;^0.3.1&amp;quot;,&lt;br /&gt;
&amp;quot;elkington&amp;quot;: &amp;quot;kevinohara80/elkington&amp;quot;,&lt;br /&gt;
&amp;quot;harmonyhubjs-client&amp;quot;: &amp;quot;^1.1.4&amp;quot;,&lt;br /&gt;
&amp;quot;harmonyhubjs-discover&amp;quot;: &amp;quot;git+https://github.com/swissmanu/harmonyhubjs-discover.git&amp;quot;,&lt;br /&gt;
&amp;quot;lifx-api&amp;quot;: &amp;quot;^1.0.1&amp;quot;,&lt;br /&gt;
&amp;quot;lifx&amp;quot;: &amp;quot;git+https://github.com/magicmonkey/lifxjs.git&amp;quot;,&lt;br /&gt;
&amp;quot;node-hue-api&amp;quot;: &amp;quot;^1.0.5&amp;quot;,&lt;br /&gt;
&amp;quot;node-icontrol&amp;quot;: &amp;quot;^0.1.4&amp;quot;,&lt;br /&gt;
&amp;quot;node-milight-promise&amp;quot;: &amp;quot;0.0.x&amp;quot;,&lt;br /&gt;
&amp;quot;tough-cookie&amp;quot;: &amp;quot;^2.0.0&amp;quot;,&lt;br /&gt;
&amp;quot;sonos&amp;quot;: &amp;quot;0.8.x&amp;quot;,&lt;br /&gt;
&amp;quot;telldus-live&amp;quot;: &amp;quot;0.2.x&amp;quot;,&lt;br /&gt;
&amp;quot;teslams&amp;quot;: &amp;quot;1.0.1&amp;quot;,&lt;br /&gt;
&amp;quot;unofficial-nest-api&amp;quot;: &amp;quot;git+https://github.com/hachidorii/unofficial_nodejs_nest.git#d8d48edc952b049ff6320ef99afa7b2f04cdee98&amp;quot;,&lt;br /&gt;
&amp;quot;wemo&amp;quot;: &amp;quot;0.2.x&amp;quot;,&lt;br /&gt;
&amp;quot;wink-js&amp;quot;: &amp;quot;0.0.5&amp;quot;,&lt;br /&gt;
&amp;quot;komponist&amp;quot; : &amp;quot;0.1.0&amp;quot;,&lt;br /&gt;
&amp;quot;yamaha-nodejs&amp;quot;: &amp;quot;0.4.x&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daher zunächst ein Backup der Datei anlegen &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo cp package.json package.json.bkp &amp;lt;/pre&amp;gt;&lt;br /&gt;
Am einfachsten geht das Entfernen der Zeilen mit einem Editor, beispielsweise nano oder vi.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo nano package.json&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das config file sollte dann wie folgt aussehen: Achtung vor den letzten zwei &amp;quot;}&amp;quot; am Ende darf kein Komma sein.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;homebridge&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;HomeKit support for the impatient&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.1.1&amp;quot;,&lt;br /&gt;
  &amp;quot;scripts&amp;quot;: {&lt;br /&gt;
    &amp;quot;start&amp;quot;: &amp;quot;DEBUG=* node app.js || true&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;repository&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;git&amp;quot;,&lt;br /&gt;
    &amp;quot;url&amp;quot;: &amp;quot;git://github.com/nfarina/homebridge.git&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;license&amp;quot;: &amp;quot;ISC&amp;quot;,&lt;br /&gt;
  &amp;quot;dependencies&amp;quot;: {&lt;br /&gt;
    &amp;quot;async&amp;quot;: &amp;quot;^1.4.2&amp;quot;,&lt;br /&gt;
    &amp;quot;color&amp;quot;: &amp;quot;0.10.x&amp;quot;,&lt;br /&gt;
    &amp;quot;debug&amp;quot;: &amp;quot;^2.2.0&amp;quot;,&lt;br /&gt;
    &amp;quot;hap-nodejs&amp;quot;: &amp;quot;^0.0.2&amp;quot;,&lt;br /&gt;
    &amp;quot;isy-js&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;mdns&amp;quot;: &amp;quot;^2.2.4&amp;quot;,&lt;br /&gt;
    &amp;quot;netatmo&amp;quot;: &amp;quot;1.3.0&amp;quot;,&lt;br /&gt;
    &amp;quot;node-cache&amp;quot;: &amp;quot;3.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;node-persist&amp;quot;: &amp;quot;0.0.x&amp;quot;,&lt;br /&gt;
    &amp;quot;node-xmpp-client&amp;quot;: &amp;quot;1.0.0-alpha23&amp;quot;,&lt;br /&gt;
    &amp;quot;q&amp;quot;: &amp;quot;1.4.x&amp;quot;,&lt;br /&gt;
    &amp;quot;queue&amp;quot;: &amp;quot;^3.1.0&amp;quot;,&lt;br /&gt;
    &amp;quot;request&amp;quot;: &amp;quot;2.49.x&amp;quot;,&lt;br /&gt;
    &amp;quot;xml2js&amp;quot;: &amp;quot;0.4.x&amp;quot;,&lt;br /&gt;
    &amp;quot;xmldoc&amp;quot;: &amp;quot;0.1.x&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://github.com/nfarina/homebridge Github homebridge]&lt;br /&gt;
* [https://github.com/justme-1968/homebridge-fhem Github homebridge-fhem]&lt;br /&gt;
* [https://www.npmjs.com/package/homebridge NPM homebridge]&lt;br /&gt;
* [https://www.npmjs.com/package/homebridge-fhem NPM homebridge-fhem]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Sprachsteuerung]]&lt;/div&gt;</summary>
		<author><name>Hoppel118</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Homebridge_User_Configs&amp;diff=30837</id>
		<title>Homebridge User Configs</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Homebridge_User_Configs&amp;diff=30837"/>
		<updated>2019-06-25T15:11:06Z</updated>

		<summary type="html">&lt;p&gt;Hoppel118: zwave Türschloss verschoben, Überschrift FeuchteSensor angepasst und Homematic Feuchtigkeitssensor ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Eintrag dient zur Sammlung funktionsfähiger Homebridge Configs.&lt;br /&gt;
&lt;br /&gt;
Bitte immer die FHEM Version und Homebridge Version angegeben.&lt;br /&gt;
&lt;br /&gt;
Sehr gute Hinweise gibt es hier: http://www.meintechblog.de/2015/10/mit-siri-und-fhem-das-gesamte-smart-home-per-stimme-steuern/&lt;br /&gt;
== Mögliche Mappings ==&lt;br /&gt;
Die Möglichen Mappings können hier nachgelesen werden https://github.com/KhaosT/HAP-NodeJS/blob/master/lib/gen/HomeKitTypes.js&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel:&lt;br /&gt;
 Characteristic.Brightness = function() {&lt;br /&gt;
  Characteristic.call(this, &#039;Brightness&#039;, &#039;00000008-0000-1000-8000-0026BB765291&#039;);&lt;br /&gt;
  this.setProps({&lt;br /&gt;
    format: Characteristic.Formats.INT,&lt;br /&gt;
    unit: Characteristic.Units.PERCENTAGE,&lt;br /&gt;
    maxValue: 100,&lt;br /&gt;
    minValue: 0,&lt;br /&gt;
    minStep: 1,&lt;br /&gt;
    perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY]&lt;br /&gt;
  });&lt;br /&gt;
  this.value = this.getDefaultValue();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Das Mapping in diesem Fall, hat den Titel Brightness.&lt;br /&gt;
&lt;br /&gt;
Die Werte können in 1er Schritten zwischen 0 und 100 liegen (max und min Value)&lt;br /&gt;
== Erstellung eines HomebridgeMappings am Beispiel &amp;quot;Feuchtesensor&amp;quot; ==&lt;br /&gt;
Zum Einstieg etwas leicht nachvollziehbares. &lt;br /&gt;
&lt;br /&gt;
Feuchtesensoren haben in der Regel ein &amp;quot;humidity&amp;quot; Reading, im Falle des Opus XT300 Bodenfeuchtesensors auch Temperatur und Batterie Level. Homekit unterstützt einen &amp;quot;HumiditySensor&amp;quot; Service. Dieser ist in homebridge-fhem nicht standardmäßig vorhanden (kann also nicht aus dem dropdown ausgewählt werden, sondern muss über das Befehlsfeld zugewiesen werden):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr meinSensor genericDeviceType HumiditySensor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden die Readings gemappt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr meinSensor homebridgeMapping clear CurrentRelativeHumidity=humidity StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW CurrentTemperature=temperature&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;clear&amp;lt;/code&amp;gt;löscht default mappings - das wird in der Regel nicht notwendig sein, schadet aber nicht&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;CurrentRelativeHumidity&amp;lt;/code&amp;gt; ist die relevante Homekit Characteristic - wird mit dem entsprechenden Reading des Sensors gemappt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;StatusLowBattery&amp;lt;/code&amp;gt; erwartet entweder BATTERY_LEVEL_NORMAL oder _LOW. Mein Sensor liefert ok zurück, wenn alles gut ist, also wird &amp;quot;ok&amp;quot; auf _NORMAL gemappt, alles andere auf _LOW. &lt;br /&gt;
&lt;br /&gt;
Der Opus XT300 Bodenfeuchtesensors liefert auch noch die Temperatur - der HumiditySensor Service sieht das eigentlich nicht vor, daher wird die Temperatur auch nicht in der Apple &amp;quot;Home&amp;quot; App angezeigt. Bei Eve wird die Temperatur hingegen berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
== BRAVIA Fernseher ==&lt;br /&gt;
Ein Beispiel homebridgeMapping für Sony Bravia Fernseher (iOS 12.2 beta!) und genericDeviceType Television:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
clear&lt;br /&gt;
ConfiguredName:model&lt;br /&gt;
Active:state,values=off:INACTIVE;on:ACTIVE,cmds=ACTIVE:on;INACTIVE:off&lt;br /&gt;
RemoteKey:key,cmds=REWIND:remoteControl+Rewind;FAST_FORWARD:remoteControl+FastForward;NEXT_TRACK:remoteControl+NEXT_TRACK;PREVIOUS_TRACK:remoteControl+PREVIOUS_TRACK;ARROW_UP:remoteControl+Up;ARROW_DOWN:remoteControl+Down;ARROW_LEFT:remoteControl+Left;ARROW_RIGHT:remoteControl+Right;SELECT:remoteControl+Ok;BACK:remoteControl+RETURN;EXIT:remoteControl+Exit;PLAY_PAUSE:remoteControl+Play;INFORMATION:remoteControl+Info&lt;br /&gt;
SleepDiscoveryMode:default=ALWAYS_DISCOVERABLE&lt;br /&gt;
ClosedCaptions:default=0&lt;br /&gt;
DisplayOrder:default=Test1&lt;br /&gt;
CurrentMediaState:default=0:currentTitle&lt;br /&gt;
TargetMediaState:default=0,cmds=PLAY:remoteControl+play;PAUSE:remoteControl+pause;STOP:remoteControl+stop;&lt;br /&gt;
PictureMode:default=1&lt;br /&gt;
PowerModeSelection:default=1,cmds=0:remoteControl+options&lt;br /&gt;
ActiveIdentifier:input,default=0,values=/tv.dvbt|TV...DVB-T/:1;/HDMI.3/:2,cmds=1:input+TV+/+DVB-T;2:input+HDMI+3/ARC;3:application+Plex&lt;br /&gt;
TelevisionSpeaker#Mute=mute&lt;br /&gt;
 Active:default=ACTIVE&lt;br /&gt;
 VolumeSelector:volume,cmds=INCREMENT:VolumeUp;DECREMENT:VolumeDown&lt;br /&gt;
 VolumeControlType:default=RELATIVE_WITH_CURRENT&lt;br /&gt;
 linkedTo=Television&lt;br /&gt;
InputSource(1)#Identifier:default=1&lt;br /&gt;
 ConfiguredName:default=TV&lt;br /&gt;
 IsConfigured:default=CONFIGURED&lt;br /&gt;
 InputSourceType:default=TUNER&lt;br /&gt;
 CurrentVisibilityState:default=SHOWN&lt;br /&gt;
 linkedTo=Television&lt;br /&gt;
InputSource(2)#Identifier:default=2&lt;br /&gt;
 ConfiguredName:default=APPLE+TV&lt;br /&gt;
 IsConfigured:default=CONFIGURED&lt;br /&gt;
 InputSourceType:default=HDMI&lt;br /&gt;
 CurrentVisibilityState:default=SHOWN&lt;br /&gt;
 linkedTo=Television&lt;br /&gt;
InputSource(3)#Identifier:default=3&lt;br /&gt;
 ConfiguredName:default=PLEX&lt;br /&gt;
 IsConfigured:default=CONFIGURED&lt;br /&gt;
 InputSourceType:default=APPLICATION&lt;br /&gt;
 CurrentVisibilityState:default=SHOWN&lt;br /&gt;
 linkedTo=Television&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
damit lässt sich der Fernseher über Siri/Homekit ein- und ausschalten sowie über das appleTV Control-Center Widget steuern.&lt;br /&gt;
&lt;br /&gt;
== EnOcean STM 250 Tür-/Fensterkontakt ==&lt;br /&gt;
Der STM 250 liefert als Status in FHEM &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;, wenn das Fenster offen und damit der Kontakt &amp;quot;offen&amp;quot; ist. Analog liefert er &amp;lt;code&amp;gt;closed&amp;lt;/code&amp;gt; wenn das Fenster geschlossen und damit auch der Kontakt geschlossen ist. Diese Statusangaben sind sehr intuitiv zu verstehen und zu interpretieren. &lt;br /&gt;
&lt;br /&gt;
Die characteristic &amp;lt;code&amp;gt;ContactSensorState&amp;lt;/code&amp;gt; von HomeKit liefert entweder den Wert &amp;lt;code&amp;gt;CONTACT_DETECTED=0&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;CONTACT_NOT_DETECTED=1&amp;lt;/code&amp;gt; zurück. Wobei &amp;lt;code&amp;gt;CONTACT_DETECTED&amp;lt;/code&amp;gt; bedeutet, dass der Kontakt geschlossen ist. Je nach Darstellung in der HomeKit-fähigen App muss dieses Verhalten bei der Interpretation berücksichtigt werden. Die App Eve von Elgato zum Beispiel liefert für Kontaktsensoren &amp;quot;JA&amp;quot; oder &amp;quot;NEIN&amp;quot; mit der Bedeutung &amp;lt;code&amp;gt;CONTACT_DETECTED=0=JA&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;CONTACT_NOT_DETECTED=1=NEIN&amp;lt;/code&amp;gt; zurück.&lt;br /&gt;
&lt;br /&gt;
Noch ein wichtiger Punkt: Um einen Sensorkontakt sinnvoll einzurichten sollte als zusätzlicher Wert für das Attribut &amp;lt;code&amp;gt;genericdeviceType&amp;lt;/code&amp;gt; der Wert &amp;lt;code&amp;gt;ContactSensor&amp;lt;/code&amp;gt; hinzugefügt werden. Wie das geht ist im Eintrag [[Homebridge_einrichten#FHEM_konfigurieren | Homebridge einrichten]] ausführlicher beschrieben.&lt;br /&gt;
&lt;br /&gt;
Folgende Attribute dann hinzufügen:&lt;br /&gt;
 attr STM250 genericDeviceType ContactSensor&lt;br /&gt;
 attr STM250 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 9893&lt;br /&gt;
 Homebridge 0.2.16&lt;br /&gt;
 homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}&lt;br /&gt;
&lt;br /&gt;
== Modul RESIDENTS für Anwesenheitserkennung und Steuerung der Anwesenheit benutzen ==&lt;br /&gt;
[[Datei:Homebridge_bewohner_zu_szene.jpeg|mini|Schaltzustand eines Bewohners zu einer Szene hinzufügen]]&lt;br /&gt;
Aus den einzelnen Komponenten des Moduls RESIDENTS, homebridge sowie der characteristic &amp;lt;code&amp;gt;On&amp;lt;/code&amp;gt; und der Szenensteuerung lässt sich eine gleichzeitige Steuerung der Anwesenheit und Anwesenheitserkennung basteln.&lt;br /&gt;
&lt;br /&gt;
Dazu müssen folgende Schritte unternommen werden:&lt;br /&gt;
* einem Bewohner aus dem Modul ROOMMATE die Steuerung über homebridgeMapping hinzufügen&lt;br /&gt;
* Szene für &amp;quot;Ich bin zu Hause&amp;quot; und &amp;quot;Ich gehe jetzt&amp;quot; in einer HomeKit-fähigen App wie z.B. Eve einrichten&lt;br /&gt;
&lt;br /&gt;
Man kann einen beliebigen Bewohner aus dem Modul ROOMMATE nehmen und ihn über die characteristic &amp;lt;code&amp;gt;On&amp;lt;/code&amp;gt; in Form eines Schalters sozusagen schaltbar machen. Nur wird das Ein- und Ausschalten des Bewohners über HomeKit in FHEM auf den Status home bzw. absent gemappt. Seit dem 06.02.2016 werden RESIDENTS automatisch als Occupancy Sensor für HomeKit annonciert. Nun noch die Attribute des ROOMMATE wie folgt setzen:&lt;br /&gt;
 attr &amp;lt;ROOMMATE&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;ROOMMATE&amp;gt; homebridgeMapping On=state,valueOn=/home|awoken|asleep|gotosleep/,valueOff=/gone|absent/,cmdOn=home,cmdOff=absent&lt;br /&gt;
&lt;br /&gt;
Natürlich muss der Bewohner noch dem Filter von homebridge hinzugefügt und homebridge neu gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Anschließend geht es in der HomeKit-fähigen App Deiner Wahl weiter. In Eve von Elgato ist von vornherein zum Beispiel vorgesehen, dass man zwei Szenen &amp;quot;Ich bin zuhause&amp;quot; und &amp;quot;Ich verlasse das Haus&amp;quot; hat. Zu diesen Szenen wird eine Aktion hinzugefügt indem der Bewohner, den das ROOMMATE-Modul meldet zur Szene hinzugefügt wird und beim Nachhausekommen &amp;quot;eingeschaltet&amp;quot; wird. Genauso wird mit der Szene &amp;quot;Ich verlasse das Haus&amp;quot; verfahren: Bewohner zur Szene hinzufügen und den Schaltvorgang auf &amp;quot;ausschalten&amp;quot; setzen.&lt;br /&gt;
&lt;br /&gt;
Mit den Sprachbefehlen &amp;quot;Ich bin zuhause&amp;quot; oder &amp;quot;Ich verlasse das Haus&amp;quot; wird die entsprechende Szene eingeschaltet, homebridge schaltet über das &amp;lt;code&amp;gt;homebridgeMapping&amp;lt;/code&amp;gt; Attribut dann den Bewohner auf &amp;quot;home&amp;quot; oder &amp;quot;absent&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 9893&lt;br /&gt;
 Homebridge 0.2.16&lt;br /&gt;
 homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}&lt;br /&gt;
&lt;br /&gt;
Eine noch etwas bessere Schaltmöglichkeit bietet &#039;&#039;&#039;genericDeviceType security&#039;&#039;&#039;.&lt;br /&gt;
Das Mapping für ROOMMATE sieht wie folgt aus:&lt;br /&gt;
 attr TYPE=ROOMMATE genericDeviceType security&lt;br /&gt;
 attr TYPE=ROOMMATE homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;gone:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+gone,delay=1&lt;br /&gt;
für GUEST:&lt;br /&gt;
 attr TYPE=GUEST genericDeviceType security&lt;br /&gt;
 attr TYPE=GUEST homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;none:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+none,delay=1&lt;br /&gt;
&lt;br /&gt;
== Homematic Luftfeuchtigkeits- und Tmeperatursensoren ==&lt;br /&gt;
&lt;br /&gt;
Mit folgenden Geräten wurde folgendes Mapping erstellt und somit erfolgreich getestet:&lt;br /&gt;
&lt;br /&gt;
 - HM-WDS10-TH-O&lt;br /&gt;
 - HM-WDS40-TH-I&lt;br /&gt;
 - HM-WDS40-TH-I-2&lt;br /&gt;
&lt;br /&gt;
Achtung: Hier wird genericDeviceType &amp;quot;TemperatureSensor&amp;quot; verwendet, um eine history in EVE zu erhalten. Mit einem &amp;quot;HumiditySensor&amp;quot; funktionierte dies bei den Tests (Februar 2019) nicht.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;THSensor&amp;gt; genericDeviceType TemperatureSensor&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;THSensor&amp;gt;      CurrentRelativeHumidity=humidity&lt;br /&gt;
                      CurrentTemperature=temperature&lt;br /&gt;
                      StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;/^.*/:BATTERY_LEVEL_LOW&lt;br /&gt;
                      history:size=1024&lt;br /&gt;
&lt;br /&gt;
== Homematic Heizkörperthermostat HM-CC-RT-DN ==&lt;br /&gt;
[[Datei:HM-CC-RT-DN-Eve.PNG|mini|Darstellung des HM-CC-RT-DN in der iOS App Eve]]&lt;br /&gt;
 attr &amp;lt;HMCCRTDN_Channel2_Clima&amp;gt; homebridgeMapping TargetTemperature=desired-temp::desired-temp,minValue=5,maxValue=35,minStep=0.5,nocache=1&lt;br /&gt;
                      CurrentTemperature=BU_Heizung_01_Clima:measured-temp,nocache=1&lt;br /&gt;
                      StatusLowBattery=BU_Heizung_01:battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW&lt;br /&gt;
                      TargetHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:3,cmds=OFF:controlManu+off;;HEAT:controlMode+boost;;AUTO:controlMode+auto;;COOL:controlManu+17.0&lt;br /&gt;
                      CurrentHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:0,valud=OFF&lt;br /&gt;
 attr &amp;lt;HMCCRTDN_Channel2_Clima&amp;gt; siriName Robby&lt;br /&gt;
Dieses Mapping bezieht sich auf ein vorhandenes&lt;br /&gt;
&lt;br /&gt;
== Homematic SmokeDetector HM-SEC-SD und HM-SEC-SD2 ==&lt;br /&gt;
 [[Datei:Homebridge-Homematic-Smokedetector-Gen1.jpg|mini|Homebridge-Homematic-Smokedetector-Gen1 in EVE]]&lt;br /&gt;
Es sind keine Homebridge Mappings für die Rauch Meldung erforderlich.&lt;br /&gt;
&lt;br /&gt;
Allerdings ist ein Mapping für den Batterie Zustand nötig, siehe Unten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;SmokeDetector&amp;gt; genericDeviceType SmokeSensor&lt;br /&gt;
 attr &amp;lt;SmokeDetector&amp;gt; subType smokeDetector&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;SmokeDetector&amp;gt; homebridgeMapping StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW&lt;br /&gt;
&lt;br /&gt;
== Homematic Heizkörperthermostat HM-CC-RT-DN ==&lt;br /&gt;
[[Datei:HM-CC-RT-DN-Eve.PNG|mini|Darstellung des HM-CC-RT-DN in der iOS App Eve]]&lt;br /&gt;
 attr &amp;lt;HMCCRTDN_Channel2_Clima&amp;gt; homebridgeMapping TargetTemperature=desired-temp::desired-temp,minValue=5,maxValue=35,minStep=0.5,nocache=1&lt;br /&gt;
                      CurrentTemperature=BU_Heizung_01_Clima:measured-temp,nocache=1&lt;br /&gt;
                      StatusLowBattery=BU_Heizung_01:battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW&lt;br /&gt;
                      TargetHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:3,cmds=OFF:controlManu+off;;HEAT:controlMode+boost;;AUTO:controlMode+auto;;COOL:controlManu+17.0&lt;br /&gt;
                      CurrentHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:0,valud=OFF&lt;br /&gt;
 attr &amp;lt;HMCCRTDN_Channel2_Clima&amp;gt; siriName Robby&lt;br /&gt;
Dieses Mapping bezieht sich auf ein vorhandenes &#039;&#039;userReading&#039;&#039; mit dem Namen &amp;lt;code&amp;gt;heatingState&amp;lt;/code&amp;gt;, womit Homekit die einzelnen Status nachher unterscheidet.&lt;br /&gt;
 attr &amp;lt;HM-CC-RT-DN_Clima&amp;gt; userReadings heatingState {(ReadingsVal($NAME,&amp;quot;ValvePosition&amp;quot;,0) &amp;gt; 0 || ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;on&amp;quot;) ? &amp;quot;HEAT&amp;quot; : ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;off&amp;quot; ? &amp;quot;OFF&amp;quot; : ReadingsVal($NAME,&amp;quot;controlMode&amp;quot;,&amp;quot;auto&amp;quot;) eq &amp;quot;auto&amp;quot; ? &amp;quot;AUTO&amp;quot; : (ReadingsVal($NAME,&amp;quot;measured-temp&amp;quot;,20) &amp;gt; ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,20)) ? &amp;quot;COOL&amp;quot; : &amp;quot;AUTO&amp;quot;}&lt;br /&gt;
Global auf alle in FHEM angelegten HM-CC-RT-DN, lässt sich mit folgendem Befehl das &#039;&#039;userReading&#039;&#039; anlegen.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,59211.msg505986.html#msg505986 Forumsthread].&lt;br /&gt;
&lt;br /&gt;
 attr TYPE=CUL_HM:FILTER=model=HM-CC-RT-DN:FILTER=chanNo=04 userReadings heatingState {(ReadingsVal($NAME,&amp;quot;ValvePosition&amp;quot;,0) &amp;gt; 0 || ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;on&amp;quot;) ? &amp;quot;HEAT&amp;quot; : ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;off&amp;quot; ? &amp;quot;OFF&amp;quot; : ReadingsVal($NAME,&amp;quot;controlMode&amp;quot;,&amp;quot;auto&amp;quot;) eq &amp;quot;auto&amp;quot; ? &amp;quot;AUTO&amp;quot; : (ReadingsVal($NAME,&amp;quot;measured-temp&amp;quot;,20) &amp;gt; ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,20)) ? &amp;quot;COOL&amp;quot; : &amp;quot;AUTO&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Homematic Wetterstation OC3 HM-WDS100-C6-O-2 ==&lt;br /&gt;
[[Datei: homebridge-wetter.jpg|mini|Wetterstation in EVE]]&lt;br /&gt;
Mit der EVE und den hier: [https://github.com/naofireblade/homebridge-weather-plus/blob/master/util/characteristics.js] beschriebenen Characteristics lässt sich eine lokale Homematic OC3 Wetterstation aus FHEM einbinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
clear&lt;br /&gt;
CurrentTemperature:temperature&lt;br /&gt;
CurrentRelativeHumidity:humidity&lt;br /&gt;
49C8AE5A-A3A5-41AB-BF1F-12D5654F9F41:windSpeed,name=WINDGESCHWINDIGKEIT,format=FLOAT,unit=kmh,maxValue=250,minValue=0,minStep=1&lt;br /&gt;
46f1284c-1912-421b-82f5-eb75008b167e:windDirection,name=WINDRICHTUNG,format=UINT8,unit=ARC_DEGREE,maxValue=360,minValue=0,minStep=1&lt;br /&gt;
StatusLowBattery:battery,values=ok:BATTERY_LEVEL_NORMAL;/^.*/:BATTERY_LEVEL_LOW &lt;br /&gt;
ccc04890-565b-4376-b39a-3113341d9e0f:RegenmengeLast24Hours:state,name=REGEN_24h,format=FLOAT,unit=mm,maxValue=100,minValue=0,minStep=1 &lt;br /&gt;
10c88f40-7ec4-478c-8d5a-bd0c3cce14b7:RegenmengeLast1Hours:state,name=REGEN_1h,format=FLOAT,unit=mm,maxValue=100,minValue=0,minStep=1 &lt;br /&gt;
0000006B-0000-1000-8000-0026BB765291:brightness,name=BRIGHTNESS,format=FLOAT,unit=LUX,maxValue=10000,minValue=0,minStep=.0001 &lt;br /&gt;
cd65a9ab-85ad-494a-b2bd-2f380084134c:isRaining,name=BEDINGUNGKATEGORIE,values=0:0;1:2,format=UINT8,maxValue=3,minValue=0,minStep=1 &lt;br /&gt;
cd65a9ab-85ad-494a-b2bd-2f380084134d:isRaining,name=BEDINGUNG,format=STRING,values=0:-;/.*/:Regen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Roomba über THINKINGCLEANER Modul ==&lt;br /&gt;
 attr &amp;lt;THINKINGCLEANER&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;THINKINGCLEANER&amp;gt; homebridgeMapping clear On=state,valueOn=/^(on|dock)/,cmdOn=on,cmdOff=off,nocache=1 ChargingState=deviceStatus,values=/(_recon|_full|_trickle)$/:CHARGING;/^.*/:NOT_CHARGING&lt;br /&gt;
 attr &amp;lt;THINKINGCLEANER&amp;gt; siriName Robby&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 12680&lt;br /&gt;
 homebridge 0.4.11&lt;br /&gt;
 homebridge-fhem 0.2.66&lt;br /&gt;
&lt;br /&gt;
== Vallox Belüftungsanlage ==&lt;br /&gt;
Die Steuerung der Lüftungsgeschwindigkeit ist nur in Prozent möglich. Die Umrechnung erfolgt im [[Vallox]] Modul.&lt;br /&gt;
Hierzu wurde das Reading &#039;&#039;FanSpeedPct&#039;&#039; hinzugefügt.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;Vallox&amp;gt; genericDeviceType Fan&lt;br /&gt;
 attr &amp;lt;Vallox&amp;gt; homebridgeMapping clear&lt;br /&gt;
                      model=Vallox&lt;br /&gt;
                      On=PowerState,valueOn=1,readOnly=1&lt;br /&gt;
                      RotationSpeed=FanSpeedPct,minValue=1,maxValue=100,cmd=FanSpeedPct,delay=1&lt;br /&gt;
&lt;br /&gt;
== Xiaomi Vacuum Cleaner 1. Generation ==&lt;br /&gt;
[[Datei:XIAOMI_VACUUM_CLEANER-Gen1.jpg|mini|XIAOMI VACUUM 1. GEN in EVE]]&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping On=state,valueOn=Cleaning,cmdOn=start,cmdOff=charge&lt;br /&gt;
                      RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1&lt;br /&gt;
                      BatteryLevel=batteryLevel,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW&lt;br /&gt;
                      ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/.*/:NOT_CHARGEABLE&lt;br /&gt;
                      OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/.*/:OCCUPANCY_NOT_DETECTED&lt;br /&gt;
                      FilterLifeLevel=consumables_filter,minValue=0,maxValue=100&lt;br /&gt;
                      FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER&lt;br /&gt;
&lt;br /&gt;
== Roborock S50 (2. Generation des Xiaomi Vacuum Cleaners) ==&lt;br /&gt;
[[Datei:Roborock S50.png|mini]]&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
Das folgende Mapping für den Roborook S50 beinhaltet neben den Characteristics der 1. Genration des Xiaomi Vacuum Cleaners weitere Custom Mappings. Diese werden auch auf dem Bild dargestellt. Falls das einem zu viele Informationen sind, können diese beim Einfügen einfach weggelassen oder in EVE ausgeblendet werden.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping On=state,valueOn=Cleaning,cmdOn=start,cmdOff=charge&lt;br /&gt;
                      RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1&lt;br /&gt;
                      BatteryLevel=batteryPercent,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      StatusLowBattery=batteryState,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW&lt;br /&gt;
                      ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/.*/:NOT_CHARGEABLE&lt;br /&gt;
                      OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/.*/:OCCUPANCY_NOT_DETECTED&lt;br /&gt;
                      2af6d0d0-3691-4f0d-9c9c-c1098295b1cb=consumables_sensors,name=Reinigung+Sensoren,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      fd11b965-052e-430f-b08f-206287d8bc00=consumables_filter,name=Austausch+Filter,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      fe7a8dac-dff3-4a07-8a5e-0d6abbf0df0c=consumables_main_brush,name=Austausch+Hauptbürste,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      4f9b2a22-b764-4fc1-8cd2-99383924394c=consumables_side_brush,name=Austausch+Seitenbürste,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      FilterLifeLevel=consumables_filter,minValue=0,maxValue=100&lt;br /&gt;
                      FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER&lt;br /&gt;
                      4896763a-26f7-400b-9734-2ce6564ceba2=total_clean_time,name=Lebenszeitersparnis,format=FLOAT,minStep=1,unit=h&lt;br /&gt;
                      82af5fd7-50a3-4ab3-81d3-1f7903de612a=total_clean_area,name=Gereinigte+Fläche,format=FLOAT,minStep=1,unit=m²&lt;br /&gt;
                      00d2ef14-b429-4569-8af3-c342d41cf383=total_cleans,name=Reinigungsvorgänge,format=FLOAT,minStep=1&lt;br /&gt;
                      e8d1027e-b068-40d5-9efd-f161b1b52774=device_firmware,name=Firmware,format=STRING&lt;br /&gt;
&lt;br /&gt;
== Xiaomi Fan (ältere Generationen mit Luftfeuchtigkeits- und Temperatursensor und Battery-Readings) ==&lt;br /&gt;
[[Datei:Xiaomi DC Pedestal Fan.png|mini]]&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Ventilator mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
Die ältere Generation enthält Sensoren und somit Readings für Luftfeuchtigkeit, Temperatur und auch Batteriestatus. Diese fehlen bei den neueren Generation dieses Ventilators, siehe Bilder. Da anscheinend jedes Jahr neue Generationen dieses Ventilators herausgekommen sind, ist nicht klar bis zu welcher Generation diese Sensoren enthalten waren.&lt;br /&gt;
&lt;br /&gt;
Mit folgenden Geräten wurde folgendes Mapping erstellt und somit erfolgreich getestet:&lt;br /&gt;
&lt;br /&gt;
 - Xiaomi DC Pedestal Fan (FHEM model fehlt, Default Hostname am Router: zhimi-fan-v3)&lt;br /&gt;
 - Liste bitte ergänzen!&lt;br /&gt;
&lt;br /&gt;
Um möglichst viele Funktionen bereitzustellen, wurden auch Characteristics von anderen DeviceTypes verwendet. Erklärung zu den Characteristics:&lt;br /&gt;
&lt;br /&gt;
 - Die Kindersicherung (LockPhysicalControls) ist in Eve über das kleine Einstellungssymbol zu finden. &lt;br /&gt;
 - Mit AudioFeedback/Audio-Bestätigung werden die Töne des Lüfters ein bzw. ausgeschaltet.&lt;br /&gt;
 - Mit NightVision/Nachtsicht werden die LEDs ein (bright) bzw. ausgeschaltet (off).&lt;br /&gt;
 - Mit Mute/Audio wird der Windmodus von Straight zu Natural geschaltet.&lt;br /&gt;
 - Mit TargetTiltAngle/Neigung kann der Schwenkwinkel justiert werden.&lt;br /&gt;
 - Mit SwingMode/Schwenken kann der Schwenkmodus ein bzw. ausgeschaltet werden.&lt;br /&gt;
 - Der Rest ist selbsterklärend.&lt;br /&gt;
&lt;br /&gt;
homebridgeMapping:&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType Fan&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping&lt;br /&gt;
                      clear&lt;br /&gt;
                      On:power,cmdOn=on,cmdOff=off,valueOn=on,valueOff=off&lt;br /&gt;
                      LockPhysicalControls=child_lock,values=on:CONTROL_LOCK_ENABLED;;off:CONTROL_LOCK_DISABLED,cmds=CONTROL_LOCK_ENABLED:child_lock+on;CONTROL_LOCK_DISABLED:child_lock+off&lt;br /&gt;
                      RotationSpeed=level,minValue=0,maxValue=100,cmd=level,delay=1&lt;br /&gt;
                      TargetTiltAngle=angle,minValue=30,maxValue=120,minStep=30,cmd=angle&lt;br /&gt;
                      SwingMode=angle_enable,values=on:SWING_ENABLED;;off:SWING_DISABLED,cmdOn=angle_enable+on,cmdOff=angle_enable+off&lt;br /&gt;
                      CurrentRelativeHumidity=humidity&lt;br /&gt;
                      CurrentTemperature=temperature&lt;br /&gt;
                      BatteryLevel=batteryPercent,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      StatusLowBattery=batteryState,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW&lt;br /&gt;
                      ChargingState=charging,values=complete:NOT_CHARGING;;progress:CHARGING;;/.*/:NOT_CHARGEABLE&lt;br /&gt;
                      AudioFeedback:buzzer,cmdOn=buzzer+on,cmdOff=buzzer+off,valueOn=on,valueOff=off&lt;br /&gt;
                      NightVision:led,cmdOn=led+off,cmdOff=led+bright,valueOn=off,valueOff=bright&lt;br /&gt;
                      Mute:mode,cmdOn=mode+straight,cmdOff=mode+natural,valueOn=straight,valueOff=natural&lt;br /&gt;
                      CurrentFanState:power,values=on:BLOWING_AIR;;off:INACTIVE;;/.*/:IDLE&lt;br /&gt;
&lt;br /&gt;
== Xiaomi Fan (neuere Generationen ohne Luftfeuchtigkeits- und Temperatursensor und Battery-Readings) ==&lt;br /&gt;
[[Datei:Xiaomi Standing Fan 2 bzw. 2S.png|mini]]&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Ventilator mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
Den neueren Generationen dieses Ventilators fehlen Sensoren und somit Readings für Luftfeuchtigkeit, Temperatur und auch Batteriestatus. Diese sind bei der älteren Generation dieses Ventilators enthalten, siehe vorangegangenes Beispiel.&lt;br /&gt;
&lt;br /&gt;
Dieses Mapping wurde mit dem &amp;quot;2S&amp;quot; erstellt. Es sollte aber mindestens auch mit einem &amp;quot;Xiaomi Standing Fan 2&amp;quot; (ohne Akku) funktionieren, da auch der &amp;quot;Xiaomi Standing Fan 2S&amp;quot; (mit Akku) kein Reading für die Batterie bereitstellt. Ansonsten gibt es wohl auch noch Generationen zwischen dem &amp;quot;Xiaomi DC Pedestal Fan&amp;quot; und den &amp;quot;Xiaomi Standing Fan 2/2S&amp;quot;. Es ist davon auszugehen, dass dieses Beispiel genauso auch bei diesen Modellen funktioniert.&lt;br /&gt;
&lt;br /&gt;
Mit folgenden Geräten wurde folgendes Mapping erstellt und somit erfolgreich getestet:&lt;br /&gt;
&lt;br /&gt;
 - 2019 Xiaomi Standing Fan 2S (FHEM model bzw. Default Hostname am Router: zhimi-fan-za4)&lt;br /&gt;
 - 2018 Xiaomi ZhiMiDCVariableFrequencyFan ZRFFS01ZM (FHEM model bzw. Default Hostname am Router: zhimi-fan-za1)&lt;br /&gt;
 - Liste bitte ergänzen!&lt;br /&gt;
&lt;br /&gt;
Um möglichst viele Funktionen bereitzustellen, wurden auch Characteristics von anderen DeviceTypes verwendet. Erklärung zu den Characteristics:&lt;br /&gt;
&lt;br /&gt;
 - Die Kindersicherung (LockPhysicalControls) ist in Eve über das kleine Einstellungssymbol zu finden. &lt;br /&gt;
 - Mit AudioFeedback/Audio-Bestätigung werden die Töne des Lüfters ein bzw. ausgeschaltet.&lt;br /&gt;
 - Mit NightVision/Nachtsicht werden die LEDs ein (bright) bzw. ausgeschaltet (off).&lt;br /&gt;
 - Mit Mute/Audio wird der Windmodus von Straight zu Natural geschaltet.&lt;br /&gt;
 - Mit TargetTiltAngle/Neigung kann der Schwenkwinkel justiert werden.&lt;br /&gt;
 - Mit SwingMode/Schwenken kann der Schwenkmodus ein bzw. ausgeschaltet werden.&lt;br /&gt;
 - Der Rest ist selbsterklärend.&lt;br /&gt;
&lt;br /&gt;
homebridgeMapping:&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType Fan&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping &lt;br /&gt;
                      clear&lt;br /&gt;
                      On:power,cmdOn=on,cmdOff=off,valueOn=on,valueOff=off&lt;br /&gt;
                      LockPhysicalControls=child_lock,values=on:CONTROL_LOCK_ENABLED;;off:CONTROL_LOCK_DISABLED,cmds=CONTROL_LOCK_ENABLED:child_lock+on;CONTROL_LOCK_DISABLED:child_lock+off&lt;br /&gt;
                      RotationSpeed=level,minValue=0,maxValue=100,cmd=level,delay=1&lt;br /&gt;
                      TargetTiltAngle=angle,minValue=30,maxValue=120,minStep=30,cmd=angle&lt;br /&gt;
                      SwingMode=angle_enable,values=on:SWING_ENABLED;;off:SWING_DISABLED,cmdOn=angle_enable+on,cmdOff=angle_enable+off&lt;br /&gt;
                      AudioFeedback:buzzer,cmdOn=buzzer+on,cmdOff=buzzer+off,valueOn=on,valueOff=off&lt;br /&gt;
                      NightVision:led,cmdOn=led+off,cmdOff=led+bright,valueOn=off,valueOff=bright&lt;br /&gt;
                      Mute:mode,cmdOn=mode+straight,cmdOff=mode+natural,valueOn=straight,valueOff=natural&lt;br /&gt;
                      CurrentFanState:power,values=on:BLOWING_AIR;;off:INACTIVE;;/.*/:IDLE&lt;br /&gt;
&lt;br /&gt;
== ZWave Türschloss Vision ZM1701 einbinden ==&lt;br /&gt;
Das ZWave Türschloss ZM1701 von der Firma Vision sendet seinen aktuellen Schließstatus in ein einzelnes Reading wie &amp;quot;lock&amp;quot;, sondern schickt eine ganze Reihe von Informationen über den Zustand in das Reading &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt;. Das Schließen und Öffnen der Türschlosses wird auch nicht mit einem Setzen des &amp;lt;code&amp;gt;state&amp;lt;/code&amp;gt; erreicht, sondern mit dem Setzen von &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt;. Das macht das Einbinden in homebridge nicht trivial, funktioniert aber über folgendes Homebridge-Mapping:&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; genericDeviceType lock&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open&lt;br /&gt;
&lt;br /&gt;
Kurz zur Erklärung: Um ein Schloss über HomeKit steuern zu können braucht es zwei characteristics. LockCurrentState zeigt an, ob das Schloss geöffnet oder geschlossen ist. Und mit LockTargetState wird das Schloss geöffnet oder geschlossen. Damit der aktuelle Status des Schlosses ausgelesen werden kann, muss aus dem FHEM-Reading &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt; die Zeichenfolge &amp;lt;code&amp;gt; secured&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;unsecured&amp;lt;/code&amp;gt; extrahiert werden, daher die beiden regulären Ausdrücke &amp;lt;code&amp;gt;/\ssecured/&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;/unsecured/&amp;lt;/code&amp;gt;. In der characteristic &amp;lt;code&amp;gt;LockTargetState&amp;lt;/code&amp;gt; muss sowohl der aktuelle Status des Schlosses als auch das Kommando angegeben werden, schließlich möchte man ein geschlossenes Schloss nicht nochmal schließen. Daher wird erst aus dem Reading &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt; der aktuelle Status des Schlosses ausgelesen und die damit korrespondierenden Befehle über &amp;lt;code&amp;gt;cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open&amp;lt;/code&amp;gt; generiert.&lt;br /&gt;
&lt;br /&gt;
Wer es in FHEM über ein webCmd einfacher zu bedienen haben möchte, fügt bitte noch die dafür notwendigen Attribute und die leicht geänderten homebridgeMappings wie folgt ein:&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; genericDeviceType lock&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:close;UNSECURED:open&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; /doorLockOperation open:open/doorLockOperation close:close&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; webCmd open:close&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 12191&lt;br /&gt;
 homebridge 0.4.6&lt;br /&gt;
 homebridge-fhem 0.2.48&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Hoppel118</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Homebridge_User_Configs&amp;diff=30836</id>
		<title>Homebridge User Configs</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Homebridge_User_Configs&amp;diff=30836"/>
		<updated>2019-06-25T14:54:53Z</updated>

		<summary type="html">&lt;p&gt;Hoppel118: Bravia Fernseher und Wetterstation aus der Homebridge-Konfiguration entfernt und hier ergänzt, kleinere Umsortierung vorgenommen, Dieser Artikel benötigt eine völlig andere Struktur.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Eintrag dient zur Sammlung funktionsfähiger Homebridge Configs.&lt;br /&gt;
&lt;br /&gt;
Bitte immer die FHEM Version und Homebridge Version angegeben.&lt;br /&gt;
&lt;br /&gt;
Sehr gute Hinweise gibt es hier: http://www.meintechblog.de/2015/10/mit-siri-und-fhem-das-gesamte-smart-home-per-stimme-steuern/&lt;br /&gt;
== Mögliche Mappings ==&lt;br /&gt;
Die Möglichen Mappings können hier nachgelesen werden https://github.com/KhaosT/HAP-NodeJS/blob/master/lib/gen/HomeKitTypes.js&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel:&lt;br /&gt;
 Characteristic.Brightness = function() {&lt;br /&gt;
  Characteristic.call(this, &#039;Brightness&#039;, &#039;00000008-0000-1000-8000-0026BB765291&#039;);&lt;br /&gt;
  this.setProps({&lt;br /&gt;
    format: Characteristic.Formats.INT,&lt;br /&gt;
    unit: Characteristic.Units.PERCENTAGE,&lt;br /&gt;
    maxValue: 100,&lt;br /&gt;
    minValue: 0,&lt;br /&gt;
    minStep: 1,&lt;br /&gt;
    perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY]&lt;br /&gt;
  });&lt;br /&gt;
  this.value = this.getDefaultValue();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Das Mapping in diesem Fall, hat den Titel Brightness.&lt;br /&gt;
&lt;br /&gt;
Die Werte können in 1er Schritten zwischen 0 und 100 liegen (max und min Value)&lt;br /&gt;
== Feuchtesensor ==&lt;br /&gt;
Zum Einstieg etwas leicht nachvollziehbares. &lt;br /&gt;
&lt;br /&gt;
Feuchtesensoren haben in der Regel ein &amp;quot;humidity&amp;quot; Reading, im Falle des Opus XT300 Bodenfeuchtesensors auch Temperatur und Batterie Level. Homekit unterstützt einen &amp;quot;HumiditySensor&amp;quot; Service. Dieser ist in homebridge-fhem nicht standardmäßig vorhanden (kann also nicht aus dem dropdown ausgewählt werden, sondern muss über das Befehlsfeld zugewiesen werden):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr meinSensor genericDeviceType HumiditySensor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden die Readings gemappt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr meinSensor homebridgeMapping clear CurrentRelativeHumidity=humidity StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW CurrentTemperature=temperature&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;clear&amp;lt;/code&amp;gt;löscht default mappings - das wird in der Regel nicht notwendig sein, schadet aber nicht&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;CurrentRelativeHumidity&amp;lt;/code&amp;gt; ist die relevante Homekit Characteristic - wird mit dem entsprechenden Reading des Sensors gemappt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;StatusLowBattery&amp;lt;/code&amp;gt; erwartet entweder BATTERY_LEVEL_NORMAL oder _LOW. Mein Sensor liefert ok zurück, wenn alles gut ist, also wird &amp;quot;ok&amp;quot; auf _NORMAL gemappt, alles andere auf _LOW. &lt;br /&gt;
&lt;br /&gt;
Der Opus XT300 Bodenfeuchtesensors liefert auch noch die Temperatur - der HumiditySensor Service sieht das eigentlich nicht vor, daher wird die Temperatur auch nicht in der Apple &amp;quot;Home&amp;quot; App angezeigt. Bei Eve wird die Temperatur hingegen berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
== BRAVIA Fernseher ==&lt;br /&gt;
Ein Beispiel homebridgeMapping für Sony Bravia Fernseher (iOS 12.2 beta!) und genericDeviceType Television:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
clear&lt;br /&gt;
ConfiguredName:model&lt;br /&gt;
Active:state,values=off:INACTIVE;on:ACTIVE,cmds=ACTIVE:on;INACTIVE:off&lt;br /&gt;
RemoteKey:key,cmds=REWIND:remoteControl+Rewind;FAST_FORWARD:remoteControl+FastForward;NEXT_TRACK:remoteControl+NEXT_TRACK;PREVIOUS_TRACK:remoteControl+PREVIOUS_TRACK;ARROW_UP:remoteControl+Up;ARROW_DOWN:remoteControl+Down;ARROW_LEFT:remoteControl+Left;ARROW_RIGHT:remoteControl+Right;SELECT:remoteControl+Ok;BACK:remoteControl+RETURN;EXIT:remoteControl+Exit;PLAY_PAUSE:remoteControl+Play;INFORMATION:remoteControl+Info&lt;br /&gt;
SleepDiscoveryMode:default=ALWAYS_DISCOVERABLE&lt;br /&gt;
ClosedCaptions:default=0&lt;br /&gt;
DisplayOrder:default=Test1&lt;br /&gt;
CurrentMediaState:default=0:currentTitle&lt;br /&gt;
TargetMediaState:default=0,cmds=PLAY:remoteControl+play;PAUSE:remoteControl+pause;STOP:remoteControl+stop;&lt;br /&gt;
PictureMode:default=1&lt;br /&gt;
PowerModeSelection:default=1,cmds=0:remoteControl+options&lt;br /&gt;
ActiveIdentifier:input,default=0,values=/tv.dvbt|TV...DVB-T/:1;/HDMI.3/:2,cmds=1:input+TV+/+DVB-T;2:input+HDMI+3/ARC;3:application+Plex&lt;br /&gt;
TelevisionSpeaker#Mute=mute&lt;br /&gt;
 Active:default=ACTIVE&lt;br /&gt;
 VolumeSelector:volume,cmds=INCREMENT:VolumeUp;DECREMENT:VolumeDown&lt;br /&gt;
 VolumeControlType:default=RELATIVE_WITH_CURRENT&lt;br /&gt;
 linkedTo=Television&lt;br /&gt;
InputSource(1)#Identifier:default=1&lt;br /&gt;
 ConfiguredName:default=TV&lt;br /&gt;
 IsConfigured:default=CONFIGURED&lt;br /&gt;
 InputSourceType:default=TUNER&lt;br /&gt;
 CurrentVisibilityState:default=SHOWN&lt;br /&gt;
 linkedTo=Television&lt;br /&gt;
InputSource(2)#Identifier:default=2&lt;br /&gt;
 ConfiguredName:default=APPLE+TV&lt;br /&gt;
 IsConfigured:default=CONFIGURED&lt;br /&gt;
 InputSourceType:default=HDMI&lt;br /&gt;
 CurrentVisibilityState:default=SHOWN&lt;br /&gt;
 linkedTo=Television&lt;br /&gt;
InputSource(3)#Identifier:default=3&lt;br /&gt;
 ConfiguredName:default=PLEX&lt;br /&gt;
 IsConfigured:default=CONFIGURED&lt;br /&gt;
 InputSourceType:default=APPLICATION&lt;br /&gt;
 CurrentVisibilityState:default=SHOWN&lt;br /&gt;
 linkedTo=Television&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
damit lässt sich der Fernseher über Siri/Homekit ein- und ausschalten sowie über das appleTV Control-Center Widget steuern.&lt;br /&gt;
&lt;br /&gt;
== EnOcean STM 250 Tür-/Fensterkontakt ==&lt;br /&gt;
Der STM 250 liefert als Status in FHEM &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;, wenn das Fenster offen und damit der Kontakt &amp;quot;offen&amp;quot; ist. Analog liefert er &amp;lt;code&amp;gt;closed&amp;lt;/code&amp;gt; wenn das Fenster geschlossen und damit auch der Kontakt geschlossen ist. Diese Statusangaben sind sehr intuitiv zu verstehen und zu interpretieren. &lt;br /&gt;
&lt;br /&gt;
Die characteristic &amp;lt;code&amp;gt;ContactSensorState&amp;lt;/code&amp;gt; von HomeKit liefert entweder den Wert &amp;lt;code&amp;gt;CONTACT_DETECTED=0&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;CONTACT_NOT_DETECTED=1&amp;lt;/code&amp;gt; zurück. Wobei &amp;lt;code&amp;gt;CONTACT_DETECTED&amp;lt;/code&amp;gt; bedeutet, dass der Kontakt geschlossen ist. Je nach Darstellung in der HomeKit-fähigen App muss dieses Verhalten bei der Interpretation berücksichtigt werden. Die App Eve von Elgato zum Beispiel liefert für Kontaktsensoren &amp;quot;JA&amp;quot; oder &amp;quot;NEIN&amp;quot; mit der Bedeutung &amp;lt;code&amp;gt;CONTACT_DETECTED=0=JA&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;CONTACT_NOT_DETECTED=1=NEIN&amp;lt;/code&amp;gt; zurück.&lt;br /&gt;
&lt;br /&gt;
Noch ein wichtiger Punkt: Um einen Sensorkontakt sinnvoll einzurichten sollte als zusätzlicher Wert für das Attribut &amp;lt;code&amp;gt;genericdeviceType&amp;lt;/code&amp;gt; der Wert &amp;lt;code&amp;gt;ContactSensor&amp;lt;/code&amp;gt; hinzugefügt werden. Wie das geht ist im Eintrag [[Homebridge_einrichten#FHEM_konfigurieren | Homebridge einrichten]] ausführlicher beschrieben.&lt;br /&gt;
&lt;br /&gt;
Folgende Attribute dann hinzufügen:&lt;br /&gt;
 attr STM250 genericDeviceType ContactSensor&lt;br /&gt;
 attr STM250 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 9893&lt;br /&gt;
 Homebridge 0.2.16&lt;br /&gt;
 homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}&lt;br /&gt;
&lt;br /&gt;
== Modul RESIDENTS für Anwesenheitserkennung und Steuerung der Anwesenheit benutzen ==&lt;br /&gt;
[[Datei:Homebridge_bewohner_zu_szene.jpeg|mini|Schaltzustand eines Bewohners zu einer Szene hinzufügen]]&lt;br /&gt;
Aus den einzelnen Komponenten des Moduls RESIDENTS, homebridge sowie der characteristic &amp;lt;code&amp;gt;On&amp;lt;/code&amp;gt; und der Szenensteuerung lässt sich eine gleichzeitige Steuerung der Anwesenheit und Anwesenheitserkennung basteln.&lt;br /&gt;
&lt;br /&gt;
Dazu müssen folgende Schritte unternommen werden:&lt;br /&gt;
* einem Bewohner aus dem Modul ROOMMATE die Steuerung über homebridgeMapping hinzufügen&lt;br /&gt;
* Szene für &amp;quot;Ich bin zu Hause&amp;quot; und &amp;quot;Ich gehe jetzt&amp;quot; in einer HomeKit-fähigen App wie z.B. Eve einrichten&lt;br /&gt;
&lt;br /&gt;
Man kann einen beliebigen Bewohner aus dem Modul ROOMMATE nehmen und ihn über die characteristic &amp;lt;code&amp;gt;On&amp;lt;/code&amp;gt; in Form eines Schalters sozusagen schaltbar machen. Nur wird das Ein- und Ausschalten des Bewohners über HomeKit in FHEM auf den Status home bzw. absent gemappt. Seit dem 06.02.2016 werden RESIDENTS automatisch als Occupancy Sensor für HomeKit annonciert. Nun noch die Attribute des ROOMMATE wie folgt setzen:&lt;br /&gt;
 attr &amp;lt;ROOMMATE&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;ROOMMATE&amp;gt; homebridgeMapping On=state,valueOn=/home|awoken|asleep|gotosleep/,valueOff=/gone|absent/,cmdOn=home,cmdOff=absent&lt;br /&gt;
&lt;br /&gt;
Natürlich muss der Bewohner noch dem Filter von homebridge hinzugefügt und homebridge neu gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Anschließend geht es in der HomeKit-fähigen App Deiner Wahl weiter. In Eve von Elgato ist von vornherein zum Beispiel vorgesehen, dass man zwei Szenen &amp;quot;Ich bin zuhause&amp;quot; und &amp;quot;Ich verlasse das Haus&amp;quot; hat. Zu diesen Szenen wird eine Aktion hinzugefügt indem der Bewohner, den das ROOMMATE-Modul meldet zur Szene hinzugefügt wird und beim Nachhausekommen &amp;quot;eingeschaltet&amp;quot; wird. Genauso wird mit der Szene &amp;quot;Ich verlasse das Haus&amp;quot; verfahren: Bewohner zur Szene hinzufügen und den Schaltvorgang auf &amp;quot;ausschalten&amp;quot; setzen.&lt;br /&gt;
&lt;br /&gt;
Mit den Sprachbefehlen &amp;quot;Ich bin zuhause&amp;quot; oder &amp;quot;Ich verlasse das Haus&amp;quot; wird die entsprechende Szene eingeschaltet, homebridge schaltet über das &amp;lt;code&amp;gt;homebridgeMapping&amp;lt;/code&amp;gt; Attribut dann den Bewohner auf &amp;quot;home&amp;quot; oder &amp;quot;absent&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 9893&lt;br /&gt;
 Homebridge 0.2.16&lt;br /&gt;
 homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}&lt;br /&gt;
&lt;br /&gt;
Eine noch etwas bessere Schaltmöglichkeit bietet &#039;&#039;&#039;genericDeviceType security&#039;&#039;&#039;.&lt;br /&gt;
Das Mapping für ROOMMATE sieht wie folgt aus:&lt;br /&gt;
 attr TYPE=ROOMMATE genericDeviceType security&lt;br /&gt;
 attr TYPE=ROOMMATE homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;gone:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+gone,delay=1&lt;br /&gt;
für GUEST:&lt;br /&gt;
 attr TYPE=GUEST genericDeviceType security&lt;br /&gt;
 attr TYPE=GUEST homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;none:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+none,delay=1&lt;br /&gt;
&lt;br /&gt;
== ZWave Türschloss Vision ZM1701 einbinden ==&lt;br /&gt;
Das ZWave Türschloss ZM1701 von der Firma Vision sendet seinen aktuellen Schließstatus in ein einzelnes Reading wie &amp;quot;lock&amp;quot;, sondern schickt eine ganze Reihe von Informationen über den Zustand in das Reading &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt;. Das Schließen und Öffnen der Türschlosses wird auch nicht mit einem Setzen des &amp;lt;code&amp;gt;state&amp;lt;/code&amp;gt; erreicht, sondern mit dem Setzen von &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt;. Das macht das Einbinden in homebridge nicht trivial, funktioniert aber über folgendes Homebridge-Mapping:&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; genericDeviceType lock&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open&lt;br /&gt;
&lt;br /&gt;
Kurz zur Erklärung: Um ein Schloss über HomeKit steuern zu können braucht es zwei characteristics. LockCurrentState zeigt an, ob das Schloss geöffnet oder geschlossen ist. Und mit LockTargetState wird das Schloss geöffnet oder geschlossen. Damit der aktuelle Status des Schlosses ausgelesen werden kann, muss aus dem FHEM-Reading &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt; die Zeichenfolge &amp;lt;code&amp;gt; secured&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;unsecured&amp;lt;/code&amp;gt; extrahiert werden, daher die beiden regulären Ausdrücke &amp;lt;code&amp;gt;/\ssecured/&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;/unsecured/&amp;lt;/code&amp;gt;. In der characteristic &amp;lt;code&amp;gt;LockTargetState&amp;lt;/code&amp;gt; muss sowohl der aktuelle Status des Schlosses als auch das Kommando angegeben werden, schließlich möchte man ein geschlossenes Schloss nicht nochmal schließen. Daher wird erst aus dem Reading &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt; der aktuelle Status des Schlosses ausgelesen und die damit korrespondierenden Befehle über &amp;lt;code&amp;gt;cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open&amp;lt;/code&amp;gt; generiert.&lt;br /&gt;
&lt;br /&gt;
Wer es in FHEM über ein webCmd einfacher zu bedienen haben möchte, fügt bitte noch die dafür notwendigen Attribute und die leicht geänderten homebridgeMappings wie folgt ein:&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; genericDeviceType lock&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:close;UNSECURED:open&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; /doorLockOperation open:open/doorLockOperation close:close&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; webCmd open:close&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 12191&lt;br /&gt;
 homebridge 0.4.6&lt;br /&gt;
 homebridge-fhem 0.2.48&lt;br /&gt;
&lt;br /&gt;
== Homematic SmokeDetector HM-SEC-SD und HM-SEC-SD2 ==&lt;br /&gt;
 [[Datei:Homebridge-Homematic-Smokedetector-Gen1.jpg|mini|Homebridge-Homematic-Smokedetector-Gen1 in EVE]]&lt;br /&gt;
Es sind keine Homebridge Mappings für die Rauch Meldung erforderlich.&lt;br /&gt;
&lt;br /&gt;
Allerdings ist ein Mapping für den Batterie Zustand nötig, siehe Unten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;SmokeDetector&amp;gt; genericDeviceType SmokeSensor&lt;br /&gt;
 attr &amp;lt;SmokeDetector&amp;gt; subType smokeDetector&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;SmokeDetector&amp;gt; homebridgeMapping StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW&lt;br /&gt;
&lt;br /&gt;
== Homematic Heizkörperthermostat HM-CC-RT-DN ==&lt;br /&gt;
[[Datei:HM-CC-RT-DN-Eve.PNG|mini|Darstellung des HM-CC-RT-DN in der iOS App Eve]]&lt;br /&gt;
 attr &amp;lt;HMCCRTDN_Channel2_Clima&amp;gt; homebridgeMapping TargetTemperature=desired-temp::desired-temp,minValue=5,maxValue=35,minStep=0.5,nocache=1&lt;br /&gt;
                      CurrentTemperature=BU_Heizung_01_Clima:measured-temp,nocache=1&lt;br /&gt;
                      StatusLowBattery=BU_Heizung_01:battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW&lt;br /&gt;
                      TargetHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:3,cmds=OFF:controlManu+off;;HEAT:controlMode+boost;;AUTO:controlMode+auto;;COOL:controlManu+17.0&lt;br /&gt;
                      CurrentHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:0,valud=OFF&lt;br /&gt;
 attr &amp;lt;HMCCRTDN_Channel2_Clima&amp;gt; siriName Robby&lt;br /&gt;
Dieses Mapping bezieht sich auf ein vorhandenes &#039;&#039;userReading&#039;&#039; mit dem Namen &amp;lt;code&amp;gt;heatingState&amp;lt;/code&amp;gt;, womit Homekit die einzelnen Status nachher unterscheidet.&lt;br /&gt;
 attr &amp;lt;HM-CC-RT-DN_Clima&amp;gt; userReadings heatingState {(ReadingsVal($NAME,&amp;quot;ValvePosition&amp;quot;,0) &amp;gt; 0 || ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;on&amp;quot;) ? &amp;quot;HEAT&amp;quot; : ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;off&amp;quot; ? &amp;quot;OFF&amp;quot; : ReadingsVal($NAME,&amp;quot;controlMode&amp;quot;,&amp;quot;auto&amp;quot;) eq &amp;quot;auto&amp;quot; ? &amp;quot;AUTO&amp;quot; : (ReadingsVal($NAME,&amp;quot;measured-temp&amp;quot;,20) &amp;gt; ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,20)) ? &amp;quot;COOL&amp;quot; : &amp;quot;AUTO&amp;quot;}&lt;br /&gt;
Global auf alle in FHEM angelegten HM-CC-RT-DN, lässt sich mit folgendem Befehl das &#039;&#039;userReading&#039;&#039; anlegen.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,59211.msg505986.html#msg505986 Forumsthread].&lt;br /&gt;
&lt;br /&gt;
 attr TYPE=CUL_HM:FILTER=model=HM-CC-RT-DN:FILTER=chanNo=04 userReadings heatingState {(ReadingsVal($NAME,&amp;quot;ValvePosition&amp;quot;,0) &amp;gt; 0 || ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;on&amp;quot;) ? &amp;quot;HEAT&amp;quot; : ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;off&amp;quot; ? &amp;quot;OFF&amp;quot; : ReadingsVal($NAME,&amp;quot;controlMode&amp;quot;,&amp;quot;auto&amp;quot;) eq &amp;quot;auto&amp;quot; ? &amp;quot;AUTO&amp;quot; : (ReadingsVal($NAME,&amp;quot;measured-temp&amp;quot;,20) &amp;gt; ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,20)) ? &amp;quot;COOL&amp;quot; : &amp;quot;AUTO&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Homematic Wetterstation OC3 HM-WDS100-C6-O-2 ==&lt;br /&gt;
[[Datei: homebridge-wetter.jpg|mini|Wetterstation in EVE]]&lt;br /&gt;
Mit der EVE und den hier: [https://github.com/naofireblade/homebridge-weather-plus/blob/master/util/characteristics.js] beschriebenen Characteristics lässt sich eine lokale Homematic OC3 Wetterstation aus FHEM einbinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
clear&lt;br /&gt;
CurrentTemperature:temperature&lt;br /&gt;
CurrentRelativeHumidity:humidity&lt;br /&gt;
49C8AE5A-A3A5-41AB-BF1F-12D5654F9F41:windSpeed,name=WINDGESCHWINDIGKEIT,format=FLOAT,unit=kmh,maxValue=250,minValue=0,minStep=1&lt;br /&gt;
46f1284c-1912-421b-82f5-eb75008b167e:windDirection,name=WINDRICHTUNG,format=UINT8,unit=ARC_DEGREE,maxValue=360,minValue=0,minStep=1&lt;br /&gt;
StatusLowBattery:battery,values=ok:BATTERY_LEVEL_NORMAL;/^.*/:BATTERY_LEVEL_LOW &lt;br /&gt;
ccc04890-565b-4376-b39a-3113341d9e0f:RegenmengeLast24Hours:state,name=REGEN_24h,format=FLOAT,unit=mm,maxValue=100,minValue=0,minStep=1 &lt;br /&gt;
10c88f40-7ec4-478c-8d5a-bd0c3cce14b7:RegenmengeLast1Hours:state,name=REGEN_1h,format=FLOAT,unit=mm,maxValue=100,minValue=0,minStep=1 &lt;br /&gt;
0000006B-0000-1000-8000-0026BB765291:brightness,name=BRIGHTNESS,format=FLOAT,unit=LUX,maxValue=10000,minValue=0,minStep=.0001 &lt;br /&gt;
cd65a9ab-85ad-494a-b2bd-2f380084134c:isRaining,name=BEDINGUNGKATEGORIE,values=0:0;1:2,format=UINT8,maxValue=3,minValue=0,minStep=1 &lt;br /&gt;
cd65a9ab-85ad-494a-b2bd-2f380084134d:isRaining,name=BEDINGUNG,format=STRING,values=0:-;/.*/:Regen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Roomba über THINKINGCLEANER Modul ==&lt;br /&gt;
 attr &amp;lt;THINKINGCLEANER&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;THINKINGCLEANER&amp;gt; homebridgeMapping clear On=state,valueOn=/^(on|dock)/,cmdOn=on,cmdOff=off,nocache=1 ChargingState=deviceStatus,values=/(_recon|_full|_trickle)$/:CHARGING;/^.*/:NOT_CHARGING&lt;br /&gt;
 attr &amp;lt;THINKINGCLEANER&amp;gt; siriName Robby&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 12680&lt;br /&gt;
 homebridge 0.4.11&lt;br /&gt;
 homebridge-fhem 0.2.66&lt;br /&gt;
&lt;br /&gt;
== Vallox Belüftungsanlage ==&lt;br /&gt;
Die Steuerung der Lüftungsgeschwindigkeit ist nur in Prozent möglich. Die Umrechnung erfolgt im [[Vallox]] Modul.&lt;br /&gt;
Hierzu wurde das Reading &#039;&#039;FanSpeedPct&#039;&#039; hinzugefügt.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;Vallox&amp;gt; genericDeviceType Fan&lt;br /&gt;
 attr &amp;lt;Vallox&amp;gt; homebridgeMapping clear&lt;br /&gt;
                      model=Vallox&lt;br /&gt;
                      On=PowerState,valueOn=1,readOnly=1&lt;br /&gt;
                      RotationSpeed=FanSpeedPct,minValue=1,maxValue=100,cmd=FanSpeedPct,delay=1&lt;br /&gt;
&lt;br /&gt;
== Xiaomi Vacuum Cleaner 1. Generation ==&lt;br /&gt;
[[Datei:XIAOMI_VACUUM_CLEANER-Gen1.jpg|mini|XIAOMI VACUUM 1. GEN in EVE]]&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping On=state,valueOn=Cleaning,cmdOn=start,cmdOff=charge&lt;br /&gt;
                      RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1&lt;br /&gt;
                      BatteryLevel=batteryLevel,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW&lt;br /&gt;
                      ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/.*/:NOT_CHARGEABLE&lt;br /&gt;
                      OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/.*/:OCCUPANCY_NOT_DETECTED&lt;br /&gt;
                      FilterLifeLevel=consumables_filter,minValue=0,maxValue=100&lt;br /&gt;
                      FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER&lt;br /&gt;
&lt;br /&gt;
== Roborock S50 (2. Generation des Xiaomi Vacuum Cleaners) ==&lt;br /&gt;
[[Datei:Roborock S50.png|mini]]&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
Das folgende Mapping für den Roborook S50 beinhaltet neben den Characteristics der 1. Genration des Xiaomi Vacuum Cleaners weitere Custom Mappings. Diese werden auch auf dem Bild dargestellt. Falls das einem zu viele Informationen sind, können diese beim Einfügen einfach weggelassen oder in EVE ausgeblendet werden.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping On=state,valueOn=Cleaning,cmdOn=start,cmdOff=charge&lt;br /&gt;
                      RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1&lt;br /&gt;
                      BatteryLevel=batteryPercent,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      StatusLowBattery=batteryState,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW&lt;br /&gt;
                      ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/.*/:NOT_CHARGEABLE&lt;br /&gt;
                      OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/.*/:OCCUPANCY_NOT_DETECTED&lt;br /&gt;
                      2af6d0d0-3691-4f0d-9c9c-c1098295b1cb=consumables_sensors,name=Reinigung+Sensoren,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      fd11b965-052e-430f-b08f-206287d8bc00=consumables_filter,name=Austausch+Filter,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      fe7a8dac-dff3-4a07-8a5e-0d6abbf0df0c=consumables_main_brush,name=Austausch+Hauptbürste,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      4f9b2a22-b764-4fc1-8cd2-99383924394c=consumables_side_brush,name=Austausch+Seitenbürste,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      FilterLifeLevel=consumables_filter,minValue=0,maxValue=100&lt;br /&gt;
                      FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER&lt;br /&gt;
                      4896763a-26f7-400b-9734-2ce6564ceba2=total_clean_time,name=Lebenszeitersparnis,format=FLOAT,minStep=1,unit=h&lt;br /&gt;
                      82af5fd7-50a3-4ab3-81d3-1f7903de612a=total_clean_area,name=Gereinigte+Fläche,format=FLOAT,minStep=1,unit=m²&lt;br /&gt;
                      00d2ef14-b429-4569-8af3-c342d41cf383=total_cleans,name=Reinigungsvorgänge,format=FLOAT,minStep=1&lt;br /&gt;
                      e8d1027e-b068-40d5-9efd-f161b1b52774=device_firmware,name=Firmware,format=STRING&lt;br /&gt;
&lt;br /&gt;
== Xiaomi Fan (ältere Generationen mit Luftfeuchtigkeits- und Temperatursensor und Battery-Readings) ==&lt;br /&gt;
[[Datei:Xiaomi DC Pedestal Fan.png|mini]]&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Ventilator mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
Die ältere Generation enthält Sensoren und somit Readings für Luftfeuchtigkeit, Temperatur und auch Batteriestatus. Diese fehlen bei den neueren Generation dieses Ventilators, siehe Bilder. Da anscheinend jedes Jahr neue Generationen dieses Ventilators herausgekommen sind, ist nicht klar bis zu welcher Generation diese Sensoren enthalten waren.&lt;br /&gt;
&lt;br /&gt;
Mit folgenden Geräten wurde folgendes Mapping erstellt und somit erfolgreich getestet:&lt;br /&gt;
&lt;br /&gt;
 - Xiaomi DC Pedestal Fan (FHEM model fehlt, Default Hostname am Router: zhimi-fan-v3)&lt;br /&gt;
 - Liste bitte ergänzen!&lt;br /&gt;
&lt;br /&gt;
Um möglichst viele Funktionen bereitzustellen, wurden auch Characteristics von anderen DeviceTypes verwendet. Erklärung zu den Characteristics:&lt;br /&gt;
&lt;br /&gt;
 - Die Kindersicherung (LockPhysicalControls) ist in Eve über das kleine Einstellungssymbol zu finden. &lt;br /&gt;
 - Mit AudioFeedback/Audio-Bestätigung werden die Töne des Lüfters ein bzw. ausgeschaltet.&lt;br /&gt;
 - Mit NightVision/Nachtsicht werden die LEDs ein (bright) bzw. ausgeschaltet (off).&lt;br /&gt;
 - Mit Mute/Audio wird der Windmodus von Straight zu Natural geschaltet.&lt;br /&gt;
 - Mit TargetTiltAngle/Neigung kann der Schwenkwinkel justiert werden.&lt;br /&gt;
 - Mit SwingMode/Schwenken kann der Schwenkmodus ein bzw. ausgeschaltet werden.&lt;br /&gt;
 - Der Rest ist selbsterklärend.&lt;br /&gt;
&lt;br /&gt;
homebridgeMapping:&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType Fan&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping&lt;br /&gt;
                      clear&lt;br /&gt;
                      On:power,cmdOn=on,cmdOff=off,valueOn=on,valueOff=off&lt;br /&gt;
                      LockPhysicalControls=child_lock,values=on:CONTROL_LOCK_ENABLED;;off:CONTROL_LOCK_DISABLED,cmds=CONTROL_LOCK_ENABLED:child_lock+on;CONTROL_LOCK_DISABLED:child_lock+off&lt;br /&gt;
                      RotationSpeed=level,minValue=0,maxValue=100,cmd=level,delay=1&lt;br /&gt;
                      TargetTiltAngle=angle,minValue=30,maxValue=120,minStep=30,cmd=angle&lt;br /&gt;
                      SwingMode=angle_enable,values=on:SWING_ENABLED;;off:SWING_DISABLED,cmdOn=angle_enable+on,cmdOff=angle_enable+off&lt;br /&gt;
                      CurrentRelativeHumidity=humidity&lt;br /&gt;
                      CurrentTemperature=temperature&lt;br /&gt;
                      BatteryLevel=batteryPercent,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      StatusLowBattery=batteryState,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW&lt;br /&gt;
                      ChargingState=charging,values=complete:NOT_CHARGING;;progress:CHARGING;;/.*/:NOT_CHARGEABLE&lt;br /&gt;
                      AudioFeedback:buzzer,cmdOn=buzzer+on,cmdOff=buzzer+off,valueOn=on,valueOff=off&lt;br /&gt;
                      NightVision:led,cmdOn=led+off,cmdOff=led+bright,valueOn=off,valueOff=bright&lt;br /&gt;
                      Mute:mode,cmdOn=mode+straight,cmdOff=mode+natural,valueOn=straight,valueOff=natural&lt;br /&gt;
                      CurrentFanState:power,values=on:BLOWING_AIR;;off:INACTIVE;;/.*/:IDLE&lt;br /&gt;
&lt;br /&gt;
== Xiaomi Fan (neuere Generationen ohne Luftfeuchtigkeits- und Temperatursensor und Battery-Readings) ==&lt;br /&gt;
[[Datei:Xiaomi Standing Fan 2 bzw. 2S.png|mini]]&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Ventilator mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
Den neueren Generationen dieses Ventilators fehlen Sensoren und somit Readings für Luftfeuchtigkeit, Temperatur und auch Batteriestatus. Diese sind bei der älteren Generation dieses Ventilators enthalten, siehe vorangegangenes Beispiel.&lt;br /&gt;
&lt;br /&gt;
Dieses Mapping wurde mit dem &amp;quot;2S&amp;quot; erstellt. Es sollte aber mindestens auch mit einem &amp;quot;Xiaomi Standing Fan 2&amp;quot; (ohne Akku) funktionieren, da auch der &amp;quot;Xiaomi Standing Fan 2S&amp;quot; (mit Akku) kein Reading für die Batterie bereitstellt. Ansonsten gibt es wohl auch noch Generationen zwischen dem &amp;quot;Xiaomi DC Pedestal Fan&amp;quot; und den &amp;quot;Xiaomi Standing Fan 2/2S&amp;quot;. Es ist davon auszugehen, dass dieses Beispiel genauso auch bei diesen Modellen funktioniert.&lt;br /&gt;
&lt;br /&gt;
Mit folgenden Geräten wurde folgendes Mapping erstellt und somit erfolgreich getestet:&lt;br /&gt;
&lt;br /&gt;
 - 2019 Xiaomi Standing Fan 2S (FHEM model bzw. Default Hostname am Router: zhimi-fan-za4)&lt;br /&gt;
 - 2018 Xiaomi ZhiMiDCVariableFrequencyFan ZRFFS01ZM (FHEM model bzw. Default Hostname am Router: zhimi-fan-za1)&lt;br /&gt;
 - Liste bitte ergänzen!&lt;br /&gt;
&lt;br /&gt;
Um möglichst viele Funktionen bereitzustellen, wurden auch Characteristics von anderen DeviceTypes verwendet. Erklärung zu den Characteristics:&lt;br /&gt;
&lt;br /&gt;
 - Die Kindersicherung (LockPhysicalControls) ist in Eve über das kleine Einstellungssymbol zu finden. &lt;br /&gt;
 - Mit AudioFeedback/Audio-Bestätigung werden die Töne des Lüfters ein bzw. ausgeschaltet.&lt;br /&gt;
 - Mit NightVision/Nachtsicht werden die LEDs ein (bright) bzw. ausgeschaltet (off).&lt;br /&gt;
 - Mit Mute/Audio wird der Windmodus von Straight zu Natural geschaltet.&lt;br /&gt;
 - Mit TargetTiltAngle/Neigung kann der Schwenkwinkel justiert werden.&lt;br /&gt;
 - Mit SwingMode/Schwenken kann der Schwenkmodus ein bzw. ausgeschaltet werden.&lt;br /&gt;
 - Der Rest ist selbsterklärend.&lt;br /&gt;
&lt;br /&gt;
homebridgeMapping:&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType Fan&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping &lt;br /&gt;
                      clear&lt;br /&gt;
                      On:power,cmdOn=on,cmdOff=off,valueOn=on,valueOff=off&lt;br /&gt;
                      LockPhysicalControls=child_lock,values=on:CONTROL_LOCK_ENABLED;;off:CONTROL_LOCK_DISABLED,cmds=CONTROL_LOCK_ENABLED:child_lock+on;CONTROL_LOCK_DISABLED:child_lock+off&lt;br /&gt;
                      RotationSpeed=level,minValue=0,maxValue=100,cmd=level,delay=1&lt;br /&gt;
                      TargetTiltAngle=angle,minValue=30,maxValue=120,minStep=30,cmd=angle&lt;br /&gt;
                      SwingMode=angle_enable,values=on:SWING_ENABLED;;off:SWING_DISABLED,cmdOn=angle_enable+on,cmdOff=angle_enable+off&lt;br /&gt;
                      AudioFeedback:buzzer,cmdOn=buzzer+on,cmdOff=buzzer+off,valueOn=on,valueOff=off&lt;br /&gt;
                      NightVision:led,cmdOn=led+off,cmdOff=led+bright,valueOn=off,valueOff=bright&lt;br /&gt;
                      Mute:mode,cmdOn=mode+straight,cmdOff=mode+natural,valueOn=straight,valueOff=natural&lt;br /&gt;
                      CurrentFanState:power,values=on:BLOWING_AIR;;off:INACTIVE;;/.*/:IDLE&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Hoppel118</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Homebridge_User_Configs&amp;diff=30798</id>
		<title>Homebridge User Configs</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Homebridge_User_Configs&amp;diff=30798"/>
		<updated>2019-06-20T22:48:21Z</updated>

		<summary type="html">&lt;p&gt;Hoppel118: Anpassungen an den Xiaomi Ventilatoren&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Eintrag dient zur Sammlung funktionsfähiger Homebridge Configs.&lt;br /&gt;
&lt;br /&gt;
Bitte immer die FHEM Version und Homebridge Version angegeben.&lt;br /&gt;
&lt;br /&gt;
Sehr gute Hinweise gibt es hier: http://www.meintechblog.de/2015/10/mit-siri-und-fhem-das-gesamte-smart-home-per-stimme-steuern/&lt;br /&gt;
== Mögliche Mappings ==&lt;br /&gt;
Die Möglichen Mappings können hier nachgelesen werden https://github.com/KhaosT/HAP-NodeJS/blob/master/lib/gen/HomeKitTypes.js&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel:&lt;br /&gt;
 Characteristic.Brightness = function() {&lt;br /&gt;
  Characteristic.call(this, &#039;Brightness&#039;, &#039;00000008-0000-1000-8000-0026BB765291&#039;);&lt;br /&gt;
  this.setProps({&lt;br /&gt;
    format: Characteristic.Formats.INT,&lt;br /&gt;
    unit: Characteristic.Units.PERCENTAGE,&lt;br /&gt;
    maxValue: 100,&lt;br /&gt;
    minValue: 0,&lt;br /&gt;
    minStep: 1,&lt;br /&gt;
    perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY]&lt;br /&gt;
  });&lt;br /&gt;
  this.value = this.getDefaultValue();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Das Mapping in diesem Fall, hat den Titel Brightness.&lt;br /&gt;
&lt;br /&gt;
Die Werte können in 1er Schritten zwischen 0 und 100 liegen (max und min Value)&lt;br /&gt;
== Feuchtesensor ==&lt;br /&gt;
Zum Einstieg etwas leicht nachvollziehbares. &lt;br /&gt;
&lt;br /&gt;
Feuchtesensoren haben in der Regel ein &amp;quot;humidity&amp;quot; Reading, im Falle des Opus XT300 Bodenfeuchtesensors auch Temperatur und Batterie Level. Homekit unterstützt einen &amp;quot;HumiditySensor&amp;quot; Service. Dieser ist in homebridge-fhem nicht standardmäßig vorhanden (kann also nicht aus dem dropdown ausgewählt werden, sondern muss über das Befehlsfeld zugewiesen werden):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr meinSensor genericDeviceType HumiditySensor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden die Readings gemappt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr meinSensor homebridgeMapping clear CurrentRelativeHumidity=humidity StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW CurrentTemperature=temperature&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;clear&amp;lt;/code&amp;gt;löscht default mappings - das wird in der Regel nicht notwendig sein, schadet aber nicht&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;CurrentRelativeHumidity&amp;lt;/code&amp;gt; ist die relevante Homekit Characteristic - wird mit dem entsprechenden Reading des Sensors gemappt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;StatusLowBattery&amp;lt;/code&amp;gt; erwartet entweder BATTERY_LEVEL_NORMAL oder _LOW. Mein Sensor liefert ok zurück, wenn alles gut ist, also wird &amp;quot;ok&amp;quot; auf _NORMAL gemappt, alles andere auf _LOW. &lt;br /&gt;
&lt;br /&gt;
Der Opus XT300 Bodenfeuchtesensors liefert auch noch die Temperatur - der HumiditySensor Service sieht das eigentlich nicht vor, daher wird die Temperatur auch nicht in der Apple &amp;quot;Home&amp;quot; App angezeigt. Bei Eve wird die Temperatur hingegen berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
== EnOcean STM 250 Tür-/Fensterkontakt ==&lt;br /&gt;
Der STM 250 liefert als Status in FHEM &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;, wenn das Fenster offen und damit der Kontakt &amp;quot;offen&amp;quot; ist. Analog liefert er &amp;lt;code&amp;gt;closed&amp;lt;/code&amp;gt; wenn das Fenster geschlossen und damit auch der Kontakt geschlossen ist. Diese Statusangaben sind sehr intuitiv zu verstehen und zu interpretieren. &lt;br /&gt;
&lt;br /&gt;
Die characteristic &amp;lt;code&amp;gt;ContactSensorState&amp;lt;/code&amp;gt; von HomeKit liefert entweder den Wert &amp;lt;code&amp;gt;CONTACT_DETECTED=0&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;CONTACT_NOT_DETECTED=1&amp;lt;/code&amp;gt; zurück. Wobei &amp;lt;code&amp;gt;CONTACT_DETECTED&amp;lt;/code&amp;gt; bedeutet, dass der Kontakt geschlossen ist. Je nach Darstellung in der HomeKit-fähigen App muss dieses Verhalten bei der Interpretation berücksichtigt werden. Die App Eve von Elgato zum Beispiel liefert für Kontaktsensoren &amp;quot;JA&amp;quot; oder &amp;quot;NEIN&amp;quot; mit der Bedeutung &amp;lt;code&amp;gt;CONTACT_DETECTED=0=JA&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;CONTACT_NOT_DETECTED=1=NEIN&amp;lt;/code&amp;gt; zurück.&lt;br /&gt;
&lt;br /&gt;
Noch ein wichtiger Punkt: Um einen Sensorkontakt sinnvoll einzurichten sollte als zusätzlicher Wert für das Attribut &amp;lt;code&amp;gt;genericdeviceType&amp;lt;/code&amp;gt; der Wert &amp;lt;code&amp;gt;ContactSensor&amp;lt;/code&amp;gt; hinzugefügt werden. Wie das geht ist im Eintrag [[Homebridge_einrichten#FHEM_konfigurieren | Homebridge einrichten]] ausführlicher beschrieben.&lt;br /&gt;
&lt;br /&gt;
Folgende Attribute dann hinzufügen:&lt;br /&gt;
 attr STM250 genericDeviceType ContactSensor&lt;br /&gt;
 attr STM250 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 9893&lt;br /&gt;
 Homebridge 0.2.16&lt;br /&gt;
 homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}&lt;br /&gt;
&lt;br /&gt;
== Modul RESIDENTS für Anwesenheitserkennung und Steuerung der Anwesenheit benutzen ==&lt;br /&gt;
[[Datei:Homebridge_bewohner_zu_szene.jpeg|mini|Schaltzustand eines Bewohners zu einer Szene hinzufügen]]&lt;br /&gt;
Aus den einzelnen Komponenten des Moduls RESIDENTS, homebridge sowie der characteristic &amp;lt;code&amp;gt;On&amp;lt;/code&amp;gt; und der Szenensteuerung lässt sich eine gleichzeitige Steuerung der Anwesenheit und Anwesenheitserkennung basteln.&lt;br /&gt;
&lt;br /&gt;
Dazu müssen folgende Schritte unternommen werden:&lt;br /&gt;
* einem Bewohner aus dem Modul ROOMMATE die Steuerung über homebridgeMapping hinzufügen&lt;br /&gt;
* Szene für &amp;quot;Ich bin zu Hause&amp;quot; und &amp;quot;Ich gehe jetzt&amp;quot; in einer HomeKit-fähigen App wie z.B. Eve einrichten&lt;br /&gt;
&lt;br /&gt;
Man kann einen beliebigen Bewohner aus dem Modul ROOMMATE nehmen und ihn über die characteristic &amp;lt;code&amp;gt;On&amp;lt;/code&amp;gt; in Form eines Schalters sozusagen schaltbar machen. Nur wird das Ein- und Ausschalten des Bewohners über HomeKit in FHEM auf den Status home bzw. absent gemappt. Seit dem 06.02.2016 werden RESIDENTS automatisch als Occupancy Sensor für HomeKit annonciert. Nun noch die Attribute des ROOMMATE wie folgt setzen:&lt;br /&gt;
 attr &amp;lt;ROOMMATE&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;ROOMMATE&amp;gt; homebridgeMapping On=state,valueOn=/home|awoken|asleep|gotosleep/,valueOff=/gone|absent/,cmdOn=home,cmdOff=absent&lt;br /&gt;
&lt;br /&gt;
Natürlich muss der Bewohner noch dem Filter von homebridge hinzugefügt und homebridge neu gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Anschließend geht es in der HomeKit-fähigen App Deiner Wahl weiter. In Eve von Elgato ist von vornherein zum Beispiel vorgesehen, dass man zwei Szenen &amp;quot;Ich bin zuhause&amp;quot; und &amp;quot;Ich verlasse das Haus&amp;quot; hat. Zu diesen Szenen wird eine Aktion hinzugefügt indem der Bewohner, den das ROOMMATE-Modul meldet zur Szene hinzugefügt wird und beim Nachhausekommen &amp;quot;eingeschaltet&amp;quot; wird. Genauso wird mit der Szene &amp;quot;Ich verlasse das Haus&amp;quot; verfahren: Bewohner zur Szene hinzufügen und den Schaltvorgang auf &amp;quot;ausschalten&amp;quot; setzen.&lt;br /&gt;
&lt;br /&gt;
Mit den Sprachbefehlen &amp;quot;Ich bin zuhause&amp;quot; oder &amp;quot;Ich verlasse das Haus&amp;quot; wird die entsprechende Szene eingeschaltet, homebridge schaltet über das &amp;lt;code&amp;gt;homebridgeMapping&amp;lt;/code&amp;gt; Attribut dann den Bewohner auf &amp;quot;home&amp;quot; oder &amp;quot;absent&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 9893&lt;br /&gt;
 Homebridge 0.2.16&lt;br /&gt;
 homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}&lt;br /&gt;
&lt;br /&gt;
Eine noch etwas bessere Schaltmöglichkeit bietet &#039;&#039;&#039;genericDeviceType security&#039;&#039;&#039;.&lt;br /&gt;
Das Mapping für ROOMMATE sieht wie folgt aus:&lt;br /&gt;
 attr TYPE=ROOMMATE genericDeviceType security&lt;br /&gt;
 attr TYPE=ROOMMATE homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;gone:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+gone,delay=1&lt;br /&gt;
für GUEST:&lt;br /&gt;
 attr TYPE=GUEST genericDeviceType security&lt;br /&gt;
 attr TYPE=GUEST homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;none:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+none,delay=1&lt;br /&gt;
&lt;br /&gt;
== ZWave Türschloss Vision ZM1701 einbinden ==&lt;br /&gt;
Das ZWave Türschloss ZM1701 von der Firma Vision sendet seinen aktuellen Schließstatus in ein einzelnes Reading wie &amp;quot;lock&amp;quot;, sondern schickt eine ganze Reihe von Informationen über den Zustand in das Reading &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt;. Das Schließen und Öffnen der Türschlosses wird auch nicht mit einem Setzen des &amp;lt;code&amp;gt;state&amp;lt;/code&amp;gt; erreicht, sondern mit dem Setzen von &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt;. Das macht das Einbinden in homebridge nicht trivial, funktioniert aber über folgendes Homebridge-Mapping:&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; genericDeviceType lock&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open&lt;br /&gt;
&lt;br /&gt;
Kurz zur Erklärung: Um ein Schloss über HomeKit steuern zu können braucht es zwei characteristics. LockCurrentState zeigt an, ob das Schloss geöffnet oder geschlossen ist. Und mit LockTargetState wird das Schloss geöffnet oder geschlossen. Damit der aktuelle Status des Schlosses ausgelesen werden kann, muss aus dem FHEM-Reading &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt; die Zeichenfolge &amp;lt;code&amp;gt; secured&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;unsecured&amp;lt;/code&amp;gt; extrahiert werden, daher die beiden regulären Ausdrücke &amp;lt;code&amp;gt;/\ssecured/&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;/unsecured/&amp;lt;/code&amp;gt;. In der characteristic &amp;lt;code&amp;gt;LockTargetState&amp;lt;/code&amp;gt; muss sowohl der aktuelle Status des Schlosses als auch das Kommando angegeben werden, schließlich möchte man ein geschlossenes Schloss nicht nochmal schließen. Daher wird erst aus dem Reading &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt; der aktuelle Status des Schlosses ausgelesen und die damit korrespondierenden Befehle über &amp;lt;code&amp;gt;cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open&amp;lt;/code&amp;gt; generiert.&lt;br /&gt;
&lt;br /&gt;
Wer es in FHEM über ein webCmd einfacher zu bedienen haben möchte, fügt bitte noch die dafür notwendigen Attribute und die leicht geänderten homebridgeMappings wie folgt ein:&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; genericDeviceType lock&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:close;UNSECURED:open&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; /doorLockOperation open:open/doorLockOperation close:close&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; webCmd open:close&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 12191&lt;br /&gt;
 homebridge 0.4.6&lt;br /&gt;
 homebridge-fhem 0.2.48&lt;br /&gt;
&lt;br /&gt;
== Roomba über THINKINGCLEANER Modul ==&lt;br /&gt;
 attr &amp;lt;THINKINGCLEANER&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;THINKINGCLEANER&amp;gt; homebridgeMapping clear On=state,valueOn=/^(on|dock)/,cmdOn=on,cmdOff=off,nocache=1 ChargingState=deviceStatus,values=/(_recon|_full|_trickle)$/:CHARGING;/^.*/:NOT_CHARGING&lt;br /&gt;
 attr &amp;lt;THINKINGCLEANER&amp;gt; siriName Robby&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 12680&lt;br /&gt;
 homebridge 0.4.11&lt;br /&gt;
 homebridge-fhem 0.2.66&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Homematic HM-CC-RT-DN Funk-Heizkörperthermostat ==&lt;br /&gt;
[[Datei:HM-CC-RT-DN-Eve.PNG|mini|Darstellung des HM-CC-RT-DN in der iOS App Eve]]&lt;br /&gt;
 attr &amp;lt;HMCCRTDN_Channel2_Clima&amp;gt; homebridgeMapping TargetTemperature=desired-temp::desired-temp,minValue=5,maxValue=35,minStep=0.5,nocache=1&lt;br /&gt;
                      CurrentTemperature=BU_Heizung_01_Clima:measured-temp,nocache=1&lt;br /&gt;
                      StatusLowBattery=BU_Heizung_01:battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW&lt;br /&gt;
                      TargetHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:3,cmds=OFF:controlManu+off;;HEAT:controlMode+boost;;AUTO:controlMode+auto;;COOL:controlManu+17.0&lt;br /&gt;
                      CurrentHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:0,valud=OFF&lt;br /&gt;
 attr &amp;lt;HMCCRTDN_Channel2_Clima&amp;gt; siriName Robby&lt;br /&gt;
Dieses Mapping bezieht sich auf ein vorhandenes &#039;&#039;userReading&#039;&#039; mit dem Namen &amp;lt;code&amp;gt;heatingState&amp;lt;/code&amp;gt;, womit Homekit die einzelnen Status nachher unterscheidet.&lt;br /&gt;
 attr &amp;lt;HM-CC-RT-DN_Clima&amp;gt; userReadings heatingState {(ReadingsVal($NAME,&amp;quot;ValvePosition&amp;quot;,0) &amp;gt; 0 || ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;on&amp;quot;) ? &amp;quot;HEAT&amp;quot; : ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;off&amp;quot; ? &amp;quot;OFF&amp;quot; : ReadingsVal($NAME,&amp;quot;controlMode&amp;quot;,&amp;quot;auto&amp;quot;) eq &amp;quot;auto&amp;quot; ? &amp;quot;AUTO&amp;quot; : (ReadingsVal($NAME,&amp;quot;measured-temp&amp;quot;,20) &amp;gt; ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,20)) ? &amp;quot;COOL&amp;quot; : &amp;quot;AUTO&amp;quot;}&lt;br /&gt;
Global auf alle in FHEM angelegten HM-CC-RT-DN, lässt sich mit folgendem Befehl das &#039;&#039;userReading&#039;&#039; anlegen.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,59211.msg505986.html#msg505986 Forumsthread].&lt;br /&gt;
&lt;br /&gt;
 attr TYPE=CUL_HM:FILTER=model=HM-CC-RT-DN:FILTER=chanNo=04 userReadings heatingState {(ReadingsVal($NAME,&amp;quot;ValvePosition&amp;quot;,0) &amp;gt; 0 || ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;on&amp;quot;) ? &amp;quot;HEAT&amp;quot; : ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;off&amp;quot; ? &amp;quot;OFF&amp;quot; : ReadingsVal($NAME,&amp;quot;controlMode&amp;quot;,&amp;quot;auto&amp;quot;) eq &amp;quot;auto&amp;quot; ? &amp;quot;AUTO&amp;quot; : (ReadingsVal($NAME,&amp;quot;measured-temp&amp;quot;,20) &amp;gt; ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,20)) ? &amp;quot;COOL&amp;quot; : &amp;quot;AUTO&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Xiaomi Vacuum Cleaner 1. Generation ==&lt;br /&gt;
[[Datei:XIAOMI_VACUUM_CLEANER-Gen1.jpg|mini|XIAOMI VACUUM 1. GEN in EVE]]&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping On=state,valueOn=Cleaning,cmdOn=start,cmdOff=charge&lt;br /&gt;
                      RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1&lt;br /&gt;
                      BatteryLevel=batteryLevel,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW&lt;br /&gt;
                      ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/.*/:NOT_CHARGEABLE&lt;br /&gt;
                      OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/.*/:OCCUPANCY_NOT_DETECTED&lt;br /&gt;
                      FilterLifeLevel=consumables_filter,minValue=0,maxValue=100&lt;br /&gt;
                      FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER&lt;br /&gt;
&lt;br /&gt;
== Roborock S50 (2. Generation des Xiaomi Vacuum Cleaners) ==&lt;br /&gt;
[[Datei:Roborock S50.png|mini]]&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
Das folgende Mapping für den Roborook S50 beinhaltet neben den Characteristics der 1. Genration des Xiaomi Vacuum Cleaners weitere Custom Mappings. Diese werden auch auf dem Bild dargestellt. Falls das einem zu viele Informationen sind, können diese beim Einfügen einfach weggelassen oder in EVE ausgeblendet werden.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping On=state,valueOn=Cleaning,cmdOn=start,cmdOff=charge&lt;br /&gt;
                      RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1&lt;br /&gt;
                      BatteryLevel=batteryPercent,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      StatusLowBattery=batteryState,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW&lt;br /&gt;
                      ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/.*/:NOT_CHARGEABLE&lt;br /&gt;
                      OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/.*/:OCCUPANCY_NOT_DETECTED&lt;br /&gt;
                      2af6d0d0-3691-4f0d-9c9c-c1098295b1cb=consumables_sensors,name=Reinigung+Sensoren,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      fd11b965-052e-430f-b08f-206287d8bc00=consumables_filter,name=Austausch+Filter,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      fe7a8dac-dff3-4a07-8a5e-0d6abbf0df0c=consumables_main_brush,name=Austausch+Hauptbürste,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      4f9b2a22-b764-4fc1-8cd2-99383924394c=consumables_side_brush,name=Austausch+Seitenbürste,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      FilterLifeLevel=consumables_filter,minValue=0,maxValue=100&lt;br /&gt;
                      FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER&lt;br /&gt;
                      4896763a-26f7-400b-9734-2ce6564ceba2=total_clean_time,name=Lebenszeitersparnis,format=FLOAT,minStep=1,unit=h&lt;br /&gt;
                      82af5fd7-50a3-4ab3-81d3-1f7903de612a=total_clean_area,name=Gereinigte+Fläche,format=FLOAT,minStep=1,unit=m²&lt;br /&gt;
                      00d2ef14-b429-4569-8af3-c342d41cf383=total_cleans,name=Reinigungsvorgänge,format=FLOAT,minStep=1&lt;br /&gt;
                      e8d1027e-b068-40d5-9efd-f161b1b52774=device_firmware,name=Firmware,format=STRING&lt;br /&gt;
&lt;br /&gt;
== Xiaomi Fan (ältere Generationen mit Luftfeuchtigkeits- und Temperatursensor und Battery-Readings) ==&lt;br /&gt;
[[Datei:Xiaomi DC Pedestal Fan.png|mini]]&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Ventilator mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
Die ältere Generation enthält Sensoren und somit Readings für Luftfeuchtigkeit, Temperatur und auch Batteriestatus. Diese fehlen bei den neueren Generation dieses Ventilators, siehe Bilder. Da anscheinend jedes Jahr neue Generationen dieses Ventilators herausgekommen sind, ist nicht klar bis zu welcher Generation diese Sensoren enthalten waren.&lt;br /&gt;
&lt;br /&gt;
Mit folgenden Geräten wurde folgendes Mapping erstellt und somit erfolgreich getestet:&lt;br /&gt;
&lt;br /&gt;
 - Xiaomi DC Pedestal Fan (FHEM model fehlt, Default Hostname am Router: zhimi-fan-v3)&lt;br /&gt;
 - Liste bitte ergänzen!&lt;br /&gt;
&lt;br /&gt;
Um möglichst viele Funktionen bereitzustellen, wurden auch Characteristics von anderen DeviceTypes verwendet. Erklärung zu den Characteristics:&lt;br /&gt;
&lt;br /&gt;
 - Die Kindersicherung (LockPhysicalControls) ist in Eve über das kleine Einstellungssymbol zu finden. &lt;br /&gt;
 - Mit AudioFeedback/Audio-Bestätigung werden die Töne des Lüfters ein bzw. ausgeschaltet.&lt;br /&gt;
 - Mit NightVision/Nachtsicht werden die LEDs ein (bright) bzw. ausgeschaltet (off).&lt;br /&gt;
 - Mit Mute/Audio wird der Windmodus von Straight zu Natural geschaltet.&lt;br /&gt;
 - Mit TargetTiltAngle/Neigung kann der Schwenkwinkel justiert werden.&lt;br /&gt;
 - Mit SwingMode/Schwenken kann der Schwenkmodus ein bzw. ausgeschaltet werden.&lt;br /&gt;
 - Der Rest ist selbsterklärend.&lt;br /&gt;
&lt;br /&gt;
homebridgeMapping:&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType Fan&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping&lt;br /&gt;
                      clear&lt;br /&gt;
                      On:power,cmdOn=on,cmdOff=off,valueOn=on,valueOff=off&lt;br /&gt;
                      LockPhysicalControls=child_lock,values=on:CONTROL_LOCK_ENABLED;;off:CONTROL_LOCK_DISABLED,cmds=CONTROL_LOCK_ENABLED:child_lock+on;CONTROL_LOCK_DISABLED:child_lock+off&lt;br /&gt;
                      RotationSpeed=level,minValue=0,maxValue=100,cmd=level,delay=1&lt;br /&gt;
                      TargetTiltAngle=angle,minValue=30,maxValue=120,minStep=30,cmd=angle&lt;br /&gt;
                      SwingMode=angle_enable,values=on:SWING_ENABLED;;off:SWING_DISABLED,cmdOn=angle_enable+on,cmdOff=angle_enable+off&lt;br /&gt;
                      CurrentRelativeHumidity=humidity&lt;br /&gt;
                      CurrentTemperature=temperature&lt;br /&gt;
                      BatteryLevel=batteryPercent,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      StatusLowBattery=batteryState,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW&lt;br /&gt;
                      ChargingState=charging,values=complete:NOT_CHARGING;;progress:CHARGING;;/.*/:NOT_CHARGEABLE&lt;br /&gt;
                      AudioFeedback:buzzer,cmdOn=buzzer+on,cmdOff=buzzer+off,valueOn=on,valueOff=off&lt;br /&gt;
                      NightVision:led,cmdOn=led+off,cmdOff=led+bright,valueOn=off,valueOff=bright&lt;br /&gt;
                      Mute:mode,cmdOn=mode+straight,cmdOff=mode+natural,valueOn=straight,valueOff=natural&lt;br /&gt;
                      CurrentFanState:power,values=on:BLOWING_AIR;;off:INACTIVE;;/.*/:IDLE&lt;br /&gt;
&lt;br /&gt;
== Xiaomi Fan (neuere Generationen ohne Luftfeuchtigkeits- und Temperatursensor und Battery-Readings) ==&lt;br /&gt;
[[Datei:Xiaomi Standing Fan 2 bzw. 2S.png|mini]]&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Ventilator mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
Den neueren Generationen dieses Ventilators fehlen Sensoren und somit Readings für Luftfeuchtigkeit, Temperatur und auch Batteriestatus. Diese sind bei der älteren Generation dieses Ventilators enthalten, siehe vorangegangenes Beispiel.&lt;br /&gt;
&lt;br /&gt;
Dieses Mapping wurde mit dem &amp;quot;2S&amp;quot; erstellt. Es sollte aber mindestens auch mit einem &amp;quot;Xiaomi Standing Fan 2&amp;quot; (ohne Akku) funktionieren, da auch der &amp;quot;Xiaomi Standing Fan 2S&amp;quot; (mit Akku) kein Reading für die Batterie bereitstellt. Ansonsten gibt es wohl auch noch Generationen zwischen dem &amp;quot;Xiaomi DC Pedestal Fan&amp;quot; und den &amp;quot;Xiaomi Standing Fan 2/2S&amp;quot;. Es ist davon auszugehen, dass dieses Beispiel genauso auch bei diesen Modellen funktioniert.&lt;br /&gt;
&lt;br /&gt;
Mit folgenden Geräten wurde folgendes Mapping erstellt und somit erfolgreich getestet:&lt;br /&gt;
&lt;br /&gt;
 - 2019 Xiaomi Standing Fan 2S (FHEM model bzw. Default Hostname am Router: zhimi-fan-za4)&lt;br /&gt;
 - 2018 Xiaomi ZhiMiDCVariableFrequencyFan ZRFFS01ZM (FHEM model bzw. Default Hostname am Router: zhimi-fan-za1)&lt;br /&gt;
 - Liste bitte ergänzen!&lt;br /&gt;
&lt;br /&gt;
Um möglichst viele Funktionen bereitzustellen, wurden auch Characteristics von anderen DeviceTypes verwendet. Erklärung zu den Characteristics:&lt;br /&gt;
&lt;br /&gt;
 - Die Kindersicherung (LockPhysicalControls) ist in Eve über das kleine Einstellungssymbol zu finden. &lt;br /&gt;
 - Mit AudioFeedback/Audio-Bestätigung werden die Töne des Lüfters ein bzw. ausgeschaltet.&lt;br /&gt;
 - Mit NightVision/Nachtsicht werden die LEDs ein (bright) bzw. ausgeschaltet (off).&lt;br /&gt;
 - Mit Mute/Audio wird der Windmodus von Straight zu Natural geschaltet.&lt;br /&gt;
 - Mit TargetTiltAngle/Neigung kann der Schwenkwinkel justiert werden.&lt;br /&gt;
 - Mit SwingMode/Schwenken kann der Schwenkmodus ein bzw. ausgeschaltet werden.&lt;br /&gt;
 - Der Rest ist selbsterklärend.&lt;br /&gt;
&lt;br /&gt;
homebridgeMapping:&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType Fan&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping &lt;br /&gt;
                      clear&lt;br /&gt;
                      On:power,cmdOn=on,cmdOff=off,valueOn=on,valueOff=off&lt;br /&gt;
                      LockPhysicalControls=child_lock,values=on:CONTROL_LOCK_ENABLED;;off:CONTROL_LOCK_DISABLED,cmds=CONTROL_LOCK_ENABLED:child_lock+on;CONTROL_LOCK_DISABLED:child_lock+off&lt;br /&gt;
                      RotationSpeed=level,minValue=0,maxValue=100,cmd=level,delay=1&lt;br /&gt;
                      TargetTiltAngle=angle,minValue=30,maxValue=120,minStep=30,cmd=angle&lt;br /&gt;
                      SwingMode=angle_enable,values=on:SWING_ENABLED;;off:SWING_DISABLED,cmdOn=angle_enable+on,cmdOff=angle_enable+off&lt;br /&gt;
                      AudioFeedback:buzzer,cmdOn=buzzer+on,cmdOff=buzzer+off,valueOn=on,valueOff=off&lt;br /&gt;
                      NightVision:led,cmdOn=led+off,cmdOff=led+bright,valueOn=off,valueOff=bright&lt;br /&gt;
                      Mute:mode,cmdOn=mode+straight,cmdOff=mode+natural,valueOn=straight,valueOff=natural&lt;br /&gt;
                      CurrentFanState:power,values=on:BLOWING_AIR;;off:INACTIVE;;/.*/:IDLE&lt;br /&gt;
&lt;br /&gt;
== Homematic SmokeDetector ==&lt;br /&gt;
 [[Datei:Homebridge-Homematic-Smokedetector-Gen1.jpg|mini|Homebridge-Homematic-Smokedetector-Gen1 in EVE]]&lt;br /&gt;
Es sind keine Homebridge Mappings für die Rauch Meldung erforderlich.&lt;br /&gt;
&lt;br /&gt;
Allerdings ist ein Mapping für den Batterie Zustand nötig, siehe Unten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;SmokeDetector&amp;gt; genericDeviceType SmokeSensor&lt;br /&gt;
 attr &amp;lt;SmokeDetector&amp;gt; subType smokeDetector&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;SmokeDetector&amp;gt; homebridgeMapping StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW&lt;br /&gt;
&lt;br /&gt;
== Vallox Belüftungsanlage ==&lt;br /&gt;
Die Steuerung der Lüftungsgeschwindigkeit ist nur in Prozent möglich. Die Umrechnung erfolgt im [[Vallox]] Modul.&lt;br /&gt;
Hierzu wurde das Reading &#039;&#039;FanSpeedPct&#039;&#039; hinzugefügt.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;Vallox&amp;gt; genericDeviceType Fan&lt;br /&gt;
 attr &amp;lt;Vallox&amp;gt; homebridgeMapping clear&lt;br /&gt;
                      model=Vallox&lt;br /&gt;
                      On=PowerState,valueOn=1,readOnly=1&lt;br /&gt;
                      RotationSpeed=FanSpeedPct,minValue=1,maxValue=100,cmd=FanSpeedPct,delay=1&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Hoppel118</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Homebridge_User_Configs&amp;diff=30784</id>
		<title>Homebridge User Configs</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Homebridge_User_Configs&amp;diff=30784"/>
		<updated>2019-06-19T22:59:42Z</updated>

		<summary type="html">&lt;p&gt;Hoppel118: Bilder ergänzt bei den beiden Xiaomi Fans und dem Roborock S50&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Eintrag dient zur Sammlung funktionsfähiger Homebridge Configs.&lt;br /&gt;
&lt;br /&gt;
Bitte immer die FHEM Version und Homebridge Version angegeben.&lt;br /&gt;
&lt;br /&gt;
Sehr gute Hinweise gibt es hier: http://www.meintechblog.de/2015/10/mit-siri-und-fhem-das-gesamte-smart-home-per-stimme-steuern/&lt;br /&gt;
== Mögliche Mappings ==&lt;br /&gt;
Die Möglichen Mappings können hier nachgelesen werden https://github.com/KhaosT/HAP-NodeJS/blob/master/lib/gen/HomeKitTypes.js&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel:&lt;br /&gt;
 Characteristic.Brightness = function() {&lt;br /&gt;
  Characteristic.call(this, &#039;Brightness&#039;, &#039;00000008-0000-1000-8000-0026BB765291&#039;);&lt;br /&gt;
  this.setProps({&lt;br /&gt;
    format: Characteristic.Formats.INT,&lt;br /&gt;
    unit: Characteristic.Units.PERCENTAGE,&lt;br /&gt;
    maxValue: 100,&lt;br /&gt;
    minValue: 0,&lt;br /&gt;
    minStep: 1,&lt;br /&gt;
    perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY]&lt;br /&gt;
  });&lt;br /&gt;
  this.value = this.getDefaultValue();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Das Mapping in diesem Fall, hat den Titel Brightness.&lt;br /&gt;
&lt;br /&gt;
Die Werte können in 1er Schritten zwischen 0 und 100 liegen (max und min Value)&lt;br /&gt;
== Feuchtesensor ==&lt;br /&gt;
Zum Einstieg etwas leicht nachvollziehbares. &lt;br /&gt;
&lt;br /&gt;
Feuchtesensoren haben in der Regel ein &amp;quot;humidity&amp;quot; Reading, im Falle des Opus XT300 Bodenfeuchtesensors auch Temperatur und Batterie Level. Homekit unterstützt einen &amp;quot;HumiditySensor&amp;quot; Service. Dieser ist in homebridge-fhem nicht standardmäßig vorhanden (kann also nicht aus dem dropdown ausgewählt werden, sondern muss über das Befehlsfeld zugewiesen werden):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr meinSensor genericDeviceType HumiditySensor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden die Readings gemappt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr meinSensor homebridgeMapping clear CurrentRelativeHumidity=humidity StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW CurrentTemperature=temperature&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;clear&amp;lt;/code&amp;gt;löscht default mappings - das wird in der Regel nicht notwendig sein, schadet aber nicht&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;CurrentRelativeHumidity&amp;lt;/code&amp;gt; ist die relevante Homekit Characteristic - wird mit dem entsprechenden Reading des Sensors gemappt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;StatusLowBattery&amp;lt;/code&amp;gt; erwartet entweder BATTERY_LEVEL_NORMAL oder _LOW. Mein Sensor liefert ok zurück, wenn alles gut ist, also wird &amp;quot;ok&amp;quot; auf _NORMAL gemappt, alles andere auf _LOW. &lt;br /&gt;
&lt;br /&gt;
Der Opus XT300 Bodenfeuchtesensors liefert auch noch die Temperatur - der HumiditySensor Service sieht das eigentlich nicht vor, daher wird die Temperatur auch nicht in der Apple &amp;quot;Home&amp;quot; App angezeigt. Bei Eve wird die Temperatur hingegen berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
== EnOcean STM 250 Tür-/Fensterkontakt ==&lt;br /&gt;
Der STM 250 liefert als Status in FHEM &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;, wenn das Fenster offen und damit der Kontakt &amp;quot;offen&amp;quot; ist. Analog liefert er &amp;lt;code&amp;gt;closed&amp;lt;/code&amp;gt; wenn das Fenster geschlossen und damit auch der Kontakt geschlossen ist. Diese Statusangaben sind sehr intuitiv zu verstehen und zu interpretieren. &lt;br /&gt;
&lt;br /&gt;
Die characteristic &amp;lt;code&amp;gt;ContactSensorState&amp;lt;/code&amp;gt; von HomeKit liefert entweder den Wert &amp;lt;code&amp;gt;CONTACT_DETECTED=0&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;CONTACT_NOT_DETECTED=1&amp;lt;/code&amp;gt; zurück. Wobei &amp;lt;code&amp;gt;CONTACT_DETECTED&amp;lt;/code&amp;gt; bedeutet, dass der Kontakt geschlossen ist. Je nach Darstellung in der HomeKit-fähigen App muss dieses Verhalten bei der Interpretation berücksichtigt werden. Die App Eve von Elgato zum Beispiel liefert für Kontaktsensoren &amp;quot;JA&amp;quot; oder &amp;quot;NEIN&amp;quot; mit der Bedeutung &amp;lt;code&amp;gt;CONTACT_DETECTED=0=JA&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;CONTACT_NOT_DETECTED=1=NEIN&amp;lt;/code&amp;gt; zurück.&lt;br /&gt;
&lt;br /&gt;
Noch ein wichtiger Punkt: Um einen Sensorkontakt sinnvoll einzurichten sollte als zusätzlicher Wert für das Attribut &amp;lt;code&amp;gt;genericdeviceType&amp;lt;/code&amp;gt; der Wert &amp;lt;code&amp;gt;ContactSensor&amp;lt;/code&amp;gt; hinzugefügt werden. Wie das geht ist im Eintrag [[Homebridge_einrichten#FHEM_konfigurieren | Homebridge einrichten]] ausführlicher beschrieben.&lt;br /&gt;
&lt;br /&gt;
Folgende Attribute dann hinzufügen:&lt;br /&gt;
 attr STM250 genericDeviceType ContactSensor&lt;br /&gt;
 attr STM250 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 9893&lt;br /&gt;
 Homebridge 0.2.16&lt;br /&gt;
 homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}&lt;br /&gt;
&lt;br /&gt;
== Modul RESIDENTS für Anwesenheitserkennung und Steuerung der Anwesenheit benutzen ==&lt;br /&gt;
[[Datei:Homebridge_bewohner_zu_szene.jpeg|mini|Schaltzustand eines Bewohners zu einer Szene hinzufügen]]&lt;br /&gt;
Aus den einzelnen Komponenten des Moduls RESIDENTS, homebridge sowie der characteristic &amp;lt;code&amp;gt;On&amp;lt;/code&amp;gt; und der Szenensteuerung lässt sich eine gleichzeitige Steuerung der Anwesenheit und Anwesenheitserkennung basteln.&lt;br /&gt;
&lt;br /&gt;
Dazu müssen folgende Schritte unternommen werden:&lt;br /&gt;
* einem Bewohner aus dem Modul ROOMMATE die Steuerung über homebridgeMapping hinzufügen&lt;br /&gt;
* Szene für &amp;quot;Ich bin zu Hause&amp;quot; und &amp;quot;Ich gehe jetzt&amp;quot; in einer HomeKit-fähigen App wie z.B. Eve einrichten&lt;br /&gt;
&lt;br /&gt;
Man kann einen beliebigen Bewohner aus dem Modul ROOMMATE nehmen und ihn über die characteristic &amp;lt;code&amp;gt;On&amp;lt;/code&amp;gt; in Form eines Schalters sozusagen schaltbar machen. Nur wird das Ein- und Ausschalten des Bewohners über HomeKit in FHEM auf den Status home bzw. absent gemappt. Seit dem 06.02.2016 werden RESIDENTS automatisch als Occupancy Sensor für HomeKit annonciert. Nun noch die Attribute des ROOMMATE wie folgt setzen:&lt;br /&gt;
 attr &amp;lt;ROOMMATE&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;ROOMMATE&amp;gt; homebridgeMapping On=state,valueOn=/home|awoken|asleep|gotosleep/,valueOff=/gone|absent/,cmdOn=home,cmdOff=absent&lt;br /&gt;
&lt;br /&gt;
Natürlich muss der Bewohner noch dem Filter von homebridge hinzugefügt und homebridge neu gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Anschließend geht es in der HomeKit-fähigen App Deiner Wahl weiter. In Eve von Elgato ist von vornherein zum Beispiel vorgesehen, dass man zwei Szenen &amp;quot;Ich bin zuhause&amp;quot; und &amp;quot;Ich verlasse das Haus&amp;quot; hat. Zu diesen Szenen wird eine Aktion hinzugefügt indem der Bewohner, den das ROOMMATE-Modul meldet zur Szene hinzugefügt wird und beim Nachhausekommen &amp;quot;eingeschaltet&amp;quot; wird. Genauso wird mit der Szene &amp;quot;Ich verlasse das Haus&amp;quot; verfahren: Bewohner zur Szene hinzufügen und den Schaltvorgang auf &amp;quot;ausschalten&amp;quot; setzen.&lt;br /&gt;
&lt;br /&gt;
Mit den Sprachbefehlen &amp;quot;Ich bin zuhause&amp;quot; oder &amp;quot;Ich verlasse das Haus&amp;quot; wird die entsprechende Szene eingeschaltet, homebridge schaltet über das &amp;lt;code&amp;gt;homebridgeMapping&amp;lt;/code&amp;gt; Attribut dann den Bewohner auf &amp;quot;home&amp;quot; oder &amp;quot;absent&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 9893&lt;br /&gt;
 Homebridge 0.2.16&lt;br /&gt;
 homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}&lt;br /&gt;
&lt;br /&gt;
Eine noch etwas bessere Schaltmöglichkeit bietet &#039;&#039;&#039;genericDeviceType security&#039;&#039;&#039;.&lt;br /&gt;
Das Mapping für ROOMMATE sieht wie folgt aus:&lt;br /&gt;
 attr TYPE=ROOMMATE genericDeviceType security&lt;br /&gt;
 attr TYPE=ROOMMATE homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;gone:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+gone,delay=1&lt;br /&gt;
für GUEST:&lt;br /&gt;
 attr TYPE=GUEST genericDeviceType security&lt;br /&gt;
 attr TYPE=GUEST homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;none:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+none,delay=1&lt;br /&gt;
&lt;br /&gt;
== ZWave Türschloss Vision ZM1701 einbinden ==&lt;br /&gt;
Das ZWave Türschloss ZM1701 von der Firma Vision sendet seinen aktuellen Schließstatus in ein einzelnes Reading wie &amp;quot;lock&amp;quot;, sondern schickt eine ganze Reihe von Informationen über den Zustand in das Reading &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt;. Das Schließen und Öffnen der Türschlosses wird auch nicht mit einem Setzen des &amp;lt;code&amp;gt;state&amp;lt;/code&amp;gt; erreicht, sondern mit dem Setzen von &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt;. Das macht das Einbinden in homebridge nicht trivial, funktioniert aber über folgendes Homebridge-Mapping:&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; genericDeviceType lock&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open&lt;br /&gt;
&lt;br /&gt;
Kurz zur Erklärung: Um ein Schloss über HomeKit steuern zu können braucht es zwei characteristics. LockCurrentState zeigt an, ob das Schloss geöffnet oder geschlossen ist. Und mit LockTargetState wird das Schloss geöffnet oder geschlossen. Damit der aktuelle Status des Schlosses ausgelesen werden kann, muss aus dem FHEM-Reading &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt; die Zeichenfolge &amp;lt;code&amp;gt; secured&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;unsecured&amp;lt;/code&amp;gt; extrahiert werden, daher die beiden regulären Ausdrücke &amp;lt;code&amp;gt;/\ssecured/&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;/unsecured/&amp;lt;/code&amp;gt;. In der characteristic &amp;lt;code&amp;gt;LockTargetState&amp;lt;/code&amp;gt; muss sowohl der aktuelle Status des Schlosses als auch das Kommando angegeben werden, schließlich möchte man ein geschlossenes Schloss nicht nochmal schließen. Daher wird erst aus dem Reading &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt; der aktuelle Status des Schlosses ausgelesen und die damit korrespondierenden Befehle über &amp;lt;code&amp;gt;cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open&amp;lt;/code&amp;gt; generiert.&lt;br /&gt;
&lt;br /&gt;
Wer es in FHEM über ein webCmd einfacher zu bedienen haben möchte, fügt bitte noch die dafür notwendigen Attribute und die leicht geänderten homebridgeMappings wie folgt ein:&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; genericDeviceType lock&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:close;UNSECURED:open&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; /doorLockOperation open:open/doorLockOperation close:close&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; webCmd open:close&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 12191&lt;br /&gt;
 homebridge 0.4.6&lt;br /&gt;
 homebridge-fhem 0.2.48&lt;br /&gt;
&lt;br /&gt;
== Roomba über THINKINGCLEANER Modul ==&lt;br /&gt;
 attr &amp;lt;THINKINGCLEANER&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;THINKINGCLEANER&amp;gt; homebridgeMapping clear On=state,valueOn=/^(on|dock)/,cmdOn=on,cmdOff=off,nocache=1 ChargingState=deviceStatus,values=/(_recon|_full|_trickle)$/:CHARGING;/^.*/:NOT_CHARGING&lt;br /&gt;
 attr &amp;lt;THINKINGCLEANER&amp;gt; siriName Robby&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 12680&lt;br /&gt;
 homebridge 0.4.11&lt;br /&gt;
 homebridge-fhem 0.2.66&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Homematic HM-CC-RT-DN Funk-Heizkörperthermostat ==&lt;br /&gt;
[[Datei:HM-CC-RT-DN-Eve.PNG|mini|Darstellung des HM-CC-RT-DN in der iOS App Eve]]&lt;br /&gt;
 attr &amp;lt;HMCCRTDN_Channel2_Clima&amp;gt; homebridgeMapping TargetTemperature=desired-temp::desired-temp,minValue=5,maxValue=35,minStep=0.5,nocache=1&lt;br /&gt;
                      CurrentTemperature=BU_Heizung_01_Clima:measured-temp,nocache=1&lt;br /&gt;
                      StatusLowBattery=BU_Heizung_01:battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW&lt;br /&gt;
                      TargetHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:3,cmds=OFF:controlManu+off;;HEAT:controlMode+boost;;AUTO:controlMode+auto;;COOL:controlManu+17.0&lt;br /&gt;
                      CurrentHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:0,valud=OFF&lt;br /&gt;
 attr &amp;lt;HMCCRTDN_Channel2_Clima&amp;gt; siriName Robby&lt;br /&gt;
Dieses Mapping bezieht sich auf ein vorhandenes &#039;&#039;userReading&#039;&#039; mit dem Namen &amp;lt;code&amp;gt;heatingState&amp;lt;/code&amp;gt;, womit Homekit die einzelnen Status nachher unterscheidet.&lt;br /&gt;
 attr &amp;lt;HM-CC-RT-DN_Clima&amp;gt; userReadings heatingState {(ReadingsVal($NAME,&amp;quot;ValvePosition&amp;quot;,0) &amp;gt; 0 || ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;on&amp;quot;) ? &amp;quot;HEAT&amp;quot; : ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;off&amp;quot; ? &amp;quot;OFF&amp;quot; : ReadingsVal($NAME,&amp;quot;controlMode&amp;quot;,&amp;quot;auto&amp;quot;) eq &amp;quot;auto&amp;quot; ? &amp;quot;AUTO&amp;quot; : (ReadingsVal($NAME,&amp;quot;measured-temp&amp;quot;,20) &amp;gt; ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,20)) ? &amp;quot;COOL&amp;quot; : &amp;quot;AUTO&amp;quot;}&lt;br /&gt;
Global auf alle in FHEM angelegten HM-CC-RT-DN, lässt sich mit folgendem Befehl das &#039;&#039;userReading&#039;&#039; anlegen.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,59211.msg505986.html#msg505986 Forumsthread].&lt;br /&gt;
&lt;br /&gt;
 attr TYPE=CUL_HM:FILTER=model=HM-CC-RT-DN:FILTER=chanNo=04 userReadings heatingState {(ReadingsVal($NAME,&amp;quot;ValvePosition&amp;quot;,0) &amp;gt; 0 || ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;on&amp;quot;) ? &amp;quot;HEAT&amp;quot; : ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;off&amp;quot; ? &amp;quot;OFF&amp;quot; : ReadingsVal($NAME,&amp;quot;controlMode&amp;quot;,&amp;quot;auto&amp;quot;) eq &amp;quot;auto&amp;quot; ? &amp;quot;AUTO&amp;quot; : (ReadingsVal($NAME,&amp;quot;measured-temp&amp;quot;,20) &amp;gt; ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,20)) ? &amp;quot;COOL&amp;quot; : &amp;quot;AUTO&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Xiaomi Vacuum Cleaner 1. Generation ==&lt;br /&gt;
[[Datei:XIAOMI_VACUUM_CLEANER-Gen1.jpg|mini|XIAOMI VACUUM 1. GEN in EVE]]&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping On=state,valueOn=Cleaning,cmdOn=start,cmdOff=charge&lt;br /&gt;
                      RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1&lt;br /&gt;
                      BatteryLevel=batteryLevel,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW&lt;br /&gt;
                      ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/.*/:NOT_CHARGEABLE&lt;br /&gt;
                      OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/.*/:OCCUPANCY_NOT_DETECTED&lt;br /&gt;
                      FilterLifeLevel=consumables_filter,minValue=0,maxValue=100&lt;br /&gt;
                      FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER&lt;br /&gt;
&lt;br /&gt;
== Roborock S50 (2. Generation des Xiaomi Vacuum Cleaners) ==&lt;br /&gt;
[[Datei:Roborock S50.png|mini]]&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
Das folgende Mapping für den Roborook S50 beinhaltet neben den Characteristics der 1. Genration des Xiaomi Vacuum Cleaners weitere Custom Mappings. Diese werden auch auf dem Bild dargestellt. Falls das einem zu viele Informationen sind, können diese beim Einfügen einfach weggelassen oder in EVE ausgeblendet werden.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping On=state,valueOn=Cleaning,cmdOn=start,cmdOff=charge&lt;br /&gt;
                      RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1&lt;br /&gt;
                      BatteryLevel=batteryPercent,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      StatusLowBattery=batteryState,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW&lt;br /&gt;
                      ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/.*/:NOT_CHARGEABLE&lt;br /&gt;
                      OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/.*/:OCCUPANCY_NOT_DETECTED&lt;br /&gt;
                      2af6d0d0-3691-4f0d-9c9c-c1098295b1cb=consumables_sensors,name=Reinigung+Sensoren,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      fd11b965-052e-430f-b08f-206287d8bc00=consumables_filter,name=Austausch+Filter,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      fe7a8dac-dff3-4a07-8a5e-0d6abbf0df0c=consumables_main_brush,name=Austausch+Hauptbürste,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      4f9b2a22-b764-4fc1-8cd2-99383924394c=consumables_side_brush,name=Austausch+Seitenbürste,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      FilterLifeLevel=consumables_filter,minValue=0,maxValue=100&lt;br /&gt;
                      FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER&lt;br /&gt;
                      4896763a-26f7-400b-9734-2ce6564ceba2=total_clean_time,name=Lebenszeitersparnis,format=FLOAT,minStep=1,unit=h&lt;br /&gt;
                      82af5fd7-50a3-4ab3-81d3-1f7903de612a=total_clean_area,name=Gereinigte+Fläche,format=FLOAT,minStep=1,unit=m²&lt;br /&gt;
                      00d2ef14-b429-4569-8af3-c342d41cf383=total_cleans,name=Reinigungsvorgänge,format=FLOAT,minStep=1&lt;br /&gt;
                      e8d1027e-b068-40d5-9efd-f161b1b52774=device_firmware,name=Firmware,format=STRING&lt;br /&gt;
&lt;br /&gt;
== Xiaomi DC Pedestal Fan (ältere Generation) ==&lt;br /&gt;
[[Datei:Xiaomi DC Pedestal Fan.png|mini]]&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Ventilator mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
Die ältere Generation enthält Sensoren und somit Readings für Luftfeuchtigkeit, Temperatur und auch Batteriestatus. Diese fehlen bei der neueren Generation dieses Ventilators, siehe Bilder. &lt;br /&gt;
&lt;br /&gt;
Erklärung zu den Readings:&lt;br /&gt;
&lt;br /&gt;
 - Die Kindersicherung (LockPhysicalControls) ist in Eve über das kleine Einstellungssymbol zu finden. &lt;br /&gt;
 - Mit AudioFeedback/Audio-Bestätigung werden die Töne des Lüfters ein bzw. ausgeschaltet.&lt;br /&gt;
 - Mit NightVision/Nachtsicht werden die LEDs ein bzw. ausgeschaltet.&lt;br /&gt;
 - Mit Mute/Audio wird der Windmodus von Straight zu Natural geschaltet.&lt;br /&gt;
 - Der Rest ist selbsterklärend.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType Fan&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping clear&lt;br /&gt;
                      On:power,cmdOn=on,cmdOff=off,valueOn=on,valueOff=off&lt;br /&gt;
                      LockPhysicalControls=child_lock,values=on:CONTROL_LOCK_ENABLED;;off:CONTROL_LOCK_DISABLED,cmds=CONTROL_LOCK_ENABLED:child_lock+on;CONTROL_LOCK_DISABLED:child_lock+off&lt;br /&gt;
                      RotationSpeed=level,minValue=0,maxValue=100,cmd=level,delay=1&lt;br /&gt;
                      TargetTiltAngle=angle,minValue=30,maxValue=120,minStep=30,cmd=angle&lt;br /&gt;
                      SwingMode=angle_enable,values=on:SWING_ENABLED;;off:SWING_DISABLED,cmdOn=angle_enable+on,cmdOff=angle_enable+off&lt;br /&gt;
                      CurrentRelativeHumidity=humidity&lt;br /&gt;
                      CurrentTemperature=temperature&lt;br /&gt;
                      BatteryLevel=batteryPercent,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      AudioFeedback:buzzer,cmdOn=buzzer+on,cmdOff=buzzer+off,valueOn=on,valueOff=off&lt;br /&gt;
                      NightVision:led,cmdOn=led+off,cmdOff=led+bright,valueOn=off,valueOff=bright&lt;br /&gt;
                      Mute:mode,cmdOn=mode+straight,cmdOff=mode+natural,valueOn=straight,valueOff=natural&lt;br /&gt;
&lt;br /&gt;
== Xiaomi Standing Fan 2 bzw. 2S (neuere Generation) ==&lt;br /&gt;
[[Datei:Xiaomi Standing Fan 2 bzw. 2S.png|mini]]&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Ventilator mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
Den neueren Generationen dieses Ventilators fehlen Sensoren und somit Readings für Luftfeuchtigkeit, Temperatur und auch Batteriestatus. Diese sind bei der älteren Generation dieses Ventilators enthalten, siehe vorangegangenes Beispiel.&lt;br /&gt;
&lt;br /&gt;
Dieses Mapping wurde mit dem &amp;quot;2S&amp;quot; erstellt. Es sollte aber mindestens auch mit einem &amp;quot;Xiaomi Standing Fan 2&amp;quot; (ohne Akku) funktionieren, da auch der &amp;quot;Xiaomi Standing Fan 2S&amp;quot; (mit Akku) kein Reading für die Batterie bereitstellt. Ansonsten gibt es wohl auch noch Generationen zwischen dem &amp;quot;Xiaomi DC Pedestal Fan&amp;quot; und den &amp;quot;Xiaomi Standing Fan 2/2S&amp;quot;. Es ist davon auszugehen, dass dieses Beispiel genauso auch bei diesen Modellen funktioniert.&lt;br /&gt;
&lt;br /&gt;
Erklärung zu den Readings:&lt;br /&gt;
&lt;br /&gt;
 - Die Kindersicherung (LockPhysicalControls) ist in Eve über das kleine Einstellungssymbol zu finden. &lt;br /&gt;
 - Mit AudioFeedback/Audio-Bestätigung werden die Töne des Lüfters ein bzw. ausgeschaltet. (Da &amp;quot;buzzer&amp;quot; bei diesem Modell &amp;quot;noch&amp;quot; nicht funktioniert, ist dies derzeitig noch ohne Funktion.)&lt;br /&gt;
 - Mit NightVision/Nachtsicht werden die LEDs ein bzw. ausgeschaltet.&lt;br /&gt;
 - Mit Mute/Audio wird der Windmodus von Straight zu Natural geschaltet. (Die Bezeichnung ist nicht ganz selbst erklärend.)&lt;br /&gt;
 - Der Rest ist selbsterklärend.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType Fan&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping clear&lt;br /&gt;
                      On:power,cmdOn=on,cmdOff=off,valueOn=on,valueOff=off&lt;br /&gt;
                      LockPhysicalControls=child_lock,values=on:CONTROL_LOCK_ENABLED;;off:CONTROL_LOCK_DISABLED,cmds=CONTROL_LOCK_ENABLED:child_lock+on;CONTROL_LOCK_DISABLED:child_lock+off&lt;br /&gt;
                      RotationSpeed=level,minValue=0,maxValue=100,cmd=level,delay=1&lt;br /&gt;
                      TargetTiltAngle=angle,minValue=30,maxValue=120,minStep=30,cmd=angle&lt;br /&gt;
                      SwingMode=angle_enable,values=on:SWING_ENABLED;;off:SWING_DISABLED,cmdOn=angle_enable+on,cmdOff=angle_enable+off&lt;br /&gt;
                      CurrentRelativeHumidity=humidity&lt;br /&gt;
                      CurrentTemperature=temperature&lt;br /&gt;
                      BatteryLevel=batteryPercent,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      AudioFeedback:buzzer,cmdOn=buzzer+on,cmdOff=buzzer+off,valueOn=on,valueOff=off&lt;br /&gt;
                      NightVision:led,cmdOn=led+off,cmdOff=led+bright,valueOn=off,valueOff=bright&lt;br /&gt;
                      Mute:mode,cmdOn=mode+straight,cmdOff=mode+natural,valueOn=straight,valueOff=natural&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Homematic SmokeDetector ==&lt;br /&gt;
 [[Datei:Homebridge-Homematic-Smokedetector-Gen1.jpg|mini|Homebridge-Homematic-Smokedetector-Gen1 in EVE]]&lt;br /&gt;
Es sind keine Homebridge Mappings für die Rauch Meldung erforderlich.&lt;br /&gt;
&lt;br /&gt;
Allerdings ist ein Mapping für den Batterie Zustand nötig, siehe Unten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;SmokeDetector&amp;gt; genericDeviceType SmokeSensor&lt;br /&gt;
 attr &amp;lt;SmokeDetector&amp;gt; subType smokeDetector&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;SmokeDetector&amp;gt; homebridgeMapping StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW&lt;br /&gt;
&lt;br /&gt;
== Vallox Belüftungsanlage ==&lt;br /&gt;
Die Steuerung der Lüftungsgeschwindigkeit ist nur in Prozent möglich. Die Umrechnung erfolgt im [[Vallox]] Modul.&lt;br /&gt;
Hierzu wurde das Reading &#039;&#039;FanSpeedPct&#039;&#039; hinzugefügt.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;Vallox&amp;gt; genericDeviceType Fan&lt;br /&gt;
 attr &amp;lt;Vallox&amp;gt; homebridgeMapping clear&lt;br /&gt;
                      model=Vallox&lt;br /&gt;
                      On=PowerState,valueOn=1,readOnly=1&lt;br /&gt;
                      RotationSpeed=FanSpeedPct,minValue=1,maxValue=100,cmd=FanSpeedPct,delay=1&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Hoppel118</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Xiaomi_DC_Pedestal_Fan.png&amp;diff=30783</id>
		<title>Datei:Xiaomi DC Pedestal Fan.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Xiaomi_DC_Pedestal_Fan.png&amp;diff=30783"/>
		<updated>2019-06-19T22:58:10Z</updated>

		<summary type="html">&lt;p&gt;Hoppel118: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Xiaomi DC Pedestal Fan&lt;/div&gt;</summary>
		<author><name>Hoppel118</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Roborock_S50.png&amp;diff=30782</id>
		<title>Datei:Roborock S50.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Roborock_S50.png&amp;diff=30782"/>
		<updated>2019-06-19T22:57:44Z</updated>

		<summary type="html">&lt;p&gt;Hoppel118: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Roborock S50&lt;/div&gt;</summary>
		<author><name>Hoppel118</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Homebridge_User_Configs&amp;diff=30781</id>
		<title>Homebridge User Configs</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Homebridge_User_Configs&amp;diff=30781"/>
		<updated>2019-06-19T22:47:12Z</updated>

		<summary type="html">&lt;p&gt;Hoppel118: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Eintrag dient zur Sammlung funktionsfähiger Homebridge Configs.&lt;br /&gt;
&lt;br /&gt;
Bitte immer die FHEM Version und Homebridge Version angegeben.&lt;br /&gt;
&lt;br /&gt;
Sehr gute Hinweise gibt es hier: http://www.meintechblog.de/2015/10/mit-siri-und-fhem-das-gesamte-smart-home-per-stimme-steuern/&lt;br /&gt;
== Mögliche Mappings ==&lt;br /&gt;
Die Möglichen Mappings können hier nachgelesen werden https://github.com/KhaosT/HAP-NodeJS/blob/master/lib/gen/HomeKitTypes.js&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel:&lt;br /&gt;
 Characteristic.Brightness = function() {&lt;br /&gt;
  Characteristic.call(this, &#039;Brightness&#039;, &#039;00000008-0000-1000-8000-0026BB765291&#039;);&lt;br /&gt;
  this.setProps({&lt;br /&gt;
    format: Characteristic.Formats.INT,&lt;br /&gt;
    unit: Characteristic.Units.PERCENTAGE,&lt;br /&gt;
    maxValue: 100,&lt;br /&gt;
    minValue: 0,&lt;br /&gt;
    minStep: 1,&lt;br /&gt;
    perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY]&lt;br /&gt;
  });&lt;br /&gt;
  this.value = this.getDefaultValue();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Das Mapping in diesem Fall, hat den Titel Brightness.&lt;br /&gt;
&lt;br /&gt;
Die Werte können in 1er Schritten zwischen 0 und 100 liegen (max und min Value)&lt;br /&gt;
== Feuchtesensor ==&lt;br /&gt;
Zum Einstieg etwas leicht nachvollziehbares. &lt;br /&gt;
&lt;br /&gt;
Feuchtesensoren haben in der Regel ein &amp;quot;humidity&amp;quot; Reading, im Falle des Opus XT300 Bodenfeuchtesensors auch Temperatur und Batterie Level. Homekit unterstützt einen &amp;quot;HumiditySensor&amp;quot; Service. Dieser ist in homebridge-fhem nicht standardmäßig vorhanden (kann also nicht aus dem dropdown ausgewählt werden, sondern muss über das Befehlsfeld zugewiesen werden):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr meinSensor genericDeviceType HumiditySensor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden die Readings gemappt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr meinSensor homebridgeMapping clear CurrentRelativeHumidity=humidity StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW CurrentTemperature=temperature&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;clear&amp;lt;/code&amp;gt;löscht default mappings - das wird in der Regel nicht notwendig sein, schadet aber nicht&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;CurrentRelativeHumidity&amp;lt;/code&amp;gt; ist die relevante Homekit Characteristic - wird mit dem entsprechenden Reading des Sensors gemappt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;StatusLowBattery&amp;lt;/code&amp;gt; erwartet entweder BATTERY_LEVEL_NORMAL oder _LOW. Mein Sensor liefert ok zurück, wenn alles gut ist, also wird &amp;quot;ok&amp;quot; auf _NORMAL gemappt, alles andere auf _LOW. &lt;br /&gt;
&lt;br /&gt;
Der Opus XT300 Bodenfeuchtesensors liefert auch noch die Temperatur - der HumiditySensor Service sieht das eigentlich nicht vor, daher wird die Temperatur auch nicht in der Apple &amp;quot;Home&amp;quot; App angezeigt. Bei Eve wird die Temperatur hingegen berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
== EnOcean STM 250 Tür-/Fensterkontakt ==&lt;br /&gt;
Der STM 250 liefert als Status in FHEM &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;, wenn das Fenster offen und damit der Kontakt &amp;quot;offen&amp;quot; ist. Analog liefert er &amp;lt;code&amp;gt;closed&amp;lt;/code&amp;gt; wenn das Fenster geschlossen und damit auch der Kontakt geschlossen ist. Diese Statusangaben sind sehr intuitiv zu verstehen und zu interpretieren. &lt;br /&gt;
&lt;br /&gt;
Die characteristic &amp;lt;code&amp;gt;ContactSensorState&amp;lt;/code&amp;gt; von HomeKit liefert entweder den Wert &amp;lt;code&amp;gt;CONTACT_DETECTED=0&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;CONTACT_NOT_DETECTED=1&amp;lt;/code&amp;gt; zurück. Wobei &amp;lt;code&amp;gt;CONTACT_DETECTED&amp;lt;/code&amp;gt; bedeutet, dass der Kontakt geschlossen ist. Je nach Darstellung in der HomeKit-fähigen App muss dieses Verhalten bei der Interpretation berücksichtigt werden. Die App Eve von Elgato zum Beispiel liefert für Kontaktsensoren &amp;quot;JA&amp;quot; oder &amp;quot;NEIN&amp;quot; mit der Bedeutung &amp;lt;code&amp;gt;CONTACT_DETECTED=0=JA&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;CONTACT_NOT_DETECTED=1=NEIN&amp;lt;/code&amp;gt; zurück.&lt;br /&gt;
&lt;br /&gt;
Noch ein wichtiger Punkt: Um einen Sensorkontakt sinnvoll einzurichten sollte als zusätzlicher Wert für das Attribut &amp;lt;code&amp;gt;genericdeviceType&amp;lt;/code&amp;gt; der Wert &amp;lt;code&amp;gt;ContactSensor&amp;lt;/code&amp;gt; hinzugefügt werden. Wie das geht ist im Eintrag [[Homebridge_einrichten#FHEM_konfigurieren | Homebridge einrichten]] ausführlicher beschrieben.&lt;br /&gt;
&lt;br /&gt;
Folgende Attribute dann hinzufügen:&lt;br /&gt;
 attr STM250 genericDeviceType ContactSensor&lt;br /&gt;
 attr STM250 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 9893&lt;br /&gt;
 Homebridge 0.2.16&lt;br /&gt;
 homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}&lt;br /&gt;
&lt;br /&gt;
== Modul RESIDENTS für Anwesenheitserkennung und Steuerung der Anwesenheit benutzen ==&lt;br /&gt;
[[Datei:Homebridge_bewohner_zu_szene.jpeg|mini|Schaltzustand eines Bewohners zu einer Szene hinzufügen]]&lt;br /&gt;
Aus den einzelnen Komponenten des Moduls RESIDENTS, homebridge sowie der characteristic &amp;lt;code&amp;gt;On&amp;lt;/code&amp;gt; und der Szenensteuerung lässt sich eine gleichzeitige Steuerung der Anwesenheit und Anwesenheitserkennung basteln.&lt;br /&gt;
&lt;br /&gt;
Dazu müssen folgende Schritte unternommen werden:&lt;br /&gt;
* einem Bewohner aus dem Modul ROOMMATE die Steuerung über homebridgeMapping hinzufügen&lt;br /&gt;
* Szene für &amp;quot;Ich bin zu Hause&amp;quot; und &amp;quot;Ich gehe jetzt&amp;quot; in einer HomeKit-fähigen App wie z.B. Eve einrichten&lt;br /&gt;
&lt;br /&gt;
Man kann einen beliebigen Bewohner aus dem Modul ROOMMATE nehmen und ihn über die characteristic &amp;lt;code&amp;gt;On&amp;lt;/code&amp;gt; in Form eines Schalters sozusagen schaltbar machen. Nur wird das Ein- und Ausschalten des Bewohners über HomeKit in FHEM auf den Status home bzw. absent gemappt. Seit dem 06.02.2016 werden RESIDENTS automatisch als Occupancy Sensor für HomeKit annonciert. Nun noch die Attribute des ROOMMATE wie folgt setzen:&lt;br /&gt;
 attr &amp;lt;ROOMMATE&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;ROOMMATE&amp;gt; homebridgeMapping On=state,valueOn=/home|awoken|asleep|gotosleep/,valueOff=/gone|absent/,cmdOn=home,cmdOff=absent&lt;br /&gt;
&lt;br /&gt;
Natürlich muss der Bewohner noch dem Filter von homebridge hinzugefügt und homebridge neu gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Anschließend geht es in der HomeKit-fähigen App Deiner Wahl weiter. In Eve von Elgato ist von vornherein zum Beispiel vorgesehen, dass man zwei Szenen &amp;quot;Ich bin zuhause&amp;quot; und &amp;quot;Ich verlasse das Haus&amp;quot; hat. Zu diesen Szenen wird eine Aktion hinzugefügt indem der Bewohner, den das ROOMMATE-Modul meldet zur Szene hinzugefügt wird und beim Nachhausekommen &amp;quot;eingeschaltet&amp;quot; wird. Genauso wird mit der Szene &amp;quot;Ich verlasse das Haus&amp;quot; verfahren: Bewohner zur Szene hinzufügen und den Schaltvorgang auf &amp;quot;ausschalten&amp;quot; setzen.&lt;br /&gt;
&lt;br /&gt;
Mit den Sprachbefehlen &amp;quot;Ich bin zuhause&amp;quot; oder &amp;quot;Ich verlasse das Haus&amp;quot; wird die entsprechende Szene eingeschaltet, homebridge schaltet über das &amp;lt;code&amp;gt;homebridgeMapping&amp;lt;/code&amp;gt; Attribut dann den Bewohner auf &amp;quot;home&amp;quot; oder &amp;quot;absent&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 9893&lt;br /&gt;
 Homebridge 0.2.16&lt;br /&gt;
 homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}&lt;br /&gt;
&lt;br /&gt;
Eine noch etwas bessere Schaltmöglichkeit bietet &#039;&#039;&#039;genericDeviceType security&#039;&#039;&#039;.&lt;br /&gt;
Das Mapping für ROOMMATE sieht wie folgt aus:&lt;br /&gt;
 attr TYPE=ROOMMATE genericDeviceType security&lt;br /&gt;
 attr TYPE=ROOMMATE homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;gone:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+gone,delay=1&lt;br /&gt;
für GUEST:&lt;br /&gt;
 attr TYPE=GUEST genericDeviceType security&lt;br /&gt;
 attr TYPE=GUEST homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;none:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+none,delay=1&lt;br /&gt;
&lt;br /&gt;
== ZWave Türschloss Vision ZM1701 einbinden ==&lt;br /&gt;
Das ZWave Türschloss ZM1701 von der Firma Vision sendet seinen aktuellen Schließstatus in ein einzelnes Reading wie &amp;quot;lock&amp;quot;, sondern schickt eine ganze Reihe von Informationen über den Zustand in das Reading &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt;. Das Schließen und Öffnen der Türschlosses wird auch nicht mit einem Setzen des &amp;lt;code&amp;gt;state&amp;lt;/code&amp;gt; erreicht, sondern mit dem Setzen von &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt;. Das macht das Einbinden in homebridge nicht trivial, funktioniert aber über folgendes Homebridge-Mapping:&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; genericDeviceType lock&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open&lt;br /&gt;
&lt;br /&gt;
Kurz zur Erklärung: Um ein Schloss über HomeKit steuern zu können braucht es zwei characteristics. LockCurrentState zeigt an, ob das Schloss geöffnet oder geschlossen ist. Und mit LockTargetState wird das Schloss geöffnet oder geschlossen. Damit der aktuelle Status des Schlosses ausgelesen werden kann, muss aus dem FHEM-Reading &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt; die Zeichenfolge &amp;lt;code&amp;gt; secured&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;unsecured&amp;lt;/code&amp;gt; extrahiert werden, daher die beiden regulären Ausdrücke &amp;lt;code&amp;gt;/\ssecured/&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;/unsecured/&amp;lt;/code&amp;gt;. In der characteristic &amp;lt;code&amp;gt;LockTargetState&amp;lt;/code&amp;gt; muss sowohl der aktuelle Status des Schlosses als auch das Kommando angegeben werden, schließlich möchte man ein geschlossenes Schloss nicht nochmal schließen. Daher wird erst aus dem Reading &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt; der aktuelle Status des Schlosses ausgelesen und die damit korrespondierenden Befehle über &amp;lt;code&amp;gt;cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open&amp;lt;/code&amp;gt; generiert.&lt;br /&gt;
&lt;br /&gt;
Wer es in FHEM über ein webCmd einfacher zu bedienen haben möchte, fügt bitte noch die dafür notwendigen Attribute und die leicht geänderten homebridgeMappings wie folgt ein:&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; genericDeviceType lock&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:close;UNSECURED:open&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; /doorLockOperation open:open/doorLockOperation close:close&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; webCmd open:close&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 12191&lt;br /&gt;
 homebridge 0.4.6&lt;br /&gt;
 homebridge-fhem 0.2.48&lt;br /&gt;
&lt;br /&gt;
== Roomba über THINKINGCLEANER Modul ==&lt;br /&gt;
 attr &amp;lt;THINKINGCLEANER&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;THINKINGCLEANER&amp;gt; homebridgeMapping clear On=state,valueOn=/^(on|dock)/,cmdOn=on,cmdOff=off,nocache=1 ChargingState=deviceStatus,values=/(_recon|_full|_trickle)$/:CHARGING;/^.*/:NOT_CHARGING&lt;br /&gt;
 attr &amp;lt;THINKINGCLEANER&amp;gt; siriName Robby&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 12680&lt;br /&gt;
 homebridge 0.4.11&lt;br /&gt;
 homebridge-fhem 0.2.66&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Homematic HM-CC-RT-DN Funk-Heizkörperthermostat ==&lt;br /&gt;
[[Datei:HM-CC-RT-DN-Eve.PNG|mini|Darstellung des HM-CC-RT-DN in der iOS App Eve]]&lt;br /&gt;
 attr &amp;lt;HMCCRTDN_Channel2_Clima&amp;gt; homebridgeMapping TargetTemperature=desired-temp::desired-temp,minValue=5,maxValue=35,minStep=0.5,nocache=1&lt;br /&gt;
                      CurrentTemperature=BU_Heizung_01_Clima:measured-temp,nocache=1&lt;br /&gt;
                      StatusLowBattery=BU_Heizung_01:battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW&lt;br /&gt;
                      TargetHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:3,cmds=OFF:controlManu+off;;HEAT:controlMode+boost;;AUTO:controlMode+auto;;COOL:controlManu+17.0&lt;br /&gt;
                      CurrentHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:0,valud=OFF&lt;br /&gt;
 attr &amp;lt;HMCCRTDN_Channel2_Clima&amp;gt; siriName Robby&lt;br /&gt;
Dieses Mapping bezieht sich auf ein vorhandenes &#039;&#039;userReading&#039;&#039; mit dem Namen &amp;lt;code&amp;gt;heatingState&amp;lt;/code&amp;gt;, womit Homekit die einzelnen Status nachher unterscheidet.&lt;br /&gt;
 attr &amp;lt;HM-CC-RT-DN_Clima&amp;gt; userReadings heatingState {(ReadingsVal($NAME,&amp;quot;ValvePosition&amp;quot;,0) &amp;gt; 0 || ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;on&amp;quot;) ? &amp;quot;HEAT&amp;quot; : ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;off&amp;quot; ? &amp;quot;OFF&amp;quot; : ReadingsVal($NAME,&amp;quot;controlMode&amp;quot;,&amp;quot;auto&amp;quot;) eq &amp;quot;auto&amp;quot; ? &amp;quot;AUTO&amp;quot; : (ReadingsVal($NAME,&amp;quot;measured-temp&amp;quot;,20) &amp;gt; ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,20)) ? &amp;quot;COOL&amp;quot; : &amp;quot;AUTO&amp;quot;}&lt;br /&gt;
Global auf alle in FHEM angelegten HM-CC-RT-DN, lässt sich mit folgendem Befehl das &#039;&#039;userReading&#039;&#039; anlegen.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,59211.msg505986.html#msg505986 Forumsthread].&lt;br /&gt;
&lt;br /&gt;
 attr TYPE=CUL_HM:FILTER=model=HM-CC-RT-DN:FILTER=chanNo=04 userReadings heatingState {(ReadingsVal($NAME,&amp;quot;ValvePosition&amp;quot;,0) &amp;gt; 0 || ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;on&amp;quot;) ? &amp;quot;HEAT&amp;quot; : ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;off&amp;quot; ? &amp;quot;OFF&amp;quot; : ReadingsVal($NAME,&amp;quot;controlMode&amp;quot;,&amp;quot;auto&amp;quot;) eq &amp;quot;auto&amp;quot; ? &amp;quot;AUTO&amp;quot; : (ReadingsVal($NAME,&amp;quot;measured-temp&amp;quot;,20) &amp;gt; ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,20)) ? &amp;quot;COOL&amp;quot; : &amp;quot;AUTO&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Xiaomi Vacuum Cleaner 1. Generation ==&lt;br /&gt;
[[Datei:XIAOMI_VACUUM_CLEANER-Gen1.jpg|mini|XIAOMI VACUUM 1. GEN in EVE]]&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping On=state,valueOn=Cleaning,cmdOn=start,cmdOff=charge&lt;br /&gt;
                      RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1&lt;br /&gt;
                      BatteryLevel=batteryLevel,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW&lt;br /&gt;
                      ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/.*/:NOT_CHARGEABLE&lt;br /&gt;
                      OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/.*/:OCCUPANCY_NOT_DETECTED&lt;br /&gt;
                      FilterLifeLevel=consumables_filter,minValue=0,maxValue=100&lt;br /&gt;
                      FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER&lt;br /&gt;
&lt;br /&gt;
== Roborock S50 (2. Generation des Xiaomi Vacuum Cleaners) ==&lt;br /&gt;
&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping On=state,valueOn=Cleaning,cmdOn=start,cmdOff=charge&lt;br /&gt;
                      RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1&lt;br /&gt;
                      BatteryLevel=batteryPercent,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      StatusLowBattery=batteryState,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW&lt;br /&gt;
                      ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/.*/:NOT_CHARGEABLE&lt;br /&gt;
                      OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/.*/:OCCUPANCY_NOT_DETECTED&lt;br /&gt;
                      2af6d0d0-3691-4f0d-9c9c-c1098295b1cb=consumables_sensors,name=Reinigung+Sensoren,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      fd11b965-052e-430f-b08f-206287d8bc00=consumables_filter,name=Austausch+Filter,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      fe7a8dac-dff3-4a07-8a5e-0d6abbf0df0c=consumables_main_brush,name=Austausch+Hauptbürste,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      4f9b2a22-b764-4fc1-8cd2-99383924394c=consumables_side_brush,name=Austausch+Seitenbürste,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      FilterLifeLevel=consumables_filter,minValue=0,maxValue=100&lt;br /&gt;
                      FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER&lt;br /&gt;
                      4896763a-26f7-400b-9734-2ce6564ceba2=total_clean_time,name=Lebenszeitersparnis,format=FLOAT,minStep=1,unit=h&lt;br /&gt;
                      82af5fd7-50a3-4ab3-81d3-1f7903de612a=total_clean_area,name=Gereinigte+Fläche,format=FLOAT,minStep=1,unit=m²&lt;br /&gt;
                      00d2ef14-b429-4569-8af3-c342d41cf383=total_cleans,name=Reinigungsvorgänge,format=FLOAT,minStep=1&lt;br /&gt;
                      e8d1027e-b068-40d5-9efd-f161b1b52774=device_firmware,name=Firmware,format=STRING&lt;br /&gt;
&lt;br /&gt;
== Xiaomi DC Pedestal Fan (ältere Generation) ==&lt;br /&gt;
&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Ventilator mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
Die ältere Generation enthält Sensoren und somit Readings für Luftfeuchtigkeit, Temperatur und auch Batteriestatus. Diese fehlen bei der neueren Generation dieses Ventilators. &lt;br /&gt;
&lt;br /&gt;
Erklärung zu den Readings:&lt;br /&gt;
&lt;br /&gt;
 - Die Kindersicherung (LockPhysicalControls) ist in Eve über das kleine Einstellungssymbol zu finden. &lt;br /&gt;
 - Mit AudioFeedback/Audio-Bestätigung werden die Töne des Lüfters ein bzw. ausgeschaltet.&lt;br /&gt;
 - Mit NightVision/Nachtsicht werden die LEDs ein bzw. ausgeschaltet.&lt;br /&gt;
 - Mit Mute/Audio wird der Windmodus von Straight zu Natural geschaltet.&lt;br /&gt;
 - Der Rest ist selbsterklärend.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType Fan&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping clear&lt;br /&gt;
                      On:power,cmdOn=on,cmdOff=off,valueOn=on,valueOff=off&lt;br /&gt;
                      LockPhysicalControls=child_lock,values=on:CONTROL_LOCK_ENABLED;;off:CONTROL_LOCK_DISABLED,cmds=CONTROL_LOCK_ENABLED:child_lock+on;CONTROL_LOCK_DISABLED:child_lock+off&lt;br /&gt;
                      RotationSpeed=level,minValue=0,maxValue=100,cmd=level,delay=1&lt;br /&gt;
                      TargetTiltAngle=angle,minValue=30,maxValue=120,minStep=30,cmd=angle&lt;br /&gt;
                      SwingMode=angle_enable,values=on:SWING_ENABLED;;off:SWING_DISABLED,cmdOn=angle_enable+on,cmdOff=angle_enable+off&lt;br /&gt;
                      CurrentRelativeHumidity=humidity&lt;br /&gt;
                      CurrentTemperature=temperature&lt;br /&gt;
                      BatteryLevel=batteryPercent,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      AudioFeedback:buzzer,cmdOn=buzzer+on,cmdOff=buzzer+off,valueOn=on,valueOff=off&lt;br /&gt;
                      NightVision:led,cmdOn=led+off,cmdOff=led+bright,valueOn=off,valueOff=bright&lt;br /&gt;
                      Mute:mode,cmdOn=mode+straight,cmdOff=mode+natural,valueOn=straight,valueOff=natural&lt;br /&gt;
&lt;br /&gt;
== Xiaomi Standing Fan 2 bzw. 2S (neuere Generation) ==&lt;br /&gt;
[[Datei:Xiaomi Standing Fan 2 bzw. 2S.png|mini]]&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Ventilator mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
Den neueren Generationen dieses Ventilators fehlen Sensoren und somit Readings für Luftfeuchtigkeit, Temperatur und auch Batteriestatus. Diese sind bei der älteren Generation dieses Ventilators enthalten, siehe vorangegangenes Beispiel.&lt;br /&gt;
&lt;br /&gt;
Dieses Mapping wurde mit dem &amp;quot;2S&amp;quot; erstellt. Es sollte aber mindestens auch mit einem &amp;quot;Xiaomi Standing Fan 2&amp;quot; (ohne Akku) funktionieren, da auch der &amp;quot;Xiaomi Standing Fan 2S&amp;quot; (mit Akku) kein Reading für die Batterie bereitstellt. Ansonsten gibt es wohl auch noch Generationen zwischen dem &amp;quot;Xiaomi DC Pedestal Fan&amp;quot; und den &amp;quot;Xiaomi Standing Fan 2/2S&amp;quot;. Es ist davon auszugehen, dass dieses Beispiel genauso auch bei diesen Modellen funktioniert.&lt;br /&gt;
&lt;br /&gt;
Erklärung zu den Readings:&lt;br /&gt;
&lt;br /&gt;
 - Die Kindersicherung (LockPhysicalControls) ist in Eve über das kleine Einstellungssymbol zu finden. &lt;br /&gt;
 - Mit AudioFeedback/Audio-Bestätigung werden die Töne des Lüfters ein bzw. ausgeschaltet. (Da &amp;quot;buzzer&amp;quot; bei diesem Modell &amp;quot;noch&amp;quot; nicht funktioniert, ist dies derzeitig noch ohne Funktion.)&lt;br /&gt;
 - Mit NightVision/Nachtsicht werden die LEDs ein bzw. ausgeschaltet.&lt;br /&gt;
 - Mit Mute/Audio wird der Windmodus von Straight zu Natural geschaltet. (Die Bezeichnung ist nicht ganz selbst erklärend.)&lt;br /&gt;
 - Der Rest ist selbsterklärend.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType Fan&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping clear&lt;br /&gt;
                      On:power,cmdOn=on,cmdOff=off,valueOn=on,valueOff=off&lt;br /&gt;
                      LockPhysicalControls=child_lock,values=on:CONTROL_LOCK_ENABLED;;off:CONTROL_LOCK_DISABLED,cmds=CONTROL_LOCK_ENABLED:child_lock+on;CONTROL_LOCK_DISABLED:child_lock+off&lt;br /&gt;
                      RotationSpeed=level,minValue=0,maxValue=100,cmd=level,delay=1&lt;br /&gt;
                      TargetTiltAngle=angle,minValue=30,maxValue=120,minStep=30,cmd=angle&lt;br /&gt;
                      SwingMode=angle_enable,values=on:SWING_ENABLED;;off:SWING_DISABLED,cmdOn=angle_enable+on,cmdOff=angle_enable+off&lt;br /&gt;
                      CurrentRelativeHumidity=humidity&lt;br /&gt;
                      CurrentTemperature=temperature&lt;br /&gt;
                      BatteryLevel=batteryPercent,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      AudioFeedback:buzzer,cmdOn=buzzer+on,cmdOff=buzzer+off,valueOn=on,valueOff=off&lt;br /&gt;
                      NightVision:led,cmdOn=led+off,cmdOff=led+bright,valueOn=off,valueOff=bright&lt;br /&gt;
                      Mute:mode,cmdOn=mode+straight,cmdOff=mode+natural,valueOn=straight,valueOff=natural&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Homematic SmokeDetector ==&lt;br /&gt;
 [[Datei:Homebridge-Homematic-Smokedetector-Gen1.jpg|mini|Homebridge-Homematic-Smokedetector-Gen1 in EVE]]&lt;br /&gt;
Es sind keine Homebridge Mappings für die Rauch Meldung erforderlich.&lt;br /&gt;
&lt;br /&gt;
Allerdings ist ein Mapping für den Batterie Zustand nötig, siehe Unten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;SmokeDetector&amp;gt; genericDeviceType SmokeSensor&lt;br /&gt;
 attr &amp;lt;SmokeDetector&amp;gt; subType smokeDetector&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;SmokeDetector&amp;gt; homebridgeMapping StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW&lt;br /&gt;
&lt;br /&gt;
== Vallox Belüftungsanlage ==&lt;br /&gt;
Die Steuerung der Lüftungsgeschwindigkeit ist nur in Prozent möglich. Die Umrechnung erfolgt im [[Vallox]] Modul.&lt;br /&gt;
Hierzu wurde das Reading &#039;&#039;FanSpeedPct&#039;&#039; hinzugefügt.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;Vallox&amp;gt; genericDeviceType Fan&lt;br /&gt;
 attr &amp;lt;Vallox&amp;gt; homebridgeMapping clear&lt;br /&gt;
                      model=Vallox&lt;br /&gt;
                      On=PowerState,valueOn=1,readOnly=1&lt;br /&gt;
                      RotationSpeed=FanSpeedPct,minValue=1,maxValue=100,cmd=FanSpeedPct,delay=1&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Hoppel118</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Xiaomi_Standing_Fan_2_bzw._2S.png&amp;diff=30780</id>
		<title>Datei:Xiaomi Standing Fan 2 bzw. 2S.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Xiaomi_Standing_Fan_2_bzw._2S.png&amp;diff=30780"/>
		<updated>2019-06-19T22:46:25Z</updated>

		<summary type="html">&lt;p&gt;Hoppel118: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Xiaomi Standing Fan 2 bzw. 2S&lt;/div&gt;</summary>
		<author><name>Hoppel118</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Homebridge_User_Configs&amp;diff=30779</id>
		<title>Homebridge User Configs</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Homebridge_User_Configs&amp;diff=30779"/>
		<updated>2019-06-19T22:28:04Z</updated>

		<summary type="html">&lt;p&gt;Hoppel118: Roborock S50, Xiaomi DC Pedestal Fan und Xiaomi Standing Fan 2S ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Eintrag dient zur Sammlung funktionsfähiger Homebridge Configs.&lt;br /&gt;
&lt;br /&gt;
Bitte immer die FHEM Version und Homebridge Version angegeben.&lt;br /&gt;
&lt;br /&gt;
Sehr gute Hinweise gibt es hier: http://www.meintechblog.de/2015/10/mit-siri-und-fhem-das-gesamte-smart-home-per-stimme-steuern/&lt;br /&gt;
== Mögliche Mappings ==&lt;br /&gt;
Die Möglichen Mappings können hier nachgelesen werden https://github.com/KhaosT/HAP-NodeJS/blob/master/lib/gen/HomeKitTypes.js&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel:&lt;br /&gt;
 Characteristic.Brightness = function() {&lt;br /&gt;
  Characteristic.call(this, &#039;Brightness&#039;, &#039;00000008-0000-1000-8000-0026BB765291&#039;);&lt;br /&gt;
  this.setProps({&lt;br /&gt;
    format: Characteristic.Formats.INT,&lt;br /&gt;
    unit: Characteristic.Units.PERCENTAGE,&lt;br /&gt;
    maxValue: 100,&lt;br /&gt;
    minValue: 0,&lt;br /&gt;
    minStep: 1,&lt;br /&gt;
    perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY]&lt;br /&gt;
  });&lt;br /&gt;
  this.value = this.getDefaultValue();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Das Mapping in diesem Fall, hat den Titel Brightness.&lt;br /&gt;
&lt;br /&gt;
Die Werte können in 1er Schritten zwischen 0 und 100 liegen (max und min Value)&lt;br /&gt;
== Feuchtesensor ==&lt;br /&gt;
Zum Einstieg etwas leicht nachvollziehbares. &lt;br /&gt;
&lt;br /&gt;
Feuchtesensoren haben in der Regel ein &amp;quot;humidity&amp;quot; Reading, im Falle des Opus XT300 Bodenfeuchtesensors auch Temperatur und Batterie Level. Homekit unterstützt einen &amp;quot;HumiditySensor&amp;quot; Service. Dieser ist in homebridge-fhem nicht standardmäßig vorhanden (kann also nicht aus dem dropdown ausgewählt werden, sondern muss über das Befehlsfeld zugewiesen werden):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr meinSensor genericDeviceType HumiditySensor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden die Readings gemappt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr meinSensor homebridgeMapping clear CurrentRelativeHumidity=humidity StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW CurrentTemperature=temperature&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;clear&amp;lt;/code&amp;gt;löscht default mappings - das wird in der Regel nicht notwendig sein, schadet aber nicht&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;CurrentRelativeHumidity&amp;lt;/code&amp;gt; ist die relevante Homekit Characteristic - wird mit dem entsprechenden Reading des Sensors gemappt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;StatusLowBattery&amp;lt;/code&amp;gt; erwartet entweder BATTERY_LEVEL_NORMAL oder _LOW. Mein Sensor liefert ok zurück, wenn alles gut ist, also wird &amp;quot;ok&amp;quot; auf _NORMAL gemappt, alles andere auf _LOW. &lt;br /&gt;
&lt;br /&gt;
Der Opus XT300 Bodenfeuchtesensors liefert auch noch die Temperatur - der HumiditySensor Service sieht das eigentlich nicht vor, daher wird die Temperatur auch nicht in der Apple &amp;quot;Home&amp;quot; App angezeigt. Bei Eve wird die Temperatur hingegen berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
== EnOcean STM 250 Tür-/Fensterkontakt ==&lt;br /&gt;
Der STM 250 liefert als Status in FHEM &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;, wenn das Fenster offen und damit der Kontakt &amp;quot;offen&amp;quot; ist. Analog liefert er &amp;lt;code&amp;gt;closed&amp;lt;/code&amp;gt; wenn das Fenster geschlossen und damit auch der Kontakt geschlossen ist. Diese Statusangaben sind sehr intuitiv zu verstehen und zu interpretieren. &lt;br /&gt;
&lt;br /&gt;
Die characteristic &amp;lt;code&amp;gt;ContactSensorState&amp;lt;/code&amp;gt; von HomeKit liefert entweder den Wert &amp;lt;code&amp;gt;CONTACT_DETECTED=0&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;CONTACT_NOT_DETECTED=1&amp;lt;/code&amp;gt; zurück. Wobei &amp;lt;code&amp;gt;CONTACT_DETECTED&amp;lt;/code&amp;gt; bedeutet, dass der Kontakt geschlossen ist. Je nach Darstellung in der HomeKit-fähigen App muss dieses Verhalten bei der Interpretation berücksichtigt werden. Die App Eve von Elgato zum Beispiel liefert für Kontaktsensoren &amp;quot;JA&amp;quot; oder &amp;quot;NEIN&amp;quot; mit der Bedeutung &amp;lt;code&amp;gt;CONTACT_DETECTED=0=JA&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;CONTACT_NOT_DETECTED=1=NEIN&amp;lt;/code&amp;gt; zurück.&lt;br /&gt;
&lt;br /&gt;
Noch ein wichtiger Punkt: Um einen Sensorkontakt sinnvoll einzurichten sollte als zusätzlicher Wert für das Attribut &amp;lt;code&amp;gt;genericdeviceType&amp;lt;/code&amp;gt; der Wert &amp;lt;code&amp;gt;ContactSensor&amp;lt;/code&amp;gt; hinzugefügt werden. Wie das geht ist im Eintrag [[Homebridge_einrichten#FHEM_konfigurieren | Homebridge einrichten]] ausführlicher beschrieben.&lt;br /&gt;
&lt;br /&gt;
Folgende Attribute dann hinzufügen:&lt;br /&gt;
 attr STM250 genericDeviceType ContactSensor&lt;br /&gt;
 attr STM250 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 9893&lt;br /&gt;
 Homebridge 0.2.16&lt;br /&gt;
 homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}&lt;br /&gt;
&lt;br /&gt;
== Modul RESIDENTS für Anwesenheitserkennung und Steuerung der Anwesenheit benutzen ==&lt;br /&gt;
[[Datei:Homebridge_bewohner_zu_szene.jpeg|mini|Schaltzustand eines Bewohners zu einer Szene hinzufügen]]&lt;br /&gt;
Aus den einzelnen Komponenten des Moduls RESIDENTS, homebridge sowie der characteristic &amp;lt;code&amp;gt;On&amp;lt;/code&amp;gt; und der Szenensteuerung lässt sich eine gleichzeitige Steuerung der Anwesenheit und Anwesenheitserkennung basteln.&lt;br /&gt;
&lt;br /&gt;
Dazu müssen folgende Schritte unternommen werden:&lt;br /&gt;
* einem Bewohner aus dem Modul ROOMMATE die Steuerung über homebridgeMapping hinzufügen&lt;br /&gt;
* Szene für &amp;quot;Ich bin zu Hause&amp;quot; und &amp;quot;Ich gehe jetzt&amp;quot; in einer HomeKit-fähigen App wie z.B. Eve einrichten&lt;br /&gt;
&lt;br /&gt;
Man kann einen beliebigen Bewohner aus dem Modul ROOMMATE nehmen und ihn über die characteristic &amp;lt;code&amp;gt;On&amp;lt;/code&amp;gt; in Form eines Schalters sozusagen schaltbar machen. Nur wird das Ein- und Ausschalten des Bewohners über HomeKit in FHEM auf den Status home bzw. absent gemappt. Seit dem 06.02.2016 werden RESIDENTS automatisch als Occupancy Sensor für HomeKit annonciert. Nun noch die Attribute des ROOMMATE wie folgt setzen:&lt;br /&gt;
 attr &amp;lt;ROOMMATE&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;ROOMMATE&amp;gt; homebridgeMapping On=state,valueOn=/home|awoken|asleep|gotosleep/,valueOff=/gone|absent/,cmdOn=home,cmdOff=absent&lt;br /&gt;
&lt;br /&gt;
Natürlich muss der Bewohner noch dem Filter von homebridge hinzugefügt und homebridge neu gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Anschließend geht es in der HomeKit-fähigen App Deiner Wahl weiter. In Eve von Elgato ist von vornherein zum Beispiel vorgesehen, dass man zwei Szenen &amp;quot;Ich bin zuhause&amp;quot; und &amp;quot;Ich verlasse das Haus&amp;quot; hat. Zu diesen Szenen wird eine Aktion hinzugefügt indem der Bewohner, den das ROOMMATE-Modul meldet zur Szene hinzugefügt wird und beim Nachhausekommen &amp;quot;eingeschaltet&amp;quot; wird. Genauso wird mit der Szene &amp;quot;Ich verlasse das Haus&amp;quot; verfahren: Bewohner zur Szene hinzufügen und den Schaltvorgang auf &amp;quot;ausschalten&amp;quot; setzen.&lt;br /&gt;
&lt;br /&gt;
Mit den Sprachbefehlen &amp;quot;Ich bin zuhause&amp;quot; oder &amp;quot;Ich verlasse das Haus&amp;quot; wird die entsprechende Szene eingeschaltet, homebridge schaltet über das &amp;lt;code&amp;gt;homebridgeMapping&amp;lt;/code&amp;gt; Attribut dann den Bewohner auf &amp;quot;home&amp;quot; oder &amp;quot;absent&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 9893&lt;br /&gt;
 Homebridge 0.2.16&lt;br /&gt;
 homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}&lt;br /&gt;
&lt;br /&gt;
Eine noch etwas bessere Schaltmöglichkeit bietet &#039;&#039;&#039;genericDeviceType security&#039;&#039;&#039;.&lt;br /&gt;
Das Mapping für ROOMMATE sieht wie folgt aus:&lt;br /&gt;
 attr TYPE=ROOMMATE genericDeviceType security&lt;br /&gt;
 attr TYPE=ROOMMATE homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;gone:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+gone,delay=1&lt;br /&gt;
für GUEST:&lt;br /&gt;
 attr TYPE=GUEST genericDeviceType security&lt;br /&gt;
 attr TYPE=GUEST homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;none:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+none,delay=1&lt;br /&gt;
&lt;br /&gt;
== ZWave Türschloss Vision ZM1701 einbinden ==&lt;br /&gt;
Das ZWave Türschloss ZM1701 von der Firma Vision sendet seinen aktuellen Schließstatus in ein einzelnes Reading wie &amp;quot;lock&amp;quot;, sondern schickt eine ganze Reihe von Informationen über den Zustand in das Reading &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt;. Das Schließen und Öffnen der Türschlosses wird auch nicht mit einem Setzen des &amp;lt;code&amp;gt;state&amp;lt;/code&amp;gt; erreicht, sondern mit dem Setzen von &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt;. Das macht das Einbinden in homebridge nicht trivial, funktioniert aber über folgendes Homebridge-Mapping:&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; genericDeviceType lock&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open&lt;br /&gt;
&lt;br /&gt;
Kurz zur Erklärung: Um ein Schloss über HomeKit steuern zu können braucht es zwei characteristics. LockCurrentState zeigt an, ob das Schloss geöffnet oder geschlossen ist. Und mit LockTargetState wird das Schloss geöffnet oder geschlossen. Damit der aktuelle Status des Schlosses ausgelesen werden kann, muss aus dem FHEM-Reading &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt; die Zeichenfolge &amp;lt;code&amp;gt; secured&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;unsecured&amp;lt;/code&amp;gt; extrahiert werden, daher die beiden regulären Ausdrücke &amp;lt;code&amp;gt;/\ssecured/&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;/unsecured/&amp;lt;/code&amp;gt;. In der characteristic &amp;lt;code&amp;gt;LockTargetState&amp;lt;/code&amp;gt; muss sowohl der aktuelle Status des Schlosses als auch das Kommando angegeben werden, schließlich möchte man ein geschlossenes Schloss nicht nochmal schließen. Daher wird erst aus dem Reading &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt; der aktuelle Status des Schlosses ausgelesen und die damit korrespondierenden Befehle über &amp;lt;code&amp;gt;cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open&amp;lt;/code&amp;gt; generiert.&lt;br /&gt;
&lt;br /&gt;
Wer es in FHEM über ein webCmd einfacher zu bedienen haben möchte, fügt bitte noch die dafür notwendigen Attribute und die leicht geänderten homebridgeMappings wie folgt ein:&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; genericDeviceType lock&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:close;UNSECURED:open&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; /doorLockOperation open:open/doorLockOperation close:close&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; webCmd open:close&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 12191&lt;br /&gt;
 homebridge 0.4.6&lt;br /&gt;
 homebridge-fhem 0.2.48&lt;br /&gt;
&lt;br /&gt;
== Roomba über THINKINGCLEANER Modul ==&lt;br /&gt;
 attr &amp;lt;THINKINGCLEANER&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;THINKINGCLEANER&amp;gt; homebridgeMapping clear On=state,valueOn=/^(on|dock)/,cmdOn=on,cmdOff=off,nocache=1 ChargingState=deviceStatus,values=/(_recon|_full|_trickle)$/:CHARGING;/^.*/:NOT_CHARGING&lt;br /&gt;
 attr &amp;lt;THINKINGCLEANER&amp;gt; siriName Robby&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 12680&lt;br /&gt;
 homebridge 0.4.11&lt;br /&gt;
 homebridge-fhem 0.2.66&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Homematic HM-CC-RT-DN Funk-Heizkörperthermostat ==&lt;br /&gt;
[[Datei:HM-CC-RT-DN-Eve.PNG|mini|Darstellung des HM-CC-RT-DN in der iOS App Eve]]&lt;br /&gt;
 attr &amp;lt;HMCCRTDN_Channel2_Clima&amp;gt; homebridgeMapping TargetTemperature=desired-temp::desired-temp,minValue=5,maxValue=35,minStep=0.5,nocache=1&lt;br /&gt;
                      CurrentTemperature=BU_Heizung_01_Clima:measured-temp,nocache=1&lt;br /&gt;
                      StatusLowBattery=BU_Heizung_01:battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW&lt;br /&gt;
                      TargetHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:3,cmds=OFF:controlManu+off;;HEAT:controlMode+boost;;AUTO:controlMode+auto;;COOL:controlManu+17.0&lt;br /&gt;
                      CurrentHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:0,valud=OFF&lt;br /&gt;
 attr &amp;lt;HMCCRTDN_Channel2_Clima&amp;gt; siriName Robby&lt;br /&gt;
Dieses Mapping bezieht sich auf ein vorhandenes &#039;&#039;userReading&#039;&#039; mit dem Namen &amp;lt;code&amp;gt;heatingState&amp;lt;/code&amp;gt;, womit Homekit die einzelnen Status nachher unterscheidet.&lt;br /&gt;
 attr &amp;lt;HM-CC-RT-DN_Clima&amp;gt; userReadings heatingState {(ReadingsVal($NAME,&amp;quot;ValvePosition&amp;quot;,0) &amp;gt; 0 || ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;on&amp;quot;) ? &amp;quot;HEAT&amp;quot; : ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;off&amp;quot; ? &amp;quot;OFF&amp;quot; : ReadingsVal($NAME,&amp;quot;controlMode&amp;quot;,&amp;quot;auto&amp;quot;) eq &amp;quot;auto&amp;quot; ? &amp;quot;AUTO&amp;quot; : (ReadingsVal($NAME,&amp;quot;measured-temp&amp;quot;,20) &amp;gt; ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,20)) ? &amp;quot;COOL&amp;quot; : &amp;quot;AUTO&amp;quot;}&lt;br /&gt;
Global auf alle in FHEM angelegten HM-CC-RT-DN, lässt sich mit folgendem Befehl das &#039;&#039;userReading&#039;&#039; anlegen.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,59211.msg505986.html#msg505986 Forumsthread].&lt;br /&gt;
&lt;br /&gt;
 attr TYPE=CUL_HM:FILTER=model=HM-CC-RT-DN:FILTER=chanNo=04 userReadings heatingState {(ReadingsVal($NAME,&amp;quot;ValvePosition&amp;quot;,0) &amp;gt; 0 || ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;on&amp;quot;) ? &amp;quot;HEAT&amp;quot; : ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;off&amp;quot; ? &amp;quot;OFF&amp;quot; : ReadingsVal($NAME,&amp;quot;controlMode&amp;quot;,&amp;quot;auto&amp;quot;) eq &amp;quot;auto&amp;quot; ? &amp;quot;AUTO&amp;quot; : (ReadingsVal($NAME,&amp;quot;measured-temp&amp;quot;,20) &amp;gt; ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,20)) ? &amp;quot;COOL&amp;quot; : &amp;quot;AUTO&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Xiaomi Vacuum Cleaner 1. Generation ==&lt;br /&gt;
[[Datei:XIAOMI_VACUUM_CLEANER-Gen1.jpg|mini|XIAOMI VACUUM 1. GEN in EVE]]&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping On=state,valueOn=Cleaning,cmdOn=start,cmdOff=charge&lt;br /&gt;
                      RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1&lt;br /&gt;
                      BatteryLevel=batteryLevel,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW&lt;br /&gt;
                      ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/.*/:NOT_CHARGEABLE&lt;br /&gt;
                      OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/.*/:OCCUPANCY_NOT_DETECTED&lt;br /&gt;
                      FilterLifeLevel=consumables_filter,minValue=0,maxValue=100&lt;br /&gt;
                      FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER&lt;br /&gt;
&lt;br /&gt;
== Roborock S50 (2. Generation des Xiaomi Vacuum Cleaners) ==&lt;br /&gt;
&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping On=state,valueOn=Cleaning,cmdOn=start,cmdOff=charge&lt;br /&gt;
                      RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1&lt;br /&gt;
                      BatteryLevel=batteryPercent,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      StatusLowBattery=batteryState,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW&lt;br /&gt;
                      ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/.*/:NOT_CHARGEABLE&lt;br /&gt;
                      OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/.*/:OCCUPANCY_NOT_DETECTED&lt;br /&gt;
                      2af6d0d0-3691-4f0d-9c9c-c1098295b1cb=consumables_sensors,name=Reinigung+Sensoren,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      fd11b965-052e-430f-b08f-206287d8bc00=consumables_filter,name=Austausch+Filter,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      fe7a8dac-dff3-4a07-8a5e-0d6abbf0df0c=consumables_main_brush,name=Austausch+Hauptbürste,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      4f9b2a22-b764-4fc1-8cd2-99383924394c=consumables_side_brush,name=Austausch+Seitenbürste,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%&lt;br /&gt;
                      FilterLifeLevel=consumables_filter,minValue=0,maxValue=100&lt;br /&gt;
                      FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER&lt;br /&gt;
                      4896763a-26f7-400b-9734-2ce6564ceba2=total_clean_time,name=Lebenszeitersparnis,format=FLOAT,minStep=1,unit=h&lt;br /&gt;
                      82af5fd7-50a3-4ab3-81d3-1f7903de612a=total_clean_area,name=Gereinigte+Fläche,format=FLOAT,minStep=1,unit=m²&lt;br /&gt;
                      00d2ef14-b429-4569-8af3-c342d41cf383=total_cleans,name=Reinigungsvorgänge,format=FLOAT,minStep=1&lt;br /&gt;
                      e8d1027e-b068-40d5-9efd-f161b1b52774=device_firmware,name=Firmware,format=STRING&lt;br /&gt;
&lt;br /&gt;
== Xiaomi DC Pedestal Fan (ältere Generation) ==&lt;br /&gt;
&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Ventilator mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
Die ältere Generation enthält Sensoren und somit Readings für Luftfeuchtigkeit, Temperatur und auch Batteriestatus. Diese fehlen bei der neueren Generation dieses Ventilators. &lt;br /&gt;
&lt;br /&gt;
Erklärung zu den Readings:&lt;br /&gt;
&lt;br /&gt;
 - Die Kindersicherung (LockPhysicalControls) ist in Eve über das kleine Einstellungssymbol zu finden. &lt;br /&gt;
 - Mit AudioFeedback/Audio-Bestätigung werden die Töne des Lüfters ein bzw. ausgeschaltet.&lt;br /&gt;
 - Mit NightVision/Nachtsicht werden die LEDs ein bzw. ausgeschaltet.&lt;br /&gt;
 - Mit Mute/Audio wird der Windmodus von Straight zu Natural geschaltet.&lt;br /&gt;
 - Der Rest ist selbsterklärend.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType Fan&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping clear&lt;br /&gt;
                      On:power,cmdOn=on,cmdOff=off,valueOn=on,valueOff=off&lt;br /&gt;
                      LockPhysicalControls=child_lock,values=on:CONTROL_LOCK_ENABLED;;off:CONTROL_LOCK_DISABLED,cmds=CONTROL_LOCK_ENABLED:child_lock+on;CONTROL_LOCK_DISABLED:child_lock+off&lt;br /&gt;
                      RotationSpeed=level,minValue=0,maxValue=100,cmd=level,delay=1&lt;br /&gt;
                      TargetTiltAngle=angle,minValue=30,maxValue=120,minStep=30,cmd=angle&lt;br /&gt;
                      SwingMode=angle_enable,values=on:SWING_ENABLED;;off:SWING_DISABLED,cmdOn=angle_enable+on,cmdOff=angle_enable+off&lt;br /&gt;
                      CurrentRelativeHumidity=humidity&lt;br /&gt;
                      CurrentTemperature=temperature&lt;br /&gt;
                      BatteryLevel=batteryPercent,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      AudioFeedback:buzzer,cmdOn=buzzer+on,cmdOff=buzzer+off,valueOn=on,valueOff=off&lt;br /&gt;
                      NightVision:led,cmdOn=led+off,cmdOff=led+bright,valueOn=off,valueOff=bright&lt;br /&gt;
                      Mute:mode,cmdOn=mode+straight,cmdOff=mode+natural,valueOn=straight,valueOff=natural&lt;br /&gt;
&lt;br /&gt;
== Xiaomi Standing Fan 2 bzw. 2S (neuere Generation) ==&lt;br /&gt;
&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Ventilator mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
Den neueren Generationen dieses Ventilators fehlen Sensoren und somit Readings für Luftfeuchtigkeit, Temperatur und auch Batteriestatus. Diese sind bei der älteren Generation dieses Ventilators enthalten, siehe vorangegangenes Beispiel.&lt;br /&gt;
&lt;br /&gt;
Dieses Mapping wurde mit dem &amp;quot;2S&amp;quot; erstellt. Es sollte aber mindestens auch mit einem &amp;quot;Xiaomi Standing Fan 2&amp;quot; (ohne Akku) funktionieren, da auch der &amp;quot;Xiaomi Standing Fan 2S&amp;quot; (mit Akku) kein Reading für die Batterie bereitstellt. Ansonsten gibt es wohl auch noch Generationen zwischen dem &amp;quot;Xiaomi DC Pedestal Fan&amp;quot; und den &amp;quot;Xiaomi Standing Fan 2/2S&amp;quot;. Es ist davon auszugehen, dass dieses Beispiel genauso auch bei diesen Modellen funktioniert.&lt;br /&gt;
&lt;br /&gt;
Erklärung zu den Readings:&lt;br /&gt;
&lt;br /&gt;
 - Die Kindersicherung (LockPhysicalControls) ist in Eve über das kleine Einstellungssymbol zu finden. &lt;br /&gt;
 - Mit AudioFeedback/Audio-Bestätigung werden die Töne des Lüfters ein bzw. ausgeschaltet. (Da &amp;quot;buzzer&amp;quot; bei diesem Modell &amp;quot;noch&amp;quot; nicht funktioniert, ist dies derzeitig noch ohne Funktion.)&lt;br /&gt;
 - Mit NightVision/Nachtsicht werden die LEDs ein bzw. ausgeschaltet.&lt;br /&gt;
 - Mit Mute/Audio wird der Windmodus von Straight zu Natural geschaltet. (Die Bezeichnung ist nicht ganz selbst erklärend.)&lt;br /&gt;
 - Der Rest ist selbsterklärend.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType Fan&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping clear&lt;br /&gt;
                      On:power,cmdOn=on,cmdOff=off,valueOn=on,valueOff=off&lt;br /&gt;
                      LockPhysicalControls=child_lock,values=on:CONTROL_LOCK_ENABLED;;off:CONTROL_LOCK_DISABLED,cmds=CONTROL_LOCK_ENABLED:child_lock+on;CONTROL_LOCK_DISABLED:child_lock+off&lt;br /&gt;
                      RotationSpeed=level,minValue=0,maxValue=100,cmd=level,delay=1&lt;br /&gt;
                      TargetTiltAngle=angle,minValue=30,maxValue=120,minStep=30,cmd=angle&lt;br /&gt;
                      SwingMode=angle_enable,values=on:SWING_ENABLED;;off:SWING_DISABLED,cmdOn=angle_enable+on,cmdOff=angle_enable+off&lt;br /&gt;
                      CurrentRelativeHumidity=humidity&lt;br /&gt;
                      CurrentTemperature=temperature&lt;br /&gt;
                      BatteryLevel=batteryPercent,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      AudioFeedback:buzzer,cmdOn=buzzer+on,cmdOff=buzzer+off,valueOn=on,valueOff=off&lt;br /&gt;
                      NightVision:led,cmdOn=led+off,cmdOff=led+bright,valueOn=off,valueOff=bright&lt;br /&gt;
                      Mute:mode,cmdOn=mode+straight,cmdOff=mode+natural,valueOn=straight,valueOff=natural&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Homematic SmokeDetector ==&lt;br /&gt;
 [[Datei:Homebridge-Homematic-Smokedetector-Gen1.jpg|mini|Homebridge-Homematic-Smokedetector-Gen1 in EVE]]&lt;br /&gt;
Es sind keine Homebridge Mappings für die Rauch Meldung erforderlich.&lt;br /&gt;
&lt;br /&gt;
Allerdings ist ein Mapping für den Batterie Zustand nötig, siehe Unten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;SmokeDetector&amp;gt; genericDeviceType SmokeSensor&lt;br /&gt;
 attr &amp;lt;SmokeDetector&amp;gt; subType smokeDetector&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;SmokeDetector&amp;gt; homebridgeMapping StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW&lt;br /&gt;
&lt;br /&gt;
== Vallox Belüftungsanlage ==&lt;br /&gt;
Die Steuerung der Lüftungsgeschwindigkeit ist nur in Prozent möglich. Die Umrechnung erfolgt im [[Vallox]] Modul.&lt;br /&gt;
Hierzu wurde das Reading &#039;&#039;FanSpeedPct&#039;&#039; hinzugefügt.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;Vallox&amp;gt; genericDeviceType Fan&lt;br /&gt;
 attr &amp;lt;Vallox&amp;gt; homebridgeMapping clear&lt;br /&gt;
                      model=Vallox&lt;br /&gt;
                      On=PowerState,valueOn=1,readOnly=1&lt;br /&gt;
                      RotationSpeed=FanSpeedPct,minValue=1,maxValue=100,cmd=FanSpeedPct,delay=1&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Hoppel118</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Yowsup&amp;diff=30587</id>
		<title>Yowsup</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Yowsup&amp;diff=30587"/>
		<updated>2019-06-01T19:45:40Z</updated>

		<summary type="html">&lt;p&gt;Hoppel118: 1. Paketinstallationen -&amp;gt; &amp;quot;Debian Stretch&amp;quot; ergänzt, 2. Python 2.7 und 3.5 --&amp;gt; Paket &amp;quot;sudo apt-get install ... libncurses5-dev&amp;quot; ergänzt, 3. Python 2.7 und 3.5 --&amp;gt; Befehl: &amp;quot;sudo pip/pip3 install setuptools&amp;quot; ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:yowsup}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Schnittstelle, um WhatsApp-Nachrichten empfangen und senden zu können. &lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=yowsup&lt;br /&gt;
|ModFTopic=27543&lt;br /&gt;
|ModForumArea=Unterstuetzende Dienste&lt;br /&gt;
|ModTechName=32_yowsup.pm&lt;br /&gt;
|ModOwner=André / justme1968 ({{Link2FU|430|Forum}} / [[Benutzer Diskussion:justme|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[yowsup]] dient dazu, WhatsApp-Nachrichten zu empfangen und zu senden. Nachrichten können sein:&lt;br /&gt;
* &#039;&#039;&#039;Text&#039;&#039;&#039;: senden und empfangen, z.b.: Infonachrichten senden, FHEM-Kommandos empfangen&lt;br /&gt;
* &#039;&#039;&#039;Bilder&#039;&#039;&#039;: senden und empfangen, z.b.: Webcambilder nach Bewegungserkennung versenden&lt;br /&gt;
* &#039;&#039;&#039;Audio&#039;&#039;&#039;: empfangen, z.b.: Sprachdurchsagen empfangen und über SONOS abspielen&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
* Die Funktionalität ist vermutlich auf Linux/Unix Systeme beschränkt.&lt;br /&gt;
* Nach der Erstinstallation/-einrichtung &#039;&#039;&#039;muss&#039;&#039;&#039; zwingend das &#039;&#039;cmd&#039;&#039; Attribut korrekt gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
== Installation == &lt;br /&gt;
Die ursprüngliche Einrichtung wurde {{Link2Forum|Topic=27543|Message=204426|LinkText=hier beschrieben}}, jedoch sind noch einige wichtige Dinge zu setzen. Mit der Version 3.0.0 vom 24. April 2019 hat sich einiges in der Kommunikation mit WhatsApp geändert. Diese Änderungen führen dazu, dass alles komplett neu installiert und registriert werden muss.&lt;br /&gt;
&lt;br /&gt;
=== Yowsup Installation ===&lt;br /&gt;
Bevor man loslegt sollte man wie immer sicherstellen, dass Debian auf dem aktuellen Stand ist:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get dist-upgrade&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man Bilder verarbeiten, so braucht man noch ein paar Pakete mehr:&lt;br /&gt;
* Paketinstallationen:&lt;br /&gt;
** Unter Debian Wheezy: &amp;lt;code&amp;gt;sudo apt-get install libtiff4-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk&amp;lt;/code&amp;gt;&lt;br /&gt;
** Unter Debian Jessie: &amp;lt;code&amp;gt;sudo apt-get install libtiff5-dev libjpeg-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk&amp;lt;/code&amp;gt;&lt;br /&gt;
** Unter Debian Stretch: &amp;lt;code&amp;gt;sudo apt-get install libtiff5-dev libjpeg-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Python 2.7 ==== &lt;br /&gt;
Los gehts mit den Paketen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-soappy python-dateutil python-pip python-dev build-essential libssl-dev libffi-dev libncurses5-dev&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erstmal pip updaten:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install --upgrade pip&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
yowsup benötigt zwingend von six die Version 1.10 (unter /usr/local/lib/python2.7/dist-packages prüfen, ob eine andere Version von six installiert ist. Diese erst löschen):&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip uninstall six&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install six==1.10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und dann Axolotl, argparse, readline installieren (das dauert ne Weile):&amp;lt;br&amp;gt;&lt;br /&gt;
(eventuell wird auch noch appdirs benötigt)&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install argparse&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install setuptools&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install readline&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install appdirs&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install python-axolotl&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install pillow&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zudem wird neben den Python Modulen noch eine Lib&#039;s von tgalal benötigt:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /opt/fhem/yowsup&lt;br /&gt;
sudo wget https://github.com/tgalal/python-axolotl/archive/master.zip&lt;br /&gt;
sudo unzip master.zip&lt;br /&gt;
cd python-axolotl-master&lt;br /&gt;
sudo python setup.py install&lt;br /&gt;
cd ..&lt;br /&gt;
rm master.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /opt/fhem/yowsup&lt;br /&gt;
sudo wget https://github.com/tgalal/dissononce/archive/master.zip&lt;br /&gt;
sudo unzip master.zip&lt;br /&gt;
cd dissononce-master&lt;br /&gt;
sudo python setup.py install&lt;br /&gt;
cd ..&lt;br /&gt;
rm master.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /opt/fhem/yowsup&lt;br /&gt;
sudo wget https://github.com/tgalal/consonance/archive/master.zip&lt;br /&gt;
sudo unzip master.zip&lt;br /&gt;
cd consonance-master&lt;br /&gt;
sudo python setup.py install&lt;br /&gt;
cd ..&lt;br /&gt;
rm master.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Desweiteren muss man nun yowsup installieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt&lt;br /&gt;
sudo mkdir yowsup-config&lt;br /&gt;
sudo wget -N https://github.com/tgalal/yowsup/archive/master.zip&lt;br /&gt;
sudo unzip -o master.zip&lt;br /&gt;
cd yowsup-master&lt;br /&gt;
sudo python setup.py install&lt;br /&gt;
cd ..&lt;br /&gt;
rm master.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Python 3.5 ====&lt;br /&gt;
Bevor man loslegt sollte man wie immer sicherstellen, dass Debian auf dem aktuellen Stand ist:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get dist-upgrade&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
sudo apt-get install python3-setuptools&lt;br /&gt;
sudo apt-get install python3-dev&lt;br /&gt;
sudo apt-get install python3-pip&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los gehts mit den Paketen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python3-pip python3-dev python3-setuptools python-soappy python-dateutil build-essential libssl-dev libffi-dev libncurses5-dev&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erstmal pip updaten:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip3 install --upgrade pip&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
yowsup benötigt zwingend von six die Version 1.10 (unter /usr/local/lib/python3.5/dist-packages prüfen, ob eine andere Version von six installiert ist. Diese erst löschen):&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip3 uninstall six&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip3 install six==1.10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und dann Axolotl, argparse, readline installieren (das dauert ne Weile):&amp;lt;br&amp;gt;&lt;br /&gt;
(eventuell wird auch noch appdirs benötigt)&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip3 install argparse&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip3 install setuptools&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip3 install readline&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip3 install appdirs&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip3 install python-axolotl&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip3 install pillow&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zudem wird neben den Python Modulen noch Lib&#039;s von tgalal benötigt:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /opt/fhem/yowsup&lt;br /&gt;
sudo wget https://github.com/tgalal/python-axolotl/archive/master.zip&lt;br /&gt;
sudo unzip master.zip&lt;br /&gt;
cd python-axolotl-master&lt;br /&gt;
sudo python3 setup.py install&lt;br /&gt;
cd ..&lt;br /&gt;
rm master.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /opt/fhem/yowsup&lt;br /&gt;
sudo wget https://github.com/tgalal/dissononce/archive/master.zip&lt;br /&gt;
sudo unzip master.zip&lt;br /&gt;
cd dissononce-master&lt;br /&gt;
sudo python3 setup.py install&lt;br /&gt;
cd ..&lt;br /&gt;
rm master.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /opt/fhem/yowsup&lt;br /&gt;
sudo wget https://github.com/tgalal/consonance/archive/master.zip&lt;br /&gt;
sudo unzip master.zip&lt;br /&gt;
cd consonance-master&lt;br /&gt;
sudo python3 setup.py install&lt;br /&gt;
cd ..&lt;br /&gt;
rm master.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Desweiteren muss man nun yowsup installieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt&lt;br /&gt;
sudo mkdir yowsup-config&lt;br /&gt;
sudo wget -N https://github.com/tgalal/yowsup/archive/master.zip&lt;br /&gt;
sudo unzip -o master.zip&lt;br /&gt;
cd yowsup-master&lt;br /&gt;
sudo python3 setup.py install&lt;br /&gt;
cd ..&lt;br /&gt;
rm master.zip&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fhem vorbereiten ====&lt;br /&gt;
Vor den weiteren Schritten sollte geprüft werden, ob dem User fhem eine Loginshell zugewiesen ist:&lt;br /&gt;
:&amp;lt;code&amp;gt;getent passwd fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
Wird hier am Ende /bin/false ausgegeben, so muss dies angepasst werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo chsh -s /bin/bash fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mittels &#039;&#039;getent passwd fhem&#039;&#039; kann auch bereits das Home-Verzeichnis ausgelesen werden, dies steht in der ausgegebenen Doppelpunkt-separierten Liste an vorletzter Stelle. &lt;br /&gt;
&lt;br /&gt;
Nun loggt man sich unter dem User ein, unter dem fhem läuft (in den folgenden Beispielen werden die vom fhem-Setup-Script generierten Defaults verwendet: User=fhem , home=/opt/fhem Gruppe=dialout) und liest dort die $HOME-Variable aus und prüft das Home-Verzeichnis:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo su - fhem&lt;br /&gt;
echo $HOME&lt;br /&gt;
cd $HOME&lt;br /&gt;
logout&amp;lt;/pre&amp;gt;&lt;br /&gt;
Diesen Wert braucht man später - gut merken. Sollte hier ein Fehler auftreten (z.B. das home nicht vorhanden), so muss dies zuerst korrigiert werden.&lt;br /&gt;
&lt;br /&gt;
Vor den weiteren Schritten sollte man nun erstmal die yowsup Verzeichnisse dem fhem-user zugängig machen:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo chown -R fhem:dialout /opt/yowsup-master /opt/yowsup-config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die folgenden Schritte würde ich auf den FHEM-Nutzer wechseln:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo su - fhem&lt;br /&gt;
cd /opt/yowsup-master&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== WhatsApp einrichten ====&lt;br /&gt;
Bitte daran denken...&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo su - fhem&lt;br /&gt;
cd /opt/yowsup-master&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Anmeldung am WhatsApp-Server. Dies kann man nun via &amp;lt;code&amp;gt;voice&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;sms&amp;lt;/code&amp;gt; machen. Bei einem Handy bietet sich SMS an, bei Festnetzanschlüssen sollte voice gewählt werden, wenn man sich nicht sicher ist, dass der Anschluss die Funktion &#039;SMS im Festnetz&#039; unterstützt. Dann wird der Bestätigungscode zwar auf Englisch vorgelesen, dafür ist die Zuverlässigkeit des Registrierungsvorganges zuverlässiger. Bei Festnetznummern sollte man unbedingt etwas zum Schreiben bereit halten! (49XXXXXXXX durch Eure Telefonnummer ersetzen.)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Python 2.5&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;yowsup-cli registration --requestcode sms --config-phone 49XXXXXXXX --config-cc 49&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Python 3.5&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;python3 yowsup-cli registration --requestcode sms --config-phone 49XXXXXXXX --config-cc 49&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückmeldung ist nun entscheidend. Wenn man diese zurückbekommt:&lt;br /&gt;
&amp;lt;pre&amp;gt;de sms&lt;br /&gt;
status: fail&lt;br /&gt;
retry_after: 3600&lt;br /&gt;
reason: no_routes&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dann ist die Nummer so nicht kompatibel. Was man dann noch probieren kann, ist die registration via voice - meistens ist das aber vergebene Liebesmüh&#039;.&lt;br /&gt;
&lt;br /&gt;
Wenn man folgende Rückmeldung bekommt:&lt;br /&gt;
&amp;lt;pre&amp;gt;I 2019-04-24 15:05:22,368 yowsup.common.http.warequest - {&amp;quot;login&amp;quot;:&amp;quot;49xxxxxxxxxx&amp;quot;,&amp;quot;status&amp;quot;:&amp;quot;sent&amp;quot;,&amp;quot;length&amp;quot;:6,&amp;quot;method&amp;quot;:&amp;quot;sms&amp;quot;,&amp;quot;retry_after&amp;quot;:65,&amp;quot;sms_wait&amp;quot;:65,&amp;quot;voice_wait&amp;quot;:65}&lt;br /&gt;
&lt;br /&gt;
status: sent&lt;br /&gt;
voice_wait: 65&lt;br /&gt;
retry_after: 65&lt;br /&gt;
sms_wait: 65&lt;br /&gt;
length: 6&lt;br /&gt;
login: 49xxxxxxxxxx&lt;br /&gt;
method: sms&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So ist alles gut gelaufen und man sollte kurz später eine SMS bekommen. Darin ist ein Text, der am Ende z.B. 123-456 lautet. Diesen fügt man ohne Bindestrich am Ende des folgenden Befehls ein (49XXXXXXXX durch Eure Telefonnummer ersetzen.):&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Python 2.5&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;python3 yowsup-cli registration  --config-phone 49XXXXXXXX -R 123456&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Python 3.5&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;python3 yowsup-cli registration  --config-phone 49XXXXXXXX -R 123456&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kommt ein Text der etwa so aussehen sollte:&lt;br /&gt;
&amp;lt;pre&amp;gt;I 2019-04-24 15:15:09,118 yowsup.common.http.warequest - {&amp;quot;status&amp;quot;:&amp;quot;ok&amp;quot;,&amp;quot;login&amp;quot;:&amp;quot;49xxxxxxxxxx&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;existing&amp;quot;,&amp;quot;edge_routing_info&amp;quot;:&amp;quot;CAUIAg==&amp;quot;,&amp;quot;chat_dns_domain&amp;quot;:&amp;quot;fb&amp;quot;,&amp;quot;security_code_set&amp;quot;:false}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;__version__&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;cc&amp;quot;: &amp;quot;49&amp;quot;,&lt;br /&gt;
    &amp;quot;client_static_keypair&amp;quot;: &amp;quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;quot;,&lt;br /&gt;
    &amp;quot;expid&amp;quot;: &amp;quot;xxxxxxxxxxxxxxxxxxxxxxxx&amp;quot;,&lt;br /&gt;
    &amp;quot;fdid&amp;quot;: &amp;quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;quot;,&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;quot;,&lt;br /&gt;
    &amp;quot;mcc&amp;quot;: &amp;quot;000&amp;quot;,&lt;br /&gt;
    &amp;quot;mnc&amp;quot;: &amp;quot;000&amp;quot;,&lt;br /&gt;
    &amp;quot;phone&amp;quot;: &amp;quot;49xxxxxxxxxx&amp;quot;,&lt;br /&gt;
    &amp;quot;sim_mcc&amp;quot;: &amp;quot;000&amp;quot;,&lt;br /&gt;
    &amp;quot;sim_mnc&amp;quot;: &amp;quot;000&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Yowsup legt eine neue Konfigurationsdatei im unter $HOME/.config/49xxxxxxxxxx/. Diese wird automatisch herangezogen, wenn die entsprechende Telefonnummer mit --config-phone 49XXXXXXXX angegeben wird.&lt;br /&gt;
&lt;br /&gt;
Nun mal ein schneller Test an die eigene Nummer (im Beispiel 491751234567):&lt;br /&gt;
&amp;lt;pre&amp;gt;python[3] yowsup-cli demos --config-phone 49XXXXXXXX -s 491751234567 &amp;quot;Das ist ein Test&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier seht ihr nun einen Status (die Anzahl prekeys wird hoch gezählt):&lt;br /&gt;
&amp;lt;pre&amp;gt;I 2019-04-24 15:33:58,647 yowsup.layers.network.layer - Connecting to e7.whatsapp.net:443&lt;br /&gt;
I 2019-04-24 15:33:59,230 yowsup.axolotl.manager - Generating 812 prekeys&lt;br /&gt;
I 2019-04-24 15:34:15,590 yowsup.axolotl.manager - Storing 812 prekeys&lt;br /&gt;
I 2019-04-24 15:35:03,100 yowsup.axolotl.manager - Loaded 812 unsent prekeys&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das sollte dir eine Nachricht einbringen. Wenn du darauf antwortest, kommt diese allerdings noch nicht an - der Client hat sich nach dem Befehl sofort beendet. Damit dieser dauerhaft im Hintergrund läuft legen wir nun in FHEM ein Gerät an, welches dies steuert.&lt;br /&gt;
&lt;br /&gt;
=== FHEM Define ===&lt;br /&gt;
* FHEM Device anlegen: &amp;lt;code&amp;gt; define &amp;lt;name&amp;gt; yowsup&amp;lt;/code&amp;gt;, also z.B. &amp;lt;code&amp;gt;define WhatsApp yowsup&amp;lt;/code&amp;gt;&lt;br /&gt;
* Nun muss man den Pfad zu yowsup anpassen: &lt;br /&gt;
* Python 2.7&lt;br /&gt;
* &amp;lt;code&amp;gt;attr WhatsApp cmd /opt/yowsup-master/yowsup-cli demos --config-phone 49XXXXXXXX --yowsup&amp;lt;/code&amp;gt;&lt;br /&gt;
* Python 3.5&lt;br /&gt;
* &amp;lt;code&amp;gt;attr WhatsApp cmd python3 /opt/yowsup-master/yowsup-cli demos --config-phone 49XXXXXXXX --yowsup&amp;lt;/code&amp;gt;&lt;br /&gt;
* Und das Home directory mit dem Pfad zum Home des fhem users: &amp;lt;code&amp;gt;attr WhatsApp home PWD&amp;lt;/code&amp;gt;&lt;br /&gt;
* Wenn alles gut geht, gibt es danach im Device ein internal PID und das Reading &#039;&#039;state&#039;&#039;&lt;br /&gt;
* Im Whatsapp Client auf dem Handy sollte man sehen, dass FHEM online ist&lt;br /&gt;
* Zum Senden aus FHEM kann man das Kommando &amp;lt;code&amp;gt;set WhatsApp send &amp;lt;nummer&amp;gt; &amp;lt;text&amp;gt;&amp;lt;/code&amp;gt; verwenden&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
Bitte sieh immer in der {{Link2CmdRef|Anker=yowsup}} nach - diese hier könnten veraltet sein.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cmd&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;komplettes Kommando, um den yowsup Client zu starten. z.B.: &amp;lt;code&amp;gt;attr WhatsApp cmd /opt/yowsup-master/yowsup-cli demos -c /opt/yowsup-config/yowsup.config --yowsup&amp;lt;/code&amp;gt;. Wenn die ab  yowsup-Version 2.4 standartmässig aktivierte Verschlüsselung abgeschaltet werden muss weil die entsprechenden Libs nicht installiert sind: &amp;lt;code&amp;gt;attr WhatsApp cmd /opt/local/bin/yowsup-cli demos -c /root/yowsup-config --yowsup -M&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;acceptFrom&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;kommagetrennte Liste von Kontakten (Nummern), von denen Nachrichten akzeptiert werden. Ist das Attribut nicht gesetzt, so werden die Nachrichten von jedem akzeptiert.&lt;br /&gt;
* &amp;lt;code&amp;gt;commandPrefix&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;nicht gesetzt -&amp;gt; es werden keine Befehle akzeptiert.&amp;lt;br /&amp;gt;0 -&amp;gt; es werden keine Befehle akzeptiert.&amp;lt;br /&amp;gt;1 -&amp;gt; erlaubt Befehle, jede Nachricht wird als FHEM-Befehl interpretiert.&amp;lt;br /&amp;gt;alles andere -&amp;gt; Wenn die Nachricht mit diesem Prefix startet, wird alles weitere als Befehle interpretiert.&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=&#039;&#039;&#039;allowedCommands&#039;&#039;&#039; should work as intended, but no guarantee can be given, that there is no way to circumvent it.}}&lt;br /&gt;
* &amp;lt;code&amp;gt;allowedCommands&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Eine Komma-getrennte Liste von zulässigen Befehlen für diesen Kontakt. Wenn die Liste leer ist (z.B. nur ein Komma), dann werden keine Befehle akzeptiert.&lt;br /&gt;
* &amp;lt;code&amp;gt;home&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Setzt das Home-directory welches für yowsup verwendet werden soll.&lt;br /&gt;
&lt;br /&gt;
== Befehle ==&lt;br /&gt;
* image -&amp;gt; Über diesen Befehl können Bilder gesendet werden.&lt;br /&gt;
&lt;br /&gt;
* raw -&amp;gt; Status ändern :  &lt;br /&gt;
&amp;lt;code&amp;gt;set WhatsApp raw /profile setStatus &#039;mein Status&#039;    &amp;lt;--- die &#039; &#039; müssen bleiben&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Name der angezeigt werden soll, wenn eine Nachricht z.B. ans iPhone geschickt wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set WhatsApp raw /presence name &amp;lt;DeinNick&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anzeige online :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set WhatsApp raw /presence available&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Profilbild ändern :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set WhatsApp raw /profile setPicture &#039;/opt/fhem/fhem_logo.png&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;--- der gesamte Pfad zum Bild muss angegeben werden und Rechte müssen ggfs. bei fhem liegen&lt;br /&gt;
&lt;br /&gt;
Falls es nicht funktioniert disconnect/connect probieren.&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
Da am WhatsApp ständig geschraubt wird, bedarf es eines Updates des Yowsup, wenn keine Funktion mehr gegeben ist:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /opt&lt;br /&gt;
sudo rm master.zip&lt;br /&gt;
sudo mv yowsup-master yowsup-master-alt&lt;br /&gt;
sudo wget -N https://github.com/tgalal/yowsup/archive/master.zip&lt;br /&gt;
#alternativ sudo wget https://github.com/jlguardi/yowsup/archive/master.zip (Stand März 2016 aktueller)&lt;br /&gt;
sudo unzip master.zip&lt;br /&gt;
sudo chown fhem yowsup-master -R&lt;br /&gt;
sudo chgrp dialout yowsup-master -R&amp;lt;/pre&amp;gt;Danach muss FHEM mittels &#039;shutdown restart&#039; neu gestartet werden.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispielnachricht ===&lt;br /&gt;
Beim Empfang einer Nachricht wird automatisch ein FHEM Device für diesen Kontakt angelegt. In diesem Device gibt es das Reading &#039;&#039;&#039;message&#039;&#039;&#039; für die empfangene Nachricht und ab der ersten Nachricht auch das Reading &#039;&#039;&#039;chatstate&#039;&#039;&#039;, in dem zu sehen ist, ob gerade getippt wird.&lt;br /&gt;
Nachdem ein Device für einen Kontakt angelegt ist, lässt sich auch direkt dieses Device zum Senden verwenden: &lt;br /&gt;
:&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; send &amp;lt;text&amp;gt;&amp;lt;/code&amp;gt;, &lt;br /&gt;
d.h., man spart sich die Angabe der Nummer.&lt;br /&gt;
&lt;br /&gt;
=== Gruppen ===&lt;br /&gt;
Gruppen müssen über die App (Smartphone / Tablet) angelegt werden. Nach dem Empfang einer entsprechenden Nachricht werden Gruppen genauso behandelt, wie einfache Teilnehmer.&lt;br /&gt;
&lt;br /&gt;
=== Broadcast ===&lt;br /&gt;
Beim Senden über das Masterdevice lassen sich mehrere Empfänger mit Komma (und ohne Leerzeichen) getrennt angeben. Die entsprechenden Nachrichten werden dann per Broadcast an alle Teilnehmer gesendet. Die Broadcastempfänger müssen zuvor mindestens eine normale Nachricht erhalten haben.&lt;br /&gt;
&lt;br /&gt;
=== Komponenten steuern ===&lt;br /&gt;
Um ein [[notify]] anlegen zu können, müssen wir zuerst eine Nachricht vom Handy an FHEM senden. Dadurch wird ein Device mit der Nummer als Namen angelegt. Danach sollte das Device umbenannt werden, da einige Befehle einen Namen ausschließlich aus Ziffern nicht akzeptieren. Dies geschieht wie folgt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;rename 49123456789 HandySeppel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach kann ein &#039;&#039;notify&#039;&#039; angelegt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
 define notifySeppelLicht notify HandySeppel:message.* {&lt;br /&gt;
 if( $EVENT eq &#039;message: Licht an&#039; ) {&lt;br /&gt;
   fhem &amp;quot;set HandySeppel send Licht ist nun an...&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;set FS20_a5d800 dim100%&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
 } elsif( $EVENT eq &#039;message: Licht aus&#039; ) {&lt;br /&gt;
     fhem &amp;quot;set HandySeppel send Licht ist nun aus...&amp;quot;;&lt;br /&gt;
     fhem &amp;quot;set FS20_a5d800 dim0%&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
 } else {&lt;br /&gt;
     fhem &amp;quot;set HandySeppel send Wie bitte?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Natürlich ist dieses &#039;&#039;notify&#039;&#039; noch auf die eigenen Wünsche anzupassen.&lt;br /&gt;
&lt;br /&gt;
=== Autoresponder ===&lt;br /&gt;
Nachdem man nun seine Festnetznummer bei WhatsApp registriert hat, wird auch diese natürlich als erreichbares Ziel auf jedem Gerät angezeigt, auf dem sie gespeichert ist. So kann es passieren, dass WhatsApp-Nachrichten nicht gelesen werden. Hier schafft ein Autoresponder Abhilfe:&lt;br /&gt;
:&amp;lt;code&amp;gt;define not_WhatsApp_Autoresponder notify 491.*:message.* set  $NAME send Hallo, Du hast eine Nachricht an unsere Festnetznummer geschickt. Da ist aber nur ein kleiner Computer auf Empfang, der Dir nur diese Antwort schicken kann. Bitte benutze unsere Mobilnummern, wenn Du willst, dass Deine Nachricht auch gelesen wird!&amp;lt;/code&amp;gt;&lt;br /&gt;
Das Problem hierbei ist, dass noch nicht bekannt ist, wer etwas sendet und so der Kontakt u.U. noch nicht angelegt ist. Daher wird im obigen Beispiel auf 491*:message.* reagiert. So bekommen nur deutsche Mobilrufnummern die Antwort. Um das noch globaler zu fassen, könnte z.B. auf \d*.*:message.* reagiert werden, was aber voraussetzt, dass keine weiteren Modulnamen (die das Reading message haben) mit einer Ziffer beginnen.&lt;br /&gt;
Alle Kontakte, welche nicht den Autoresponder erhalten sollen, müssen wie oben beschrieben entspr. umbenannt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;rename 49123456789 HandySeppel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Probleme und Lösungen ==&lt;br /&gt;
=== Immer wieder offline ===&lt;br /&gt;
Das WhatsApp Device geht immer wieder offline und im Log wird folgendes protokolliert:&lt;br /&gt;
&lt;br /&gt;
... yowsup.layers.axolotl.layer_receive:invalidmessage or keyid for ...&lt;br /&gt;
&lt;br /&gt;
Lösung:&lt;br /&gt;
&lt;br /&gt;
Verzeichnis .yowsup in /root löschen.&lt;br /&gt;
Das Verzeichnis entsteht durch das Testen auf der Konsole und verträgt sich dann nicht mit dem im Attribut home hinterlegten Verzeichnis.&lt;br /&gt;
&lt;br /&gt;
=== UTF-8 Fehler ===&lt;br /&gt;
&lt;br /&gt;
Lösung: https://forum.fhem.de/index.php/topic,27543.msg773746.html#msg773746&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=27543|LinkText=Forenthread}}, in dem die Whatsapp Anwendung beschrieben wird&lt;br /&gt;
* {{Link2Forum|Topic=27543|Message=299292|LinkText=Foreneintrag}}, ab dem das yowsup Modul beschrieben wird&lt;br /&gt;
* Die Python Whatsapp Library auf [https://github.com/tgalal/yowsup github]&lt;br /&gt;
* Imagehandling Bugfix [https://github.com/tgalal/yowsup/issues/901 github]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:WhatsApp]]&lt;/div&gt;</summary>
		<author><name>Hoppel118</name></author>
	</entry>
</feed>